From dbd09dedf33f10223d5d8ec1a7e30cbc375e9fc1 Mon Sep 17 00:00:00 2001 From: Charles Date: Wed, 12 Feb 2025 17:10:21 +0800 Subject: [PATCH 01/62] release: version 0.0.5 (#91) * chore: version 0.0.5 * feat: setting preset (close: #57) (#61) * feat: implement preset setting (close: #57) * fix(renderer): setting page cannot scroll * refactor(renderer): setting layout and scroll behavior * refactor(renderer): remote preset management ui * refactor(renderer): setting input should be disabled when remote preset management take effect * fix(renderer): reset to manual does not work * chore(renderer): dispatch get setting after import preset * feat(renderer): clear setting * refactor(renderer): naming * chore: tweaks * chore: add setting store change log * refactor: enhance impl of `setting:resetPreset` * refactor: enhance impl of `setting:clear` * chore: tweaks * refactor: using self-implemented setting state management * chore: tweaks * fix(renderer): only fallback to download if upload was not configured or failed (#95) * refactor(ipc-bridge): replace zutron to trpc-like ipc bridge (#94) * refactor(ipc-bridge): replace zutron to trpc-like ipc bridge * chore: replace window * chore: ipc get permissions * refactor: remove all dispatch * docs: init setting docs (#96) * docs: init setting docs * Update docs/setting.md Co-authored-by: Charles --------- Co-authored-by: Charles * chore: make language setting optional (#99) * fix(windows): windows fails to handle events when the dock bar is opened after being closed (#100) * chore: tool * chore: canvas capture frame 30 to 60 * chore: upgrade electron 3.1.1 --------- Co-authored-by: ULIVZ --- docs/preset.md | 78 + docs/setting.md | 283 + examples/presets/default.yaml | 8 + forge.config.ts | 9 +- images/download-report.png | Bin 0 -> 47221 bytes images/import-preset-from-local.png | Bin 0 -> 105930 bytes images/import-preset-from-remote.png | Bin 0 -> 109184 bytes images/setting.png | Bin 395660 -> 37527 bytes images/upload-report-success.png | Bin 0 -> 169250 bytes images/utio-flow.png | Bin 0 -> 267901 bytes package.json | 8 +- packages/electron-ipc/README.md | 102 + packages/electron-ipc/package.json | 56 + .../electron-ipc/src/main/createServer.ts | 17 + packages/electron-ipc/src/main/index.ts | 7 + packages/electron-ipc/src/main/initIpc.ts | 30 + .../electron-ipc/src/main/registerIpcMain.ts | 14 + .../electron-ipc/src/renderer/createClient.ts | 22 + .../electron-ipc/src/renderer/index.ts | 2 +- packages/electron-ipc/src/types.ts | 34 + packages/electron-ipc/test/index.test.ts | 80 + packages/electron-ipc/test/test.ts | 34 + packages/electron-ipc/tsconfig.json | 19 + packages/electron-ipc/tsup.config.ts | 16 + packages/electron-ipc/vitest.config.mts | 27 + pnpm-lock.yaml | 15433 +++++++++------- src/main/agent/index.ts | 1 + src/main/agent/llm/ui-tars.ts | 8 +- src/main/ipcRoutes/agent.ts | 60 + src/main/ipcRoutes/index.ts | 21 + src/main/ipcRoutes/permission.ts | 28 + src/main/ipcRoutes/screen.ts | 18 + src/main/ipcRoutes/window.ts | 28 + src/main/main.ts | 130 +- src/main/{store => services}/runAgent.ts | 12 +- src/main/services/settings.ts | 95 + src/main/services/utio.ts | 8 +- src/main/store/create.ts | 103 +- src/main/store/setting.ts | 121 +- src/main/store/types.ts | 36 +- src/main/store/validate.ts | 36 + src/main/tray.ts | 5 +- src/main/utils/image.ts | 8 - src/main/utils/sanitizeState.ts | 17 + src/main/window/ScreenMarker.ts | 21 +- src/main/window/index.ts | 75 +- src/preload/index.ts | 42 +- src/renderer/index.html | 31 +- src/renderer/src/api.ts | 10 + .../src/components/ChatInput/index.tsx | 51 +- src/renderer/src/components/Header/index.tsx | 11 +- .../src/components/RunMessages/index.tsx | 9 +- src/renderer/src/hooks/usePermissions.ts | 12 +- src/renderer/src/hooks/useRunAgent.ts | 42 +- src/renderer/src/hooks/useScreenRecord.ts | 11 +- src/renderer/src/hooks/useSetting.ts | 43 + src/renderer/src/hooks/useStore.ts | 59 +- src/renderer/src/main.tsx | 7 - src/renderer/src/pages/launcher/index.tsx | 41 +- .../src/pages/settings/PresetImport.tsx | 158 + src/renderer/src/pages/settings/index.tsx | 596 +- src/renderer/src/typings/preload.d.ts | 2 +- src/renderer/src/typings/style.d.ts | 4 + tsconfig.web.json | 1 + 64 files changed, 10660 insertions(+), 7580 deletions(-) create mode 100644 docs/preset.md create mode 100644 docs/setting.md create mode 100644 examples/presets/default.yaml create mode 100644 images/download-report.png create mode 100644 images/import-preset-from-local.png create mode 100644 images/import-preset-from-remote.png create mode 100644 images/upload-report-success.png create mode 100644 images/utio-flow.png create mode 100644 packages/electron-ipc/README.md create mode 100644 packages/electron-ipc/package.json create mode 100644 packages/electron-ipc/src/main/createServer.ts create mode 100644 packages/electron-ipc/src/main/index.ts create mode 100644 packages/electron-ipc/src/main/initIpc.ts create mode 100644 packages/electron-ipc/src/main/registerIpcMain.ts create mode 100644 packages/electron-ipc/src/renderer/createClient.ts rename src/renderer/src/hooks/useDispatch.ts => packages/electron-ipc/src/renderer/index.ts (64%) create mode 100644 packages/electron-ipc/src/types.ts create mode 100644 packages/electron-ipc/test/index.test.ts create mode 100644 packages/electron-ipc/test/test.ts create mode 100644 packages/electron-ipc/tsconfig.json create mode 100644 packages/electron-ipc/tsup.config.ts create mode 100644 packages/electron-ipc/vitest.config.mts create mode 100644 src/main/ipcRoutes/agent.ts create mode 100644 src/main/ipcRoutes/index.ts create mode 100644 src/main/ipcRoutes/permission.ts create mode 100644 src/main/ipcRoutes/screen.ts create mode 100644 src/main/ipcRoutes/window.ts rename src/main/{store => services}/runAgent.ts (90%) create mode 100644 src/main/services/settings.ts create mode 100644 src/main/store/validate.ts create mode 100644 src/main/utils/sanitizeState.ts create mode 100644 src/renderer/src/api.ts create mode 100644 src/renderer/src/hooks/useSetting.ts create mode 100644 src/renderer/src/pages/settings/PresetImport.tsx diff --git a/docs/preset.md b/docs/preset.md new file mode 100644 index 000000000..f8e0124b1 --- /dev/null +++ b/docs/preset.md @@ -0,0 +1,78 @@ +# Preset Management Guide + +> [!IMPORTANT] +> Currently, **UI-TARS Desktop** does not directly provide server-side capabilities, so we do not provide a Preset for the open source community. welcome community developers to contribute your presets [here](../examples/presets/). + +A **preset** is a collection of [settings](./setting.md) (_Introduced at [#61](https://github.com/bytedance/UI-TARS-desktop/pull/61)_), **UI-TARS Desktop** supports import presets via `files` or `URLs`: + +```mermaid +graph TD + A[Import Preset] --> B{Preset Type} + B -->|File| C[YAML File] + B -->|URL| D[URL Endpoint] + C --> E[Manual Updates 🔧] + D --> F[Auto Sync ⚡] +``` + +
+ + +## Preset Types Comparison + +| Feature | Local Presets | Remote Presets | +|-----------------------|------------------------|------------------------| +| **Storage** | Device-local | Cloud-hosted | +| **Update Mechanism** | Manual | Automatic | +| **Access Control** | Read/Write | Read-Only | +| **Versioning** | Manual | Git-integrated | + + + +
+ + +## Examples + +### Import from file + +**UI-TARS Desktop** supports importing presets from files. Once the file is parsed successfully, the settings will be automatically updated. + +| Function | Snapshot | +| --- | ---| +| Open Setting |image | +| Import Success | image| +| Exception: Invalid Content | image | + + +
+ + +### Import from URL + +**UI-TARS Desktop** also supports importing presets from URLs. If automatic updates are set, presets will be automatically pulled every time the application is started. + +| Function | Snapshot | +| --- | ---| +| Open Setting | image | +| Import Success (Default) | image | +| Import Success (Auto Update) | image| + + +
+ + +### Preset Example + +```yaml +name: UI TARS Desktop Example Preset +language: en +vlmProvider: Hugging Face +vlmBaseUrl: https://your-endpoint.huggingface.cloud/v1 +vlmApiKey: your_api_key +vlmModelName: your_model_name +reportStorageBaseUrl: https://your-report-storage-endpoint.com/upload +utioBaseUrl: https://your-utio-endpoint.com/collect +``` + +See all [example presets](../examples/presets). + diff --git a/docs/setting.md b/docs/setting.md new file mode 100644 index 000000000..f3244ed94 --- /dev/null +++ b/docs/setting.md @@ -0,0 +1,283 @@ +# Settings Configuration Guide + +## Overview + +**UI-TARS Desktop** offers granular control over application behavior through its settings system. This document provides comprehensive guidance on configuration options, preset management, and operational best practices. + +

+ Settings Interface Overview +
+ Main Settings Interface +

+ + +
+ + +## Configuration Options + +### Language + +Controls localization settings for VLM. + +| Property | Details | +| ----------- | ------------------------------ | +| **Type** | `string` | +| **Options** | `en` (English), `zh` (Chinese) | +| **Default** | `en` | + +> [!NOTE] +> Changing the settings will **only** affect the output of VLM, not the language of the desktop app itself. Regarding the i18n of the App itself, welcome to contribute PR. + + +
+ + +### VLM Provider + +Selects the backend VLM provider for make GUI action decisions. + +| Property | Details | +| ----------- | ---------------------- | +| **Type** | `string` | +| **Options** | `Hugging Face`, `vLLM` | +| **Default** | `Hugging Face` | + +> [!NOTE] +> This is an interface reserved for different VLM providers. + + +
+ + + +### VLM Base URL + +Specify the base url of the VLM that needs to be requested. + +| Property | Details | +| ------------ | -------- | +| **Type** | `string` | +| **Required** | `true` | + +> [!NOTE] +> VLM Base URL should be OpenAI compatible API endpoints (see [OpenAI API protocol document](https://platform.openai.com/docs/guides/vision/uploading-base-64-encoded-images) for more details). + + +
+ + + +### VLM Model Name + +Specify the requested module name. + +| Property | Details | +| ------------ | -------- | +| **Type** | `string` | +| **Required** | `true` | + + +
+ + +### Report Storage Base URL + +Defines the base URL for uploading report file. By default, when this option is not set, when the user clicks **Export as HTML** (a.k.a. Share), it will automatically trigger the download of the report file: + +

+ Download report +
+

+ +Once it's set, when user click **Export as HTML**, report file will firstly be uploaded to the Report Storage Server, which returns a publicly accessible URL for the persistent file. + +

+ Download report +
+

+ +#### Report Storage Server Interface + +The Report Storage Server should implement the following HTTP API endpoint: + +| Property | Details | +| ------------ | ------------------------------------------------------------------------------------------------------------ | +| **Endpoint** | `POST /your-storage-enpoint` | +| **Headers** | Content-Type: `multipart/form-data`
| + +#### Request Body + +The request should be sent as `multipart/form-data` with the following field: + +| Field | Type | Required | Description | Constraints | +| ----- | ---- | -------- | ---------------- | ---------------------------------- | +| file | File | Yes | HTML report file | - Format: HTML
- Max size: 30MB | + +#### Response + +**Success Response (200 OK)** +```json +{ + "url": "https://example.com/reports/xxx.html" +} +``` + +The response should return a JSON object containing a publicly accessible URL where the report can be accessed. + +> [!NOTE] +> Currently, there is no authentication designed for Report Storage Server. If you have any requirements, please submit an [issue](https://github.com/bytedance/UI-TARS-desktop/issues). + + +
+ + +### UTIO Base URL + +**UTIO** (_UI-TARS Insights and Observation_) is a data collection mechanism for insights into **UI-TARS Desktop** (_Introduced at [#60](https://github.com/bytedance/UI-TARS-desktop/pull/60)_). The design of UTIO is also related to sharing. The overall process is as follows: + +

+ UTIO Flow +
+ UTIO Flow +

+ +This option defines the base URL for the **UTIO** server that handles application events and instructions. + + +#### Server Interface Specification + +The UTIO server accepts events through HTTP POST requests and supports three types of events: + +| Property | Details | +| ------------ | -------------------------------- | +| **Endpoint** | `POST /your-utio-endpoint` | +| **Headers** | Content-Type: `application/json` | + +##### Event Types + +The server handles three types of events: + +###### **Application Launch** +```typescript +interface AppLaunchedEvent { + type: 'appLaunched'; + platform: 'iOS' | 'Android' | 'Web'; + osVersion: string; + screenWidth: number; + screenHeight: number; +} +``` + +###### **Send Instruction** +```typescript +interface SendInstructionEvent { + type: 'sendInstruction'; + instruction: string; +} +``` + +###### **Share Report** +```typescript +interface ShareReportEvent { + type: 'shareReport'; + lastScreenshot?: string; + report?: string; + instruction: string; +} +``` + +##### Request Example + +```json +{ + "type": "appLaunched", + "platform": "iOS", + "osVersion": "16.0.0", + "screenWidth": 390, + "screenHeight": 844 +} +``` + +##### Response + +**Success Response (200 OK)** +```json +{ + "success": true +} +``` + +> [!NOTE] +> All events are processed asynchronously. The server should respond promptly to acknowledge receipt of the event. + + +##### Server Example + +###### Node.js + +```js +const express = require('express'); +const cors = require('cors'); +const app = express(); +const port = 3000; + +app.use(cors()); +app.use(express.json()); + +app.post('/your-utio-endpoint', (req, res) => { + const event = req.body; + + if (!event || !event.type) { + return res.status(400).json({ error: 'Missing event type' }); + } + + switch (event.type) { + case 'appLaunched': + return handleAppLaunch(event, res); + case 'sendInstruction': + return handleSendInstruction(event, res); + case 'shareReport': + return handleShareReport(event, res); + default: + return res.status(400).json({ error: 'Unsupported event type' }); + } +}); + +app.listen(port, () => { + console.log(`Server listening on port ${port}`); +}); +``` + +###### Python + +```python +from flask import Flask, request, jsonify +from flask_cors import CORS +import re + +app = Flask(__name__) +CORS(app) + +@app.route('/events', methods=['POST']) +def handle_event(): + data = request.get_json() + + if not data or 'type' not in data: + return jsonify({'error': 'Missing event type'}), 400 + + event_type = data['type'] + + if event_type == 'appLaunched': + return handle_app_launch(data) + elif event_type == 'sendInstruction': + return handle_send_instruction(data) + elif event_type == 'shareReport': + return handle_share_report(data) + else: + return jsonify({'error': 'Unsupported event type'}), 400 + +if __name__ == '__main__': + app.run(port=3000) +``` + diff --git a/examples/presets/default.yaml b/examples/presets/default.yaml new file mode 100644 index 000000000..b0bfdcf73 --- /dev/null +++ b/examples/presets/default.yaml @@ -0,0 +1,8 @@ +name: UI TARS Desktop Example Preset +language: en +vlmProvider: Hugging Face +vlmBaseUrl: https://your-endpoint.huggingface.cloud/v1 +vlmApiKey: your_api_key +vlmModelName: your_model_name +reportStorageBaseUrl: https://your-report-storage-endpoint.com/upload +utioBaseUrl: https://your-utio-endpoint.com/collect diff --git a/forge.config.ts b/forge.config.ts index 620ca0436..613992241 100644 --- a/forge.config.ts +++ b/forge.config.ts @@ -25,6 +25,11 @@ const skipDevDependencies = new Set([ const keepLanguages = new Set(['en', 'en_GB', 'en-US', 'en_US']); // const ignorePattern = new RegExp(`^/node_modules/(${[...devDependencies].join("|")})`) +const enableOsxSign = + process.env.APPLE_ID && + process.env.APPLE_PASSWORD && + process.env.APPLE_TEAM_ID; + // remove folders & files not to be included in the app async function cleanSources( buildPath, @@ -100,9 +105,7 @@ const config: ForgeConfig = { prune: true, executableName: 'UI-TARS', extraResource: ['./resources/app-update.yml'], - ...(process.env.APPLE_ID && - process.env.APPLE_PASSWORD && - process.env.APPLE_TEAM_ID + ...(enableOsxSign ? { osxSign: { keychain: process.env.KEYCHAIN_PATH, diff --git a/images/download-report.png b/images/download-report.png new file mode 100644 index 0000000000000000000000000000000000000000..3b3be4ce1bd4b5e5af1d0ffdc3878b7e961d7525 GIT binary patch literal 47221 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%0Dtu7#y0h|ZTd!S79mwtZjW&M5|DW3rq+ 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 YE3OLD!qw$|7~qeDsH{kdknWfN1M$CZ%m4rY literal 0 HcmV?d00001 diff --git a/images/import-preset-from-local.png b/images/import-preset-from-local.png new file mode 100644 index 0000000000000000000000000000000000000000..9a09121407a2d320f6b851a73d8e8f9262350271 GIT binary patch literal 105930 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 Ja#SA${U7rUY4`vD literal 0 HcmV?d00001 diff --git a/images/setting.png b/images/setting.png index 47ff2600a189946bb5f8966697e765d99f74d688..969ccdb22a0575ce68ea10684e1ffe7137a43827 100644 GIT binary patch literal 37527 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 literal 395660 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

  • PGoHD6@Z zaj9JV;_U7RjtC8bT!J9nqJK`8y~gZp@2f?$P)KW7!-7Q?qGWv8yTfS8286WYAX398gG z;<)j(jQF#uK0=|PalVb>h0Kv#d%RQBS(B;TQN#EjM|$rZDDeJ2&YeHiY+gzdphW!} z-W3lR=UR{u4_c(-(Tzj0fhT~~C|!o!YXtFSP?k`P37>1(wNS;sp?`26f&qSE&%y{< zFXtbxjSfHH^Y3Q%>8KFwl3V2_LxW4?)?J@QdtRfKL_@pYrOX#U_!UvPb9LUqlq=z7 zVg&o;+i%=k>9k3ic-Fq=SlqEtyx7vq^%hqLa%@s_fsxM(cE>4V757nf$>t&U@G|Xl zz)02Ry~T4t{dCVhDmRo`QM~C~Vgr#%p|IfcTb^8sea8=#qpO<_!)KQ!jGauI!^{YC z1|8hFlojUd6L<-r7@iT0M|TTpfg)&lEgY6`r+PMNnDQ2+`2h!^o7LU_-HTXAqx0U> zyp!%h{tO(GZt0biaFPzIlw|cYir-!Mn0LVH#h@ zc8S(=PiU{@m!xVehe7Z+&KsD#yfNsA9-E4G+mF_+p)?uqeD@(mg#e)cGKPp<8&DMt zWeGaYdU6Mi##08gIa;x=LuDl?d@x`d^BKP_8DUMrMbm*5;o<^=uayi(>pP{}4K>PanI1H94#FVAm#`b17ys$pCi0c@ zZK=JCv_`rLecX;;ZWtmI0G(OQn%gGmY=_ffqYlAkRZmU!gM02QcoyuX zJ1l8n2*{t*Yi;C7Az1CJx->h(dzbz<6Ec$@2wq8_rMjvvH0P}Xu-{2}vWc#1bTGF4 zP`V>>ds2;k6uST8x#0MQ;#r+^!D(;h>rSMD{XxK~#>VA>>dspgZbbdJq8^0YPnhBC zK~OFbaEmqLU|~XQX;U`{-+SbCkDfpd>{;YjA=l1h69I=ANa+vhk(q! zMmWF94xF<%iLlhu*7v&@gW#qSc5NXS;|+_h%CajR;CxG{+$+XVhk^gR3Qu}#dJ_`b z;|#`!c`|}rN%2Z`67MQk?$_E{Mt<>yqh?|i*0;FH%74lX#8C}e7W#+qwd-#788DPQp-GMuI@qXe;{nY&VPBJSGp@v zQ1kV2GThq8E+H21qXq;7Y{e09qm@>pt3C$v-s8?|S_R>(f#M?np()OXv}#=j<)-Sh6)5ujKw(k5Ua>aPw8e?zPNI zm)eXww#4tW_(gkO7H;FtQdRzuP!f^Yt=te|tGc|T!b8BBUh znwrlSMP(}AuzLN$&OXXDBvq8offVPr*7OR7Mk9{)%R9g40*Nm{9xHxJ98j%{)Ok`- z;(}J27*bs{F|FXeB1gixfInmp$s}hF6J@ja_Z4cDl1W-qoyr ze|I!LfQ|9M+Hd$Fhc=)5d2V9{ke2YR#>~a6e*1^{8^2A{lT^W+gOikJmix^YyGcVJ zg6UCnCAb-e=)pe88|`tRO$*Gc~|5Uxh@b5-Ff=j-Z2++j&pn;j;DMPD;XA zB=pii-NnANj+ga2I0YY~4mrJReh216KKo_?{Y!XfWYOB8-ca^9D(RagR8cWtGc+mJ z(AX&@Mjn~mNbSJpg??h^)d+TUigg;6K`g!ArK92O20XL=2UDLWsdw+@U}Pd?iI8F{g6bhBX)sA~%DtztqtFa>V;Vqe!}71>S2Twj-?Lr8u(AHnfR`I<&5M!PA=FUkSFH(M|O8BXg!{8C5LkS+iBK=f;XC_C$#oI zLvXM~g*Q(vR|fxH{uVi+<(yXT3Ao2&&c|S&tAoGyWC*a|VKYP#gu^T3?juhW3|67% z6MA@EMcu_>QJ|S0Zx7l8Y>DgfRa6pK?>E`^(3P}3RsZEZEROOnL15ZM)p%&$5VC%0 zNC4i$Oz+B9d8T=s^Tj{y+db*jxFXevo?N#w;mRiG-yY+kr4X;m6AY;C`@e06pT}K_ zuwnq(DysXxQ*c&b3NF2g*fpAl%Cg%E>t)`jSu&e%1Au;z>3XcC{e%9>MU|-Hm(Lf| zrBccc7yn-4NcQ=!9F!xk+7-E{|H)=J^yz!f(kF=RDfE6(u*^)KV{&P1u@f5lSyk+z zlysPUOyD7nVZ|YBS*gmmhrQibOQDC1-*rnQCg#gU0ObbuJ}8z}{_3+3J%&5iRg8Ip zv*N4(+w+~z>Q`O1EEvq|KbO9b=_+d|!+TbUz&ttsZYva+FHCRhk;F5#x10|9G=V&f zFx~rBiCY2s$EQj6jM>ofkV;-L_J0XAAtQEUbz@Vj8}680nDPG8=BZeOHO8s}y>?pm zPCv26m=+IPAk(AyHue&JWKHGSm$l=Ej~zBHy>+#UJ}dMjJrPMGNU<}qInde;9E3xb zMV`74&%9PJ!QbWI)E0R{bbLwBg}iZv$PSCXs(n7nGgDx%SQ=58Jv6GTCi$F?v5cqf zgM(%g%R{NS5WPGPg!yqkjVQPowc_IEiLgApGGlGElMnVV?P+{aK$s*hT$)y=VTU_2>Yam-OCuMsv zZ}7(+TXTDcTsP#3%GD<$cZn#(L#RzD2JX3!WEE#VG?0AgGTElZb`fh)-tQkFh)Dv{ zxP+Sk9|BZ#Ds&$RX9^9#TBZhww(#y(LiT7BW(&`t!a}=~?%O93+T%c8#5QbzhtNMb zC6;eP4y2d;hR<11UpZL#f4#8UM5LUPJ&v?)Y_J!Cpu4_RK+d408V2Nu0D?Ax|@ASrdl<`KC%;{P@opRXz$|D8ZXCLdh-A_)}Vp$=2Z&C zW@hFvW*`D@p!&Z(m(2o!?bKOwbUM z+|sF#Oilc}3{pB~5TYEbShn~1FG1mbnmGS|X94_A-u5maGMVYaC5J4_zd18a|^jd&N3$WV*ae;PnBHqf6`|@N~)v={R}N8 z)pYGK(GAep7M;D5Sr>d`lSeudGFb*yBsRS$+(D1jVsQ#sOI5!PnEzXaLf1-MsAUsm ziqCElR8M|-kDJ^m)>h0ilwr&=QS1bG zF0)L`8`A${P^(OU{ETLo?Mvy++F=En)2*9H7lVC^(BY%laq|tr5AamRAT>PB8t|vB z-S}+?&p%qkyeiH;7fvZ6*Ge#PZ*E6k3Y zoQRba_h&ft!KR8Ok7>8`yQ}ARX&UDEF1oJBs_#`4ZzvOb3HC#kiy4&`N1rM^I=8VL zJh<@Q!+&ND%&`$GK5Lbm#G*GgTjBxE>MVq`Q^Sa1qAQ zh^iln97FN06y~#PuI>S_h-w%KVDvSA(koJPc>{AbO@Wni3G^@>qcSc(sVrEcabK}O zTq?EHd^6S_D;&s^|5v09Ko$MzRw}7!_3W{`|A%Si(U%ytQ2vF<`F4@Yu9m$A#tUP8 zV((ItbWHW$c^Bs!lUh~}Y!kfPN#))EhN&~nCZEkcbIWz<+MB1XZyb+Zaek%1P11yi zuzb_Mq4`aS5@~=>yxXZVs>DY9$`;aU5^|UGljk3DSW)(u3^H8Tg}iRxI5B!ClD#Zy zQYZPV`7TQJ7-z#NpQ#H~JY208aNFg4uZYe^=o0fJv^f?f?PAA59C~88R*e3b2<2o1R#DSE zJKsfAma5TSzYyIlgvU1W=H_R=rGkW)QlxiAT5?ISZUQ174oZff>sn+h90`zC$ZseX z-=?aRa7U!WA&QrfN5Tx-DM=qkAH#HC!*fmexAv5vb2-ANf zUuG+=@{HpuLs|GcCEvx%9uBdgq|b-)jJd|XeLR5nZ(Ef1p*)m?j&H{}f&}(l4EK&c zp}6<<0GlSgi-;ijk_PyQ|J+QtpoVg4nB({zO;T1>tWy9QQa%)iWK&xJS{QaXvWpe6 zK(1)54JjRH3Hfqf>*0&+R-w^)yw!6n?UHkpR{eH062PwU?*!O2-G8!cK1El@A3R_> z6KZ=b_67dlm$MF0Od`j_fZ`wkA8<0z?&Ve+*WuPtFxLKF>v}JFhW|;9ayxiU4_-0R zLKLQr>q%@)t=mBEFf=UR6M0;`J{V~%-I=ckD?UW;3?lw|6M=n7?P7XklXTi!vasO3 zMW8xKA+TyY$SXv8i^;Z~JE%8B@Nl_{#eOvp&>>MCM^Mou7;!*8Q&{Kj_ED9{_?hf9 z*bMtX7cFnvq_1%7r_5&tFXmZK6Ka><2GBzIEA`(dG016h${KS@>6jVa*V@kChX?TS zYFEVedGkgLUua?&G@;|{bT>hel^({6^}VAZ+ z^1+YC^BfkR(MRUl4mwo(zoGm6YJiXv%AwkX{1)h)2^$``=~kN2P!}H$pcKZ3Gd{2i z(UM^Rnh9@80yppQ&e4vjzXV+yTWnDeCtmR2uk~gC@cZZ4&FQ=~LC0y}Q)Kg{-9U0*L36}=Cm$V)o_A8Ou z`))o80^BM}3T&^ZlPb7Qj-;@ut7G#`qjT`neWNSTZI9LY zl_;;^l_7EK-z=i2@_KdTTUrCH87k{ZC=nVfZ;t2=>(=+ng7mL0Gx3Fd$$`C~*W3C~ z5@4yYDZXeBhK;)Y#v>EKOs+<*HyYC7_|2aWA4lRVZaic+qjoVAg~z|RzN};1Y6OPd zv5LFh(ro_avcS50r{TwI$uJ*Cb7dmi#x)_%0UkA%=`!lx~HO-!MUfA{2k<|<3 zPAPqO^sCDr!qL9$#gS8(PM5w7Pk8Ami(Um(dLbX%>VXc!OOPoh4A|asyIghoBxvm7 zvjrRbzY&-HDxd(6sOa~AXg^ZSzaSwl8J2_t@;990mgyn&{kg4So@vkh>vfW@fA`q*GVL+rQ5A9sSkkyXZQ1j7s*FuFEWY8NI6)>_ zMs6ki7L9G4^Eke5Umv#vISI71_yx-PsVSu%z7q`I+TKFBoua>$g5(Av^(S%Rx!Q=Gf-MNn|x(OUJh7J&JLR@2)V zupE1lQ+#NOwj`B9pU2h3{X?zp1VdLO0M4`IaeJYa-`~=4ZqRsRG6q1tx_h~bVISYLx(Z#%OpU^2J(CB&!LZYjFH<8b+8?2SSE z;aa_#;oQ<;yTmP<_iw7q;$S)cy_Y^9;Ju{&j+Lo470&GX`4?4Y*Zefmg%)y-;R&EB zfh~5mtk2QkweZEnJz-3Qt#pI&BSY_DK7b-1daV3yXnc<}bYx8l`d5DKFHQ%?IXW-< zg;oId_SAp`_AOJR3C6>OWXg9o0oA?Q_q7Fp2)g_vq8I?m2(#I_pud6JliWRH41bIY z^?dBIp?}4*JQs1IwVJsT#q1LVxf1yFqciy6*hpBC7<1!>~Px7bj^OLuv!_DYE z34JoWI;^{TZRzIG*>y>?p>y<7b1{Lpye0iUkb2u*uO2LZj;{%-QK*#ttvwcp2^b%O)+?;>^NmmgmC_cv4RqOYMsN)rr(y`>X zr{@f=v$5Seb>djETDY_b^my%h&SmY$8AoaSL6QKe;Qr5hda0tc5et$Ne{nsjN$($j{cB~Vv5k!nei5bb1IWrGAv{$k4C9y9QsqAV6i|bX4a z)hsT~#D%)rX1`T^w`}4h=vWCOBYHjs?pcoAvQVq|q&TuOpRLsgP&x8QDEMEU@_%tA zbNb8ICextBrHvmfKg9B9WB?S#OqhH^^R`>xGvL+;S8WfN5o|)2oeY0fv}>6F_*s%l zbSLG<2{VpN*@Qus#U}v*6JUGh*OxYhZ>bf;0oo-%?tT_5ci~*hv4>BY48p@-TyJlT zF~CdYA4?FrnXk`xh!NXiBO_vGB0|ZW%Yi~iwz2r^ifFKp3#~qSK3nNJpC;Ai3<$t{ z06xL)#e-7!J0!ixz^e2^m(pt3M9HE2Kllh0Lf4KALJiyuiYzk^FVh|w*#Jz41)%&~ z`YW1zP5hs92;&Z$V?CBrHXV`SQ(#XN@+G!kY{p4`Crgb|QZiFZo$Z@|OfRH)7{>4wL>_3XQQ_3VMDwpoJpcR{sf z@0Eg_vbs|~E2dtf%1O7BNN8qMU&P1}qUW&#TxloOl!BfdqIz>IFTR5Tm_-s=aL@{U z?8RDSH}i;LUAUvgSok(fgH}cHin;| zR~LYq2b)_-x%v(p|MgQF;d`&NjNx*TduN`Wl{T8XnTD19?JjylZrj%750FO+Y*Hxt z#tC-*H@a0F8_x|68DxBc?6ZKi&@Dc``jeaoRiBDWhsA02MLw0bHb;(mL>VagORI*P z8bd>rk8_W7{aXxJYg|02H&0r<@5nsGwFm6y3p6uL6_ihdAuG=`|G^))&(KxVUEQ7c zp5rnO7qtC)J^nj_dC>9-Imu3N^wI%m1^|=#RG%Q$PB zqk-CO*uvfc&}du8O7l4JSk#_$*C-&uK$7!qIsMryWR={pp;ycTDly_yAB~RH!Gd zLge06x4-J2fdJ|%z!PR%yk}iP1zZ7K1}tewzeSZc7P7s&Nafo&c6Xy(G3RpdhZgCh zCj?B`%*7d_8Loi*N;da5uCG!fTqK$$0&u+H!Ga)1w@`(uR^$0rr9-@)HtL{_?Ha>* zZC$IEZ!vOuIlq=9kRju)7)g5ZTJ`PKMeIg>s z7V7c5u1`|QsJ1nh)94f6%z1>&ynr%1V)sQ(PW2`EEc_g_9e?gG+46%nFdg`t*~9xQ zEd^~~*^71Vj3=06qh}*8eaY2`{3xK z(9`y)k3#0xaV=kDNKY3*w0ghRBTUS2-srgz zy~jt{vNM^gBA}%dlcPVJW-B~a_*I41nogt)r~kC1Z=0`T_*$rED)+aOs=v39-n2b2 zc>AQYV#L%rLPJh?bR$yQC$;^fu>}ZPR|toA^*xz_1g?I8U)j%XN`bCF9wQ!V>>@(@ zmp{gD{Xh-4V5{l|`!(gXs2N>(v0K&U&k6&2$KEg95MsZ@a5n6}KG;f&UUM~wn@q^A z6GMvW7N|Te5H#mnof`1HP?1w9;GKu^RCU_d0S07F+Na2CgxUM7N{ql6gT*$&LO*Al zT*9Oh4Ti^_-?1*1QOaS-94ee;d;_}Kvg^f+(4DxS9R85Ou8SmV%HYAze-ee@sF&Fn zgL~ZCP_>Qq6eJJf7!RHOSISVYyRTv-x+J=!yz6?V2nb;N?RdJ7%nV=6_k)zn0raM`t(dM>uh@S)49LDL0zv+tHisa*}YBmghQ2R z*VG{iXn_><4gWJ6pek!v*4)`~7swe3nUy4jzEt@zFml;E zkcnB#+WM-9g$K|0e6O6zD!J*tSRPJqLJwcea+mQX$3!CO2Xx%LuF#`X*5KCcPnDuf z9-gGz$=WhVjl{vQIP6MgE^#PciySO6p@q-)7^o(Q>b0z_i?&r#>PpjtvpVXBbSx;O zXYOE-T+=#gW?S^{j-n8IDxS&U9E`(Q9oVVCgqG+}Q#FsMgae%1WIAjnNQ_EPeB({s zl=nP3Fso)IbeB7veJSN2>;Bvs&tjkpOWa}iJ*`_r>MZ_D(&n;aTdrCS! z5k?9psHh0`>ujaCqw=%VGBREE^~Ungp+oVXeD9$Y6B4Ake9Q_R(XoEb+F)E7|+<%m8_Jr9Ocdn@3pW+ZsmJyR+x zTme$QP={}f4>t!8{B&#H}PE1 zxDDKHadY26B;e^Kxcb{R#-isQpOC`$yb!$LwAQd1KwozYsoF6wCV$;$u-gH;FfGw)iqZz z7^yOd-WV2ycPs3#Avehy;(xX6e_Sday1C~lT6-raiZ-d_z!y89k=Gl;YOD_Fg_e$WwzGyd4R+YRJulDc?zNGcL7!=~KQAg*V62m=vbB zyJMMu=QAOGp!5#!r4sEUZWL4Lv6hK%L|Lw>Nj<72ZaSTHsieAj=&FmcbSc^(Z;Ne6 zPU1Zvg~bW?n17^{$fWqC`_2s-2&o78_CLp=m-PfA-LS4U_H6{DzstB@WHx&+a%Jmk zXHgc2A3HE`U|F9HGCxJG_y?1hPJgVuyL}{q7X7}?pGpXxf8*I}aAqn2(SUa+H+)qe zEa#$KeGgs5Znc!3tB%ABbt#y}$#mYHOjBVdsN-huT(UW9Kd5pd@>1ltW?;wzn}?&d z004ThhbBjq zUEo@t4CDT|CulzLlMhy}(`#(0xvbEJf+3d-6E*yB!*IL6vLQln7HdejeDticf4Y%~7fd5IIjV@_xdk&vd~57ckS^0fy|H=5qTz5+-~|;CH|=XMjnOEq4CP;P)*|sr9-uE zT6`%dg*lARuf-%lVu{XrTrAz%xl;))P`9P&eiuy$rR?<0QaCb;s3>AO zp_d{aC(aM8>nzBArbG-3#qPJ`*CVzLNWl|@n)?6c8~xj1x{78O5)(VhxNKFxg2gCQz?-f7=itI@ zoNt#9JQQ1FwCcQuG*(wRP_5NX2wJTuiT~}O#0(+wb0N6r?O)x%uLUoELreo;fu4sJ zkm@l%?erh=lMn5Edo>fga#O{0cR=vauP2-M?YCJ_e6l(<~tFSR^Qwq4%j(-a>FeA7dx5pbGd{m}5`!`(M)eC`Fj~ zNyER{*7UQ-+T|{sX2Y`K9nx;RFsl>558G*lt@%+64Gg6W)jb<1YSZFJ?!YrZD9RgW z*-zLjjqt-h&W2)br5a0qQ+LQ_ekN0`&F=D`CE#RyQcd{1oNMEe@ve&VmV*e%_WCr$ zqPy#PC;mLO?)i%TRjDMG6wN3;{FbGk3!vSiOX1&UFjp@=)Qb zG?-*w=qH0af?_!_S~&5dA@9q_|KYEFVjOXYolCvv2HrybqinGww>kjDX2 zUo1!n?#YYzl)2HfBtb5akM;w0@ZQ)&^Pm|%O%`s&6OOf$vk_Hi3g33azoYC zcBVb{Ya+X#;T3XW8xe)GI2%knBU za$HWe6a z09K-5`kI;Yxr9v9^YUA>Q?R*F4)LPu*2)!q;?JPnCI<^_(sf5AIb$@7*HS`2)t+N?fa{Cc6j$Olffn zG@11ypSW)F?H3v1^lA_g4;Kc3E31U|kKZ^kg@gmnZ1l`hVSF2LicuBcR%;nF;g4PP zJE3#x*^j>q3sYT~RK`5l<n0ffR{^ zqDV~#jLG4h2MQ&MF1pV{%Ez-0N4t#d%M~%zqmL)yarZ;78?!BTG~9e>v7jraN(V3f zx2M-CDGbFJy~N*DX_#hlGv~N1mgb>bR#eE^0WGS*i!Av$3@&L^c|tPBm$HK3-9%MW zC-YtJcsH@Lz&GfPnLi(C@BqFzi&0axK#|vn(c8e0Ep(>A3&_&En-(p}?jViyBH^D4Dpk6>HFU47FWn3J!xwFyOmH{ z#4r*bda9zU+Se4mZm>R_-Q49xObwdYSNXDpFm%KXz_qeKsw`Y&>_cobb|>R6hx88z zs@IW$AI`z2-sv~lBD}S4aKH#$%b_|TunOiU9AqzKo?3{w#Ub#hh4&SS%>fvk;37qG zC|B%K$PBmD@h}Pg+{*N`WI3T}?8NNt&mTgMG92W{f$yLSO3k+F3M`$PHjU9zN!n+4 z^!zm|s_rhkpU*nt=j2aOGG^PD!UZLMVo~++n)35X@>vExEdw^ay3AK;}D&u7p?E*K*v7*?iNsM4eu7Lx2y$0HW;f|-We#L%I8&k z-ubxHJ3CZE9HG?Xetbz`D}n>Va~H3~pX9>AacehsdgZ-RtT!@qBuJ%v!DAK9;!`h3 z@pGH!IZehA152e}HS&^}Gba_)HZf@`*4Sz_SR@{H{l>`&Ft(OCR!pu(t!umQsV?wB7>CC9FZ*FHyR3Bkax0 zoj92gTb>7ur6H#0(|c@nl2`Imc${&Hif6X3(|bbfgX-vdbR_W?B%?RE?{@-qyq1*P zuYt@2Mh{@u6_-^!Fv%gpK6JePU&pqVibaU*?m*~snIvB;(@59lqP9zXv z4~hLKsDL*iq3}qxT`%J;?}KULP)}H+>}-${F|nE%hoila2XqcPSpwW+Lc#}$s2yt z5y6XzT>{xcyAlz)VR38w72RiD^72Iaj$33fM=tczc`k-?%-r%j!Jq7Ms)Dlz+gi$K z&gI}?P5zOfxrTuB`&pMs?gB46;CW}-QFa%cu{A8KUj~}QlTh}Qxc6$On&#YhSTh8aIdn|x@vt?y7F(VTRcB?;we$rm90X^nZ5aOK zrU0kuloPWT#K8R7JJQZ&-0XVg?Ck9$dVxij#@!^u2$%4U{bt(ud{lKD5+Nnu!_%K>reR36PeGVy5<4uuL_pS!Kw{zhHkj1;)abfAr0;- zg{wnhq5ZqFac9uG_(@21(5_dlO+$G$PHt>Lwu&;L<=f?nw8}25fM@=5t|dpnrpDeW z3%j3C9Q{c(sx`V!pa!^E7$7)Yt;f52Gc~Obk0IUFm1S(KRgbejKeg2Xi&DNT#!LCM zB{tY~&6H|9Yu&38$;d>hQatlOBjT3YuInksB+;?gk8 zgEXC+=aerO8@}}_zeSu*F1h1bBH(6#UIk^uhcmAhRp#kMXbs*Z7y8<OS~O23Q_4=hp7%X$UZNo+IX{U zqO0FuR%Sswy%+77wv6ELa#PnptB4wPrupq7plZGqVS42tqypa*o2nEi;F-m2D=5`+5>0Yuq?t_sS)e}fAbd_~Zgb-R$PtRdrJO+HbM@Fzf2zCm%;LEo`@kij%enNR8G-xB zISEhr2K#D}^XRtT+%bdvw3qgE5-%+>d<`G+5h+csUhSBN7LV*8_5?&{N{lJ8TW-Ts z4P#(5`(mV($yD!GXruxnXnEM}nsIG!pcDyOZ?svVLkoGpslgJ9uy&_EIj+V@_YC5Q zbp=^JkZ?B#D)pC-WndBfEw31>C1aRlyuahkTCi3LqVIwKS2^L|H3r)R(Q9#rajr*U zW*FH@{HC94OY;F1isqsXZyaQ6O>KdF$0Ox`as#p}0e#h_SnpJ(JGtA!J3>PEW`o=vscWvyIs1H3TnY_e>MmSH4efCcBe8BA)yh&$WqNB6o8xrt z+O28px8CTh2(q9Q_a+<6#`aV|NfB-NXMI(eolezTqBOmh=huVGo|YlH)3lbW1k{C{ z$mW8YNVpVwtUE1SdcGv$NK48Ex-l>@0575VVGCgv$u8LE*cyROo#5nuSg7~47u>0B zo`_$M8_b_-nBh*^IKUo84+CbW_H>Lr3{Gdh=1o(geeqeTW~aF~>?wH)fDJ+*UYM+lE5P z%7&Z-1c&bvyZ!zy3GyH3h0ipqGI~p3i9??QXUY%b$o5Ck7CHFaIB3K0;Fvw6z2|E5 z&Jk!aoEpY;09%UkcdA?_@pEYKcgIw_`T@<;remZ zX_f#M&vW&QiIK0(Za+$j?94C5=^rMOq3=q!u9$tv`NIEB=4TAp2J^fQDoxrZ^qMK$ zec9$6pXXIOKCwa{?GTvp#?GnQXg*NslrJRH(jEm(MC9caUeV|Kgl%3ZZ980oB9>4!A-K0ZWAF?Nlc5N|`{$Hh4q$Cd44djAt*P`|)k$_Q zy0(-Lffyn&w=W2xmj^;c<0d1Q*54x)|b+UHuKhbaRPpmlFy}EsBg=Xu}5S5^rVg_c1)3N?5YMD z6Ox*j99DER8PUnr!;itx+5&-!Zol8#hDsS5EWLG~LWvOcVPPd)09%uZgkol=oOEgG~Rhm+yF7~ z52ym<*bBl#EUk-Mp15+yBw*&HPoesWtdKxHdIx@n$SR%LThb~j_TTRQzLZ6eOjRRK z(5ad_`+KIZA;Kbrhm)PmFOV^NyV@rxyXoJxpeh<}WmXtsX%F#=9u(WWmlLs;%FX+) z`d~mPddLW2T{eY6FV6)|M*d@sX7R;u2oGQ*`THt4VCgUqsrbgqQD=WCLMQOGWW%>+SYU#Lo$7L`Qf0$xOpp5`OHYwz*BJAM{VE)hnIB|u3|tjo zn#J(7H6;s0d2rSZ&wD_}qiRgboqOO+D4AHXsWpYaSp)Gd$e|B}N2smaHvnbd+!U?l zFZ_oAepzkA#JvN{NP&cv^}Ne}7ZUz*%F*l|RO9tOs)Z}Sv%15&5us5*P|2#r%BrY% z#fQio!D~4N?LIpa9|I(UCAd@7M+?C{n z&+Lbs$zgA+$2NcM z#XUHp-;TSO6A|H%uXy3ZYNuVBVkY0Q_ykcPnQ^bvVqVZbrdN@HT&8(x{-RneBNa6J+i@GNu0v+u_Bl+$V@ z!xaXc#$wq0i3;TA(eh6IEQYA5w7UGOlvtIGtH=uIx*B%4o&m{5V3eHhlrPm7VF1@& z>(A{QbZ4Tj7<287z5#m5C%s-(kV#OXKfekDjvts*UW+09N+yAFNQ(dkh^~s}U?^hK z9BhX*nGS)3?y!z;?OjaCcyuIU^qLKplIhPJIL)L66d75c4W2bAeai9a>II|UroQmC zwS}hPFI+rcr1X(Xa71J}@Ak;EOJuSFi4&^X>&qCKw_dmO(fJ^=Vhm$*RR5#KI{vn> z!d&|#e&*?00?<3?r{v)2=Rnxqh%nuj8p#_tyb{Z@>RMAeOnhch{ruchH80Z%RF-(g z?FMTiVr44_hu`M02o+m>SZ-}N`k08VK&}8?(Zsr?H0S;5z1<3s?*EvjWl@H*y2a1i z-?%i2`9sIOzrW(jXc^M$96;y6H5&QJy@l_LVcU5%-2utd9#GP#On;-HPvMXMd98nE zspi)pFcSdh zEe$)`S#a#wURVe}ePjaQ<6rFg*S|We!q>slRh>CzqmuBnFfa4imeaA*f$CTGENifa z3PY?`gp)6Pi6LmO&7?6hIGrg4(pOeP@9x|;6H0uQF5lHXph zkB6&AFvlNSC_S@d7IEHe+LvBB+-lsWRKl!?%{!rX*WIyt72dP9VsAq_dDb0{z7xhF z715ri1_rsq9bOrwr%BccZan?SzO-O28}FyRoV&s(%^>Jzb25HOC^g7bk2+T}=W}1p-R1`k&y9%p5i}l<4(c5*PDCb7qDyIn(d6yEK>vUwUUl zBd72wOi~1WexBI#E*v%nD@yz0pzw--t?9Dn(S8e8gdSgN1*59#9} z`DHNQUcBCvWP#bLhY1d6yI>1#1W?YZ`>akykVYwMFRpkxBm1|pzY~Sls>p^6JUlLM zTpYe2&Q#^{R!wqb*;SqSOgoUE(x1GoQAmy+y9P&n>}!#Mw$p$8d)mw9{uJJvB(6Y(&4ud6|iZN!k&sSz+^|4&|1u z>IzHqgW>mZ8ancOO*08L9PO;3tV^jzTbmwjNy0N9`a$EfDO9w2%Yd0*0|6K=iaR`Bbdm%8Or6#UPBw;a+pmob-$Sr!?JzY&)_@ER+`CxOcb4&5CB-W42mNc9I zEh|mp&LU@LZsk=xw(Mk4UpFC6+9xLa#_(~oJ&9D^<9SfP6I{F{LeC^uF(@>md!Kdh zg%;N>#Z!cz^oW|rgJSRF_*}DEw+{oR=c5&`O##PvwXf=0LB+=u8) zTYo`t;ZMGvo;k6f#i^p-Ad}#NT8!g|7VY1-#^`71;TE${3UB70j5Jk(YVa%%LqJVq z5a`BQ5V^X%lr=Dh5V+n9*M*v81^ZC4mUPOqla_QD<=!Fth`tJoe+pH;B(fg>LqIu2 z%_`>m7p(Um@9)E*#EJ68nyvOd+lY+aSEZyX$OFqDl7&sQ*Th88@B2b@f z)hY|xX!)S_-^+x|RxZpZwcLHZdwT1xUJKGf;YiK!BJ2!wFha1xsDXB?&PeCs|B@&O z&D5r4_wct5bD{>?aqUA1X?1!D!48=H&!*5-TO;-?V1cQ@505(SJmc>G3=5FV(PFhlYf=oXkafe_JJ|T*o|HllC*hU@n~X zdUMM!Xk%)_g*>y)x$E86I-kQ#u{2$FnfTpVYdKN?Q(Iuxzc(Ulxqc1sgC$jQN@}Jtq92qu`UPFWR)a--wUfCG?wT)IaY4O*KALdfAPC$8%!ppbo zxelQukjk64E4C@P%yat6`x8#t6@AFl=1mivXTvVJ%jR%##lL_LrNa?-13JHL=Rtd@_7SC+maHU_1oXQw%_BH zN8kDWsbs+k&7=kbKDZx-KSKVeAC;L-Z_-$R(Npo2{9Z=r6u0QKMuC5FKYd`%DwYs`R20k6YEDhAP3 zcNk8e{DNgwHQ=&@&YUesDLMLKoe2o9C}ZM6-tjhKcexe<51!O9Qp)AxwKO%-+@pO5 z-qV>1=kh(;S;h2nM$}hfLcnfmzg(SPnhZ#M-u2jNRdqS^F6v2<{q>xPZ%qQ@EQC-$ z9|tUpuBMuXq;uYY4>8f{OjmXGtKcL{(@$J>^mUw!(wY86WmkMtg^k7fy8(f z8=+1QfNR#3Z|VwOhmm?J4xo9%Pc*sE%gnjbSl3F3`6uw#vhw?B3yx;EwQmHZMRox4 zPt8aT&$0H7_EG-!3Bp0Diyb5e{|vR)b#L6wh0SyH=8(@-fOt8&l77?fn1TnI)le}T@|7L045vn;#FIp9~(uOU6P zSx6)l4BjrQf%^P#*CEJ1^m#0Uto-x+QDrfW4Ex=X)MQW-jWQL_@eq`CRUYm>rXmHhJ+SC&m#9vaS0@J+=Z?#m?U$Ag@8LGf{4awJW?;tRZz2CN zUtb|HFY11?dp;L9=VE8y-wxD~fpFT}6xFmaH0!EJzPIcixcY~fW!fD^+3}h^z9g~l znltHHnE8E*Rpr`+59_gVQ3o~^YydxO`Gr}8N9@Hc-p!okP&-(FS@5^$Vp9hY5g(t+ z8*v0Lsg4d)dpeTX*Ln1OkSnzLm(<1ktr@+$9C~p8CqlGTUt(>MRF<}QEco+lWJd~2 zzlD{bRs7qQgeAUe#JfOH?-l1MCzlK^bM;bjCNItmw!r>(Na@|WX`=*dF1fiuJrE{w z!M3iDATJ$*iqw#UP(}jRE%Rc7_h);<1kiaLl&&9uIebIo0k6M}Y0q@u#9 zz1>e!+&6Uor)bDW7dC9H{wZX$YO{BI`xJrp-P7V+XjwC@-9Ivj7^F^qP`;L0KRf4wZG<%2Dvm^ z`}o$-2Spp0*PuUkm?9l@{uAnY1Pfm)nM%lP66u$fmjxr_wiFn6x21RUn9chWimq&` zq~pXT5(ws4Qmj181W2Mk?>N8=hYq8DG?3rSDr2>F;Ac1#XkU% zi|Tq!r3U1TiH~9r#|OU!=mnn4pRYD}mzte&zBdwUB2IkDfj++{$cJA;%XRnft}(f{ z){c8a)=Fz)YF=5Bmh^kNapZ9BG0MA+;7z`Sy4=r(4`*M7bc-d`Du=zqi=cR%3gRmr zRVxR^&s(?-3AbaCJ`rYA#QX;J5YT=DLG{O2-5RK|hyy|=SB4|9p6IX_pgF-^d|RgM z&~m&IN)E8>3TUh{9dvBSsB?;2{<%|^brgEOOBL%+`(FvOuY|a-0O9q~^nNqPw^f17 z+Df^qRnX5MX8diD7~q^SmJhe5-)QmOrgaRoizWn&suAu_9$LdjE1MrJ00hu(ua!@* zn1YmL=1lbskH~~^dk`((tGuP&cqz0#me1YtVKem;Ej|V0TG^-MSl)ELT(sG?_;?Tn zt&|z`FmN(tXS=^ih6PI8>G?Gc(knX{SJSvUidykUlujuukkST%LP>>%0*^ztVzb{n zDo+k3Vk_6KY|^OTQv5Jay*zu1t`=X1n$fO%vKBDXI?c5C)2Y2(d!5V14YaIMpy1ts7~OQ)!=!CXR}%V zRG{M@Haebq0AIX$Tuw4wXO8jGCL8fR_~nMSV;RCg!S3j_v#HmIQ^eaw;V*`N+;dPA zByU?DT9aWfYuL1>&(}{8Pxk~aW!kuz1w~jNr?qXPykQnBwM)>RtYGO0TLQ4(41en4{Iq;tiFj$^2 z|7N`5LP5IQ4^RhE${k8Mxd7dSqTh+u;tmDJE92voqZGdb@KIJx$ES};hnvvCkU2c) zq^EVx&n`Vpx6(335EcE&qoj}unC^~PRv=OL;8#rCxChyk2I5J}F1G`B?X#|y8YqeVN0844q>1ns7TH`lE~mq7H4>KU#L5cT0EL}RjJ+@U zY~=83mJQXiX7a$oB#wqGu?+N{bZ_v$dZjc>)=5qJ5Tl4%HpwGn|*iuepFzRElcn~ zGp$ik^QS?{%SuER z;UI@8m3h`a-yBW{l;L7n;;I{=+AX~ogOku?ng4;JZTkatDI2ZH{#Vq*9rv69!BSK# zB*9PB7rDcN7>?cV_ty`rCgLcMcU;9F*5*koWJJL*!j(k<6w>ow#-`}#Zcw?=1-lH~ z$4^EDo`1R)pd6$KzH4*8J#c>Wks$WE2sG!Ef1E02oqT8by6(Q@dPn^n_?GVVlOT3sYH&pE>id(Ty6>XBkM>`1PKr&#Hw3{* zL$3$)J!!?alJET%`cq>>FA~$*-!ww|44r}mEZ%I6MM=JfWp525Gph>}$~CQ=W;6>+ z)T#b`8`glsp-u6kP%{*xv1U+M4y}OX6I*TigsPrY%j%j2RVe^{yfvz**o6)1kXw!^ z(EZ$T+G;r!_ADMuJ0=IuJv*?*PqB_8%uyWG2p(@$FyR*VE9pr!gj#Cd{~KCuNm1^t zI5d-Ol=e%vA6(PE``~Q=lsc3eeM{6;Ocg5J%a`VKO=j<0^L6GX`pd^b2;i;uK=H$!syxAYA4aWxv(5mzL zu^3*3-$sl4D9J>`k5@RZn)mGo2fv(iUgxvz&PFj6pB!4Bf1NLUZ#&#Z9JMj@bkS~f zGP|x%H*~R3tm$|TY6hia@5JyXadzxIICX;qId}%Y^bByUebF2S`|;LhbNjqNb@@F1 z_PpV(6V3TiUx#545l0Jyhl%Njp>p&5Y--lmww;Ej66-?yKYD{)5_E_5@pI(HDeeqF7&nW#(Mo9kdT6N|y>aF_jdTk{%tZ=%O?P8MCF;K;-^mXX z+d&1kXMUD*8cukX*vhU&?Gr5B04<9|B#&h-B^FUg@isKS*OlE6oE(P@g9OdrlraPi z(!bf4^mMBXJ@n&jHT4~}w^GYC#kexE@VGPccpO}jfI^v{I02yvrlCaxwV!RZ%g6V9 zu@(W%hy>4Dsa#qu#7o9uM$Ri-)4?ud;M_d4X*FHU$?iO3opYb4)0^$4LnxLU!~InG z^@Bq~KdB@bxGxh9{fJ?EZT1Nvd z@Kk+W!{Ifkl?PBdGx$`VOi1?1HLB>A^u`PyQL7=xrvAL4ze;SPd|N*H+SJn2N`Jew z2U=^nXZ9#RwsY`OegiZ8{?;$KQ$1lLJNfdvHum{hH%qPWDPP<(>D&8BSIUW41^)@2 zB3-#=C0%I8!`^DSSr;wreVJxE<*HV~vEh6P)^BUBvxf6zR`VLlhH~AXRnrN}|47;d z$sIsPL2(LvreV_}Vi4T{>AH}kz$Ke+P<~7X*(H4cqG@UmvYK%P%&h}#kF3;UCN$%R zRi9^~(U@;7qANzBXFRdQ{mED{u`;1pAp$LM4+xh?*QU;TFTo$ffuGIv_b5X`w^-ve zi*+b3x@Bu*6xuUSe;~;ml)8c4DFikkPRbF6%F*;yVmOb|C3sh+VwQBT31{J15P<+* z+wjJ_l-fQN-r=;bN(-H$x`CKA8+(x%XeCnl7#AgSa`J=$|omF;>l=Y zYcZVlQfZ$^(C`kgy%}c>^0*jR<{)aDhVpGIU-pK?dOZk^{!no9o!WXklq^a4i}Ja& z4HbBX<~J)Y|LG2T2X&ZVax64e)lWXjx2kEo{v%ZH6wSp{tXI@7vM2ALS z_q4gdjHnMRQEErYWA}B7WTBk3(b6`LvqHQT39xIxuz&l|N4|4B2E#psz!v;W`J(m) zMw|z;=>U;WU>fN?r50dH;SUoaSL=ypnbc1}au5uSW)Q5zZEI+g%ozyIoxd7$i+{ zfXVq@0@X9G=NucAqPWdjd$*dtE866j0+?DN6mz%gb5 zkqR;X0}mc7YDwV8$ZV2ZW0fiHGu#x(#Dak7dg^KUx2@`t6g@91_Vk>;ANN8e-<46yh*(k|YoQ`4Z4yz* z#90t6Fg}wL$a`<1Z&I{SFF+fQr)`^5XsO2i9&b{rh|Pr~ovtC_jS#*;pR2d`XjD{* zQ-jSBUN(G0atq6UHKtApU?Jv0qGsrEcR8hBiy8X9GskM}l_4SxvL0<$(WUGF_zbVkUL0vT0d1)kykt4Zg`5 zvBcEdVum26=@6Khv9O}+1tBKScf7Q?aLo@qGZi2G^4Y(h7?GyR$e%6D0QB$7;pL(pa$gWwhv8%oGxnF7y z5T)<)W6-PN&e;|xx0D^V(>C=NJw-~xHoPm zo5RrBMY^bwlSFe~dyzfzBN;ktyzYDjYJ0pnOHIDY{LLqRF@Ykd)X+lm|Dfk@Y?*94 z8R)G-M2W5J)c@W;3%N}SYKQ>BKziI%LBZ|kCu8t|Ump*G;FRF&L`_OZxGzZ1Tz5v}2oO+Ap|1>@jMx#~O; zyHul0OKl<$PlX!J`w@DrKXG_Hl@QHoxKCsaueL`_m_vi?M1T+Fc@}4k$2EEfWjK7u zHQ8^N=gz!OfHFCZrQ^HkxJHz}6|^HqY1-H>9VU{{SJM<}$u@JUonw{7^g-GVd?BV^ z$0u0xS|9MAU<1U|hEgdDOqWIkJlmKR28Re|%;Z0rW$M_-Ypn5gCtJpT9Y)i*3!fS}PD(mSzLbJ12 z&ua!6B-WT@9BRKR+A9PKl%8|^3!|yeyD#EKX3cT!@U2b=jsPNjol1%ZJIGFw! zANTPg(99fQ1Ihct3X<#!4zs1&Fx1hh>63{+bO>RLrD~)N82s+PjK>4?B2M}hWk$>e z2B{v(pH6A0s1!WmFU{qAO^&bYjRqwf@ExH;qT5a5Hewz(OeBSIIKu}fWDHsJzzZh} z*9=&5XtkKrTK2!Q46_QOi3kq2O(q@qDf*q4j!3w=l488-CH!TSg&Z*>|Fo=e%Xy7& zL1>^5O$cpqk!Bd8Pg0nU?|@skY#I4F^4Z#viCeYM=9uuS%bkH~oClXDn%4YD=dpU1 zyK$)adRkD~7_Z|)y5k`CJ~>CKoE#tX`ZzKmX@pn$C_5Uqv6+zQ#y3iFYTzMNNDh=A z$8tn&6U|KpGxmmHXVn_-yr{`TOTe8B%cpgLMr z?Y{xOYLA{JL(Dy@K;CUmE|`@4`>EdNdhBX&C+5@p>&TRi>MjxQ#Pxx_c8u@A^QbI{ zK53`ASzaRi&Oh^8wexO)F?f83_`UFIw}h{fLU1iol=$(`3A9~mvPpM1=b`hPIL9v- z*GYxHFOzP&Fd=XHV&iWElcq^M+(@86tf=F3I6MJTO55E1!Cy@k5LSkWdZV{! zXv3BbsOpYgrdmiR!_M$v=~v2-sjwZRi5hF+s(vqNz;i4o;-)

    XE6W52@-@M?`y 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 literal 0 HcmV?d00001 diff --git a/package.json b/package.json index 38b02a4cc..7d3b89908 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ui-tars-desktop", - "version": "0.0.4", + "version": "0.0.5-beta.1", "private": true, "packageManager": "pnpm@9.10.0", "description": "A GUI Agent application based on UI-TARS(Vision-Lanuage Model) that allows you to control your computer using natural language.", @@ -46,6 +46,7 @@ "@ui-tars/action-parser": "workspace:*", "@ui-tars/shared": "workspace:*", "@ui-tars/utio": "workspace:*", + "@ui-tars/electron-ipc": "workspace:*", "async-retry": "^1.3.3", "big.js": "^6.2.2", "dotenv": "^16.4.7", @@ -59,8 +60,7 @@ "openai": "4.73.0", "sharp": "0.33.3", "update-electron-app": "^3.1.0", - "zustand": "^5.0.0", - "zutron": "^0.4.0" + "zustand": "^5.0.0" }, "peerDependencies": { "esbuild-register": "*", @@ -114,7 +114,7 @@ "clsx": "2.1.1", "copy-to-clipboard": "3.3.3", "cross-env": "^7.0.3", - "electron": "34.0.2", + "electron": "34.1.1", "electron-packager-languages": "0.5.0", "electron-playwright-helpers": "^1.7.1", "electron-vite": "^2.3.0", diff --git a/packages/electron-ipc/README.md b/packages/electron-ipc/README.md new file mode 100644 index 000000000..30b1ab4dc --- /dev/null +++ b/packages/electron-ipc/README.md @@ -0,0 +1,102 @@ +# UI-TARS Electron IPC Handlers + +A type-safe IPC (Inter-Process Communication) solution for Electron applications. + +## Features + +- Full TypeScript support with end-to-end type safety +- Zod schema validation support +- Simple and intuitive API +- Server-side direct invocation support + +## Installation + +```bash +npm install @ui-tars/electron-ipc +``` + +## Usage + +### Define Your Router + +```ts +// router.ts +import { initIpc } from '@ui-tars/electron-ipc/main'; +import { z } from 'zod'; + +const t = initIpc.create(); + +export const router = t.router({ + // Basic procedure without Zod + hello: t.procedure.input<{ a: string }>().handle(async ({ input }) => { + return 'hello' + input.a; + }), + + // Procedure with Zod schema validation + world: t.procedure.input(z.object({ a: z.string() })).handle(async ({ input }) => { + return input.a; + }) +}); + +// Export router type for client usage +export type AppRouter = typeof router; +``` + +### Main Process Setup + +```ts +// main.ts +import { registerIpcMain, createServer } from '@ui-tars/electron-ipc/main'; +import { router } from './router'; + +// Register IPC handlers +registerIpcMain(router); + +// Optional: Create server instance for direct invocation in main process +const server = createServer(router); +await server.hello({ a: '123' }); // => 'hello123' +``` + +### Renderer Process Usage + +```ts +// renderer.ts +import { createClient } from '@ui-tars/electron-ipc/renderer'; +import type { AppRouter } from './router'; + +const client = createClient({ + ipcInvoke: window.Electron.ipcRenderer.invoke, +}); + +// Call procedures from renderer process +await client.hello({ a: '123' }); // => 'hello123' +``` + +## API Reference + +### Main Process + +#### `initIpc.create()` +Creates a new IPC router builder instance. + +#### `registerIpcMain(router)` +Registers IPC handlers for the main process. + +#### `createServer(router)` +Creates a server instance for direct invocation in the main process. + +### Renderer Process + +#### `createClient(options)` +Creates a type-safe client for calling IPC procedures from the renderer process. + +## Type Safety + +The library provides full type safety between your main and renderer processes: +- Input types are validated at compile time +- Return types are properly inferred +- Zod schema validation provides runtime type safety + +## License + +Apache-2.0 diff --git a/packages/electron-ipc/package.json b/packages/electron-ipc/package.json new file mode 100644 index 000000000..90511de8b --- /dev/null +++ b/packages/electron-ipc/package.json @@ -0,0 +1,56 @@ +{ + "name": "@ui-tars/electron-ipc", + "version": "1.1.0", + "description": "Type-safe Electron inter-process communication for UI-TARS", + "repository": { + "type": "git", + "url": "https://github.com/bytedance/UI-TARS-desktop" + }, + "bugs": { + "url": "https://github.com/bytedance/UI-TARS-desktop/issues" + }, + "keywords": [ + "AI", + "Electron", + "IPC", + "UI-TARS" + ], + "exports": { + "./main": { + "types": "./src/main/index.ts", + "import": "./dist/main/index.mjs", + "require": "./dist/main/index.js" + }, + "./renderer": { + "types": "./src/renderer/index.ts", + "import": "./dist/renderer/index.mjs", + "require": "./dist/renderer/index.js" + } + }, + "scripts": { + "dev": "tsup --watch", + "prepare": "npm run build", + "build": "tsup", + "test": "vitest", + "prepack": "npm run build" + }, + "license": "Apache-2.0", + "files": [ + "src", + "dist" + ], + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org" + }, + "dependencies": {}, + "devDependencies": { + "electron": "^30.0.0", + "tsup": "^8.3.5", + "typescript": "^5.7.2", + "vitest": "^3.0.2" + }, + "peerDependencies": { + "electron": ">=26.0.0" + } +} diff --git a/packages/electron-ipc/src/main/createServer.ts b/packages/electron-ipc/src/main/createServer.ts new file mode 100644 index 000000000..433545ad0 --- /dev/null +++ b/packages/electron-ipc/src/main/createServer.ts @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { WebContents } from 'electron'; +import { RouterType, ServerFromRouter } from '../types'; + +export const createServer = (router: Router) => { + return new Proxy>({} as ServerFromRouter, { + get: (_, prop: string) => { + const route = router[prop]; + return (input: any, sender?: WebContents) => { + return route.handle({ context: { sender: sender || null }, input }); + }; + }, + }); +}; diff --git a/packages/electron-ipc/src/main/index.ts b/packages/electron-ipc/src/main/index.ts new file mode 100644 index 000000000..0fa2b0087 --- /dev/null +++ b/packages/electron-ipc/src/main/index.ts @@ -0,0 +1,7 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +export * from './initIpc'; +export * from './registerIpcMain'; +export * from './createServer'; diff --git a/packages/electron-ipc/src/main/initIpc.ts b/packages/electron-ipc/src/main/initIpc.ts new file mode 100644 index 000000000..3d220c564 --- /dev/null +++ b/packages/electron-ipc/src/main/initIpc.ts @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { HandleFunction, RouterType, ZodSchema } from '../types'; + +const createChainProdure = () => { + const chain = { + input(_schema?: ZodSchema) { + return createChainProdure(); + }, + + handle: (handle: HandleFunction) => { + return { handle }; + }, + }; + + return chain; +}; + +export const initIpc = { + create() { + return { + procedure: createChainProdure(), + router: (router: T & RouterType): T => { + return router; + }, + }; + }, +}; diff --git a/packages/electron-ipc/src/main/registerIpcMain.ts b/packages/electron-ipc/src/main/registerIpcMain.ts new file mode 100644 index 000000000..24d153c43 --- /dev/null +++ b/packages/electron-ipc/src/main/registerIpcMain.ts @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { ipcMain } from 'electron'; +import { RouterType } from '../types'; + +export const registerIpcMain = (router: RouterType) => { + for (const [name, route] of Object.entries(router)) { + ipcMain.handle(name, (e, payload) => { + return route.handle({ context: { sender: e.sender }, input: payload }); + }); + } +}; diff --git a/packages/electron-ipc/src/renderer/createClient.ts b/packages/electron-ipc/src/renderer/createClient.ts new file mode 100644 index 000000000..ff145ac2a --- /dev/null +++ b/packages/electron-ipc/src/renderer/createClient.ts @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { IpcRenderer } from 'electron'; +import type { ClientFromRouter, RouterType } from '../types'; + +export const createClient = ({ + ipcInvoke, +}: { + ipcInvoke: IpcRenderer['invoke']; +}) => { + return new Proxy>({} as ClientFromRouter, { + get: (_, prop) => { + const invoke = (input: TInput) => { + return ipcInvoke(prop.toString(), input); + }; + + return invoke; + }, + }); +}; diff --git a/src/renderer/src/hooks/useDispatch.ts b/packages/electron-ipc/src/renderer/index.ts similarity index 64% rename from src/renderer/src/hooks/useDispatch.ts rename to packages/electron-ipc/src/renderer/index.ts index f14fc5e83..282aa651b 100644 --- a/src/renderer/src/hooks/useDispatch.ts +++ b/packages/electron-ipc/src/renderer/index.ts @@ -2,4 +2,4 @@ * Copyright (c) 2025 Bytedance, Inc. and its affiliates. * SPDX-License-Identifier: Apache-2.0 */ -export const useDispatch = () => window.zutron.dispatch; +export * from './createClient'; diff --git a/packages/electron-ipc/src/types.ts b/packages/electron-ipc/src/types.ts new file mode 100644 index 000000000..c5384e241 --- /dev/null +++ b/packages/electron-ipc/src/types.ts @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import type { WebContents } from 'electron'; + +export type ZodSchema = { parse: (input: any) => TInput }; + +export type HandleFunction = (args: { + context: HandleContext; + input: TInput; +}) => Promise; + +export type HandleContext = { sender: WebContents | null }; + +export type RouterType = Record; + +export type ClientFromRouter = { + [K in keyof Router]: Router[K]['handle'] extends (options: { + context: any; + input: infer P; + }) => Promise + ? (input: P) => Promise + : never; +}; + +export type ServerFromRouter = { + [K in keyof Router]: Router[K]['handle'] extends (options: { + context: any; + input: infer P; + }) => Promise + ? (input: P) => Promise + : never; +}; diff --git a/packages/electron-ipc/test/index.test.ts b/packages/electron-ipc/test/index.test.ts new file mode 100644 index 000000000..6bbe332c8 --- /dev/null +++ b/packages/electron-ipc/test/index.test.ts @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; +import { initIpc, registerIpcMain, createServer } from '../src/main'; +import { createClient } from '../src/renderer'; +import { z } from 'zod'; + +vi.mock('electron', () => ({ + ipcMain: { handle: vi.fn() }, + ipcRenderer: { invoke: vi.fn() }, +})); + +describe('@ui-tars/electron-ipc', () => { + const mockIpcRenderer = { invoke: vi.fn() }; + + const mockWebContents = {}; + const mockEvent = { sender: mockWebContents }; + + beforeEach(() => { + vi.clearAllMocks(); + }); + + it('should handle basic IPC calls correctly', async () => { + const t = initIpc.create(); + + const router = t.router({ + hello: t.procedure + .input<{ name: string }>() + .handle(async ({ input }) => `Hello ${input.name}`), + }); + + registerIpcMain(router); + + const client = createClient({ ipcInvoke: mockIpcRenderer.invoke }); + + // trigger + await client.hello({ name: 'World' }); + + expect(mockIpcRenderer.invoke).toHaveBeenCalledWith('hello', { + name: 'World', + }); + }); + + it('should handle Zod validation of input correctly', async () => { + const t = initIpc.create(); + + // use Zod schema + const router = t.router({ + greet: t.procedure + .input(z.object({ age: z.number().min(0) })) + .handle(async ({ input }) => `Age: ${input.age}`), + }); + + registerIpcMain(router); + + const client = createClient({ ipcInvoke: mockIpcRenderer.invoke }); + + await client.greet({ age: 25 }); + + expect(mockIpcRenderer.invoke).toHaveBeenCalledWith('greet', { age: 25 }); + }); + + it('should handle server-side calls correctly', async () => { + const t = initIpc.create(); + + const router = t.router({ + greet: t.procedure + .input(z.object({ name: z.string() })) + .handle(async ({ input }) => `Hello ${input.name}`), + }); + + const server = createServer(router); + + const result = await server.greet({ name: 'Server' }); + + expect(result).toBe('Hello Server'); + }); +}); diff --git a/packages/electron-ipc/test/test.ts b/packages/electron-ipc/test/test.ts new file mode 100644 index 000000000..ca63bed8c --- /dev/null +++ b/packages/electron-ipc/test/test.ts @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { z } from 'zod'; +import { initIpc, registerIpcMain, createServer } from '../src/main'; + +const t = initIpc.create(); + +const router = t.router({ + hello: t.procedure + .input<{ a: string }>() + .handle(async ({ input }) => 'hello' + input.a), + world: t.procedure + .input(z.object({ b: z.string() })) + .handle(async ({ input }) => input.b), +}); + +export type AppRouter = typeof router; + +// main.ts +registerIpcMain(router); +const server = createServer(router); +await server.hello({ a: '123' }); + +// renderer.ts +import { createClient } from '../src/renderer'; + +const client = createClient({ + ipcInvoke: window.Electron.ipcRenderer.invoke, +}); + +await client.hello({ a: '123' }); +await client.world({ b: '123' }); diff --git a/packages/electron-ipc/tsconfig.json b/packages/electron-ipc/tsconfig.json new file mode 100644 index 000000000..5f8bd0f3b --- /dev/null +++ b/packages/electron-ipc/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "moduleResolution": "Bundler", + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "outDir": "./dist", + "strict": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "isolatedModules": true, + "skipLibCheck": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/electron-ipc/tsup.config.ts b/packages/electron-ipc/tsup.config.ts new file mode 100644 index 000000000..0ffca7300 --- /dev/null +++ b/packages/electron-ipc/tsup.config.ts @@ -0,0 +1,16 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { defineConfig } from 'tsup'; + +export default defineConfig((options) => { + return { + entry: ['src/**/*.ts', '!src/**/*.{test,bench}.ts'], + format: ['esm', 'cjs'], + dts: true, + clean: true, + bundle: false, + outDir: 'dist', + }; +}); diff --git a/packages/electron-ipc/vitest.config.mts b/packages/electron-ipc/vitest.config.mts new file mode 100644 index 000000000..1b73d9704 --- /dev/null +++ b/packages/electron-ipc/vitest.config.mts @@ -0,0 +1,27 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +import tsconfigPath from 'vite-tsconfig-paths'; +import { defineProject } from 'vitest/config'; + +const __dirname = fileURLToPath(new URL('.', import.meta.url)); + +export default defineProject({ + root: './', + test: { + globals: true, + setupFiles: [resolve(__dirname, '../../scripts/vitest-setup.ts')], + environment: 'node', + includeSource: [resolve(__dirname, '.')], + }, + + plugins: [ + tsconfigPath({ + projects: ['../../tsconfig.node.json'], + }), + ], +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9b84d8a96..74cbeeffe 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true @@ -16,13 +16,16 @@ importers: version: 2.2.2 '@computer-use/nut-js': specifier: ^4.2.0 - version: 4.2.0 + version: 4.2.0(encoding@0.1.13) '@electron-toolkit/utils': specifier: ^3.0.0 - version: 3.0.0(electron@34.0.2) + version: 3.0.0(electron@34.1.1) '@ui-tars/action-parser': specifier: workspace:* version: link:packages/action-parser + '@ui-tars/electron-ipc': + specifier: workspace:* + version: link:packages/electron-ipc '@ui-tars/shared': specifier: workspace:* version: link:packages/shared @@ -64,7 +67,7 @@ importers: version: 2.1.3 openai: specifier: 4.73.0 - version: 4.73.0(zod@3.24.1) + version: 4.73.0(encoding@0.1.13)(zod@3.24.2) sharp: specifier: 0.33.3 version: 0.33.3 @@ -73,17 +76,14 @@ importers: version: 3.1.1 zustand: specifier: ^5.0.0 - version: 5.0.3(@types/react@18.3.18)(react@18.3.1) - zutron: - specifier: ^0.4.0 - version: 0.4.0(electron@34.0.2)(zustand@5.0.3) + version: 5.0.3(@types/react@18.3.18)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) devDependencies: '@chakra-ui/react': specifier: 2.10.4 - version: 2.10.4(@emotion/react@11.14.0)(@emotion/styled@11.14.0)(@types/react@18.3.18)(framer-motion@11.18.2)(react-dom@18.3.1)(react@18.3.1) + version: 2.10.4(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(framer-motion@11.18.2(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@chakra-ui/theme-tools': specifier: ^2.2.6 - version: 2.2.6(@chakra-ui/styled-system@2.12.0)(react@18.3.1) + version: 2.2.6(@chakra-ui/styled-system@2.12.1(react@18.3.1))(react@18.3.1) '@changesets/cli': specifier: ^2.27.11 version: 2.27.12 @@ -95,7 +95,7 @@ importers: version: 19.7.1 '@electron-forge/cli': specifier: ^7.6.1 - version: 7.6.1 + version: 7.6.1(encoding@0.1.13) '@electron-forge/maker-deb': specifier: ^7.6.1 version: 7.6.1 @@ -122,7 +122,7 @@ importers: version: 7.6.1 '@electron-forge/publisher-github': specifier: ^7.6.1 - version: 7.6.1 + version: 7.6.1(encoding@0.1.13) '@electron-toolkit/eslint-config-prettier': specifier: ^2.0.0 version: 2.0.0(eslint@8.57.1)(prettier@3.5.0) @@ -131,7 +131,7 @@ importers: version: 2.0.0(eslint@8.57.1)(typescript@5.7.3) '@electron-toolkit/preload': specifier: ^3.0.1 - version: 3.0.1(electron@34.0.2) + version: 3.0.1(electron@34.1.1) '@electron-toolkit/tsconfig': specifier: ^1.0.1 version: 1.0.1(@types/node@20.17.17) @@ -146,7 +146,7 @@ importers: version: 11.14.0(@types/react@18.3.18)(react@18.3.1) '@emotion/styled': specifier: ^11.13.0 - version: 11.14.0(@emotion/react@11.14.0)(@types/react@18.3.18)(react@18.3.1) + version: 11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) '@playwright/test': specifier: ^1.49.1 version: 1.50.1 @@ -164,16 +164,16 @@ importers: version: 18.3.5(@types/react@18.3.18) '@typescript-eslint/eslint-plugin': specifier: ^5.0.0 - version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1)(typescript@5.7.3) + version: 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3) '@typescript-eslint/parser': specifier: ^5.0.0 version: 5.62.0(eslint@8.57.1)(typescript@5.7.3) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.14) + version: 4.3.4(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)) '@vitest/coverage-istanbul': specifier: ^3.0.3 - version: 3.0.5(vitest@3.0.5) + version: 3.0.5(vitest@3.0.5(@types/node@20.17.17)(sass-embedded@1.83.4)) clsx: specifier: 2.1.1 version: 2.1.1 @@ -184,8 +184,8 @@ importers: specifier: ^7.0.3 version: 7.0.3 electron: - specifier: 34.0.2 - version: 34.0.2 + specifier: 34.1.1 + version: 34.1.1 electron-packager-languages: specifier: 0.5.0 version: 0.5.0 @@ -194,13 +194,13 @@ importers: version: 1.7.1 electron-vite: specifier: ^2.3.0 - version: 2.3.0(vite@5.4.14) + version: 2.3.0(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)) eslint: specifier: ^8.57.0 version: 8.57.1 eslint-plugin-import: specifier: ^2.25.0 - version: 2.31.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1) + version: 2.31.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1) eslint-plugin-react: specifier: ^7.34.3 version: 7.37.4(eslint@8.57.1) @@ -209,13 +209,13 @@ importers: version: 2.4.6(react@18.3.1) framer-motion: specifier: ^11.11.9 - version: 11.18.2(react-dom@18.3.1)(react@18.3.1) + version: 11.18.2(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) husky: specifier: ^9.1.7 version: 9.1.7 lint-staged: specifier: ^14.0.1 - version: 14.0.1 + version: 14.0.1(enquirer@2.4.1) markdown-it: specifier: 14.1.0 version: 14.1.0 @@ -227,7 +227,7 @@ importers: version: 3.0.1 opencommit: specifier: ^3.2.5 - version: 3.2.5 + version: 3.2.5(encoding@0.1.13) prettier: specifier: ^3.3.2 version: 3.5.0 @@ -245,10 +245,10 @@ importers: version: 5.4.0(react@18.3.1) react-router: specifier: ^7.1.1 - version: 7.1.5(react-dom@18.3.1)(react@18.3.1) + version: 7.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-use: specifier: ^17.6.0 - version: 17.6.0(react-dom@18.3.1)(react@18.3.1) + version: 17.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -275,7 +275,7 @@ importers: version: 5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.7.3)(vite@5.4.14) + version: 5.1.4(typescript@5.7.3)(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)) vitest: specifier: ^3.0.2 version: 3.0.5(@types/node@20.17.17)(sass-embedded@1.83.4) @@ -288,7 +288,22 @@ importers: devDependencies: tsup: specifier: ^8.3.5 - version: 8.3.6(tsx@4.19.2)(typescript@5.7.3) + version: 8.3.6(jiti@2.4.2)(postcss@8.5.2)(tsx@4.19.2)(typescript@5.7.3) + typescript: + specifier: ^5.7.2 + version: 5.7.3 + vitest: + specifier: ^3.0.2 + version: 3.0.5(@types/node@20.17.17)(sass-embedded@1.83.4) + + packages/electron-ipc: + devDependencies: + electron: + specifier: ^30.0.0 + version: 30.5.1 + tsup: + specifier: ^8.3.5 + version: 8.3.6(jiti@2.4.2)(postcss@8.5.2)(tsx@4.19.2)(typescript@5.7.3) typescript: specifier: ^5.7.2 version: 5.7.3 @@ -300,7 +315,7 @@ importers: devDependencies: tsup: specifier: ^8.3.5 - version: 8.3.6(tsx@4.19.2)(typescript@5.7.3) + version: 8.3.6(jiti@2.4.2)(postcss@8.5.2)(tsx@4.19.2)(typescript@5.7.3) typescript: specifier: ^5.7.2 version: 5.7.3 @@ -309,376 +324,176 @@ importers: devDependencies: tsup: specifier: ^8.3.5 - version: 8.3.6(tsx@4.19.2)(typescript@5.7.3) + version: 8.3.6(jiti@2.4.2)(postcss@8.5.2)(tsx@4.19.2)(typescript@5.7.3) typescript: specifier: ^5.7.2 version: 5.7.3 packages: - /@actions/core@1.11.1: + '@actions/core@1.11.1': resolution: {integrity: sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==} - dependencies: - '@actions/exec': 1.1.1 - '@actions/http-client': 2.2.3 - dev: true - /@actions/exec@1.1.1: + '@actions/exec@1.1.1': resolution: {integrity: sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==} - dependencies: - '@actions/io': 1.1.3 - dev: true - /@actions/github@5.1.1: + '@actions/github@5.1.1': resolution: {integrity: sha512-Nk59rMDoJaV+mHCOJPXuvB1zIbomlKS0dmSIqPGxd0enAXBnOfn4VWF+CGtRCwXZG9Epa54tZA7VIRlJDS8A6g==} - dependencies: - '@actions/http-client': 2.2.3 - '@octokit/core': 3.6.0 - '@octokit/plugin-paginate-rest': 2.21.3(@octokit/core@3.6.0) - '@octokit/plugin-rest-endpoint-methods': 5.16.2(@octokit/core@3.6.0) - transitivePeerDependencies: - - encoding - dev: true - /@actions/http-client@2.2.3: + '@actions/http-client@2.2.3': resolution: {integrity: sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA==} - dependencies: - tunnel: 0.0.6 - undici: 5.28.5 - dev: true - /@actions/io@1.1.3: + '@actions/io@1.1.3': resolution: {integrity: sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==} - dev: true - /@ampproject/remapping@2.3.0: + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - dev: true - /@anthropic-ai/sdk@0.19.2: + '@anthropic-ai/sdk@0.19.2': resolution: {integrity: sha512-lsMl7IOFpFCZKUbNdLR0bYN8bevAmvw1Ak79Pp9RIFMwU6nMsMiWWhuBqccK8wi25h6skWE/lY/c0x29rEJFMw==} - dependencies: - '@types/node': 18.19.75 - '@types/node-fetch': 2.6.12 - abort-controller: 3.0.0 - agentkeepalive: 4.6.0 - form-data-encoder: 1.7.2 - formdata-node: 4.4.1 - node-fetch: 2.7.0 - web-streams-polyfill: 3.3.3 - transitivePeerDependencies: - - encoding - dev: true - /@azure-rest/core-client@1.4.0: + '@azure-rest/core-client@1.4.0': resolution: {integrity: sha512-ozTDPBVUDR5eOnMIwhggbnVmOrka4fXCs8n8mvUo4WLLc38kki6bAOByDoVZZPz/pZy2jMt2kwfpvy/UjALj6w==} engines: {node: '>=18.0.0'} - dependencies: - '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.9.0 - '@azure/core-rest-pipeline': 1.19.0 - '@azure/core-tracing': 1.2.0 - '@azure/core-util': 1.11.0 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - dev: true - /@azure/abort-controller@2.1.2: + '@azure/abort-controller@2.1.2': resolution: {integrity: sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==} engines: {node: '>=18.0.0'} - dependencies: - tslib: 2.8.1 - dev: true - /@azure/core-auth@1.9.0: + '@azure/core-auth@1.9.0': resolution: {integrity: sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw==} engines: {node: '>=18.0.0'} - dependencies: - '@azure/abort-controller': 2.1.2 - '@azure/core-util': 1.11.0 - tslib: 2.8.1 - dev: true - /@azure/core-rest-pipeline@1.19.0: + '@azure/core-rest-pipeline@1.19.0': resolution: {integrity: sha512-bM3308LRyg5g7r3Twprtqww0R/r7+GyVxj4BafcmVPo4WQoGt5JXuaqxHEFjw2o3rvFZcUPiqJMg6WuvEEeVUA==} engines: {node: '>=18.0.0'} - dependencies: - '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.9.0 - '@azure/core-tracing': 1.2.0 - '@azure/core-util': 1.11.0 - '@azure/logger': 1.1.4 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - dev: true - /@azure/core-sse@2.1.3: + '@azure/core-sse@2.1.3': resolution: {integrity: sha512-KSSdIKy8kvWCpYr8Hzpu22j3wcXsVTYE0IlgmI1T/aHvBDsLgV91y90UTfVWnuiuApRLCCVC4gS09ApBGOmYQA==} engines: {node: '>=18.0.0'} - dependencies: - tslib: 2.8.1 - dev: true - /@azure/core-tracing@1.2.0: + '@azure/core-tracing@1.2.0': resolution: {integrity: sha512-UKTiEJPkWcESPYJz3X5uKRYyOcJD+4nYph+KpfdPRnQJVrZfk0KJgdnaAWKfhsBBtAf/D58Az4AvCJEmWgIBAg==} engines: {node: '>=18.0.0'} - dependencies: - tslib: 2.8.1 - dev: true - /@azure/core-util@1.11.0: + '@azure/core-util@1.11.0': resolution: {integrity: sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g==} engines: {node: '>=18.0.0'} - dependencies: - '@azure/abort-controller': 2.1.2 - tslib: 2.8.1 - dev: true - /@azure/logger@1.1.4: + '@azure/logger@1.1.4': resolution: {integrity: sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ==} engines: {node: '>=18.0.0'} - dependencies: - tslib: 2.8.1 - dev: true - /@azure/openai@1.0.0-beta.13: + '@azure/openai@1.0.0-beta.13': resolution: {integrity: sha512-oHE5ScnPTXALmyEBgqokZlYVT7F76EfrKjMWF+YcFJdUxk9Adhvht2iL5v+QpmlAIMdkih1q8DkTs/tApDjBpw==} engines: {node: '>=18.0.0'} deprecated: 'The Azure OpenAI client library for JavaScript beta has been retired. Please migrate to the stable OpenAI SDK for JavaScript using the migration guide: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/openai/openai/MIGRATION.md.' - dependencies: - '@azure-rest/core-client': 1.4.0 - '@azure/core-auth': 1.9.0 - '@azure/core-rest-pipeline': 1.19.0 - '@azure/core-sse': 2.1.3 - '@azure/core-util': 1.11.0 - '@azure/logger': 1.1.4 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/code-frame@7.26.2: + '@babel/code-frame@7.26.2': resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.25.9 - js-tokens: 4.0.0 - picocolors: 1.1.1 - dev: true - /@babel/compat-data@7.26.8: + '@babel/compat-data@7.26.8': resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} engines: {node: '>=6.9.0'} - dev: true - /@babel/core@7.26.8: + '@babel/core@7.26.8': resolution: {integrity: sha512-l+lkXCHS6tQEc5oUpK28xBOZ6+HwaH7YwoYQbLFiYb4nS2/l1tKnZEtEWkD0GuiYdvArf9qBS0XlQGXzPMsNqQ==} engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.8 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.8) - '@babel/helpers': 7.26.7 - '@babel/parser': 7.26.8 - '@babel/template': 7.26.8 - '@babel/traverse': 7.26.8 - '@babel/types': 7.26.8 - '@types/gensync': 1.0.4 - convert-source-map: 2.0.0 - debug: 4.4.0 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/generator@7.26.8: + '@babel/generator@7.26.8': resolution: {integrity: sha512-ef383X5++iZHWAXX0SXQR6ZyQhw/0KtTkrTz61WXRhFM6dhpHulO/RJz79L8S6ugZHJkOOkUrUdxgdF2YiPFnA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/parser': 7.26.8 - '@babel/types': 7.26.8 - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.1.0 - dev: true - /@babel/helper-compilation-targets@7.26.5: + '@babel/helper-compilation-targets@7.26.5': resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/compat-data': 7.26.8 - '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.4 - lru-cache: 5.1.1 - semver: 6.3.1 - dev: true - /@babel/helper-module-imports@7.25.9: + '@babel/helper-module-imports@7.25.9': resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/traverse': 7.26.8 - '@babel/types': 7.26.8 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-module-transforms@7.26.0(@babel/core@7.26.8): + '@babel/helper-module-transforms@7.26.0': resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.8 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-plugin-utils@7.26.5: + '@babel/helper-plugin-utils@7.26.5': resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-string-parser@7.25.9: + '@babel/helper-string-parser@7.25.9': resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-validator-identifier@7.25.9: + '@babel/helper-validator-identifier@7.25.9': resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-validator-option@7.25.9: + '@babel/helper-validator-option@7.25.9': resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helpers@7.26.7: + '@babel/helpers@7.26.7': resolution: {integrity: sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.26.8 - '@babel/types': 7.26.8 - dev: true - /@babel/parser@7.26.8: + '@babel/parser@7.26.8': resolution: {integrity: sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw==} engines: {node: '>=6.0.0'} hasBin: true - dependencies: - '@babel/types': 7.26.8 - dev: true - /@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-arrow-functions@7.25.9': resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-react-jsx-self@7.25.9': resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-react-jsx-source@7.25.9': resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/runtime@7.26.7: + '@babel/runtime@7.26.7': resolution: {integrity: sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==} engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.1 - dev: true - /@babel/template@7.26.8: + '@babel/template@7.26.8': resolution: {integrity: sha512-iNKaX3ZebKIsCvJ+0jd6embf+Aulaa3vNBqZ41kM7iTWjx5qzWKXGHiJUW3+nTpQ18SG11hdF8OAzKrpXkb96Q==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.8 - '@babel/types': 7.26.8 - dev: true - /@babel/traverse@7.26.8: + '@babel/traverse@7.26.8': resolution: {integrity: sha512-nic9tRkjYH0oB2dzr/JoGIm+4Q6SuYeLEiIiZDwBscRMYFJ+tMAz98fuel9ZnbXViA2I0HVSSRRK8DW5fjXStA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.8 - '@babel/parser': 7.26.8 - '@babel/template': 7.26.8 - '@babel/types': 7.26.8 - debug: 4.4.0 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/types@7.26.8: + '@babel/types@7.26.8': resolution: {integrity: sha512-eUuWapzEGWFEpHFxgEaBG8e3n6S8L3MSu0oda755rOfabWPnh0Our1AozNFVUxGFIhbKgd1ksprsoDGMinTOTA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - dev: true - /@bufbuild/protobuf@2.2.3: + '@bufbuild/protobuf@2.2.3': resolution: {integrity: sha512-tFQoXHJdkEOSwj5tRIZSPNUuXK3RaR7T1nUrPgbYX1pUbvqqaaZAsfo+NXBPsz5rZMSKVFrgK1WL8Q/MSLvprg==} - dev: true - /@chakra-ui/anatomy@2.3.4: + '@chakra-ui/anatomy@2.3.4': resolution: {integrity: sha512-fFIYN7L276gw0Q7/ikMMlZxP7mvnjRaWJ7f3Jsf9VtDOi6eAYIBRrhQe6+SZ0PGmoOkRaBc7gSE5oeIbgFFyrw==} - dev: true - /@chakra-ui/anatomy@2.3.5: + '@chakra-ui/anatomy@2.3.5': resolution: {integrity: sha512-3im33cUOxCbISjaBlINE2u8BOwJSCdzpjCX0H+0JxK2xz26UaVA5xeI3NYHUoxDnr/QIrgfrllGxS0szYwOcyg==} - dev: true - /@chakra-ui/hooks@2.4.3(react@18.3.1): + '@chakra-ui/hooks@2.4.3': resolution: {integrity: sha512-Sr2zsoTZw3p7HbrUy4aLpTIkE2XXUelAUgg3NGwMzrmx75bE0qVyiuuTFOuyEzGxYVV2Fe8QtcKKilm6RwzTGg==} peerDependencies: react: '>=18' - dependencies: - '@chakra-ui/utils': 2.2.3(react@18.3.1) - '@zag-js/element-size': 0.31.1 - copy-to-clipboard: 3.3.3 - framesync: 6.1.2 - react: 18.3.1 - dev: true - /@chakra-ui/react@2.10.4(@emotion/react@11.14.0)(@emotion/styled@11.14.0)(@types/react@18.3.18)(framer-motion@11.18.2)(react-dom@18.3.1)(react@18.3.1): + '@chakra-ui/react@2.10.4': resolution: {integrity: sha512-XyRWnuZ1Uw7Mlj5pKUGO5/WhnIHP/EOrpy6lGZC1yWlkd0eIfIpYMZ1ALTZx4KPEdbBaes48dgiMT2ROCqLhkA==} peerDependencies: '@emotion/react': '>=11' @@ -686,662 +501,6934 @@ packages: framer-motion: '>=4.0.0' react: '>=18' react-dom: '>=18' - dependencies: - '@chakra-ui/hooks': 2.4.3(react@18.3.1) - '@chakra-ui/styled-system': 2.12.1(react@18.3.1) - '@chakra-ui/theme': 3.4.7(@chakra-ui/styled-system@2.12.1)(react@18.3.1) - '@chakra-ui/utils': 2.2.3(react@18.3.1) - '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) - '@emotion/styled': 11.14.0(@emotion/react@11.14.0)(@types/react@18.3.18)(react@18.3.1) - '@popperjs/core': 2.11.8 - '@zag-js/focus-visible': 0.31.1 - aria-hidden: 1.2.4 - framer-motion: 11.18.2(react-dom@18.3.1)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-fast-compare: 3.2.2 - react-focus-lock: 2.13.6(@types/react@18.3.18)(react@18.3.1) - react-remove-scroll: 2.6.3(@types/react@18.3.18)(react@18.3.1) - transitivePeerDependencies: - - '@types/react' - dev: true - - /@chakra-ui/styled-system@2.12.0(react@18.3.1): - resolution: {integrity: sha512-zoqLw1I2y4GlZ0LDoyw8o0JjoDOW6u0IwFPAoHuw0UMbP8glHUGvwEL1STug/i/GzBKw83yoF6ae41HIQvhMww==} - dependencies: - '@chakra-ui/utils': 2.2.2(react@18.3.1) - csstype: 3.1.3 - transitivePeerDependencies: - - react - dev: true - /@chakra-ui/styled-system@2.12.1(react@18.3.1): + '@chakra-ui/styled-system@2.12.1': resolution: {integrity: sha512-DQph1nDiCPtgze7nDe0a36530ByXb5VpPosKGyWMvKocVeZJcDtYG6XM0+V5a0wKuFBXsViBBRIFUTiUesJAcg==} - dependencies: - '@chakra-ui/utils': 2.2.3(react@18.3.1) - csstype: 3.1.3 - transitivePeerDependencies: - - react - dev: true - /@chakra-ui/theme-tools@2.2.6(@chakra-ui/styled-system@2.12.0)(react@18.3.1): + '@chakra-ui/theme-tools@2.2.6': resolution: {integrity: sha512-3UhKPyzKbV3l/bg1iQN9PBvffYp+EBOoYMUaeTUdieQRPFzo2jbYR0lNCxqv8h5aGM/k54nCHU2M/GStyi9F2A==} peerDependencies: '@chakra-ui/styled-system': '>=2.0.0' - dependencies: - '@chakra-ui/anatomy': 2.3.4 - '@chakra-ui/styled-system': 2.12.0(react@18.3.1) - '@chakra-ui/utils': 2.2.2(react@18.3.1) - color2k: 2.0.3 - transitivePeerDependencies: - - react - dev: true - /@chakra-ui/theme-tools@2.2.7(@chakra-ui/styled-system@2.12.1)(react@18.3.1): + '@chakra-ui/theme-tools@2.2.7': resolution: {integrity: sha512-K/VJd0QcnKik7m+qZTkggqNLep6+MPUu8IP5TUpHsnSM5R/RVjsJIR7gO8IZVAIMIGLLTIhGshHxeMekqv6LcQ==} peerDependencies: '@chakra-ui/styled-system': '>=2.0.0' - dependencies: - '@chakra-ui/anatomy': 2.3.5 - '@chakra-ui/styled-system': 2.12.1(react@18.3.1) - '@chakra-ui/utils': 2.2.3(react@18.3.1) - color2k: 2.0.3 - transitivePeerDependencies: - - react - dev: true - /@chakra-ui/theme@3.4.7(@chakra-ui/styled-system@2.12.1)(react@18.3.1): + '@chakra-ui/theme@3.4.7': resolution: {integrity: sha512-pfewthgZTFNUYeUwGvhPQO/FTIyf375cFV1AT8N1y0aJiw4KDe7YTGm7p0aFy4AwAjH2ydMgeEx/lua4tx8qyQ==} peerDependencies: '@chakra-ui/styled-system': '>=2.8.0' - dependencies: - '@chakra-ui/anatomy': 2.3.5 - '@chakra-ui/styled-system': 2.12.1(react@18.3.1) - '@chakra-ui/theme-tools': 2.2.7(@chakra-ui/styled-system@2.12.1)(react@18.3.1) - '@chakra-ui/utils': 2.2.3(react@18.3.1) - transitivePeerDependencies: - - react - dev: true - /@chakra-ui/utils@2.2.2(react@18.3.1): + '@chakra-ui/utils@2.2.2': resolution: {integrity: sha512-jUPLT0JzRMWxpdzH6c+t0YMJYrvc5CLericgITV3zDSXblkfx3DsYXqU11DJTSGZI9dUKzM1Wd0Wswn4eJwvFQ==} peerDependencies: react: '>=16.8.0' - dependencies: - '@types/lodash.mergewith': 4.6.9 - lodash.mergewith: 4.6.2 - react: 18.3.1 - dev: true - /@chakra-ui/utils@2.2.3(react@18.3.1): + '@chakra-ui/utils@2.2.3': resolution: {integrity: sha512-cldoCQuexZ6e07/9hWHKD4l1QXXlM1Nax9tuQOBvVf/EgwNZt3nZu8zZRDFlhAOKCTQDkmpLTTu+eXXjChNQOw==} peerDependencies: react: '>=16.8.0' - dependencies: - '@types/lodash.mergewith': 4.6.9 - lodash.mergewith: 4.6.2 - react: 18.3.1 - dev: true - /@changesets/apply-release-plan@7.0.8: + '@changesets/apply-release-plan@7.0.8': resolution: {integrity: sha512-qjMUj4DYQ1Z6qHawsn7S71SujrExJ+nceyKKyI9iB+M5p9lCL55afuEd6uLBPRpLGWQwkwvWegDHtwHJb1UjpA==} - dependencies: - '@changesets/config': 3.0.5 - '@changesets/get-version-range-type': 0.4.0 - '@changesets/git': 3.0.2 - '@changesets/should-skip-package': 0.1.1 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - detect-indent: 6.1.0 - fs-extra: 7.0.1 - lodash.startcase: 4.4.0 - outdent: 0.5.0 - prettier: 2.8.8 - resolve-from: 5.0.0 - semver: 7.7.1 - dev: true - /@changesets/assemble-release-plan@6.0.5: + '@changesets/assemble-release-plan@6.0.5': resolution: {integrity: sha512-IgvBWLNKZd6k4t72MBTBK3nkygi0j3t3zdC1zrfusYo0KpdsvnDjrMM9vPnTCLCMlfNs55jRL4gIMybxa64FCQ==} - dependencies: - '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.2 - '@changesets/should-skip-package': 0.1.1 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - semver: 7.7.1 - dev: true - /@changesets/changelog-git@0.2.0: + '@changesets/changelog-git@0.2.0': resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} - dependencies: - '@changesets/types': 6.0.0 - dev: true - /@changesets/cli@2.27.12: + '@changesets/cli@2.27.12': resolution: {integrity: sha512-9o3fOfHYOvBnyEn0mcahB7wzaA3P4bGJf8PNqGit5PKaMEFdsRixik+txkrJWd2VX+O6wRFXpxQL8j/1ANKE9g==} hasBin: true - dependencies: - '@changesets/apply-release-plan': 7.0.8 - '@changesets/assemble-release-plan': 6.0.5 - '@changesets/changelog-git': 0.2.0 - '@changesets/config': 3.0.5 - '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.2 - '@changesets/get-release-plan': 4.0.6 - '@changesets/git': 3.0.2 - '@changesets/logger': 0.1.1 - '@changesets/pre': 2.0.1 - '@changesets/read': 0.6.2 - '@changesets/should-skip-package': 0.1.1 - '@changesets/types': 6.0.0 - '@changesets/write': 0.3.2 - '@manypkg/get-packages': 1.1.3 - ansi-colors: 4.1.3 - ci-info: 3.9.0 - enquirer: 2.4.1 - external-editor: 3.1.0 - fs-extra: 7.0.1 - mri: 1.2.0 - p-limit: 2.3.0 - package-manager-detector: 0.2.9 - picocolors: 1.1.1 - resolve-from: 5.0.0 - semver: 7.7.1 - spawndamnit: 3.0.1 - term-size: 2.2.1 - dev: true - /@changesets/config@3.0.5: + '@changesets/config@3.0.5': resolution: {integrity: sha512-QyXLSSd10GquX7hY0Mt4yQFMEeqnO5z/XLpbIr4PAkNNoQNKwDyiSrx4yd749WddusH1v3OSiA0NRAYmH/APpQ==} - dependencies: - '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.2 - '@changesets/logger': 0.1.1 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - fs-extra: 7.0.1 - micromatch: 4.0.8 - dev: true - /@changesets/errors@0.2.0: + '@changesets/errors@0.2.0': resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} - dependencies: - extendable-error: 0.1.7 - dev: true - /@changesets/get-dependents-graph@2.1.2: + '@changesets/get-dependents-graph@2.1.2': resolution: {integrity: sha512-sgcHRkiBY9i4zWYBwlVyAjEM9sAzs4wYVwJUdnbDLnVG3QwAaia1Mk5P8M7kraTOZN+vBET7n8KyB0YXCbFRLQ==} - dependencies: - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - picocolors: 1.1.1 - semver: 7.7.1 - dev: true - /@changesets/get-release-plan@4.0.6: + '@changesets/get-release-plan@4.0.6': resolution: {integrity: sha512-FHRwBkY7Eili04Y5YMOZb0ezQzKikTka4wL753vfUA5COSebt7KThqiuCN9BewE4/qFGgF/5t3AuzXx1/UAY4w==} - dependencies: - '@changesets/assemble-release-plan': 6.0.5 - '@changesets/config': 3.0.5 - '@changesets/pre': 2.0.1 - '@changesets/read': 0.6.2 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - dev: true - /@changesets/get-version-range-type@0.4.0: + '@changesets/get-version-range-type@0.4.0': resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} - dev: true - /@changesets/git@3.0.2: + '@changesets/git@3.0.2': resolution: {integrity: sha512-r1/Kju9Y8OxRRdvna+nxpQIsMsRQn9dhhAZt94FLDeu0Hij2hnOozW8iqnHBgvu+KdnJppCveQwK4odwfw/aWQ==} - dependencies: - '@changesets/errors': 0.2.0 - '@manypkg/get-packages': 1.1.3 - is-subdir: 1.2.0 - micromatch: 4.0.8 - spawndamnit: 3.0.1 - dev: true - /@changesets/logger@0.1.1: + '@changesets/logger@0.1.1': resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} - dependencies: - picocolors: 1.1.1 - dev: true - /@changesets/parse@0.4.0: + '@changesets/parse@0.4.0': resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} - dependencies: - '@changesets/types': 6.0.0 - js-yaml: 3.14.1 - dev: true - /@changesets/pre@2.0.1: + '@changesets/pre@2.0.1': resolution: {integrity: sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ==} - dependencies: - '@changesets/errors': 0.2.0 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - fs-extra: 7.0.1 - dev: true - /@changesets/read@0.6.2: + '@changesets/read@0.6.2': resolution: {integrity: sha512-wjfQpJvryY3zD61p8jR87mJdyx2FIhEcdXhKUqkja87toMrP/3jtg/Yg29upN+N4Ckf525/uvV7a4tzBlpk6gg==} - dependencies: - '@changesets/git': 3.0.2 - '@changesets/logger': 0.1.1 - '@changesets/parse': 0.4.0 - '@changesets/types': 6.0.0 - fs-extra: 7.0.1 - p-filter: 2.1.0 - picocolors: 1.1.1 - dev: true - /@changesets/should-skip-package@0.1.1: + '@changesets/should-skip-package@0.1.1': resolution: {integrity: sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg==} - dependencies: - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - dev: true - /@changesets/types@4.1.0: + '@changesets/types@4.1.0': resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} - dev: true - /@changesets/types@6.0.0: + '@changesets/types@6.0.0': resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} - dev: true - /@changesets/write@0.3.2: + '@changesets/write@0.3.2': resolution: {integrity: sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==} - dependencies: - '@changesets/types': 6.0.0 - fs-extra: 7.0.1 - human-id: 1.0.2 - prettier: 2.8.8 - dev: true - /@clack/core@0.3.5: + '@clack/core@0.3.5': resolution: {integrity: sha512-5cfhQNH+1VQ2xLQlmzXMqUoiaH0lRBq9/CLW9lTyMbuKLC3+xEK01tHVvyut++mLOn5urSHmkm6I0Lg9MaJSTQ==} - dependencies: - picocolors: 1.1.1 - sisteransi: 1.0.5 - dev: true - /@clack/prompts@0.6.3: + '@clack/prompts@0.6.3': resolution: {integrity: sha512-AM+kFmAHawpUQv2q9+mcB6jLKxXGjgu/r2EQjEwujgpCdzrST6BJqYw00GRn56/L/Izw5U7ImoLmy00X/r80Pw==} - dependencies: - '@clack/core': 0.3.5 - picocolors: 1.1.1 - sisteransi: 1.0.5 - dev: true bundledDependencies: - is-unicode-supported - /@commitlint/cli@19.7.1(@types/node@20.17.17)(typescript@5.7.3): + '@commitlint/cli@19.7.1': resolution: {integrity: sha512-iObGjR1tE/PfDtDTEfd+tnRkB3/HJzpQqRTyofS2MPPkDn1mp3DBC8SoPDayokfAy+xKhF8+bwRCJO25Nea0YQ==} engines: {node: '>=v18'} hasBin: true - dependencies: - '@commitlint/format': 19.5.0 - '@commitlint/lint': 19.7.1 - '@commitlint/load': 19.6.1(@types/node@20.17.17)(typescript@5.7.3) - '@commitlint/read': 19.5.0 - '@commitlint/types': 19.5.0 - tinyexec: 0.3.2 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - typescript - dev: true - /@commitlint/config-conventional@19.7.1: + '@commitlint/config-conventional@19.7.1': resolution: {integrity: sha512-fsEIF8zgiI/FIWSnykdQNj/0JE4av08MudLTyYHm4FlLWemKoQvPNUYU2M/3tktWcCEyq7aOkDDgtjrmgWFbvg==} engines: {node: '>=v18'} - dependencies: - '@commitlint/types': 19.5.0 - conventional-changelog-conventionalcommits: 7.0.2 - dev: true - /@commitlint/config-validator@19.5.0: + '@commitlint/config-validator@19.5.0': resolution: {integrity: sha512-CHtj92H5rdhKt17RmgALhfQt95VayrUo2tSqY9g2w+laAXyk7K/Ef6uPm9tn5qSIwSmrLjKaXK9eiNuxmQrDBw==} engines: {node: '>=v18'} - dependencies: - '@commitlint/types': 19.5.0 - ajv: 8.17.1 - dev: true - /@commitlint/ensure@19.5.0: + '@commitlint/ensure@19.5.0': resolution: {integrity: sha512-Kv0pYZeMrdg48bHFEU5KKcccRfKmISSm9MvgIgkpI6m+ohFTB55qZlBW6eYqh/XDfRuIO0x4zSmvBjmOwWTwkg==} engines: {node: '>=v18'} - dependencies: - '@commitlint/types': 19.5.0 - lodash.camelcase: 4.3.0 - lodash.kebabcase: 4.1.1 - lodash.snakecase: 4.1.1 - lodash.startcase: 4.4.0 - lodash.upperfirst: 4.3.1 - dev: true - /@commitlint/execute-rule@19.5.0: + '@commitlint/execute-rule@19.5.0': resolution: {integrity: sha512-aqyGgytXhl2ejlk+/rfgtwpPexYyri4t8/n4ku6rRJoRhGZpLFMqrZ+YaubeGysCP6oz4mMA34YSTaSOKEeNrg==} engines: {node: '>=v18'} - dev: true - /@commitlint/format@19.5.0: + '@commitlint/format@19.5.0': resolution: {integrity: sha512-yNy088miE52stCI3dhG/vvxFo9e4jFkU1Mj3xECfzp/bIS/JUay4491huAlVcffOoMK1cd296q0W92NlER6r3A==} engines: {node: '>=v18'} - dependencies: - '@commitlint/types': 19.5.0 - chalk: 5.4.1 - dev: true - /@commitlint/is-ignored@19.7.1: + '@commitlint/is-ignored@19.7.1': resolution: {integrity: sha512-3IaOc6HVg2hAoGleRK3r9vL9zZ3XY0rf1RsUf6jdQLuaD46ZHnXBiOPTyQ004C4IvYjSWqJwlh0/u2P73aIE3g==} engines: {node: '>=v18'} - dependencies: - '@commitlint/types': 19.5.0 - semver: 7.7.1 - dev: true - /@commitlint/lint@19.7.1: + '@commitlint/lint@19.7.1': resolution: {integrity: sha512-LhcPfVjcOcOZA7LEuBBeO00o3MeZa+tWrX9Xyl1r9PMd5FWsEoZI9IgnGqTKZ0lZt5pO3ZlstgnRyY1CJJc9Xg==} engines: {node: '>=v18'} - dependencies: - '@commitlint/is-ignored': 19.7.1 - '@commitlint/parse': 19.5.0 - '@commitlint/rules': 19.6.0 - '@commitlint/types': 19.5.0 - dev: true - /@commitlint/load@19.6.1(@types/node@20.17.17)(typescript@5.7.3): + '@commitlint/load@19.6.1': resolution: {integrity: sha512-kE4mRKWWNju2QpsCWt428XBvUH55OET2N4QKQ0bF85qS/XbsRGG1MiTByDNlEVpEPceMkDr46LNH95DtRwcsfA==} engines: {node: '>=v18'} - dependencies: - '@commitlint/config-validator': 19.5.0 - '@commitlint/execute-rule': 19.5.0 - '@commitlint/resolve-extends': 19.5.0 - '@commitlint/types': 19.5.0 - chalk: 5.4.1 - cosmiconfig: 9.0.0(typescript@5.7.3) - cosmiconfig-typescript-loader: 6.1.0(@types/node@20.17.17)(cosmiconfig@9.0.0)(typescript@5.7.3) - lodash.isplainobject: 4.0.6 - lodash.merge: 4.6.2 - lodash.uniq: 4.5.0 - transitivePeerDependencies: - - '@types/node' - - typescript - dev: true - /@commitlint/message@19.5.0: + '@commitlint/message@19.5.0': resolution: {integrity: sha512-R7AM4YnbxN1Joj1tMfCyBryOC5aNJBdxadTZkuqtWi3Xj0kMdutq16XQwuoGbIzL2Pk62TALV1fZDCv36+JhTQ==} engines: {node: '>=v18'} - dev: true - /@commitlint/parse@19.5.0: + '@commitlint/parse@19.5.0': resolution: {integrity: sha512-cZ/IxfAlfWYhAQV0TwcbdR1Oc0/r0Ik1GEessDJ3Lbuma/MRO8FRQX76eurcXtmhJC//rj52ZSZuXUg0oIX0Fw==} engines: {node: '>=v18'} - dependencies: - '@commitlint/types': 19.5.0 - conventional-changelog-angular: 7.0.0 - conventional-commits-parser: 5.0.0 - dev: true - /@commitlint/read@19.5.0: + '@commitlint/read@19.5.0': resolution: {integrity: sha512-TjS3HLPsLsxFPQj6jou8/CZFAmOP2y+6V4PGYt3ihbQKTY1Jnv0QG28WRKl/d1ha6zLODPZqsxLEov52dhR9BQ==} engines: {node: '>=v18'} - dependencies: - '@commitlint/top-level': 19.5.0 - '@commitlint/types': 19.5.0 - git-raw-commits: 4.0.0 - minimist: 1.2.8 - tinyexec: 0.3.2 - dev: true - /@commitlint/resolve-extends@19.5.0: + '@commitlint/resolve-extends@19.5.0': resolution: {integrity: sha512-CU/GscZhCUsJwcKTJS9Ndh3AKGZTNFIOoQB2n8CmFnizE0VnEuJoum+COW+C1lNABEeqk6ssfc1Kkalm4bDklA==} engines: {node: '>=v18'} - dependencies: - '@commitlint/config-validator': 19.5.0 - '@commitlint/types': 19.5.0 - global-directory: 4.0.1 - import-meta-resolve: 4.1.0 - lodash.mergewith: 4.6.2 - resolve-from: 5.0.0 - dev: true - /@commitlint/rules@19.6.0: + '@commitlint/rules@19.6.0': resolution: {integrity: sha512-1f2reW7lbrI0X0ozZMesS/WZxgPa4/wi56vFuJENBmed6mWq5KsheN/nxqnl/C23ioxpPO/PL6tXpiiFy5Bhjw==} engines: {node: '>=v18'} - dependencies: - '@commitlint/ensure': 19.5.0 - '@commitlint/message': 19.5.0 - '@commitlint/to-lines': 19.5.0 - '@commitlint/types': 19.5.0 - dev: true - /@commitlint/to-lines@19.5.0: + '@commitlint/to-lines@19.5.0': resolution: {integrity: sha512-R772oj3NHPkodOSRZ9bBVNq224DOxQtNef5Pl8l2M8ZnkkzQfeSTr4uxawV2Sd3ui05dUVzvLNnzenDBO1KBeQ==} engines: {node: '>=v18'} - dev: true - /@commitlint/top-level@19.5.0: + '@commitlint/top-level@19.5.0': resolution: {integrity: sha512-IP1YLmGAk0yWrImPRRc578I3dDUI5A2UBJx9FbSOjxe9sTlzFiwVJ+zeMLgAtHMtGZsC8LUnzmW1qRemkFU4ng==} engines: {node: '>=v18'} - dependencies: - find-up: 7.0.0 - dev: true - /@commitlint/types@19.5.0: + '@commitlint/types@19.5.0': resolution: {integrity: sha512-DSHae2obMSMkAtTBSOulg5X7/z+rGLxcXQIkg3OmWvY6wifojge5uVMydfhUvs7yQj+V7jNmRZ2Xzl8GJyqRgg==} engines: {node: '>=v18'} - dependencies: - '@types/conventional-commits-parser': 5.0.1 - chalk: 5.4.1 - dev: true - /@computer-use/default-clipboard-provider@4.2.0(@computer-use/nut-js@4.2.0): + '@computer-use/default-clipboard-provider@4.2.0': resolution: {integrity: sha512-oi1MI1EvqPe6pLxgmS1W4xlyhJfQ5aRnL5P0ew1uhH6lgC3eE6+tqZkA9j9fdJnDrDadGvutLTxgb91P6Trmbg==} peerDependencies: '@computer-use/nut-js': ^4 - dependencies: - '@computer-use/nut-js': 4.2.0 - clipboardy: 2.3.0 - dev: false - /@computer-use/libnut-darwin@2.7.1: + '@computer-use/libnut-darwin@2.7.1': resolution: {integrity: sha512-7B/aPcIYS4a4S7D3IYIHSpZ4B4m8Z3CjlYq0efTr+/JYmEu+LlO67ZhPvisLKifhagxf7goqEfnphg1F4jq5jw==} engines: {node: '>=10.15.3'} cpu: [x64, arm64] os: [darwin, linux, win32] - dependencies: - bindings: 1.5.0 - optionalDependencies: - '@computer-use/node-mac-permissions': 2.2.2 - dev: false - /@computer-use/libnut-linux@2.7.1: + '@computer-use/libnut-linux@2.7.1': resolution: {integrity: sha512-QJD5URTFJ/2+JwBwRyajRF2BB+3eXpd4+t5btGeRVeiRQLKQ4lgorbMHySo6IrfAbSfnU1OVOrxAUygGxj0cFg==} engines: {node: '>=10.15.3'} cpu: [x64, arm64] os: [darwin, linux, win32] - dependencies: - bindings: 1.5.0 - optionalDependencies: - '@computer-use/node-mac-permissions': 2.2.1 - dev: false - /@computer-use/libnut-win32@2.7.1: + '@computer-use/libnut-win32@2.7.1': resolution: {integrity: sha512-nDvH5kP1zoO2cBtFYWV0om9xtTu523cc1LIk8r/wizqPrIAm0wCizTU+odF3Fi42zcKJWT6J+Pguy8fKrZyIuA==} engines: {node: '>=10.15.3'} cpu: [x64, arm64] os: [darwin, linux, win32] - dependencies: - bindings: 1.5.0 - optionalDependencies: - '@computer-use/node-mac-permissions': 2.2.1 - dev: false - /@computer-use/libnut@4.2.0(@computer-use/nut-js@4.2.0): + '@computer-use/libnut@4.2.0': resolution: {integrity: sha512-QtSDdS5mEgvXhRI17dH/P05gnnUuqVVZlWIrUq0fUSSdWV1VuGCwMvML6zxtWk8IeKn7OAJSw3BQJxa2zz3l6g==} engines: {node: '>=10.15.3'} peerDependencies: '@computer-use/nut-js': ^4 - dependencies: - '@computer-use/libnut-darwin': 2.7.1 - '@computer-use/libnut-linux': 2.7.1 - '@computer-use/libnut-win32': 2.7.1 - '@computer-use/nut-js': 4.2.0 - dev: false - /@computer-use/mac-screen-capture-permissions@1.0.2: + '@computer-use/mac-screen-capture-permissions@1.0.2': resolution: {integrity: sha512-nLZbUqn7KWAxhbubt6L+AUd+fa7euspHKRGjzgCdULNMSAK01EB0MCsg0jODXj4nbpck+0g6qF9g8hcowOiWKg==} engines: {node: '>=8'} - requiresBuild: true - dependencies: - electron-util: 0.17.2 - execa: 5.1.1 - macos-version: 5.2.1 - dev: false - /@computer-use/node-mac-permissions@2.2.1: + '@computer-use/node-mac-permissions@2.2.1': resolution: {integrity: sha512-fIrwuV1T0JqEwes3aCZpvPxW6oZufc9kRdRErHmYXVy8laEhxqoJrI9a/LQ3TG/aZFM/aX3A0bhCsDj9EC3kwg==} os: [darwin] - requiresBuild: true - dependencies: - bindings: 1.5.0 - node-addon-api: 5.0.0 - dev: false - optional: true - /@computer-use/node-mac-permissions@2.2.2: + '@computer-use/node-mac-permissions@2.2.2': resolution: {integrity: sha512-rgiEy3tR92qEBYEDaiNs1s7bBhMPQzHivSyQ+DpWV4l+Qosf+WoywHPUJqFwukVieB2NKpOTQx0iwZoJajLGMg==} os: [darwin] - dependencies: - bindings: 1.5.0 - node-addon-api: 5.0.0 - dev: false - /@computer-use/nut-js@4.2.0: + '@computer-use/nut-js@4.2.0': resolution: {integrity: sha512-Xyq5ixrAEdy6qu/mtX021XfU0Y//YFgL0CW1xF6L05KUCbJcZZqViiEeSPulhKfLdvXuhIjnhf+exMb2T6jQIg==} engines: {node: '>=16'} cpu: [x64, arm64] os: [linux, darwin, win32] - dependencies: - '@computer-use/default-clipboard-provider': 4.2.0(@computer-use/nut-js@4.2.0) - '@computer-use/libnut': 4.2.0(@computer-use/nut-js@4.2.0) - '@computer-use/provider-interfaces': 4.2.0 - '@computer-use/shared': 4.2.0 - jimp: 0.22.10 - node-abort-controller: 3.1.1 - transitivePeerDependencies: - - debug - - encoding - dev: false - /@computer-use/provider-interfaces@4.2.0: + '@computer-use/provider-interfaces@4.2.0': resolution: {integrity: sha512-IXf4GVnerK26lfqnERLhp+LhR05B+oeTCvTZ7EiVJKcxV0ofD+KZRrRZUg59GOOkKKxsQ+N5TF75F1SPine3xQ==} - dependencies: - '@computer-use/shared': 4.2.0 - transitivePeerDependencies: - - debug - - encoding - dev: false - /@computer-use/shared@4.2.0: + '@computer-use/shared@4.2.0': resolution: {integrity: sha512-8kYhhKS/icfuV87jKUbbpfim2Qx7KkX2YhhKOk1dI5ijx9qEhwJ7xp4r9UQ2PlPgAVd20aiKohr+hwfVTAje4g==} - dependencies: - jimp: 0.22.10 - node-abort-controller: 3.1.1 - transitivePeerDependencies: - - debug - - encoding - dev: false - /@cspotcode/source-map-support@0.8.1: + '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - dev: true - /@dqbd/tiktoken@1.0.20: + '@dqbd/tiktoken@1.0.20': resolution: {integrity: sha512-WsLzNYO1uzYOvIXunvwRcQObD4UsebirRnGzOuZc/x4oJ+0haEjdNxeeCfFaQami+Bai3u06QTt0/FWyYRsIhw==} - dev: true - /@electron-forge/cli@7.6.1: + '@electron-forge/cli@7.6.1': resolution: {integrity: sha512-Z9OwK5cAVDOj7MWWt9Gw0/4OJO/db+rshLSXg0I+ySv4xrJmZK1w6QEeOrm7eHjuAqKA+gzIaHsRsT0klCL2lg==} engines: {node: '>= 16.4.0'} hasBin: true - dependencies: - '@electron-forge/core': 7.6.1 - '@electron-forge/shared-types': 7.6.1 - '@electron/get': 3.1.0 - chalk: 4.1.2 - commander: 4.1.1 - debug: 4.4.0 - fs-extra: 10.1.0 - listr2: 7.0.2 - semver: 7.7.1 - transitivePeerDependencies: - - bluebird - - encoding - - supports-color - dev: true - /@electron-forge/core-utils@7.6.1: + '@electron-forge/core-utils@7.6.1': resolution: {integrity: sha512-RGA3azq0r5bGk8DDmVDP1EML071JEa44hpZEgSsv9zmdC86aTh0cANyDE6sVarAwLx4LQ+zrFE3KSb63j1HD5w==} engines: {node: '>= 16.4.0'} - dependencies: - '@electron-forge/shared-types': 7.6.1 - '@electron/rebuild': 3.7.1 - '@malept/cross-spawn-promise': 2.0.0 - chalk: 4.1.2 - debug: 4.4.0 - detect-package-manager: 3.0.2 - find-up: 5.0.0 - fs-extra: 10.1.0 - log-symbols: 4.1.0 - semver: 7.7.1 - transitivePeerDependencies: - - bluebird - - supports-color - dev: true - /@electron-forge/core@7.6.1: + '@electron-forge/core@7.6.1': resolution: {integrity: sha512-gODx2GcBl6Y6ls1DeBidhKC0nmI2/xfx89WcSEDa5M3NKm/bBQo1EPjpwG6F+2r4e8KDkY/KrRbIli+wL1zQ7w==} engines: {node: '>= 16.4.0'} - dependencies: - '@electron-forge/core-utils': 7.6.1 - '@electron-forge/maker-base': 7.6.1 - '@electron-forge/plugin-base': 7.6.1 - '@electron-forge/publisher-base': 7.6.1 - '@electron-forge/shared-types': 7.6.1 - '@electron-forge/template-base': 7.6.1 - '@electron-forge/template-vite': 7.6.1 - '@electron-forge/template-vite-typescript': 7.6.1 - '@electron-forge/template-webpack': 7.6.1 - '@electron-forge/template-webpack-typescript': 7.6.1 - '@electron-forge/tracer': 7.6.1 - '@electron/get': 3.1.0 - '@electron/packager': 18.3.6 - '@electron/rebuild': 3.7.1 - '@malept/cross-spawn-promise': 2.0.0 - chalk: 4.1.2 - debug: 4.4.0 - detect-package-manager: 3.0.2 - fast-glob: 3.3.3 - filenamify: 4.3.0 - find-up: 5.0.0 - fs-extra: 10.1.0 - got: 11.8.6 - interpret: 3.1.1 - listr2: 7.0.2 - lodash: 4.17.21 - log-symbols: 4.1.0 - node-fetch: 2.7.0 - rechoir: 0.8.0 + + '@electron-forge/maker-base@7.6.1': + resolution: {integrity: sha512-kA6k0z4fFbqfjV++bbYVC46TckiqyqIo/gTW/QexsT6xlutXUbnNevhoRPVfGigftSAjE6T26DwTogC9hNDkwg==} + engines: {node: '>= 16.4.0'} + + '@electron-forge/maker-deb@7.6.1': + resolution: {integrity: sha512-8pqwxwlMPddH6anfNL8vYE5v2mlPia+z9YcpnLlMbMjWo9ksRcxmrg2t3El9jvk1TkiPoqVcQzCNaQqYQaMoiw==} + engines: {node: '>= 16.4.0'} + + '@electron-forge/maker-dmg@7.6.1': + resolution: {integrity: sha512-D7cJRE6CGeovLZhu2dRqUm3w/AlkTURYJYgFuUsgwpBuviQKgJd8quZar6IeZ/l83y4Z1dghKb8D3aAj+bRvNQ==} + engines: {node: '>= 16.4.0'} + + '@electron-forge/maker-rpm@7.6.1': + resolution: {integrity: sha512-BShfmto+XTSA01pkZp10r2ktyruVfI24sGC+y4az1vbqkmX2qN9j0Xr+G/ZMHsm76XHju0N/e1Y2pqqu2JM8/A==} + engines: {node: '>= 16.4.0'} + + '@electron-forge/maker-squirrel@7.6.1': + resolution: {integrity: sha512-7EMLcl0QM5GfdY+enfauEqV6ZW14A1S6Eqoev812FXGTm88G8Ik0tPRw6SsIaI8R++YqxsbdCGTQjzdJWY0bJA==} + engines: {node: '>= 16.4.0'} + + '@electron-forge/maker-zip@7.6.1': + resolution: {integrity: sha512-omoBwoY99DpsgabVIu6Qva+r8kwCY04zDV+P60WN6x+JX/MF+Bk3zI271aH6raZaB+YSbvaed/LDG1QmEM9cTA==} + engines: {node: '>= 16.4.0'} + + '@electron-forge/plugin-auto-unpack-natives@7.6.1': + resolution: {integrity: sha512-sPFSVhlJBvEA70e0QNbYno5AYc8nvmKCgs4YqTwc24ONhIX0TwGAzjuJ7AZBOj88rhhY9+9Rkl9cONVa5GGZvA==} + engines: {node: '>= 16.4.0'} + + '@electron-forge/plugin-base@7.6.1': + resolution: {integrity: sha512-RWt+a8At55dVwEgr8BnnmBN05QzZq+DbOHNPeSJEM2d4ZyLUZXTkkwSF+ZMVk5mQCfIf75l+6BEzkXOcVvti2Q==} + engines: {node: '>= 16.4.0'} + + '@electron-forge/plugin-fuses@7.6.1': + resolution: {integrity: sha512-M37qQ3/fhvs50Cu5Q0APw7AAWmaS8zGWhbBCAGAeDt1jK0/d8vT6TVb3Qa91tqnIoAhz9DhdTemYrtieBSAF3Q==} + engines: {node: '>= 16.4.0'} + peerDependencies: + '@electron/fuses': '>=1.0.0' + + '@electron-forge/plugin-vite@7.6.1': + resolution: {integrity: sha512-+F9wMQRYwr104Jz4HPxBFzg0Tt76LiRF5XIz5d1SoCQ/wUM2oC0zxurQ/DqFcbf6pzeM/WZ1mpFx24bJRSVmJw==} + engines: {node: '>= 16.4.0'} + + '@electron-forge/publisher-base@7.6.1': + resolution: {integrity: sha512-VE0DJJYcMRGMxEbeC20q+ynCpra9oqkM6oXd8O1jRyTit9F+PZlscT/p5vLANrTW5vGrV6CXLyyloPxWxOf8DA==} + engines: {node: '>= 16.4.0'} + + '@electron-forge/publisher-github@7.6.1': + resolution: {integrity: sha512-7hhVIJ+isfSOzsYr9yR/cgJB4I/esxgUrxhdvB+VZMZos1jYddcQQxtGWjFsxcHqg/1aQSM/iIB14qgwZSVtmw==} + engines: {node: '>= 16.4.0'} + + '@electron-forge/shared-types@7.6.1': + resolution: {integrity: sha512-i6VdZGG8SYEBirpk+FP7bEMYtCNf9wBkK81IcPco8LP0KbsvgR8y7aUSVxG8DLoVwYB5yr0N9MYXOfNp1gkQ7A==} + engines: {node: '>= 16.4.0'} + + '@electron-forge/template-base@7.6.1': + resolution: {integrity: sha512-Pk65CIe6jYJa/hv25o0ueyuAOrRTi3qz92g5cYnj+YZzndNmrem1sNQvNKkavw0w0TKEUC5Y0EZ4ejLSYhVIQA==} + engines: {node: '>= 16.4.0'} + + '@electron-forge/template-vite-typescript@7.6.1': + resolution: {integrity: sha512-7aMq7/woR2xUNbCYCRa/dwinnjoYKuamn17hYBwmyRNJ+YKV9btVK6lq+WR4sJmFM5Fv3qOJlUwrNyxH+HoUCQ==} + engines: {node: '>= 16.4.0'} + + '@electron-forge/template-vite@7.6.1': + resolution: {integrity: sha512-DxRBCXgnpFQHueG3M6yDN1x2pTYDycHXIddLExUydA9bsrxVwlu8Oo7Mm5XOEltebITD/bZ0iQniOVkzUov37g==} + engines: {node: '>= 16.4.0'} + + '@electron-forge/template-webpack-typescript@7.6.1': + resolution: {integrity: sha512-ECEd70QOAi7r2ZibIU2U9rh0CVND7oJP5BnKRCP20uUCxdQdO7RTMRDXesm41VTRa1uZ+64pRdOQTDFHB6xitA==} + engines: {node: '>= 16.4.0'} + + '@electron-forge/template-webpack@7.6.1': + resolution: {integrity: sha512-8HXJ7eh5mjphC2tBfBOroEfM71DsWt3yrkEQMGzW6Lc5u2itkCQrEAINm3nuLscWrqLRk4ZsfT1f1VzdwAraXg==} + engines: {node: '>= 16.4.0'} + + '@electron-forge/tracer@7.6.1': + resolution: {integrity: sha512-nZzVzXT4xdueWYoSbgStS5LfcifW/e/WJj9VOt6xYpFxYOsQHpLkkCAc6nH0gxn+60kiU4FMU0p2kSQ2eQhWuA==} + engines: {node: '>= 14.17.5'} + + '@electron-forge/web-multi-logger@7.6.1': + resolution: {integrity: sha512-UdSZXDVUBQ4kVXFt8mChGz6wg6d+RDstP5EiPhy94lxskQeAielC0qStBl4QOzXhf3k104ZfOitW3TQBS59HKA==} + engines: {node: '>= 16.4.0'} + + '@electron-toolkit/eslint-config-prettier@2.0.0': + resolution: {integrity: sha512-L+uG1FvJcAZkPZpSi6B1pmdpyJFyOxWDTjr1Vs47vSryxv/EX1Ch6o4HVsachlDq3fMEkDgojuP2F3ZvVZMoLw==} + peerDependencies: + eslint: '>= 8.0.0' + prettier: '>= 3.0.0' + + '@electron-toolkit/eslint-config-ts@2.0.0': + resolution: {integrity: sha512-NGXadMyWH9+ZsgYe/u5E0mqK2qTDq01kKKnyo7oiq/7v/dWoMoPhqSkn69NZvt7WmnFNOm57l71fv6128mAx3Q==} + peerDependencies: + eslint: '>=8.56.0' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@electron-toolkit/preload@3.0.1': + resolution: {integrity: sha512-EzoQmpK8jqqU8YnM5jRe0GJjGVJPke2KtANqz8QtN2JPT96ViOvProBdK5C6riCm0j1T8jjAGVQCZLQy9OVoIA==} + peerDependencies: + electron: '>=13.0.0' + + '@electron-toolkit/tsconfig@1.0.1': + resolution: {integrity: sha512-M0Mol3odspvtCuheyujLNAW7bXq7KFNYVMRtpjFa4ZfES4MuklXBC7Nli/omvc+PRKlrklgAGx3l4VakjNo8jg==} + peerDependencies: + '@types/node': '*' + + '@electron-toolkit/utils@3.0.0': + resolution: {integrity: sha512-GaXHDhiT7KCvMJjXdp/QqpYinq69T/Pdl49Z1XLf8mKGf63dnsODMWyrmIjEQ0z/vG7dO8qF3fvmI6Eb2lUNZA==} + peerDependencies: + electron: '>=13.0.0' + + '@electron/asar@3.3.1': + resolution: {integrity: sha512-WtpC/+34p0skWZiarRjLAyqaAX78DofhDxnREy/V5XHfu1XEXbFCSSMcDQ6hNCPJFaPy8/NnUgYuf9uiCkvKPg==} + engines: {node: '>=10.12.0'} + hasBin: true + + '@electron/fuses@1.8.0': + resolution: {integrity: sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==} + hasBin: true + + '@electron/get@2.0.3': + resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==} + engines: {node: '>=12'} + + '@electron/get@3.1.0': + resolution: {integrity: sha512-F+nKc0xW+kVbBRhFzaMgPy3KwmuNTYX1fx6+FxxoSnNgwYX6LD7AKBTWkU0MQ6IBoe7dz069CNkR673sPAgkCQ==} + engines: {node: '>=14'} + + '@electron/node-gyp@https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2': + resolution: {tarball: https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2} + version: 10.2.0-electron.1 + engines: {node: '>=12.13.0'} + hasBin: true + + '@electron/notarize@2.5.0': + resolution: {integrity: sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==} + engines: {node: '>= 10.0.0'} + + '@electron/osx-sign@1.3.2': + resolution: {integrity: sha512-KqVlm9WMWq19lBpCXQoThC/Koaiji2zotUDYwZDaZlZZym+FXY9mQW8wN6sUQ93nkVc42f3TQ1S/XN9S1kjM5Q==} + engines: {node: '>=12.0.0'} + hasBin: true + + '@electron/packager@18.3.6': + resolution: {integrity: sha512-1eXHB5t+SQKvUiDpWGpvr90ZSSbXj+isrh3YbjCTjKT4bE4SQrKSBfukEAaBvp67+GXHFtCHjQgN9qSTFIge+Q==} + engines: {node: '>= 16.13.0'} + hasBin: true + + '@electron/rebuild@3.7.1': + resolution: {integrity: sha512-sKGD+xav4Gh25+LcLY0rjIwcCFTw+f/HU1pB48UVbwxXXRGaXEqIH0AaYKN46dgd/7+6kuiDXzoyAEvx1zCsdw==} + engines: {node: '>=12.13.0'} + hasBin: true + + '@electron/universal@2.0.1': + resolution: {integrity: sha512-fKpv9kg4SPmt+hY7SVBnIYULE9QJl8L3sCfcBsnqbJwwBwAeTLokJ9TRt9y7bK0JAzIW2y78TVVjvnQEms/yyA==} + engines: {node: '>=16.4'} + + '@electron/windows-sign@1.2.0': + resolution: {integrity: sha512-5zfLHfD6kGgsXzuYlKwlWWO8w6dboKy4dhd7rGnR4rQYumuDgPAF2TYjEa8LUi89KdHxtDy2btq02KvbjhK9Iw==} + engines: {node: '>=14.14'} + hasBin: true + + '@emnapi/runtime@1.3.1': + resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} + + '@emotion/babel-plugin@11.13.5': + resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} + + '@emotion/cache@11.14.0': + resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==} + + '@emotion/hash@0.9.2': + resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} + + '@emotion/is-prop-valid@1.3.1': + resolution: {integrity: sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==} + + '@emotion/memoize@0.9.0': + resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} + + '@emotion/react@11.14.0': + resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + + '@emotion/serialize@1.3.3': + resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==} + + '@emotion/sheet@1.4.0': + resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} + + '@emotion/styled@11.14.0': + resolution: {integrity: sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==} + peerDependencies: + '@emotion/react': ^11.0.0-rc.0 + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + + '@emotion/unitless@0.10.0': + resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} + + '@emotion/use-insertion-effect-with-fallbacks@1.2.0': + resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==} + peerDependencies: + react: '>=16.8.0' + + '@emotion/utils@1.4.2': + resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} + + '@emotion/weak-memoize@0.4.0': + resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.23.1': + resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.24.2': + resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.25.0': + resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.23.1': + resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.24.2': + resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.25.0': + resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.23.1': + resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.24.2': + resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.25.0': + resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.23.1': + resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.24.2': + resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.25.0': + resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.23.1': + resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.24.2': + resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.25.0': + resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.23.1': + resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.24.2': + resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.0': + resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.23.1': + resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.24.2': + resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.25.0': + resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.23.1': + resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.24.2': + resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.0': + resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.23.1': + resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.24.2': + resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.25.0': + resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.23.1': + resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.24.2': + resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.25.0': + resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.23.1': + resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.24.2': + resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.25.0': + resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.23.1': + resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.24.2': + resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.25.0': + resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.23.1': + resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.24.2': + resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.25.0': + resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.23.1': + resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.24.2': + resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.25.0': + resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.23.1': + resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.24.2': + resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.0': + resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.23.1': + resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.24.2': + resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.25.0': + resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.23.1': + resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.24.2': + resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.25.0': + resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.24.2': + resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-arm64@0.25.0': + resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.23.1': + resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.24.2': + resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.0': + resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.23.1': + resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-arm64@0.24.2': + resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-arm64@0.25.0': + resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.23.1': + resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.24.2': + resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.0': + resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.23.1': + resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.24.2': + resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.25.0': + resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.23.1': + resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.24.2': + resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.25.0': + resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.23.1': + resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.24.2': + resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.25.0': + resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.23.1': + resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.24.2': + resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.25.0': + resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@fastify/busboy@2.1.1': + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + + '@gar/promisify@1.1.3': + resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} + + '@google/generative-ai@0.11.5': + resolution: {integrity: sha512-DviMgrnljEKh6qkDT2pVFW+NEuVhggqBUoEnyy2PNL7l4ewxXRJubk3PctC9yPl1AdRIlhqP7E076QQt+IWuTg==} + engines: {node: '>=18.0.0'} + + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + + '@img/sharp-darwin-arm64@0.33.3': + resolution: {integrity: sha512-FaNiGX1MrOuJ3hxuNzWgsT/mg5OHG/Izh59WW2mk1UwYHUwtfbhk5QNKYZgxf0pLOhx9ctGiGa2OykD71vOnSw==} + engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.33.3': + resolution: {integrity: sha512-2QeSl7QDK9ru//YBT4sQkoq7L0EAJZA3rtV+v9p8xTKl4U1bUqTIaCnoC7Ctx2kCjQgwFXDasOtPTCT8eCTXvw==} + engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.0.2': + resolution: {integrity: sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==} + engines: {macos: '>=11', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.0.2': + resolution: {integrity: sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==} + engines: {macos: '>=10.13', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.0.2': + resolution: {integrity: sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==} + engines: {glibc: '>=2.26', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.0.2': + resolution: {integrity: sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==} + engines: {glibc: '>=2.28', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.0.2': + resolution: {integrity: sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==} + engines: {glibc: '>=2.28', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.0.2': + resolution: {integrity: sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==} + engines: {glibc: '>=2.26', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.0.2': + resolution: {integrity: sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==} + engines: {musl: '>=1.2.2', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.0.2': + resolution: {integrity: sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==} + engines: {musl: '>=1.2.2', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.33.3': + resolution: {integrity: sha512-Zf+sF1jHZJKA6Gor9hoYG2ljr4wo9cY4twaxgFDvlG0Xz9V7sinsPp8pFd1XtlhTzYo0IhDbl3rK7P6MzHpnYA==} + engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.33.3': + resolution: {integrity: sha512-Q7Ee3fFSC9P7vUSqVEF0zccJsZ8GiiCJYGWDdhEjdlOeS9/jdkyJ6sUSPj+bL8VuOYFSbofrW0t/86ceVhx32w==} + engines: {glibc: '>=2.28', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-s390x@0.33.3': + resolution: {integrity: sha512-vFk441DKRFepjhTEH20oBlFrHcLjPfI8B0pMIxGm3+yilKyYeHEVvrZhYFdqIseSclIqbQ3SnZMwEMWonY5XFA==} + engines: {glibc: '>=2.28', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.33.3': + resolution: {integrity: sha512-Q4I++herIJxJi+qmbySd072oDPRkCg/SClLEIDh5IL9h1zjhqjv82H0Seupd+q2m0yOfD+/fJnjSoDFtKiHu2g==} + engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.33.3': + resolution: {integrity: sha512-qnDccehRDXadhM9PM5hLvcPRYqyFCBN31kq+ErBSZtZlsAc1U4Z85xf/RXv1qolkdu+ibw64fUDaRdktxTNP9A==} + engines: {musl: '>=1.2.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.33.3': + resolution: {integrity: sha512-Jhchim8kHWIU/GZ+9poHMWRcefeaxFIs9EBqf9KtcC14Ojk6qua7ghKiPs0sbeLbLj/2IGBtDcxHyjCdYWkk2w==} + engines: {musl: '>=1.2.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.33.3': + resolution: {integrity: sha512-68zivsdJ0koE96stdUfM+gmyaK/NcoSZK5dV5CAjES0FUXS9lchYt8LAB5rTbM7nlWtxaU/2GON0HVN6/ZYJAQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [wasm32] + + '@img/sharp-win32-ia32@0.33.3': + resolution: {integrity: sha512-CyimAduT2whQD8ER4Ux7exKrtfoaUiVr7HG0zZvO0XTFn2idUWljjxv58GxNTkFb8/J9Ub9AqITGkJD6ZginxQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.33.3': + resolution: {integrity: sha512-viT4fUIDKnli3IfOephGnolMzhz5VaTvDRkYqtZxOMIoMQ4MrAziO7pT1nVnOt2FAm7qW5aa+CCc13aEY6Le0g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [x64] + os: [win32] + + '@inquirer/figures@1.0.10': + resolution: {integrity: sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw==} + engines: {node: '>=18'} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jimp/bmp@0.22.12': + resolution: {integrity: sha512-aeI64HD0npropd+AR76MCcvvRaa+Qck6loCOS03CkkxGHN5/r336qTM5HPUdHKMDOGzqknuVPA8+kK1t03z12g==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/core@0.22.12': + resolution: {integrity: sha512-l0RR0dOPyzMKfjUW1uebzueFEDtCOj9fN6pyTYWWOM/VS4BciXQ1VVrJs8pO3kycGYZxncRKhCoygbNr8eEZQA==} + + '@jimp/custom@0.22.12': + resolution: {integrity: sha512-xcmww1O/JFP2MrlGUMd3Q78S3Qu6W3mYTXYuIqFq33EorgYHV/HqymHfXy9GjiCJ7OI+7lWx6nYFOzU7M4rd1Q==} + + '@jimp/gif@0.22.12': + resolution: {integrity: sha512-y6BFTJgch9mbor2H234VSjd9iwAhaNf/t3US5qpYIs0TSbAvM02Fbc28IaDETj9+4YB4676sz4RcN/zwhfu1pg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/jpeg@0.22.12': + resolution: {integrity: sha512-Rq26XC/uQWaQKyb/5lksCTCxXhtY01NJeBN+dQv5yNYedN0i7iYu+fXEoRsfaJ8xZzjoANH8sns7rVP4GE7d/Q==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-blit@0.22.12': + resolution: {integrity: sha512-xslz2ZoFZOPLY8EZ4dC29m168BtDx95D6K80TzgUi8gqT7LY6CsajWO0FAxDwHz6h0eomHMfyGX0stspBrTKnQ==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-blur@0.22.12': + resolution: {integrity: sha512-S0vJADTuh1Q9F+cXAwFPlrKWzDj2F9t/9JAbUvaaDuivpyWuImEKXVz5PUZw2NbpuSHjwssbTpOZ8F13iJX4uw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-circle@0.22.12': + resolution: {integrity: sha512-SWVXx1yiuj5jZtMijqUfvVOJBwOifFn0918ou4ftoHgegc5aHWW5dZbYPjvC9fLpvz7oSlptNl2Sxr1zwofjTg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-color@0.22.12': + resolution: {integrity: sha512-xImhTE5BpS8xa+mAN6j4sMRWaUgUDLoaGHhJhpC+r7SKKErYDR0WQV4yCE4gP+N0gozD0F3Ka1LUSaMXrn7ZIA==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-contain@0.22.12': + resolution: {integrity: sha512-Eo3DmfixJw3N79lWk8q/0SDYbqmKt1xSTJ69yy8XLYQj9svoBbyRpSnHR+n9hOw5pKXytHwUW6nU4u1wegHNoQ==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-blit': '>=0.3.5' + '@jimp/plugin-resize': '>=0.3.5' + '@jimp/plugin-scale': '>=0.3.5' + + '@jimp/plugin-cover@0.22.12': + resolution: {integrity: sha512-z0w/1xH/v/knZkpTNx+E8a7fnasQ2wHG5ze6y5oL2dhH1UufNua8gLQXlv8/W56+4nJ1brhSd233HBJCo01BXA==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-crop': '>=0.3.5' + '@jimp/plugin-resize': '>=0.3.5' + '@jimp/plugin-scale': '>=0.3.5' + + '@jimp/plugin-crop@0.22.12': + resolution: {integrity: sha512-FNuUN0OVzRCozx8XSgP9MyLGMxNHHJMFt+LJuFjn1mu3k0VQxrzqbN06yIl46TVejhyAhcq5gLzqmSCHvlcBVw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-displace@0.22.12': + resolution: {integrity: sha512-qpRM8JRicxfK6aPPqKZA6+GzBwUIitiHaZw0QrJ64Ygd3+AsTc7BXr+37k2x7QcyCvmKXY4haUrSIsBug4S3CA==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-dither@0.22.12': + resolution: {integrity: sha512-jYgGdSdSKl1UUEanX8A85v4+QUm+PE8vHFwlamaKk89s+PXQe7eVE3eNeSZX4inCq63EHL7cX580dMqkoC3ZLw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-fisheye@0.22.12': + resolution: {integrity: sha512-LGuUTsFg+fOp6KBKrmLkX4LfyCy8IIsROwoUvsUPKzutSqMJnsm3JGDW2eOmWIS/jJpPaeaishjlxvczjgII+Q==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-flip@0.22.12': + resolution: {integrity: sha512-m251Rop7GN8W0Yo/rF9LWk6kNclngyjIJs/VXHToGQ6EGveOSTSQaX2Isi9f9lCDLxt+inBIb7nlaLLxnvHX8Q==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-rotate': '>=0.3.5' + + '@jimp/plugin-gaussian@0.22.12': + resolution: {integrity: sha512-sBfbzoOmJ6FczfG2PquiK84NtVGeScw97JsCC3rpQv1PHVWyW+uqWFF53+n3c8Y0P2HWlUjflEla2h/vWShvhg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-invert@0.22.12': + resolution: {integrity: sha512-N+6rwxdB+7OCR6PYijaA/iizXXodpxOGvT/smd/lxeXsZ/empHmFFFJ/FaXcYh19Tm04dGDaXcNF/dN5nm6+xQ==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-mask@0.22.12': + resolution: {integrity: sha512-4AWZg+DomtpUA099jRV8IEZUfn1wLv6+nem4NRJC7L/82vxzLCgXKTxvNvBcNmJjT9yS1LAAmiJGdWKXG63/NA==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-normalize@0.22.12': + resolution: {integrity: sha512-0So0rexQivnWgnhacX4cfkM2223YdExnJTTy6d06WbkfZk5alHUx8MM3yEzwoCN0ErO7oyqEWRnEkGC+As1FtA==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-print@0.22.12': + resolution: {integrity: sha512-c7TnhHlxm87DJeSnwr/XOLjJU/whoiKYY7r21SbuJ5nuH+7a78EW1teOaj5gEr2wYEd7QtkFqGlmyGXY/YclyQ==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-blit': '>=0.3.5' + + '@jimp/plugin-resize@0.22.12': + resolution: {integrity: sha512-3NyTPlPbTnGKDIbaBgQ3HbE6wXbAlFfxHVERmrbqAi8R3r6fQPxpCauA8UVDnieg5eo04D0T8nnnNIX//i/sXg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-rotate@0.22.12': + resolution: {integrity: sha512-9YNEt7BPAFfTls2FGfKBVgwwLUuKqy+E8bDGGEsOqHtbuhbshVGxN2WMZaD4gh5IDWvR+emmmPPWGgaYNYt1gA==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-blit': '>=0.3.5' + '@jimp/plugin-crop': '>=0.3.5' + '@jimp/plugin-resize': '>=0.3.5' + + '@jimp/plugin-scale@0.22.12': + resolution: {integrity: sha512-dghs92qM6MhHj0HrV2qAwKPMklQtjNpoYgAB94ysYpsXslhRTiPisueSIELRwZGEr0J0VUxpUY7HgJwlSIgGZw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-resize': '>=0.3.5' + + '@jimp/plugin-shadow@0.22.12': + resolution: {integrity: sha512-FX8mTJuCt7/3zXVoeD/qHlm4YH2bVqBuWQHXSuBK054e7wFRnRnbSLPUqAwSeYP3lWqpuQzJtgiiBxV3+WWwTg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-blur': '>=0.3.5' + '@jimp/plugin-resize': '>=0.3.5' + + '@jimp/plugin-threshold@0.22.12': + resolution: {integrity: sha512-4x5GrQr1a/9L0paBC/MZZJjjgjxLYrqSmWd+e+QfAEPvmRxdRoQ5uKEuNgXnm9/weHQBTnQBQsOY2iFja+XGAw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-color': '>=0.8.0' + '@jimp/plugin-resize': '>=0.8.0' + + '@jimp/plugins@0.22.12': + resolution: {integrity: sha512-yBJ8vQrDkBbTgQZLty9k4+KtUQdRjsIDJSPjuI21YdVeqZxYywifHl4/XWILoTZsjTUASQcGoH0TuC0N7xm3ww==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/png@0.22.12': + resolution: {integrity: sha512-Mrp6dr3UTn+aLK8ty/dSKELz+Otdz1v4aAXzV5q53UDD2rbB5joKVJ/ChY310B+eRzNxIovbUF1KVrUsYdE8Hg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/tiff@0.22.12': + resolution: {integrity: sha512-E1LtMh4RyJsoCAfAkBRVSYyZDTtLq9p9LUiiYP0vPtXyxX4BiYBUYihTLSBlCQg5nF2e4OpQg7SPrLdJ66u7jg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/types@0.22.12': + resolution: {integrity: sha512-wwKYzRdElE1MBXFREvCto5s699izFHNVvALUv79GXNbsOVqlwlOxlWJ8DuyOGIXoLP4JW/m30YyuTtfUJgMRMA==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/utils@0.22.12': + resolution: {integrity: sha512-yJ5cWUknGnilBq97ZXOyOS0HhsHOyAyjHwYfHxGbSyMTohgQI6sVyE8KPgDwH8HHW/nMKXk8TrSwAE71zt716Q==} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@malept/cross-spawn-promise@1.1.1': + resolution: {integrity: sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==} + engines: {node: '>= 10'} + + '@malept/cross-spawn-promise@2.0.0': + resolution: {integrity: sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==} + engines: {node: '>= 12.13.0'} + + '@manypkg/find-root@1.1.0': + resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + + '@manypkg/get-packages@1.1.3': + resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + + '@mistralai/mistralai@1.5.0': + resolution: {integrity: sha512-AIn8pwAwA/fDvEUvmkt+40zH1ZmfaG3Q7oUWl17GUEC1tU7ZPwYz8Cv9P59lyS1SisHdDSu81oknO7f1ywkz8Q==} + peerDependencies: + zod: '>= 3' + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@npmcli/fs@2.1.2': + resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + '@npmcli/move-file@2.0.1': + resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This functionality has been moved to @npmcli/fs + + '@octokit/auth-token@2.5.0': + resolution: {integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==} + + '@octokit/core@3.6.0': + resolution: {integrity: sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==} + + '@octokit/endpoint@6.0.12': + resolution: {integrity: sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==} + + '@octokit/graphql@4.8.0': + resolution: {integrity: sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==} + + '@octokit/openapi-types@12.11.0': + resolution: {integrity: sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==} + + '@octokit/plugin-paginate-rest@2.21.3': + resolution: {integrity: sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==} + peerDependencies: + '@octokit/core': '>=2' + + '@octokit/plugin-request-log@1.0.4': + resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==} + peerDependencies: + '@octokit/core': '>=3' + + '@octokit/plugin-rest-endpoint-methods@5.16.2': + resolution: {integrity: sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==} + peerDependencies: + '@octokit/core': '>=3' + + '@octokit/plugin-retry@3.0.9': + resolution: {integrity: sha512-r+fArdP5+TG6l1Rv/C9hVoty6tldw6cE2pRHNGmFPdyfrc696R6JjrQ3d7HdVqGwuzfyrcaLAKD7K8TX8aehUQ==} + + '@octokit/request-error@2.1.0': + resolution: {integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==} + + '@octokit/request@5.6.3': + resolution: {integrity: sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==} + + '@octokit/rest@18.12.0': + resolution: {integrity: sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==} + + '@octokit/types@6.41.0': + resolution: {integrity: sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==} + + '@octokit/webhooks-schemas@6.11.0': + resolution: {integrity: sha512-ekca2jZhb2vfQy43rjvJoV77IwEKvA42BmJ2m8H3WaNfG9BF05RodnFjh3MSOksNseoNO8w8IPLZ3d5546NH2w==} + + '@octokit/webhooks-types@6.11.0': + resolution: {integrity: sha512-AanzbulOHljrku1NGfafxdpTCfw2ENaWzH01N2vqQM+cUFbk868Cgh0xylz0JIM9BoKbfI++bdD6EYX0Q/UTEw==} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@pkgr/core@0.1.1': + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@playwright/test@1.50.1': + resolution: {integrity: sha512-Jii3aBg+CEDpgnuDxEp/h7BimHcUTDlpEtce89xEumlJ5ef2hqepZ+PWp1DDpYC/VO9fmWVI1IlEaoI5fK9FXQ==} + engines: {node: '>=18'} + hasBin: true + + '@popperjs/core@2.11.8': + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + + '@rollup/rollup-android-arm-eabi@4.34.6': + resolution: {integrity: sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.34.6': + resolution: {integrity: sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.34.6': + resolution: {integrity: sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.34.6': + resolution: {integrity: sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.34.6': + resolution: {integrity: sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.34.6': + resolution: {integrity: sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.34.6': + resolution: {integrity: sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.34.6': + resolution: {integrity: sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.34.6': + resolution: {integrity: sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.34.6': + resolution: {integrity: sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.34.6': + resolution: {integrity: sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.34.6': + resolution: {integrity: sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.34.6': + resolution: {integrity: sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.34.6': + resolution: {integrity: sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.34.6': + resolution: {integrity: sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.34.6': + resolution: {integrity: sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.34.6': + resolution: {integrity: sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.34.6': + resolution: {integrity: sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.34.6': + resolution: {integrity: sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==} + cpu: [x64] + os: [win32] + + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + + '@sindresorhus/is@4.6.0': + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} + + '@szmarczak/http-timer@4.0.6': + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} + + '@tokenizer/token@0.3.0': + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + + '@tootallnate/once@2.0.0': + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + + '@trivago/prettier-plugin-sort-imports@5.2.2': + resolution: {integrity: sha512-fYDQA9e6yTNmA13TLVSA+WMQRc5Bn/c0EUBditUHNfMMxN7M82c38b1kEggVE3pLpZ0FwkwJkUEKMiOi52JXFA==} + engines: {node: '>18.12'} + peerDependencies: + '@vue/compiler-sfc': 3.x + prettier: 2.x - 3.x + prettier-plugin-svelte: 3.x + svelte: 4.x || 5.x + peerDependenciesMeta: + '@vue/compiler-sfc': + optional: true + prettier-plugin-svelte: + optional: true + svelte: + optional: true + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@types/appdmg@0.5.5': + resolution: {integrity: sha512-G+n6DgZTZFOteITE30LnWj+HRVIGr7wMlAiLWOO02uJFWVEitaPU9JVXm9wJokkgshBawb2O1OykdcsmkkZfgg==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/cacheable-request@6.0.3': + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + + '@types/conventional-commits-parser@5.0.1': + resolution: {integrity: sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==} + + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/fs-extra@9.0.13': + resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} + + '@types/gensync@1.0.4': + resolution: {integrity: sha512-C3YYeRQWp2fmq9OryX+FoDy8nXS6scQ7dPptD8LnFDAUNcKWJjXQKDNJD3HVm+kOUsXhTOkpi69vI4EuAr95bA==} + + '@types/hoist-non-react-statics@3.3.6': + resolution: {integrity: sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==} + + '@types/http-cache-semantics@4.0.4': + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + + '@types/js-cookie@2.2.7': + resolution: {integrity: sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/keyv@3.1.4': + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + + '@types/lodash.mergewith@4.6.9': + resolution: {integrity: sha512-fgkoCAOF47K7sxrQ7Mlud2TH023itugZs2bUg8h/KzT+BnZNrR2jAOmaokbLunHNnobXVWOezAeNn/lZqwxkcw==} + + '@types/lodash@4.17.15': + resolution: {integrity: sha512-w/P33JFeySuhN6JLkysYUK2gEmy9kHHFN7E8ro0tkfmlDOgxBDzWEZ/J8cWA+fHqFevpswDTFZnDx+R9lbL6xw==} + + '@types/node-fetch@2.6.12': + resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@16.9.1': + resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==} + + '@types/node@18.19.75': + resolution: {integrity: sha512-UIksWtThob6ZVSyxcOqCLOUNg/dyO1Qvx4McgeuhrEtHTLFTf7BBhEazaE4K806FGTPtzd/2sE90qn4fVr7cyw==} + + '@types/node@20.17.17': + resolution: {integrity: sha512-/WndGO4kIfMicEQLTi/mDANUu/iVUhT7KboZPdEqqHQ4aTS+3qT3U5gIqWDFV+XouorjfgGqvKILJeHhuQgFYg==} + + '@types/parse-json@4.0.2': + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + + '@types/prop-types@15.7.14': + resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} + + '@types/react-dom@18.3.5': + resolution: {integrity: sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==} + peerDependencies: + '@types/react': ^18.0.0 + + '@types/react@18.3.18': + resolution: {integrity: sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==} + + '@types/responselike@1.0.3': + resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} + + '@types/semver@7.5.8': + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + + '@typescript-eslint/eslint-plugin@5.62.0': + resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/eslint-plugin@7.18.0': + resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@5.62.0': + resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@7.18.0': + resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@5.62.0': + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/scope-manager@7.18.0': + resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/type-utils@5.62.0': + resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/type-utils@7.18.0': + resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@5.62.0': + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/types@7.18.0': + resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/typescript-estree@5.62.0': + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/typescript-estree@7.18.0': + resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@5.62.0': + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + + '@typescript-eslint/utils@7.18.0': + resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + + '@typescript-eslint/visitor-keys@5.62.0': + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/visitor-keys@7.18.0': + resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + + '@vitejs/plugin-react@4.3.4': + resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 + + '@vitest/coverage-istanbul@3.0.5': + resolution: {integrity: sha512-yTcIwrpLHOyPP28PXXLRv1NzzKCrqDnmT7oVypTa1Q24P6OwGT4Wi6dXNEaJg33vmrPpoe81f31kwB5MtfM+ow==} + peerDependencies: + vitest: 3.0.5 + + '@vitest/expect@3.0.5': + resolution: {integrity: sha512-nNIOqupgZ4v5jWuQx2DSlHLEs7Q4Oh/7AYwNyE+k0UQzG7tSmjPXShUikn1mpNGzYEN2jJbTvLejwShMitovBA==} + + '@vitest/mocker@3.0.5': + resolution: {integrity: sha512-CLPNBFBIE7x6aEGbIjaQAX03ZZlBMaWwAjBdMkIf/cAn6xzLTiM3zYqO/WAbieEjsAZir6tO71mzeHZoodThvw==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@3.0.5': + resolution: {integrity: sha512-CjUtdmpOcm4RVtB+up8r2vVDLR16Mgm/bYdkGFe3Yj/scRfCpbSi2W/BDSDcFK7ohw8UXvjMbOp9H4fByd/cOA==} + + '@vitest/runner@3.0.5': + resolution: {integrity: sha512-BAiZFityFexZQi2yN4OX3OkJC6scwRo8EhRB0Z5HIGGgd2q+Nq29LgHU/+ovCtd0fOfXj5ZI6pwdlUmC5bpi8A==} + + '@vitest/snapshot@3.0.5': + resolution: {integrity: sha512-GJPZYcd7v8QNUJ7vRvLDmRwl+a1fGg4T/54lZXe+UOGy47F9yUfE18hRCtXL5aHN/AONu29NGzIXSVFh9K0feA==} + + '@vitest/spy@3.0.5': + resolution: {integrity: sha512-5fOzHj0WbUNqPK6blI/8VzZdkBlQLnT25knX0r4dbZI9qoZDf3qAdjoMmDcLG5A83W6oUUFJgUd0EYBc2P5xqg==} + + '@vitest/utils@3.0.5': + resolution: {integrity: sha512-N9AX0NUoUtVwKwy21JtwzaqR5L5R5A99GAbrHfCCXK1lp593i/3AZAXhSP43wRQuxYsflrdzEfXZFo1reR1Nkg==} + + '@xmldom/xmldom@0.8.10': + resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} + engines: {node: '>=10.0.0'} + + '@xobotyi/scrollbar-width@1.9.5': + resolution: {integrity: sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==} + + '@zag-js/dom-query@0.31.1': + resolution: {integrity: sha512-oiuohEXAXhBxpzzNm9k2VHGEOLC1SXlXSbRPcfBZ9so5NRQUA++zCE7cyQJqGLTZR0t3itFLlZqDbYEXRrefwg==} + + '@zag-js/element-size@0.31.1': + resolution: {integrity: sha512-4T3yvn5NqqAjhlP326Fv+w9RqMIBbNN9H72g5q2ohwzhSgSfZzrKtjL4rs9axY/cw9UfMfXjRjEE98e5CMq7WQ==} + + '@zag-js/focus-visible@0.31.1': + resolution: {integrity: sha512-dbLksz7FEwyFoANbpIlNnd3bVm0clQSUsnP8yUVQucStZPsuWjCrhL2jlAbGNrTrahX96ntUMXHb/sM68TibFg==} + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + engines: {node: '>= 14'} + + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-escapes@5.0.0: + resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} + engines: {node: '>=12'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-base@1.1.0: + resolution: {integrity: sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + appdmg@0.6.6: + resolution: {integrity: sha512-GRmFKlCG+PWbcYF4LUNonTYmy0GjguDy6Jh9WP8mpd0T6j80XIJyXBiWlD0U+MLNhqV9Nhx49Gl9GpVToulpLg==} + engines: {node: '>=8.5'} + os: [darwin] + hasBin: true + + arch@2.2.0: + resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-hidden@1.2.4: + resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} + engines: {node: '>=10'} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + array-ify@1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} + + array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + + async-retry@1.3.3: + resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} + + async@1.5.2: + resolution: {integrity: sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + + atomically@2.0.3: + resolution: {integrity: sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==} + + author-regex@1.0.0: + resolution: {integrity: sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g==} + engines: {node: '>=0.8'} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axios@1.7.9: + resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} + + babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base32-encode@1.2.0: + resolution: {integrity: sha512-cHFU8XeRyx0GgmoWi5qHMCVRiqU6J3MHWxVgun7jggCBUpVzm1Ir7M9dYr2whjSNc3tFeXfQ/oZjQu/4u55h9A==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + before-after-hook@2.2.3: + resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} + + better-path-resolve@1.0.0: + resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} + engines: {node: '>=4'} + + big.js@6.2.2: + resolution: {integrity: sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + + bmp-js@0.1.0: + resolution: {integrity: sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==} + + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + boolean@3.2.0: + resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + bottleneck@2.19.5: + resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} + + bplist-creator@0.0.8: + resolution: {integrity: sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-builder@0.2.0: + resolution: {integrity: sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==} + + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + buffer-equal@0.0.1: + resolution: {integrity: sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==} + engines: {node: '>=0.4.0'} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bundle-require@5.1.0: + resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + esbuild: '>=0.18' + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + cacache@16.1.3: + resolution: {integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + cacheable-lookup@5.0.4: + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} + + cacheable-request@7.0.4: + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} + engines: {node: '>=8'} + + call-bind-apply-helpers@1.0.1: + resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.3: + resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001699: + resolution: {integrity: sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w==} + + centra@2.7.0: + resolution: {integrity: sha512-PbFMgMSrmgx6uxCdm57RUos9Tc3fclMvhLSATYN39XsDV29B89zZ3KA89jmY0vwSGazyU+uerqwa6t+KaodPcg==} + + chai@5.1.2: + resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} + engines: {node: '>=12'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + cleye@1.3.4: + resolution: {integrity: sha512-Rd6M8ecBDtdYdPR22h6gG37lPqqJ3hSOaplaGwuGYey9xKmEElOvTgupqfyLSlISshroRpVhYjDtW3vwNUNBaQ==} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-truncate@3.1.0: + resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + clipboardy@2.3.0: + resolution: {integrity: sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==} + engines: {node: '>=8'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone-response@1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + color-convert@0.5.3: + resolution: {integrity: sha512-RwBeO/B/vZR3dfKL1ye/vx8MHZ40ugzpyfeVG5GsiuGnrlMWe2o8wxBbLCpw9CsxV+wHuzYlCiWnybrIA0ling==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color2k@2.0.3: + resolution: {integrity: sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==} + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + colorjs.io@0.5.2: + resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@11.0.0: + resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} + engines: {node: '>=16'} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + commander@5.1.0: + resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} + engines: {node: '>= 6'} + + commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + + compare-func@2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + + compare-version@0.1.2: + resolution: {integrity: sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==} + engines: {node: '>=0.10.0'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + conf@13.1.0: + resolution: {integrity: sha512-Bi6v586cy1CoTFViVO4lGTtx780lfF96fUmS1lSX6wpZf6330NvHUu6fReVuDP1de8Mg0nkZb01c8tAQdz1o3w==} + engines: {node: '>=18'} + + consola@3.4.0: + resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==} + engines: {node: ^14.18.0 || >=16.10.0} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + conventional-changelog-angular@7.0.0: + resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} + engines: {node: '>=16'} + + conventional-changelog-conventionalcommits@7.0.2: + resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} + engines: {node: '>=16'} + + conventional-commits-parser@5.0.0: + resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} + engines: {node: '>=16'} + hasBin: true + + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + engines: {node: '>= 0.6'} + + cookie@1.0.2: + resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + engines: {node: '>=18'} + + copy-to-clipboard@3.3.3: + resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cosmiconfig-typescript-loader@6.1.0: + resolution: {integrity: sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==} + engines: {node: '>=v18'} + peerDependencies: + '@types/node': '*' + cosmiconfig: '>=9' + typescript: '>=5' + + cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cross-dirname@0.1.0: + resolution: {integrity: sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==} + + cross-env@7.0.3: + resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} + engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + hasBin: true + + cross-spawn@6.0.6: + resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} + engines: {node: '>=4.8'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + cross-zip@4.0.1: + resolution: {integrity: sha512-n63i0lZ0rvQ6FXiGQ+/JFCKAUyPFhLQYJIqKaa+tSJtfKeULF/IDNDAbdnSIxgS4NTuw2b0+lj8LzfITuq+ZxQ==} + engines: {node: '>=12.10'} + + crypto@1.0.1: + resolution: {integrity: sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==} + deprecated: This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in. + + css-in-js-utils@3.1.0: + resolution: {integrity: sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==} + + css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + dargs@8.1.0: + resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} + engines: {node: '>=12'} + + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + + debounce-fn@6.0.0: + resolution: {integrity: sha512-rBMW+F2TXryBwB54Q0d8drNEI+TfoS9JpNTAoVpukbWEhjXQq4rySFYLaqXMFXwdv61Zb2OHtj5bviSoimqxRQ==} + engines: {node: '>=18'} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@2.2.1: + resolution: {integrity: sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==} + engines: {node: '>=0.10.0'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + deprecation@2.3.1: + resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + + detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + + detect-package-manager@3.0.2: + resolution: {integrity: sha512-8JFjJHutStYrfWwzfretQoyNGoZVW1Fsrp4JO9spa7h/fBfwgTMEIy4/LBzRDGsxwVPHU0q+T9YvwLDJoOApLQ==} + engines: {node: '>=12'} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + dir-compare@4.2.0: + resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dom-walk@0.1.2: + resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} + + dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + + dot-prop@9.0.0: + resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} + engines: {node: '>=18'} + + dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} + engines: {node: '>=12'} + + ds-store@0.1.6: + resolution: {integrity: sha512-kY21M6Lz+76OS3bnCzjdsJSF7LBpLYGCVfavW8TgQD2XkcqIZ86W0y9qUDZu6fp7SIZzqosMDW2zi7zVFfv4hw==} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + electron-debug@3.2.0: + resolution: {integrity: sha512-7xZh+LfUvJ52M9rn6N+tPuDw6oRAjxUj9SoxAZfJ0hVCXhZCsdkrSt7TgXOiWiEOBgEV8qwUIO/ScxllsPS7ow==} + + electron-devtools-installer@3.2.1: + resolution: {integrity: sha512-FaCi+oDCOBTw0gJUsuw5dXW32b2Ekh5jO8lI1NRCQigo3azh2VogsIi0eelMVrP1+LkN/bewyH3Xoo1USjO0eQ==} + + electron-installer-common@0.10.4: + resolution: {integrity: sha512-8gMNPXfAqUE5CfXg8RL0vXpLE9HAaPkgLXVoHE3BMUzogMWenf4LmwQ27BdCUrEhkjrKl+igs2IHJibclR3z3Q==} + engines: {node: '>= 10.0.0'} + + electron-installer-debian@3.2.0: + resolution: {integrity: sha512-58ZrlJ1HQY80VucsEIG9tQ//HrTlG6sfofA3nRGr6TmkX661uJyu4cMPPh6kXW+aHdq/7+q25KyQhDrXvRL7jw==} + engines: {node: '>= 10.0.0'} + os: [darwin, linux] + hasBin: true + + electron-installer-dmg@5.0.1: + resolution: {integrity: sha512-qOa1aAQdX57C+vzhDk3549dd/PRlNL4F8y736MTD1a43qptD+PvHY97Bo9gSf+OZ8iUWE7BrYSpk/FgLUe40EA==} + engines: {node: '>= 16'} + hasBin: true + + electron-installer-redhat@3.4.0: + resolution: {integrity: sha512-gEISr3U32Sgtj+fjxUAlSDo3wyGGq6OBx7rF5UdpIgbnpUvMN4W5uYb0ThpnAZ42VEJh/3aODQXHbFS4f5J3Iw==} + engines: {node: '>= 10.0.0'} + os: [darwin, linux] + hasBin: true + + electron-is-accelerator@0.1.2: + resolution: {integrity: sha512-fLGSAjXZtdn1sbtZxx52+krefmtNuVwnJCV2gNiVt735/ARUboMl8jnNC9fZEqQdlAv2ZrETfmBUsoQci5evJA==} + + electron-is-dev@1.2.0: + resolution: {integrity: sha512-R1oD5gMBPS7PVU8gJwH6CtT0e6VSoD0+SzSnYpNm+dBkcijgA+K7VAMHDfnRq/lkKPZArpzplTW6jfiMYosdzw==} + + electron-localshortcut@3.2.1: + resolution: {integrity: sha512-DWvhKv36GsdXKnaFFhEiK8kZZA+24/yFLgtTwJJHc7AFgDjNRIBJZ/jq62Y/dWv9E4ypYwrVWN2bVrCYw1uv7Q==} + + electron-log@5.2.4: + resolution: {integrity: sha512-iX12WXc5XAaKeHg2QpiFjVwL+S1NVHPFd3V5RXtCmKhpAzXsVQnR3UEc0LovM6p6NkUQxDWnkdkaam9FNUVmCA==} + engines: {node: '>= 14'} + + electron-packager-languages@0.5.0: + resolution: {integrity: sha512-ryJsVXgHq0+7eZpJ+YSUQNYUnH4yPq2J4gXtmP9HEq8N6PHtygLEmohKMm4VrwI5qTir4HRCxy+O1UNo8mbwgg==} + engines: {node: '>6.0.0'} + + electron-playwright-helpers@1.7.1: + resolution: {integrity: sha512-S9mo7LfpERgub2WIuYVPpib4XKFeAqBP+mxYf5Bv7E0B5GUB+LUbSj6Fpu39h18Ar635Nf9nQYTmypjuvaYJng==} + + electron-squirrel-startup@1.0.1: + resolution: {integrity: sha512-sTfFIHGku+7PsHLJ7v0dRcZNkALrV+YEozINTW8X1nM//e5O3L+rfYuvSW00lmGHnYmUjARZulD8F2V8ISI9RA==} + + electron-store@10.0.1: + resolution: {integrity: sha512-Ok0bF13WWdTzZi9rCtPN8wUfwx+yDMmV6PAnCMqjNRKEXHmklW/rV+6DofV/Vf5qoAh+Bl9Bj7dQ+0W+IL2psg==} + engines: {node: '>=20'} + + electron-to-chromium@1.5.97: + resolution: {integrity: sha512-HKLtaH02augM7ZOdYRuO19rWDeY+QSJ1VxnXFa/XDFLf07HvM90pALIJFgrO+UVaajI3+aJMMpojoUTLZyQ7JQ==} + + electron-util@0.17.2: + resolution: {integrity: sha512-4Kg/aZxJ2BZklgyfH86px/D2GyROPyIcnAZar+7KiNmKI2I5l09pwQTP7V95zM3FVhgDQwV9iuJta5dyEvuWAw==} + + electron-vite@2.3.0: + resolution: {integrity: sha512-lsN2FymgJlp4k6MrcsphGqZQ9fKRdJKasoaiwIrAewN1tapYI/KINLdfEL7n10LuF0pPSNf/IqjzZbB5VINctg==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@swc/core': ^1.0.0 + vite: ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + '@swc/core': + optional: true + + electron-winstaller@5.4.0: + resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==} + engines: {node: '>=8.0.0'} + + electron@30.5.1: + resolution: {integrity: sha512-AhL7+mZ8Lg14iaNfoYTkXQ2qee8mmsQyllKdqxlpv/zrKgfxz6jNVtcRRbQtLxtF8yzcImWdfTQROpYiPumdbw==} + engines: {node: '>= 12.20.55'} + hasBin: true + + electron@34.1.1: + resolution: {integrity: sha512-1aDYk9Gsv1/fFeClMrxWGoVMl7uCUgl1pe26BiTnLXmAoqEXCa3f3sCKFWV+cuDzUjQGAZcpkWhGYTgWUSQrLA==} + engines: {node: '>= 12.20.55'} + hasBin: true + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + encode-utf8@1.0.3: + resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + env-paths@3.0.0: + resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + error-stack-parser@2.1.4: + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + + es-abstract@1.23.9: + resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-iterator-helpers@1.2.1: + resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + + es6-error@4.1.1: + resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} + + esbuild-register@3.6.0: + resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} + peerDependencies: + esbuild: '>=0.12 <1' + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.23.1: + resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} + engines: {node: '>=18'} + hasBin: true + + esbuild@0.24.2: + resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} + engines: {node: '>=18'} + hasBin: true + + esbuild@0.25.0: + resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-config-prettier@9.1.0: + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-module-utils@2.12.0: + resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-import@2.31.0: + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-prettier@5.2.3: + resolution: {integrity: sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + + eslint-plugin-react@7.37.4: + resolution: {integrity: sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + execa@1.0.0: + resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} + engines: {node: '>=6'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + + exif-parser@0.1.12: + resolution: {integrity: sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==} + + expand-tilde@2.0.2: + resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} + engines: {node: '>=0.10.0'} + + expect-type@1.1.0: + resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} + engines: {node: '>=12.0.0'} + + exponential-backoff@3.1.2: + resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} + + express-ws@5.0.2: + resolution: {integrity: sha512-0uvmuk61O9HXgLhGl3QhNSEtRsQevtmbL94/eILaliEADZBHZOQUAiHFrGPrgsjikohyrmSG5g+sCfASTt0lkQ==} + engines: {node: '>=4.5.0'} + peerDependencies: + express: ^4.0.0 || ^5.0.0-alpha.1 + + express@4.21.2: + resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} + engines: {node: '>= 0.10.0'} + + extendable-error@0.1.7: + resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-shallow-equal@1.0.0: + resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==} + + fast-uri@3.0.6: + resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + + fastest-stable-stringify@2.0.2: + resolution: {integrity: sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==} + + fastq@1.19.0: + resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} + + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + + fdir@6.4.3: + resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + file-type@16.5.4: + resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==} + engines: {node: '>=10'} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + filename-reserved-regex@2.0.0: + resolution: {integrity: sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==} + engines: {node: '>=4'} + + filenamify@4.3.0: + resolution: {integrity: sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==} + engines: {node: '>=8'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + engines: {node: '>= 0.8'} + + find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + + find-up@2.1.0: + resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} + engines: {node: '>=4'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + find-up@7.0.0: + resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} + engines: {node: '>=18'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flatted@3.3.2: + resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} + + flora-colossus@2.0.0: + resolution: {integrity: sha512-dz4HxH6pOvbUzZpZ/yXhafjbR2I8cenK5xL0KtBFb7U2ADsR+OwXifnxZjij/pZWF775uSCMzWVd+jDik2H2IA==} + engines: {node: '>= 12'} + + fmix@0.1.0: + resolution: {integrity: sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==} + + focus-lock@1.3.6: + resolution: {integrity: sha512-Ik/6OCk9RQQ0T5Xw+hKNLWrjSMtv51dD4GRmJjbD5a58TIEpI5a5iXagKVl3Z5UuyslMCA8Xwnu76jQob62Yhg==} + engines: {node: '>=10'} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + form-data-encoder@1.7.2: + resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} + + form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + engines: {node: '>= 6'} + + formdata-node@4.4.1: + resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} + engines: {node: '>= 12.20'} + + formik@2.4.6: + resolution: {integrity: sha512-A+2EI7U7aG296q2TLGvNapDNTZp1khVt5Vk0Q/fyfSROss0V/V6+txt2aJnwEos44IxTCW/LYAi/zgWzlevj+g==} + peerDependencies: + react: '>=16.8.0' + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + framer-motion@11.18.2: + resolution: {integrity: sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + + framesync@6.1.2: + resolution: {integrity: sha512-jBTqhX6KaQVDyus8muwZbBeGGP0XgujBRbQ7gM7BRdS3CadCZIHiawyzYLnafYcvZIh5j8WE7cxZKFn7dXhu9g==} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-extra@11.3.0: + resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} + engines: {node: '>=14.14'} + + fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fs-temp@1.2.1: + resolution: {integrity: sha512-okTwLB7/Qsq82G6iN5zZJFsOfZtx2/pqrA7Hk/9fvy+c+eJS9CvgGXT2uNxwnI14BDY9L/jQPkaBgSvlKfSW9w==} + + fs-xattr@0.3.1: + resolution: {integrity: sha512-UVqkrEW0GfDabw4C3HOrFlxKfx0eeigfRne69FxSBdHIP8Qt5Sq6Pu3RM9KmMlkygtC4pPKkj5CiPO5USnj2GA==} + engines: {node: '>=8.6.0'} + os: ['!win32'] + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + galactus@1.0.0: + resolution: {integrity: sha512-R1fam6D4CyKQGNlvJne4dkNF+PvUUl7TAJInvTGa9fti9qAv95quQz29GXapA4d8Ec266mJJxFVh82M4GIIGDQ==} + engines: {node: '>= 12'} + + gar@1.0.4: + resolution: {integrity: sha512-w4n9cPWyP7aHxKxYHFQMegj7WIAsL/YX/C4Bs5Rr8s1H9M1rNtRWRsw+ovYMkXDQ5S4ZbYHsHAPmevPjPgw44w==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + generate-function@2.3.1: + resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} + + generate-object-property@1.2.0: + resolution: {integrity: sha512-TuOwZWgJ2VAMEGJvAyPWvpqxSANF0LDpmyHauMjFYzaACvn+QTT/AZomvPCzVBV7yDN3OmwHQ5OvHaeLKre3JQ==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-folder-size@2.0.1: + resolution: {integrity: sha512-+CEb+GDCM7tkOS2wdMKTn9vU7DgnKUTuDlehkNJKNSovdCOVxs14OfKCk4cvSaR3za4gj+OBdl9opPN9xrJ0zA==} + hasBin: true + + get-installed-path@2.1.1: + resolution: {integrity: sha512-Qkn9eq6tW5/q9BDVdMpB8tOHljX9OSP0jRC5TRNVA4qRc839t4g8KQaR8t0Uv0EFVL0MlyG7m/ofjEgAROtYsA==} + + get-intrinsic@1.2.7: + resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} + engines: {node: '>= 0.4'} + + get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + + get-package-info@1.0.0: + resolution: {integrity: sha512-SCbprXGAPdIhKAXiG+Mk6yeoFH61JlYunqdFQFHDtLjJlDjFf6x07dsS8acO+xWt52jpdVo49AlVDnUVK1sDNw==} + engines: {node: '>= 4.0'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-stream@4.1.0: + resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} + engines: {node: '>=6'} + + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + + get-tsconfig@4.10.0: + resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} + + gifwrap@0.10.1: + resolution: {integrity: sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw==} + + git-raw-commits@4.0.0: + resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} + engines: {node: '>=16'} + hasBin: true + + github-url-to-object@4.0.6: + resolution: {integrity: sha512-NaqbYHMUAlPcmWFdrAB7bcxrNIiiJWJe8s/2+iOc9vlcHlwHqSGrPk+Yi3nu6ebTwgsZEa7igz+NH2vEq3gYwQ==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@11.0.1: + resolution: {integrity: sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==} + engines: {node: 20 || >=22} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported + + global-agent@3.0.0: + resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} + engines: {node: '>=10.0'} + + global-directory@4.0.1: + resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} + engines: {node: '>=18'} + + global-modules@1.0.0: + resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} + engines: {node: '>=0.10.0'} + + global-prefix@1.0.2: + resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} + engines: {node: '>=0.10.0'} + + global@4.4.0: + resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + got@11.8.6: + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + + homedir-polyfill@1.0.3: + resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} + engines: {node: '>=0.10.0'} + + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + http-proxy-agent@5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + http2-wrapper@1.0.3: + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + human-id@1.0.2: + resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} + engines: {node: '>=18'} + hasBin: true + + hyphenate-style-name@1.1.0: + resolution: {integrity: sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + image-q@4.0.0: + resolution: {integrity: sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==} + + image-size@0.7.5: + resolution: {integrity: sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g==} + engines: {node: '>=6.9.0'} + hasBin: true + + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + + immutable@5.0.3: + resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + import-meta-resolve@4.1.0: + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} + + imul@1.0.1: + resolution: {integrity: sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==} + engines: {node: '>=0.10.0'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + infer-owner@1.0.4: + resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + ini@3.0.1: + resolution: {integrity: sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + ini@4.1.1: + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + inline-style-prefixer@7.0.1: + resolution: {integrity: sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw==} + + inquirer@9.3.7: + resolution: {integrity: sha512-LJKFHCSeIRq9hanN14IlOtPSTe3lNES7TYDTE2xxdAy1LS5rYphajK1qtwvj3YmQXvvk0U2Vbmcni8P9EIQW9w==} + engines: {node: '>=18'} + + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + + interpret@3.1.1: + resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} + engines: {node: '>=10.13.0'} + + ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + + is-function@1.0.2: + resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} + + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-lambda@1.0.1: + resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-my-ip-valid@1.0.1: + resolution: {integrity: sha512-jxc8cBcOWbNK2i2aTkCZP6i7wkHF1bqKFrwEHuN5Jtg5BSaZHUZQ/JTOJwoV41YvHnOaRyWWh72T/KvfNz9DJg==} + + is-my-json-valid@2.20.6: + resolution: {integrity: sha512-1JQwulVNjx8UqkPE/bqDaxtH4PXCe/2VRh/y3p99heOV87HG4Id5/VfDswd+YiAfHcRTfDlWgISycnHuhZq1aw==} + + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + + is-property@1.0.2: + resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-stream@1.1.0: + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} + engines: {node: '>=0.10.0'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-subdir@1.2.0: + resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} + engines: {node: '>=4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-text-path@2.0.0: + resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} + engines: {node: '>=8'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-url@1.2.4: + resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isbinaryfile@4.0.10: + resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} + engines: {node: '>= 8.0.0'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isomorphic-fetch@3.0.0: + resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@5.0.6: + resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + + iterator.prototype@1.1.5: + resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} + engines: {node: '>= 0.4'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jackspeak@4.0.3: + resolution: {integrity: sha512-oSwM7q8PTHQWuZAlp995iPpPJ4Vkl7qT0ZRD+9duL9j2oBy6KcTfyxc8mEuHJYC+z/kbps80aJLkaNzTOrf/kw==} + engines: {node: 20 || >=22} + + javascript-natural-sort@0.7.1: + resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==} + + jimp@0.22.10: + resolution: {integrity: sha512-lCaHIJAgTOsplyJzC1w/laxSxrbSsEBw4byKwXgUdMmh+ayPsnidTblenQm+IvhIs44Gcuvlb6pd2LQ0wcKaKg==} + + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + + joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + + jpeg-js@0.4.4: + resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==} + + js-cookie@2.2.1: + resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-schema-typed@8.0.1: + resolution: {integrity: sha512-XQmWYj2Sm4kn4WeTYvmpKEbyPsL7nBsb647c7pMe6l02/yx2+Jfc4dT6UZkEXnIUb5LhD55r2HPsJ1milQ4rDg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + + jszip@3.10.1: + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + + junk@3.1.0: + resolution: {integrity: sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==} + engines: {node: '>=8'} + + keyboardevent-from-electron-accelerator@2.0.0: + resolution: {integrity: sha512-iQcmNA0M4ETMNi0kG/q0h/43wZk7rMeKYrXP7sqKIJbHkTU8Koowgzv+ieR/vWJbOwxx5nDC3UnudZ0aLSu4VA==} + + keyboardevents-areequal@0.2.2: + resolution: {integrity: sha512-Nv+Kr33T0mEjxR500q+I6IWisOQ0lK1GGOncV0kWE6n4KFmpcu7RUX5/2B0EUtX51Cb0HjZ9VJsSY3u4cBa0kw==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lie@3.3.0: + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + + lint-staged@14.0.1: + resolution: {integrity: sha512-Mw0cL6HXnHN1ag0mN/Dg4g6sr8uf8sn98w2Oc1ECtFto9tvRF7nkXGJRbx8gPlHyoR0pLyBr2lQHbWwmUHe1Sw==} + engines: {node: ^16.14.0 || >=18.0.0} + hasBin: true + + listr2@6.6.1: + resolution: {integrity: sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==} + engines: {node: '>=16.0.0'} + peerDependencies: + enquirer: '>= 2.3.0 < 3' + peerDependenciesMeta: + enquirer: + optional: true + + listr2@7.0.2: + resolution: {integrity: sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g==} + engines: {node: '>=16.0.0'} + + load-bmfont@1.4.2: + resolution: {integrity: sha512-qElWkmjW9Oq1F9EI5Gt7aD9zcdHb9spJCW1L/dmPf7KzCCEJxq8nhHz5eCgI9aMf7vrG/wyaCqdsI+Iy9ZTlog==} + + load-json-file@2.0.0: + resolution: {integrity: sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ==} + engines: {node: '>=4'} + + load-tsconfig@0.2.5: + resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + locate-path@2.0.0: + resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} + engines: {node: '>=4'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.kebabcase@4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.mergewith@4.6.2: + resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + + lodash.snakecase@4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + + lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + + lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + + lodash.upperfirst@4.3.1: + resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + log-update@5.0.1: + resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + loupe@3.1.3: + resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} + + lowercase-keys@2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@11.0.2: + resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==} + engines: {node: 20 || >=22} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + + macos-alias@0.2.12: + resolution: {integrity: sha512-yiLHa7cfJcGRFq4FrR4tMlpNHb4Vy4mWnpajlSSIFM5k4Lv8/7BbbDLzCAVogWNl0LlLhizRp1drXv0hK9h0Yw==} + os: [darwin] + + macos-version@5.2.1: + resolution: {integrity: sha512-OHJU8nTNxHYL1FQhD+nZawWgXKXAqDGr4kluLtaqKO4au3cR41y1mKuVShOU5U4rOYiuPanljq6oFGmV2B9DFA==} + engines: {node: '>=6'} + + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + + magicast@0.3.5: + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + make-fetch-happen@10.2.1: + resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + map-age-cleaner@0.1.3: + resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==} + engines: {node: '>=6'} + + markdown-it@14.1.0: + resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} + hasBin: true + + matcher@3.0.0: + resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} + engines: {node: '>=10'} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + + mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + medium-zoom@1.1.0: + resolution: {integrity: sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==} + + mem@4.3.0: + resolution: {integrity: sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==} + engines: {node: '>=6'} + + meow@12.1.1: + resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} + engines: {node: '>=16.10'} + + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + mimic-response@1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + min-document@2.19.0: + resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} + + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass-collect@1.0.2: + resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} + engines: {node: '>= 8'} + + minipass-fetch@2.1.2: + resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + minipass-flush@1.0.5: + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} + + minipass-pipeline@1.2.4: + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} + engines: {node: '>=8'} + + minipass-sized@1.0.3: + resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} + engines: {node: '>=8'} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + motion-dom@11.18.1: + resolution: {integrity: sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==} + + motion-utils@11.18.1: + resolution: {integrity: sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==} + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + murmur-32@0.2.0: + resolution: {integrity: sha512-ZkcWZudylwF+ir3Ld1n7gL6bI2mQAzXvSobPwVtu8aYi2sbXeipeSkdcanRLzIofLcM5F53lGaKm2dk7orBi7Q==} + + mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nan@2.22.0: + resolution: {integrity: sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==} + + nano-css@5.6.2: + resolution: {integrity: sha512-+6bHaC8dSDGALM1HJjOHVXpuastdu2xFoZlC77Jh4cg+33Zcgm+Gxd+1xsnpZK14eyHObSp82+ll5y3SX75liw==} + peerDependencies: + react: '*' + react-dom: '*' + + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} + + new-github-issue-url@0.2.1: + resolution: {integrity: sha512-md4cGoxuT4T4d/HDOXbrUHkTKrp/vp+m3aOA7XXVYwNsUNMK49g3SQicTSeV5GIz/5QVGAeYRAOlyp9OvlgsYA==} + engines: {node: '>=10'} + + nice-try@1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + + node-abi@3.74.0: + resolution: {integrity: sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w==} + engines: {node: '>=10'} + + node-abort-controller@3.1.1: + resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + + node-addon-api@5.0.0: + resolution: {integrity: sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==} + + node-api-version@0.2.0: + resolution: {integrity: sha512-fthTTsi8CxaBXMaBAD7ST2uylwvsnYxh2PfaScwpMhos6KlSFajXQPcM4ogNE1q2s3Lbz9GCGqeIHC+C6OZnKg==} + + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + nopt@6.0.0: + resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + hasBin: true + + normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + + normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + + npm-run-path@2.0.2: + resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} + engines: {node: '>=4'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} + engines: {node: '>= 0.4'} + + omggif@1.0.10: + resolution: {integrity: sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + openai@4.73.0: + resolution: {integrity: sha512-NZstV77w3CEol9KQTRBRQ15+Sw6nxVTicAULSjYO4wn9E5gw72Mtp3fAVaBFXyyVPws4241YmFG6ya4L8v03tA==} + hasBin: true + peerDependencies: + zod: ^3.23.8 + peerDependenciesMeta: + zod: + optional: true + + opencommit@3.2.5: + resolution: {integrity: sha512-hIleBRrmQh2L8KXzwUZQr2ggM4TABjFlL1iUfinfAVWu3DqIQKDmck9oq1Qq6TYN56kCGTErm9z4uiRNUHqnVw==} + hasBin: true + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + outdent@0.5.0: + resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + + p-cancelable@2.1.1: + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} + + p-defer@1.0.0: + resolution: {integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==} + engines: {node: '>=4'} + + p-filter@2.1.0: + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} + engines: {node: '>=8'} + + p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + + p-is-promise@2.1.0: + resolution: {integrity: sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==} + engines: {node: '>=6'} + + p-limit@1.3.0: + resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} + engines: {node: '>=4'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-locate@2.0.0: + resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} + engines: {node: '>=4'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + + p-try@1.0.0: + resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} + engines: {node: '>=4'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + package-manager-detector@0.2.9: + resolution: {integrity: sha512-+vYvA/Y31l8Zk8dwxHhL3JfTuHPm6tlxM2A3GeQyl7ovYnSp1+mzAxClxaOr0qO1TtPxbQxetI7v5XqKLJZk7Q==} + + pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-author@2.0.0: + resolution: {integrity: sha512-yx5DfvkN8JsHL2xk2Os9oTia467qnvRgey4ahSm2X8epehBLx/gWLcy5KI+Y36ful5DzGbCS6RazqZGgy1gHNw==} + engines: {node: '>=0.10.0'} + + parse-bmfont-ascii@1.0.6: + resolution: {integrity: sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==} + + parse-bmfont-binary@1.0.6: + resolution: {integrity: sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==} + + parse-bmfont-xml@1.1.6: + resolution: {integrity: sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==} + + parse-color@1.0.0: + resolution: {integrity: sha512-fuDHYgFHJGbpGMgw9skY/bj3HL/Jrn4l/5rSspy00DoT4RyLnDcRvPxdZ+r6OFwIsgAuhDh4I09tAId4mI12bw==} + + parse-headers@2.0.5: + resolution: {integrity: sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==} + + parse-json@2.2.0: + resolution: {integrity: sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==} + engines: {node: '>=0.10.0'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-passwd@1.0.0: + resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} + engines: {node: '>=0.10.0'} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + engines: {node: 20 || >=22} + + path-to-regexp@0.1.12: + resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + + path-type@2.0.0: + resolution: {integrity: sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ==} + engines: {node: '>=4'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} + + pe-library@1.0.1: + resolution: {integrity: sha512-nh39Mo1eGWmZS7y+mK/dQIqg7S1lp38DpRxkyoHf0ZcUs/HDc+yyTjuOtTvSMZHmfSLuSQaX945u05Y2Q6UWZg==} + engines: {node: '>=14', npm: '>=7'} + + peek-readable@4.1.0: + resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==} + engines: {node: '>=8'} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + + phin@3.7.1: + resolution: {integrity: sha512-GEazpTWwTZaEQ9RhL7Nyz0WwqilbqgLahDM3D0hxWwmVDI52nXEybHqiN6/elwpkJBhcuj+WbBu+QfT0uhPGfQ==} + engines: {node: '>= 8'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + pixelmatch@4.0.2: + resolution: {integrity: sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==} + hasBin: true + + playwright-core@1.50.1: + resolution: {integrity: sha512-ra9fsNWayuYumt+NiM069M6OkcRb1FZSK8bgi66AtpFoWkg2+y0bJSNmkFrWhMbEBbVKC/EruAHH3g0zmtwGmQ==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.50.1: + resolution: {integrity: sha512-G8rwsOQJ63XG6BbKj2w5rHeavFjy5zynBA9zsJMMtBoe/Uf757oG12NXz6e6OirF7RCrTVAKFXbLmn1RbL7Qaw==} + engines: {node: '>=18'} + hasBin: true + + plist@3.1.0: + resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} + engines: {node: '>=10.4.0'} + + pngjs@3.4.0: + resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==} + engines: {node: '>=4.0.0'} + + pngjs@6.0.0: + resolution: {integrity: sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==} + engines: {node: '>=12.13.0'} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + postcss-load-config@6.0.1: + resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} + engines: {node: '>= 18'} + peerDependencies: + jiti: '>=1.21.0' + postcss: '>=8.0.9' + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + jiti: + optional: true + postcss: + optional: true + tsx: + optional: true + yaml: + optional: true + + postcss@8.5.2: + resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} + engines: {node: ^10 || ^12 || >=14} + + postject@1.0.0-alpha.6: + resolution: {integrity: sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A==} + engines: {node: '>=14.0.0'} + hasBin: true + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + prettier@3.5.0: + resolution: {integrity: sha512-quyMrVt6svPS7CjQ9gKb3GLEX/rl3BCL2oa/QkNcXv4YNVBC9olt3s+H7ukto06q7B1Qz46PbrKLO34PR6vXcA==} + engines: {node: '>=14'} + hasBin: true + + proc-log@2.0.1: + resolution: {integrity: sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + + promise-inflight@1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + + promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + + qs@6.13.1: + resolution: {integrity: sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==} + engines: {node: '>=0.6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + + random-path@0.1.2: + resolution: {integrity: sha512-4jY0yoEaQ5v9StCl5kZbNIQlg1QheIDBrdkDn53EynpPb9FgO6//p3X/tgMnrC45XN6QZCzU1Xz/+pSSsJBpRw==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + react-clientside-effect@1.2.7: + resolution: {integrity: sha512-gce9m0Pk/xYYMEojRI9bgvqQAkl6hm7ozQvqWPyQx+kULiatdHgkNM1QG4DQRx5N9BAzWSCJmt9mMV8/KsdgVg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + + react-fast-compare@2.0.4: + resolution: {integrity: sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==} + + react-fast-compare@3.2.2: + resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} + + react-focus-lock@2.13.6: + resolution: {integrity: sha512-ehylFFWyYtBKXjAO9+3v8d0i+cnc1trGS0vlTGhzFW1vbFXVUTmR8s2tt/ZQG8x5hElg6rhENlLG1H3EZK0Llg==} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react-icons@5.4.0: + resolution: {integrity: sha512-7eltJxgVt7X64oHh6wSWNwwbKTCtMfK35hcjvJS0yxEAhPM8oUKdS3+kqaW1vicIltw+kR2unHaa12S9pPALoQ==} + peerDependencies: + react: '*' + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + + react-remove-scroll-bar@2.3.8: + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.6.3: + resolution: {integrity: sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react-router@7.1.5: + resolution: {integrity: sha512-8BUF+hZEU4/z/JD201yK6S+UYhsf58bzYIDq2NS1iGpwxSXDu7F+DeGSkIXMFBuHZB21FSiCzEcUb18cQNdRkA==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + peerDependenciesMeta: + react-dom: + optional: true + + react-style-singleton@2.2.3: + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react-universal-interface@0.6.2: + resolution: {integrity: sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==} + peerDependencies: + react: '*' + tslib: '*' + + react-use@17.6.0: + resolution: {integrity: sha512-OmedEScUMKFfzn1Ir8dBxiLLSOzhKe/dPZwVxcujweSj45aNM7BEGPb9BEVIgVEqEXx6f3/TsXzwIktNgUR02g==} + peerDependencies: + react: '*' + react-dom: '*' + + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + + read-binary-file-arch@1.0.6: + resolution: {integrity: sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==} + hasBin: true + + read-pkg-up@2.0.0: + resolution: {integrity: sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w==} + engines: {node: '>=4'} + + read-pkg@2.0.0: + resolution: {integrity: sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA==} + engines: {node: '>=4'} + + read-yaml-file@1.1.0: + resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} + engines: {node: '>=6'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readable-stream@4.7.0: + resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + readable-web-to-node-stream@3.0.3: + resolution: {integrity: sha512-In3boYjBnbGVrLuuRu/Ath/H6h1jgk30nAsk/71tCare1dTVoe1oMBGRn5LGf0n3c1BcHwwAqpraxX4AUAP5KA==} + engines: {node: '>=8'} + + readdirp@4.1.1: + resolution: {integrity: sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==} + engines: {node: '>= 14.18.0'} + + rechoir@0.8.0: + resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} + engines: {node: '>= 10.13.0'} + + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resedit@2.0.3: + resolution: {integrity: sha512-oTeemxwoMuxxTYxXUwjkrOPfngTQehlv0/HoYFNkB4uzsP1Un1A9nI8JQKGOFkxpqkC7qkMs0lUsGrvUlbLNUA==} + engines: {node: '>=14', npm: '>=7'} + + resize-observer-polyfill@1.5.1: + resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} + + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + + resolve-dir@1.0.1: + resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} + engines: {node: '>=0.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve-package@1.0.1: + resolution: {integrity: sha512-rzB7NnQpOkPHBWFPP3prUMqOP6yg3HkRGgcvR+lDyvyHoY3fZLFLYDkPXh78SPVBAE6VTCk/V+j8we4djg6o4g==} + engines: {node: '>=4', npm: '>=2'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + + responselike@2.0.1: + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rimraf@2.6.3: + resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rimraf@2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rimraf@6.0.1: + resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} + engines: {node: 20 || >=22} + hasBin: true + + roarr@2.15.4: + resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} + engines: {node: '>=8.0'} + + rollup@4.34.6: + resolution: {integrity: sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + rtl-css-js@1.16.1: + resolution: {integrity: sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==} + + run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sass-embedded-android-arm64@1.83.4: + resolution: {integrity: sha512-tgX4FzmbVqnQmD67ZxQDvI+qFNABrboOQgwsG05E5bA/US42zGajW9AxpECJYiMXVOHmg+d81ICbjb0fsVHskw==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [android] + + sass-embedded-android-arm@1.83.4: + resolution: {integrity: sha512-9Z4pJAOgEkXa3VDY/o+U6l5XvV0mZTJcSl0l/mSPHihjAHSpLYnOW6+KOWeM8dxqrsqTYcd6COzhanI/a++5Gw==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [android] + + sass-embedded-android-ia32@1.83.4: + resolution: {integrity: sha512-RsFOziFqPcfZXdFRULC4Ayzy9aK6R6FwQ411broCjlOBX+b0gurjRadkue3cfUEUR5mmy0KeCbp7zVKPLTK+5Q==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [android] + + sass-embedded-android-riscv64@1.83.4: + resolution: {integrity: sha512-EHwh0nmQarBBrMRU928eTZkFGx19k/XW2YwbPR4gBVdWLkbTgCA5aGe8hTE6/1zStyx++3nDGvTZ78+b/VvvLg==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [android] + + sass-embedded-android-x64@1.83.4: + resolution: {integrity: sha512-0PgQNuPWYy1jEOEPDVsV89KfqOsMLIp9CSbjBY7jRcwRhyVAcigqrUG6bDeNtojHUYKA1kU+Eh/85WxOHUOgBw==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [android] + + sass-embedded-darwin-arm64@1.83.4: + resolution: {integrity: sha512-rp2ywymWc3nymnSnAFG5R/8hvxWCsuhK3wOnD10IDlmNB7o4rzKby1c+2ZfpQGowlYGWsWWTgz8FW2qzmZsQRw==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [darwin] + + sass-embedded-darwin-x64@1.83.4: + resolution: {integrity: sha512-kLkN2lXz9PCgGfDS8Ev5YVcl/V2173L6379en/CaFuJJi7WiyPgBymW7hOmfCt4uO4R1y7CP2Uc08DRtZsBlAA==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [darwin] + + sass-embedded-linux-arm64@1.83.4: + resolution: {integrity: sha512-E0zjsZX2HgESwyqw31EHtI39DKa7RgK7nvIhIRco1d0QEw227WnoR9pjH3M/ZQy4gQj3GKilOFHM5Krs/omeIA==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + + sass-embedded-linux-arm@1.83.4: + resolution: {integrity: sha512-nL90ryxX2lNmFucr9jYUyHHx21AoAgdCL1O5Ltx2rKg2xTdytAGHYo2MT5S0LIeKLa/yKP/hjuSvrbICYNDvtA==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + + sass-embedded-linux-ia32@1.83.4: + resolution: {integrity: sha512-ew5HpchSzgAYbQoriRh8QhlWn5Kw2nQ2jHoV9YLwGKe3fwwOWA0KDedssvDv7FWnY/FCqXyymhLd6Bxae4Xquw==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [linux] + + sass-embedded-linux-musl-arm64@1.83.4: + resolution: {integrity: sha512-IzMgalf6MZOxgp4AVCgsaWAFDP/IVWOrgVXxkyhw29fyAEoSWBJH4k87wyPhEtxSuzVHLxKNbc8k3UzdWmlBFg==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + + sass-embedded-linux-musl-arm@1.83.4: + resolution: {integrity: sha512-0RrJRwMrmm+gG0VOB5b5Cjs7Sd+lhqpQJa6EJNEaZHljJokEfpE5GejZsGMRMIQLxEvVphZnnxl6sonCGFE/QQ==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + + sass-embedded-linux-musl-ia32@1.83.4: + resolution: {integrity: sha512-LLb4lYbcxPzX4UaJymYXC+WwokxUlfTJEFUv5VF0OTuSsHAGNRs/rslPtzVBTvMeG9TtlOQDhku1F7G6iaDotA==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [linux] + + sass-embedded-linux-musl-riscv64@1.83.4: + resolution: {integrity: sha512-zoKlPzD5Z13HKin1UGR74QkEy+kZEk2AkGX5RelRG494mi+IWwRuWCppXIovor9+BQb9eDWPYPoMVahwN5F7VA==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [linux] + + sass-embedded-linux-musl-x64@1.83.4: + resolution: {integrity: sha512-hB8+/PYhfEf2zTIcidO5Bpof9trK6WJjZ4T8g2MrxQh8REVtdPcgIkoxczRynqybf9+fbqbUwzXtiUao2GV+vQ==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + + sass-embedded-linux-riscv64@1.83.4: + resolution: {integrity: sha512-83fL4n+oeDJ0Y4KjASmZ9jHS1Vl9ESVQYHMhJE0i4xDi/P3BNarm2rsKljq/QtrwGpbqwn8ujzOu7DsNCMDSHA==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [linux] + + sass-embedded-linux-x64@1.83.4: + resolution: {integrity: sha512-NlnGdvCmTD5PK+LKXlK3sAuxOgbRIEoZfnHvxd157imCm/s2SYF/R28D0DAAjEViyI8DovIWghgbcqwuertXsA==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + + sass-embedded-win32-arm64@1.83.4: + resolution: {integrity: sha512-J2BFKrEaeSrVazU2qTjyQdAk+MvbzJeTuCET0uAJEXSKtvQ3AzxvzndS7LqkDPbF32eXAHLw8GVpwcBwKbB3Uw==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [win32] + + sass-embedded-win32-ia32@1.83.4: + resolution: {integrity: sha512-uPAe9T/5sANFhJS5dcfAOhOJy8/l2TRYG4r+UO3Wp4yhqbN7bggPvY9c7zMYS0OC8tU/bCvfYUDFHYMCl91FgA==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [win32] + + sass-embedded-win32-x64@1.83.4: + resolution: {integrity: sha512-C9fkDY0jKITdJFij4UbfPFswxoXN9O/Dr79v17fJnstVwtUojzVJWKHUXvF0Zg2LIR7TCc4ju3adejKFxj7ueA==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [win32] + + sass-embedded@1.83.4: + resolution: {integrity: sha512-Hf2burRA/y5PGxsg6jB9UpoK/xZ6g/pgrkOcdl6j+rRg1Zj8XhGKZ1MTysZGtTPUUmiiErqzkP5+Kzp95yv9GQ==} + engines: {node: '>=16.0.0'} + hasBin: true + + sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + screenfull@5.2.0: + resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==} + engines: {node: '>=0.10.0'} + + semver-compare@1.0.0: + resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} + + serialize-error@7.0.1: + resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} + engines: {node: '>=10'} + + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} + + set-cookie-parser@2.7.1: + resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-harmonic-interval@1.0.1: + resolution: {integrity: sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==} + engines: {node: '>=6.9'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + sharp@0.33.3: + resolution: {integrity: sha512-vHUeXJU1UvlO/BNwTpT0x/r53WkLUVxrmb5JTgW92fdFCFk0ispLMAeu/jPO2vjkXM1fYUi3K7/qcLF47pwM1A==} + engines: {libvips: '>=8.15.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + + socks-proxy-agent@7.0.0: + resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} + engines: {node: '>= 10'} + + socks@2.8.4: + resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.5.6: + resolution: {integrity: sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==} + engines: {node: '>=0.10.0'} + + source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + + spawndamnit@3.0.1: + resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.21: + resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + + ssri@9.0.1: + resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + stack-generator@2.0.10: + resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + stackframe@1.3.4: + resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + + stacktrace-gps@3.1.2: + resolution: {integrity: sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==} + + stacktrace-js@2.0.2: + resolution: {integrity: sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + std-env@3.8.0: + resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} + + stream-buffers@2.2.0: + resolution: {integrity: sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==} + engines: {node: '>= 0.10.0'} + + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string.prototype.matchall@4.0.12: + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} + engines: {node: '>= 0.4'} + + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-eof@1.0.0: + resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} + engines: {node: '>=0.10.0'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strip-outer@1.0.1: + resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} + engines: {node: '>=0.10.0'} + + strtok3@6.3.0: + resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} + engines: {node: '>=10'} + + stubborn-fs@1.2.5: + resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} + + stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + + stylis@4.3.6: + resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + sudo-prompt@9.2.1: + resolution: {integrity: sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + sumchecker@3.0.1: + resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==} + engines: {node: '>= 8.0'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + swr@2.3.2: + resolution: {integrity: sha512-RosxFpiabojs75IwQ316DGoDRmOqtiAj0tg8wCcbEu4CiLZBs/a9QNtHV7TUfDXmmlgqij/NqzKq/eLelyv9xA==} + peerDependencies: + react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + sync-child-process@1.0.2: + resolution: {integrity: sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==} + engines: {node: '>=16.0.0'} + + sync-message-port@1.1.3: + resolution: {integrity: sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==} + engines: {node: '>=16.0.0'} + + synckit@0.9.2: + resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} + engines: {node: ^14.18.0 || >=16.0.0} + + tailwind-merge@2.5.5: + resolution: {integrity: sha512-0LXunzzAZzo0tEPxV3I297ffKZPlKDrjj7NXphC8V5ak9yHC5zRmxnOe2m/Rd/7ivsOMJe3JZ2JVocoDdQTRBA==} + + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + temp@0.9.4: + resolution: {integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==} + engines: {node: '>=6.0.0'} + + term-size@2.2.1: + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} + engines: {node: '>=8'} + + terminal-columns@1.4.1: + resolution: {integrity: sha512-IKVL/itiMy947XWVv4IHV7a0KQXvKjj4ptbi7Ew9MPMcOLzkiQeyx3Gyvh62hKrfJ0RZc4M1nbhzjNM39Kyujw==} + + test-exclude@7.0.1: + resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} + engines: {node: '>=18'} + + text-extensions@2.4.0: + resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} + engines: {node: '>=8'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + throttle-debounce@3.0.1: + resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==} + engines: {node: '>=10'} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + timm@1.7.1: + resolution: {integrity: sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==} + + tiny-each-async@2.0.3: + resolution: {integrity: sha512-5ROII7nElnAirvFn8g7H7MtpfV1daMcyfTGQwsn/x2VtyV+VPiO5CjReCJtWLvoKTDEDmZocf3cNPraiMnBXLA==} + + tiny-warning@1.0.3: + resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinycolor2@1.6.0: + resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinyglobby@0.2.10: + resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} + engines: {node: '>=12.0.0'} + + tinypool@1.0.2: + resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + + tinyspy@3.0.2: + resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + engines: {node: '>=14.0.0'} + + tmp-promise@3.0.3: + resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + tmp@0.2.3: + resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} + engines: {node: '>=14.14'} + + tn1150@0.1.0: + resolution: {integrity: sha512-DbplOfQFkqG5IHcDyyrs/lkvSr3mPUVsFf/RbDppOshs22yTPnSJWEe6FkYd1txAwU/zcnR905ar2fi4kwF29w==} + engines: {node: '>=0.12'} + + to-data-view@1.1.0: + resolution: {integrity: sha512-1eAdufMg6mwgmlojAx3QeMnzB/BTVp7Tbndi3U7ftcT2zCZadjxkkmLmd97zmaxWi+sgGcgWrokmpEoy0Dn0vQ==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toggle-selection@1.0.6: + resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + token-types@4.2.1: + resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} + engines: {node: '>=10'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + trim-repeated@1.0.0: + resolution: {integrity: sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==} + engines: {node: '>=0.10.0'} + + ts-api-utils@1.4.3: + resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + ts-easing@0.2.0: + resolution: {integrity: sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==} + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tsconfck@3.1.5: + resolution: {integrity: sha512-CLDfGgUp7XPswWnezWwsCRxNmgQjhYq3VXHM0/XIRxhVrKw0M1if9agzryh1QS3nxjCROvV+xWxoJO1YctzzWg==} + engines: {node: ^18 || >=20} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.4.0: + resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsup@8.3.6: + resolution: {integrity: sha512-XkVtlDV/58S9Ye0JxUUTcrQk4S+EqlOHKzg6Roa62rdjL1nGWNUstG0xgI4vanHdfIpjP448J8vlN0oK6XOJ5g==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + '@microsoft/api-extractor': ^7.36.0 + '@swc/core': ^1 + postcss: ^8.4.12 + typescript: '>=4.5.0' + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + '@swc/core': + optional: true + postcss: + optional: true + typescript: + optional: true + + tsutils@3.21.0: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + + tsx@4.19.2: + resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} + engines: {node: '>=18.0.0'} + hasBin: true + + tunnel@0.0.6: + resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} + engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} + + turbo-stream@2.4.0: + resolution: {integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.13.1: + resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} + engines: {node: '>=10'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + + type-fest@4.34.1: + resolution: {integrity: sha512-6kSc32kT0rbwxD6QL1CYe8IqdzN/J/ILMrNK+HMQCKH3insCDRY/3ITb0vcBss0a3t72fzh2YSzj8ko1HgwT3g==} + engines: {node: '>=16'} + + type-flag@3.0.0: + resolution: {integrity: sha512-3YaYwMseXCAhBB14RXW5cRQfJQlEknS6i4C8fCfeUdS3ihG9EdccdR9kt3vP73ZdeTGmPb4bZtkDn5XMIn1DLA==} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + + typescript@5.7.3: + resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + engines: {node: '>=14.17'} + hasBin: true + + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + + uint8array-extras@1.4.0: + resolution: {integrity: sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==} + engines: {node: '>=18'} + + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + undici@5.28.5: + resolution: {integrity: sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==} + engines: {node: '>=14.0'} + + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + + unique-filename@2.0.1: + resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + unique-slug@3.0.0: + resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + universal-user-agent@6.0.1: + resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unorm@1.6.0: + resolution: {integrity: sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==} + engines: {node: '>= 0.4.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + unzip-crx-3@0.2.0: + resolution: {integrity: sha512-0+JiUq/z7faJ6oifVB5nSwt589v1KCduqIJupNVDoWSXZtWDmjDGO3RAEOvwJ07w90aoXoP4enKsR7ecMrJtWQ==} + + update-browserslist-db@1.1.2: + resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + update-electron-app@3.1.1: + resolution: {integrity: sha512-7duRr6sYn014tifhKgT/5i8N+6xLzmJVJ8hVtNrHXlIDNP6QbRe6VxZ1hSi2UH5oJPzhor/PH7yKU9em5xjRzQ==} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + use-callback-ref@1.3.3: + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + use-sidecar@1.1.3: + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + use-sync-external-store@1.4.0: + resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + username@5.1.0: + resolution: {integrity: sha512-PCKbdWw85JsYMvmCv5GH3kXmM66rCd9m1hBEDutPNv94b/pqCMT4NtcKyeWYvLFiE8b+ha1Jdl8XAaUdPn5QTg==} + engines: {node: '>=8'} + + utif2@4.1.0: + resolution: {integrity: sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + varint@6.0.0: + resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vite-node@3.0.5: + resolution: {integrity: sha512-02JEJl7SbtwSDJdYS537nU6l+ktdvcREfLksk/NDAqtdKWGqHl+joXzEubHROmS3E6pip+Xgu2tFezMu75jH7A==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + + vite-tsconfig-paths@5.1.4: + resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==} + peerDependencies: + vite: '*' + peerDependenciesMeta: + vite: + optional: true + + vite@5.4.14: + resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vitest@3.0.5: + resolution: {integrity: sha512-4dof+HvqONw9bvsYxtkfUp2uHsTN9bV2CZIi1pWgoFpL1Lld8LA1ka9q/ONSsoScAKG7NVGf2stJTI7XRkXb2Q==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.0.5 + '@vitest/ui': 3.0.5 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/debug': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + + web-streams-polyfill@4.0.0-beta.3: + resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} + engines: {node: '>= 14'} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + + whatwg-fetch@3.6.20: + resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + + when-exit@2.1.4: + resolution: {integrity: sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg==} + + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.18: + resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} + engines: {node: '>= 0.4'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xhr@2.6.0: + resolution: {integrity: sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==} + + xml-parse-from-string@1.0.1: + resolution: {integrity: sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==} + + xml2js@0.5.0: + resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} + engines: {node: '>=4.0.0'} + + xmlbuilder@11.0.1: + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} + engines: {node: '>=4.0'} + + xmlbuilder@15.1.1: + resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} + engines: {node: '>=8.0'} + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + xterm-addon-fit@0.5.0: + resolution: {integrity: sha512-DsS9fqhXHacEmsPxBJZvfj2la30Iz9xk+UKjhQgnYNkrUIN5CYLbw7WEfz117c7+S86S/tpHPfvNxJsF5/G8wQ==} + deprecated: This package is now deprecated. Move to @xterm/addon-fit instead. + peerDependencies: + xterm: ^4.0.0 + + xterm-addon-search@0.8.2: + resolution: {integrity: sha512-I1863mjn8P6uVrqm/X+btalVsqjAKLhnhpbP7SavAOpEkI1jJhbHU2UTp7NjeRtcKTks6UWk/ycgds5snDSejg==} + deprecated: This package is now deprecated. Move to @xterm/addon-search instead. + peerDependencies: + xterm: ^4.0.0 + + xterm@4.19.0: + resolution: {integrity: sha512-c3Cp4eOVsYY5Q839dR5IejghRPpxciGmLWWaP9g+ppfMeBChMeLa1DCA+pmX/jyDZ+zxFOmlJL/82qVdayVoGQ==} + deprecated: This package is now deprecated. Move to @xterm/xterm instead. + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yaku@0.16.7: + resolution: {integrity: sha512-Syu3IB3rZvKvYk7yTiyl1bo/jiEFaaStrgv1V2TIJTqYPStSMQVO8EQjg/z+DRzLq/4LIIharNT3iH1hylEIRw==} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + + yaml@2.3.1: + resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} + engines: {node: '>= 14'} + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yocto-queue@1.1.1: + resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} + engines: {node: '>=12.20'} + + yoctocolors-cjs@2.1.2: + resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + engines: {node: '>=18'} + + zod-to-json-schema@3.24.1: + resolution: {integrity: sha512-3h08nf3Vw3Wl3PK+q3ow/lIil81IT2Oa7YpQyUUDsEWbXveMesdfK1xBd2RhCkynwZndAxixji/7SYJJowr62w==} + peerDependencies: + zod: ^3.24.1 + + zod@3.24.2: + resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} + + zustand@5.0.3: + resolution: {integrity: sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=18.0.0' + immer: '>=9.0.6' + react: '>=18.0.0' + use-sync-external-store: '>=1.2.0' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + use-sync-external-store: + optional: true + +snapshots: + + '@actions/core@1.11.1': + dependencies: + '@actions/exec': 1.1.1 + '@actions/http-client': 2.2.3 + + '@actions/exec@1.1.1': + dependencies: + '@actions/io': 1.1.3 + + '@actions/github@5.1.1(encoding@0.1.13)': + dependencies: + '@actions/http-client': 2.2.3 + '@octokit/core': 3.6.0(encoding@0.1.13) + '@octokit/plugin-paginate-rest': 2.21.3(@octokit/core@3.6.0(encoding@0.1.13)) + '@octokit/plugin-rest-endpoint-methods': 5.16.2(@octokit/core@3.6.0(encoding@0.1.13)) + transitivePeerDependencies: + - encoding + + '@actions/http-client@2.2.3': + dependencies: + tunnel: 0.0.6 + undici: 5.28.5 + + '@actions/io@1.1.3': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@anthropic-ai/sdk@0.19.2(encoding@0.1.13)': + dependencies: + '@types/node': 18.19.75 + '@types/node-fetch': 2.6.12 + abort-controller: 3.0.0 + agentkeepalive: 4.6.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0(encoding@0.1.13) + web-streams-polyfill: 3.3.3 + transitivePeerDependencies: + - encoding + + '@azure-rest/core-client@1.4.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.9.0 + '@azure/core-rest-pipeline': 1.19.0 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.11.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/abort-controller@2.1.2': + dependencies: + tslib: 2.8.1 + + '@azure/core-auth@1.9.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-util': 1.11.0 + tslib: 2.8.1 + + '@azure/core-rest-pipeline@1.19.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.9.0 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.11.0 + '@azure/logger': 1.1.4 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-sse@2.1.3': + dependencies: + tslib: 2.8.1 + + '@azure/core-tracing@1.2.0': + dependencies: + tslib: 2.8.1 + + '@azure/core-util@1.11.0': + dependencies: + '@azure/abort-controller': 2.1.2 + tslib: 2.8.1 + + '@azure/logger@1.1.4': + dependencies: + tslib: 2.8.1 + + '@azure/openai@1.0.0-beta.13': + dependencies: + '@azure-rest/core-client': 1.4.0 + '@azure/core-auth': 1.9.0 + '@azure/core-rest-pipeline': 1.19.0 + '@azure/core-sse': 2.1.3 + '@azure/core-util': 1.11.0 + '@azure/logger': 1.1.4 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.8': {} + + '@babel/core@7.26.8': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.8 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.8) + '@babel/helpers': 7.26.7 + '@babel/parser': 7.26.8 + '@babel/template': 7.26.8 + '@babel/traverse': 7.26.8 + '@babel/types': 7.26.8 + '@types/gensync': 1.0.4 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.8': + dependencies: + '@babel/parser': 7.26.8 + '@babel/types': 7.26.8 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.26.5': + dependencies: + '@babel/compat-data': 7.26.8 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.26.8 + '@babel/types': 7.26.8 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.8)': + dependencies: + '@babel/core': 7.26.8 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.8 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.26.5': {} + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.26.7': + dependencies: + '@babel/template': 7.26.8 + '@babel/types': 7.26.8 + + '@babel/parser@7.26.8': + dependencies: + '@babel/types': 7.26.8 + + '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.8)': + dependencies: + '@babel/core': 7.26.8 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.8)': + dependencies: + '@babel/core': 7.26.8 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.8)': + dependencies: + '@babel/core': 7.26.8 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/runtime@7.26.7': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.26.8': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.8 + '@babel/types': 7.26.8 + + '@babel/traverse@7.26.8': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.8 + '@babel/parser': 7.26.8 + '@babel/template': 7.26.8 + '@babel/types': 7.26.8 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.8': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@bufbuild/protobuf@2.2.3': {} + + '@chakra-ui/anatomy@2.3.4': {} + + '@chakra-ui/anatomy@2.3.5': {} + + '@chakra-ui/hooks@2.4.3(react@18.3.1)': + dependencies: + '@chakra-ui/utils': 2.2.3(react@18.3.1) + '@zag-js/element-size': 0.31.1 + copy-to-clipboard: 3.3.3 + framesync: 6.1.2 + react: 18.3.1 + + '@chakra-ui/react@2.10.4(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(framer-motion@11.18.2(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/hooks': 2.4.3(react@18.3.1) + '@chakra-ui/styled-system': 2.12.1(react@18.3.1) + '@chakra-ui/theme': 3.4.7(@chakra-ui/styled-system@2.12.1(react@18.3.1))(react@18.3.1) + '@chakra-ui/utils': 2.2.3(react@18.3.1) + '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) + '@popperjs/core': 2.11.8 + '@zag-js/focus-visible': 0.31.1 + aria-hidden: 1.2.4 + framer-motion: 11.18.2(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-fast-compare: 3.2.2 + react-focus-lock: 2.13.6(@types/react@18.3.18)(react@18.3.1) + react-remove-scroll: 2.6.3(@types/react@18.3.18)(react@18.3.1) + transitivePeerDependencies: + - '@types/react' + + '@chakra-ui/styled-system@2.12.1(react@18.3.1)': + dependencies: + '@chakra-ui/utils': 2.2.3(react@18.3.1) + csstype: 3.1.3 + transitivePeerDependencies: + - react + + '@chakra-ui/theme-tools@2.2.6(@chakra-ui/styled-system@2.12.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/anatomy': 2.3.4 + '@chakra-ui/styled-system': 2.12.1(react@18.3.1) + '@chakra-ui/utils': 2.2.2(react@18.3.1) + color2k: 2.0.3 + transitivePeerDependencies: + - react + + '@chakra-ui/theme-tools@2.2.7(@chakra-ui/styled-system@2.12.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/anatomy': 2.3.5 + '@chakra-ui/styled-system': 2.12.1(react@18.3.1) + '@chakra-ui/utils': 2.2.3(react@18.3.1) + color2k: 2.0.3 + transitivePeerDependencies: + - react + + '@chakra-ui/theme@3.4.7(@chakra-ui/styled-system@2.12.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/anatomy': 2.3.5 + '@chakra-ui/styled-system': 2.12.1(react@18.3.1) + '@chakra-ui/theme-tools': 2.2.7(@chakra-ui/styled-system@2.12.1(react@18.3.1))(react@18.3.1) + '@chakra-ui/utils': 2.2.3(react@18.3.1) + transitivePeerDependencies: + - react + + '@chakra-ui/utils@2.2.2(react@18.3.1)': + dependencies: + '@types/lodash.mergewith': 4.6.9 + lodash.mergewith: 4.6.2 + react: 18.3.1 + + '@chakra-ui/utils@2.2.3(react@18.3.1)': + dependencies: + '@types/lodash.mergewith': 4.6.9 + lodash.mergewith: 4.6.2 + react: 18.3.1 + + '@changesets/apply-release-plan@7.0.8': + dependencies: + '@changesets/config': 3.0.5 + '@changesets/get-version-range-type': 0.4.0 + '@changesets/git': 3.0.2 + '@changesets/should-skip-package': 0.1.1 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + detect-indent: 6.1.0 + fs-extra: 7.0.1 + lodash.startcase: 4.4.0 + outdent: 0.5.0 + prettier: 2.8.8 + resolve-from: 5.0.0 + semver: 7.7.1 + + '@changesets/assemble-release-plan@6.0.5': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.2 + '@changesets/should-skip-package': 0.1.1 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + semver: 7.7.1 + + '@changesets/changelog-git@0.2.0': + dependencies: + '@changesets/types': 6.0.0 + + '@changesets/cli@2.27.12': + dependencies: + '@changesets/apply-release-plan': 7.0.8 + '@changesets/assemble-release-plan': 6.0.5 + '@changesets/changelog-git': 0.2.0 + '@changesets/config': 3.0.5 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.2 + '@changesets/get-release-plan': 4.0.6 + '@changesets/git': 3.0.2 + '@changesets/logger': 0.1.1 + '@changesets/pre': 2.0.1 + '@changesets/read': 0.6.2 + '@changesets/should-skip-package': 0.1.1 + '@changesets/types': 6.0.0 + '@changesets/write': 0.3.2 + '@manypkg/get-packages': 1.1.3 + ansi-colors: 4.1.3 + ci-info: 3.9.0 + enquirer: 2.4.1 + external-editor: 3.1.0 + fs-extra: 7.0.1 + mri: 1.2.0 + p-limit: 2.3.0 + package-manager-detector: 0.2.9 + picocolors: 1.1.1 + resolve-from: 5.0.0 + semver: 7.7.1 + spawndamnit: 3.0.1 + term-size: 2.2.1 + + '@changesets/config@3.0.5': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.2 + '@changesets/logger': 0.1.1 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + micromatch: 4.0.8 + + '@changesets/errors@0.2.0': + dependencies: + extendable-error: 0.1.7 + + '@changesets/get-dependents-graph@2.1.2': + dependencies: + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + picocolors: 1.1.1 + semver: 7.7.1 + + '@changesets/get-release-plan@4.0.6': + dependencies: + '@changesets/assemble-release-plan': 6.0.5 + '@changesets/config': 3.0.5 + '@changesets/pre': 2.0.1 + '@changesets/read': 0.6.2 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + + '@changesets/get-version-range-type@0.4.0': {} + + '@changesets/git@3.0.2': + dependencies: + '@changesets/errors': 0.2.0 + '@manypkg/get-packages': 1.1.3 + is-subdir: 1.2.0 + micromatch: 4.0.8 + spawndamnit: 3.0.1 + + '@changesets/logger@0.1.1': + dependencies: + picocolors: 1.1.1 + + '@changesets/parse@0.4.0': + dependencies: + '@changesets/types': 6.0.0 + js-yaml: 3.14.1 + + '@changesets/pre@2.0.1': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + + '@changesets/read@0.6.2': + dependencies: + '@changesets/git': 3.0.2 + '@changesets/logger': 0.1.1 + '@changesets/parse': 0.4.0 + '@changesets/types': 6.0.0 + fs-extra: 7.0.1 + p-filter: 2.1.0 + picocolors: 1.1.1 + + '@changesets/should-skip-package@0.1.1': + dependencies: + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + + '@changesets/types@4.1.0': {} + + '@changesets/types@6.0.0': {} + + '@changesets/write@0.3.2': + dependencies: + '@changesets/types': 6.0.0 + fs-extra: 7.0.1 + human-id: 1.0.2 + prettier: 2.8.8 + + '@clack/core@0.3.5': + dependencies: + picocolors: 1.1.1 + sisteransi: 1.0.5 + + '@clack/prompts@0.6.3': + dependencies: + '@clack/core': 0.3.5 + picocolors: 1.1.1 + sisteransi: 1.0.5 + + '@commitlint/cli@19.7.1(@types/node@20.17.17)(typescript@5.7.3)': + dependencies: + '@commitlint/format': 19.5.0 + '@commitlint/lint': 19.7.1 + '@commitlint/load': 19.6.1(@types/node@20.17.17)(typescript@5.7.3) + '@commitlint/read': 19.5.0 + '@commitlint/types': 19.5.0 + tinyexec: 0.3.2 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/config-conventional@19.7.1': + dependencies: + '@commitlint/types': 19.5.0 + conventional-changelog-conventionalcommits: 7.0.2 + + '@commitlint/config-validator@19.5.0': + dependencies: + '@commitlint/types': 19.5.0 + ajv: 8.17.1 + + '@commitlint/ensure@19.5.0': + dependencies: + '@commitlint/types': 19.5.0 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + lodash.snakecase: 4.1.1 + lodash.startcase: 4.4.0 + lodash.upperfirst: 4.3.1 + + '@commitlint/execute-rule@19.5.0': {} + + '@commitlint/format@19.5.0': + dependencies: + '@commitlint/types': 19.5.0 + chalk: 5.4.1 + + '@commitlint/is-ignored@19.7.1': + dependencies: + '@commitlint/types': 19.5.0 + semver: 7.7.1 + + '@commitlint/lint@19.7.1': + dependencies: + '@commitlint/is-ignored': 19.7.1 + '@commitlint/parse': 19.5.0 + '@commitlint/rules': 19.6.0 + '@commitlint/types': 19.5.0 + + '@commitlint/load@19.6.1(@types/node@20.17.17)(typescript@5.7.3)': + dependencies: + '@commitlint/config-validator': 19.5.0 + '@commitlint/execute-rule': 19.5.0 + '@commitlint/resolve-extends': 19.5.0 + '@commitlint/types': 19.5.0 + chalk: 5.4.1 + cosmiconfig: 9.0.0(typescript@5.7.3) + cosmiconfig-typescript-loader: 6.1.0(@types/node@20.17.17)(cosmiconfig@9.0.0(typescript@5.7.3))(typescript@5.7.3) + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + lodash.uniq: 4.5.0 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/message@19.5.0': {} + + '@commitlint/parse@19.5.0': + dependencies: + '@commitlint/types': 19.5.0 + conventional-changelog-angular: 7.0.0 + conventional-commits-parser: 5.0.0 + + '@commitlint/read@19.5.0': + dependencies: + '@commitlint/top-level': 19.5.0 + '@commitlint/types': 19.5.0 + git-raw-commits: 4.0.0 + minimist: 1.2.8 + tinyexec: 0.3.2 + + '@commitlint/resolve-extends@19.5.0': + dependencies: + '@commitlint/config-validator': 19.5.0 + '@commitlint/types': 19.5.0 + global-directory: 4.0.1 + import-meta-resolve: 4.1.0 + lodash.mergewith: 4.6.2 + resolve-from: 5.0.0 + + '@commitlint/rules@19.6.0': + dependencies: + '@commitlint/ensure': 19.5.0 + '@commitlint/message': 19.5.0 + '@commitlint/to-lines': 19.5.0 + '@commitlint/types': 19.5.0 + + '@commitlint/to-lines@19.5.0': {} + + '@commitlint/top-level@19.5.0': + dependencies: + find-up: 7.0.0 + + '@commitlint/types@19.5.0': + dependencies: + '@types/conventional-commits-parser': 5.0.1 + chalk: 5.4.1 + + '@computer-use/default-clipboard-provider@4.2.0(@computer-use/nut-js@4.2.0(encoding@0.1.13))': + dependencies: + '@computer-use/nut-js': 4.2.0(encoding@0.1.13) + clipboardy: 2.3.0 + + '@computer-use/libnut-darwin@2.7.1': + dependencies: + bindings: 1.5.0 + optionalDependencies: + '@computer-use/node-mac-permissions': 2.2.2 + + '@computer-use/libnut-linux@2.7.1': + dependencies: + bindings: 1.5.0 + optionalDependencies: + '@computer-use/node-mac-permissions': 2.2.1 + + '@computer-use/libnut-win32@2.7.1': + dependencies: + bindings: 1.5.0 + optionalDependencies: + '@computer-use/node-mac-permissions': 2.2.1 + + '@computer-use/libnut@4.2.0(@computer-use/nut-js@4.2.0(encoding@0.1.13))': + dependencies: + '@computer-use/libnut-darwin': 2.7.1 + '@computer-use/libnut-linux': 2.7.1 + '@computer-use/libnut-win32': 2.7.1 + '@computer-use/nut-js': 4.2.0(encoding@0.1.13) + + '@computer-use/mac-screen-capture-permissions@1.0.2': + dependencies: + electron-util: 0.17.2 + execa: 5.1.1 + macos-version: 5.2.1 + + '@computer-use/node-mac-permissions@2.2.1': + dependencies: + bindings: 1.5.0 + node-addon-api: 5.0.0 + optional: true + + '@computer-use/node-mac-permissions@2.2.2': + dependencies: + bindings: 1.5.0 + node-addon-api: 5.0.0 + + '@computer-use/nut-js@4.2.0(encoding@0.1.13)': + dependencies: + '@computer-use/default-clipboard-provider': 4.2.0(@computer-use/nut-js@4.2.0(encoding@0.1.13)) + '@computer-use/libnut': 4.2.0(@computer-use/nut-js@4.2.0(encoding@0.1.13)) + '@computer-use/provider-interfaces': 4.2.0(encoding@0.1.13) + '@computer-use/shared': 4.2.0(encoding@0.1.13) + jimp: 0.22.10(encoding@0.1.13) + node-abort-controller: 3.1.1 + transitivePeerDependencies: + - debug + - encoding + + '@computer-use/provider-interfaces@4.2.0(encoding@0.1.13)': + dependencies: + '@computer-use/shared': 4.2.0(encoding@0.1.13) + transitivePeerDependencies: + - debug + - encoding + + '@computer-use/shared@4.2.0(encoding@0.1.13)': + dependencies: + jimp: 0.22.10(encoding@0.1.13) + node-abort-controller: 3.1.1 + transitivePeerDependencies: + - debug + - encoding + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@dqbd/tiktoken@1.0.20': {} + + '@electron-forge/cli@7.6.1(encoding@0.1.13)': + dependencies: + '@electron-forge/core': 7.6.1(encoding@0.1.13) + '@electron-forge/shared-types': 7.6.1 + '@electron/get': 3.1.0 + chalk: 4.1.2 + commander: 4.1.1 + debug: 4.4.0 + fs-extra: 10.1.0 + listr2: 7.0.2 + semver: 7.7.1 + transitivePeerDependencies: + - bluebird + - encoding + - supports-color + + '@electron-forge/core-utils@7.6.1': + dependencies: + '@electron-forge/shared-types': 7.6.1 + '@electron/rebuild': 3.7.1 + '@malept/cross-spawn-promise': 2.0.0 + chalk: 4.1.2 + debug: 4.4.0 + detect-package-manager: 3.0.2 + find-up: 5.0.0 + fs-extra: 10.1.0 + log-symbols: 4.1.0 + semver: 7.7.1 + transitivePeerDependencies: + - bluebird + - supports-color + + '@electron-forge/core@7.6.1(encoding@0.1.13)': + dependencies: + '@electron-forge/core-utils': 7.6.1 + '@electron-forge/maker-base': 7.6.1 + '@electron-forge/plugin-base': 7.6.1 + '@electron-forge/publisher-base': 7.6.1 + '@electron-forge/shared-types': 7.6.1 + '@electron-forge/template-base': 7.6.1 + '@electron-forge/template-vite': 7.6.1 + '@electron-forge/template-vite-typescript': 7.6.1 + '@electron-forge/template-webpack': 7.6.1 + '@electron-forge/template-webpack-typescript': 7.6.1 + '@electron-forge/tracer': 7.6.1 + '@electron/get': 3.1.0 + '@electron/packager': 18.3.6 + '@electron/rebuild': 3.7.1 + '@malept/cross-spawn-promise': 2.0.0 + chalk: 4.1.2 + debug: 4.4.0 + detect-package-manager: 3.0.2 + fast-glob: 3.3.3 + filenamify: 4.3.0 + find-up: 5.0.0 + fs-extra: 10.1.0 + got: 11.8.6 + interpret: 3.1.1 + listr2: 7.0.2 + lodash: 4.17.21 + log-symbols: 4.1.0 + node-fetch: 2.7.0(encoding@0.1.13) + rechoir: 0.8.0 resolve-package: 1.0.1 semver: 7.7.1 source-map-support: 0.5.21 @@ -1351,11 +7438,8 @@ packages: - bluebird - encoding - supports-color - dev: true - /@electron-forge/maker-base@7.6.1: - resolution: {integrity: sha512-kA6k0z4fFbqfjV++bbYVC46TckiqyqIo/gTW/QexsT6xlutXUbnNevhoRPVfGigftSAjE6T26DwTogC9hNDkwg==} - engines: {node: '>= 16.4.0'} + '@electron-forge/maker-base@7.6.1': dependencies: '@electron-forge/shared-types': 7.6.1 fs-extra: 10.1.0 @@ -1363,11 +7447,8 @@ packages: transitivePeerDependencies: - bluebird - supports-color - dev: true - /@electron-forge/maker-deb@7.6.1: - resolution: {integrity: sha512-8pqwxwlMPddH6anfNL8vYE5v2mlPia+z9YcpnLlMbMjWo9ksRcxmrg2t3El9jvk1TkiPoqVcQzCNaQqYQaMoiw==} - engines: {node: '>= 16.4.0'} + '@electron-forge/maker-deb@7.6.1': dependencies: '@electron-forge/maker-base': 7.6.1 '@electron-forge/shared-types': 7.6.1 @@ -1376,11 +7457,8 @@ packages: transitivePeerDependencies: - bluebird - supports-color - dev: true - /@electron-forge/maker-dmg@7.6.1: - resolution: {integrity: sha512-D7cJRE6CGeovLZhu2dRqUm3w/AlkTURYJYgFuUsgwpBuviQKgJd8quZar6IeZ/l83y4Z1dghKb8D3aAj+bRvNQ==} - engines: {node: '>= 16.4.0'} + '@electron-forge/maker-dmg@7.6.1': dependencies: '@electron-forge/maker-base': 7.6.1 '@electron-forge/shared-types': 7.6.1 @@ -1390,11 +7468,8 @@ packages: transitivePeerDependencies: - bluebird - supports-color - dev: true - /@electron-forge/maker-rpm@7.6.1: - resolution: {integrity: sha512-BShfmto+XTSA01pkZp10r2ktyruVfI24sGC+y4az1vbqkmX2qN9j0Xr+G/ZMHsm76XHju0N/e1Y2pqqu2JM8/A==} - engines: {node: '>= 16.4.0'} + '@electron-forge/maker-rpm@7.6.1': dependencies: '@electron-forge/maker-base': 7.6.1 '@electron-forge/shared-types': 7.6.1 @@ -1403,11 +7478,8 @@ packages: transitivePeerDependencies: - bluebird - supports-color - dev: true - /@electron-forge/maker-squirrel@7.6.1: - resolution: {integrity: sha512-7EMLcl0QM5GfdY+enfauEqV6ZW14A1S6Eqoev812FXGTm88G8Ik0tPRw6SsIaI8R++YqxsbdCGTQjzdJWY0bJA==} - engines: {node: '>= 16.4.0'} + '@electron-forge/maker-squirrel@7.6.1': dependencies: '@electron-forge/maker-base': 7.6.1 '@electron-forge/shared-types': 7.6.1 @@ -1417,11 +7489,8 @@ packages: transitivePeerDependencies: - bluebird - supports-color - dev: true - /@electron-forge/maker-zip@7.6.1: - resolution: {integrity: sha512-omoBwoY99DpsgabVIu6Qva+r8kwCY04zDV+P60WN6x+JX/MF+Bk3zI271aH6raZaB+YSbvaed/LDG1QmEM9cTA==} - engines: {node: '>= 16.4.0'} + '@electron-forge/maker-zip@7.6.1': dependencies: '@electron-forge/maker-base': 7.6.1 '@electron-forge/shared-types': 7.6.1 @@ -1431,34 +7500,23 @@ packages: transitivePeerDependencies: - bluebird - supports-color - dev: true - /@electron-forge/plugin-auto-unpack-natives@7.6.1: - resolution: {integrity: sha512-sPFSVhlJBvEA70e0QNbYno5AYc8nvmKCgs4YqTwc24ONhIX0TwGAzjuJ7AZBOj88rhhY9+9Rkl9cONVa5GGZvA==} - engines: {node: '>= 16.4.0'} + '@electron-forge/plugin-auto-unpack-natives@7.6.1': dependencies: '@electron-forge/plugin-base': 7.6.1 '@electron-forge/shared-types': 7.6.1 transitivePeerDependencies: - bluebird - supports-color - dev: true - /@electron-forge/plugin-base@7.6.1: - resolution: {integrity: sha512-RWt+a8At55dVwEgr8BnnmBN05QzZq+DbOHNPeSJEM2d4ZyLUZXTkkwSF+ZMVk5mQCfIf75l+6BEzkXOcVvti2Q==} - engines: {node: '>= 16.4.0'} + '@electron-forge/plugin-base@7.6.1': dependencies: '@electron-forge/shared-types': 7.6.1 transitivePeerDependencies: - bluebird - supports-color - dev: true - /@electron-forge/plugin-fuses@7.6.1(@electron/fuses@1.8.0): - resolution: {integrity: sha512-M37qQ3/fhvs50Cu5Q0APw7AAWmaS8zGWhbBCAGAeDt1jK0/d8vT6TVb3Qa91tqnIoAhz9DhdTemYrtieBSAF3Q==} - engines: {node: '>= 16.4.0'} - peerDependencies: - '@electron/fuses': '>=1.0.0' + '@electron-forge/plugin-fuses@7.6.1(@electron/fuses@1.8.0)': dependencies: '@electron-forge/plugin-base': 7.6.1 '@electron-forge/shared-types': 7.6.1 @@ -1466,11 +7524,8 @@ packages: transitivePeerDependencies: - bluebird - supports-color - dev: true - /@electron-forge/plugin-vite@7.6.1: - resolution: {integrity: sha512-+F9wMQRYwr104Jz4HPxBFzg0Tt76LiRF5XIz5d1SoCQ/wUM2oC0zxurQ/DqFcbf6pzeM/WZ1mpFx24bJRSVmJw==} - engines: {node: '>= 16.4.0'} + '@electron-forge/plugin-vite@7.6.1': dependencies: '@electron-forge/core-utils': 7.6.1 '@electron-forge/plugin-base': 7.6.1 @@ -1485,28 +7540,22 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: true - /@electron-forge/publisher-base@7.6.1: - resolution: {integrity: sha512-VE0DJJYcMRGMxEbeC20q+ynCpra9oqkM6oXd8O1jRyTit9F+PZlscT/p5vLANrTW5vGrV6CXLyyloPxWxOf8DA==} - engines: {node: '>= 16.4.0'} + '@electron-forge/publisher-base@7.6.1': dependencies: '@electron-forge/shared-types': 7.6.1 transitivePeerDependencies: - bluebird - supports-color - dev: true - /@electron-forge/publisher-github@7.6.1: - resolution: {integrity: sha512-7hhVIJ+isfSOzsYr9yR/cgJB4I/esxgUrxhdvB+VZMZos1jYddcQQxtGWjFsxcHqg/1aQSM/iIB14qgwZSVtmw==} - engines: {node: '>= 16.4.0'} + '@electron-forge/publisher-github@7.6.1(encoding@0.1.13)': dependencies: '@electron-forge/publisher-base': 7.6.1 '@electron-forge/shared-types': 7.6.1 - '@octokit/core': 3.6.0 + '@octokit/core': 3.6.0(encoding@0.1.13) '@octokit/plugin-retry': 3.0.9 '@octokit/request-error': 2.1.0 - '@octokit/rest': 18.12.0 + '@octokit/rest': 18.12.0(encoding@0.1.13) '@octokit/types': 6.41.0 chalk: 4.1.2 debug: 4.4.0 @@ -1517,11 +7566,8 @@ packages: - bluebird - encoding - supports-color - dev: true - /@electron-forge/shared-types@7.6.1: - resolution: {integrity: sha512-i6VdZGG8SYEBirpk+FP7bEMYtCNf9wBkK81IcPco8LP0KbsvgR8y7aUSVxG8DLoVwYB5yr0N9MYXOfNp1gkQ7A==} - engines: {node: '>= 16.4.0'} + '@electron-forge/shared-types@7.6.1': dependencies: '@electron-forge/tracer': 7.6.1 '@electron/packager': 18.3.6 @@ -1530,11 +7576,8 @@ packages: transitivePeerDependencies: - bluebird - supports-color - dev: true - /@electron-forge/template-base@7.6.1: - resolution: {integrity: sha512-Pk65CIe6jYJa/hv25o0ueyuAOrRTi3qz92g5cYnj+YZzndNmrem1sNQvNKkavw0w0TKEUC5Y0EZ4ejLSYhVIQA==} - engines: {node: '>= 16.4.0'} + '@electron-forge/template-base@7.6.1': dependencies: '@electron-forge/shared-types': 7.6.1 '@malept/cross-spawn-promise': 2.0.0 @@ -1544,11 +7587,8 @@ packages: transitivePeerDependencies: - bluebird - supports-color - dev: true - /@electron-forge/template-vite-typescript@7.6.1: - resolution: {integrity: sha512-7aMq7/woR2xUNbCYCRa/dwinnjoYKuamn17hYBwmyRNJ+YKV9btVK6lq+WR4sJmFM5Fv3qOJlUwrNyxH+HoUCQ==} - engines: {node: '>= 16.4.0'} + '@electron-forge/template-vite-typescript@7.6.1': dependencies: '@electron-forge/shared-types': 7.6.1 '@electron-forge/template-base': 7.6.1 @@ -1556,11 +7596,8 @@ packages: transitivePeerDependencies: - bluebird - supports-color - dev: true - /@electron-forge/template-vite@7.6.1: - resolution: {integrity: sha512-DxRBCXgnpFQHueG3M6yDN1x2pTYDycHXIddLExUydA9bsrxVwlu8Oo7Mm5XOEltebITD/bZ0iQniOVkzUov37g==} - engines: {node: '>= 16.4.0'} + '@electron-forge/template-vite@7.6.1': dependencies: '@electron-forge/shared-types': 7.6.1 '@electron-forge/template-base': 7.6.1 @@ -1568,11 +7605,8 @@ packages: transitivePeerDependencies: - bluebird - supports-color - dev: true - /@electron-forge/template-webpack-typescript@7.6.1: - resolution: {integrity: sha512-ECEd70QOAi7r2ZibIU2U9rh0CVND7oJP5BnKRCP20uUCxdQdO7RTMRDXesm41VTRa1uZ+64pRdOQTDFHB6xitA==} - engines: {node: '>= 16.4.0'} + '@electron-forge/template-webpack-typescript@7.6.1': dependencies: '@electron-forge/shared-types': 7.6.1 '@electron-forge/template-base': 7.6.1 @@ -1580,11 +7614,8 @@ packages: transitivePeerDependencies: - bluebird - supports-color - dev: true - /@electron-forge/template-webpack@7.6.1: - resolution: {integrity: sha512-8HXJ7eh5mjphC2tBfBOroEfM71DsWt3yrkEQMGzW6Lc5u2itkCQrEAINm3nuLscWrqLRk4ZsfT1f1VzdwAraXg==} - engines: {node: '>= 16.4.0'} + '@electron-forge/template-webpack@7.6.1': dependencies: '@electron-forge/shared-types': 7.6.1 '@electron-forge/template-base': 7.6.1 @@ -1592,18 +7623,12 @@ packages: transitivePeerDependencies: - bluebird - supports-color - dev: true - /@electron-forge/tracer@7.6.1: - resolution: {integrity: sha512-nZzVzXT4xdueWYoSbgStS5LfcifW/e/WJj9VOt6xYpFxYOsQHpLkkCAc6nH0gxn+60kiU4FMU0p2kSQ2eQhWuA==} - engines: {node: '>= 14.17.5'} + '@electron-forge/tracer@7.6.1': dependencies: chrome-trace-event: 1.0.4 - dev: true - /@electron-forge/web-multi-logger@7.6.1: - resolution: {integrity: sha512-UdSZXDVUBQ4kVXFt8mChGz6wg6d+RDstP5EiPhy94lxskQeAielC0qStBl4QOzXhf3k104ZfOitW3TQBS59HKA==} - engines: {node: '>= 16.4.0'} + '@electron-forge/web-multi-logger@7.6.1': dependencies: express: 4.21.2 express-ws: 5.0.2(express@4.21.2) @@ -1614,85 +7639,51 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: true - /@electron-toolkit/eslint-config-prettier@2.0.0(eslint@8.57.1)(prettier@3.5.0): - resolution: {integrity: sha512-L+uG1FvJcAZkPZpSi6B1pmdpyJFyOxWDTjr1Vs47vSryxv/EX1Ch6o4HVsachlDq3fMEkDgojuP2F3ZvVZMoLw==} - peerDependencies: - eslint: '>= 8.0.0' - prettier: '>= 3.0.0' + '@electron-toolkit/eslint-config-prettier@2.0.0(eslint@8.57.1)(prettier@3.5.0)': dependencies: eslint: 8.57.1 eslint-config-prettier: 9.1.0(eslint@8.57.1) - eslint-plugin-prettier: 5.2.3(eslint-config-prettier@9.1.0)(eslint@8.57.1)(prettier@3.5.0) + eslint-plugin-prettier: 5.2.3(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.5.0) prettier: 3.5.0 transitivePeerDependencies: - '@types/eslint' - dev: true - /@electron-toolkit/eslint-config-ts@2.0.0(eslint@8.57.1)(typescript@5.7.3): - resolution: {integrity: sha512-NGXadMyWH9+ZsgYe/u5E0mqK2qTDq01kKKnyo7oiq/7v/dWoMoPhqSkn69NZvt7WmnFNOm57l71fv6128mAx3Q==} - peerDependencies: - eslint: '>=8.56.0' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@electron-toolkit/eslint-config-ts@2.0.0(eslint@8.57.1)(typescript@5.7.3)': dependencies: - '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3) '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.7.3) eslint: 8.57.1 + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - supports-color - dev: true - /@electron-toolkit/preload@3.0.1(electron@34.0.2): - resolution: {integrity: sha512-EzoQmpK8jqqU8YnM5jRe0GJjGVJPke2KtANqz8QtN2JPT96ViOvProBdK5C6riCm0j1T8jjAGVQCZLQy9OVoIA==} - peerDependencies: - electron: '>=13.0.0' + '@electron-toolkit/preload@3.0.1(electron@34.1.1)': dependencies: - electron: 34.0.2 - dev: true + electron: 34.1.1 - /@electron-toolkit/tsconfig@1.0.1(@types/node@20.17.17): - resolution: {integrity: sha512-M0Mol3odspvtCuheyujLNAW7bXq7KFNYVMRtpjFa4ZfES4MuklXBC7Nli/omvc+PRKlrklgAGx3l4VakjNo8jg==} - peerDependencies: - '@types/node': '*' + '@electron-toolkit/tsconfig@1.0.1(@types/node@20.17.17)': dependencies: '@types/node': 20.17.17 - dev: true - /@electron-toolkit/utils@3.0.0(electron@34.0.2): - resolution: {integrity: sha512-GaXHDhiT7KCvMJjXdp/QqpYinq69T/Pdl49Z1XLf8mKGf63dnsODMWyrmIjEQ0z/vG7dO8qF3fvmI6Eb2lUNZA==} - peerDependencies: - electron: '>=13.0.0' + '@electron-toolkit/utils@3.0.0(electron@34.1.1)': dependencies: - electron: 34.0.2 - dev: false + electron: 34.1.1 - /@electron/asar@3.3.1: - resolution: {integrity: sha512-WtpC/+34p0skWZiarRjLAyqaAX78DofhDxnREy/V5XHfu1XEXbFCSSMcDQ6hNCPJFaPy8/NnUgYuf9uiCkvKPg==} - engines: {node: '>=10.12.0'} - hasBin: true + '@electron/asar@3.3.1': dependencies: commander: 5.1.0 glob: 7.2.3 minimatch: 3.1.2 - dev: true - /@electron/fuses@1.8.0: - resolution: {integrity: sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==} - hasBin: true + '@electron/fuses@1.8.0': dependencies: chalk: 4.1.2 fs-extra: 9.1.0 minimist: 1.2.8 - dev: true - /@electron/get@2.0.3: - resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==} - engines: {node: '>=12'} + '@electron/get@2.0.3': dependencies: debug: 4.4.0 env-paths: 2.2.1 @@ -1706,9 +7697,7 @@ packages: transitivePeerDependencies: - supports-color - /@electron/get@3.1.0: - resolution: {integrity: sha512-F+nKc0xW+kVbBRhFzaMgPy3KwmuNTYX1fx6+FxxoSnNgwYX6LD7AKBTWkU0MQ6IBoe7dz069CNkR673sPAgkCQ==} - engines: {node: '>=14'} + '@electron/get@3.1.0': dependencies: debug: 4.4.0 env-paths: 2.2.1 @@ -1721,23 +7710,32 @@ packages: global-agent: 3.0.0 transitivePeerDependencies: - supports-color - dev: true - /@electron/notarize@2.5.0: - resolution: {integrity: sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==} - engines: {node: '>= 10.0.0'} + '@electron/node-gyp@https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2': + dependencies: + env-paths: 2.2.1 + exponential-backoff: 3.1.2 + glob: 8.1.0 + graceful-fs: 4.2.11 + make-fetch-happen: 10.2.1 + nopt: 6.0.0 + proc-log: 2.0.1 + semver: 7.7.1 + tar: 6.2.1 + which: 2.0.2 + transitivePeerDependencies: + - bluebird + - supports-color + + '@electron/notarize@2.5.0': dependencies: debug: 4.4.0 fs-extra: 9.1.0 promise-retry: 2.0.1 transitivePeerDependencies: - supports-color - dev: true - /@electron/osx-sign@1.3.2: - resolution: {integrity: sha512-KqVlm9WMWq19lBpCXQoThC/Koaiji2zotUDYwZDaZlZZym+FXY9mQW8wN6sUQ93nkVc42f3TQ1S/XN9S1kjM5Q==} - engines: {node: '>=12.0.0'} - hasBin: true + '@electron/osx-sign@1.3.2': dependencies: compare-version: 0.1.2 debug: 4.4.0 @@ -1747,12 +7745,8 @@ packages: plist: 3.1.0 transitivePeerDependencies: - supports-color - dev: true - /@electron/packager@18.3.6: - resolution: {integrity: sha512-1eXHB5t+SQKvUiDpWGpvr90ZSSbXj+isrh3YbjCTjKT4bE4SQrKSBfukEAaBvp67+GXHFtCHjQgN9qSTFIge+Q==} - engines: {node: '>= 16.13.0'} - hasBin: true + '@electron/packager@18.3.6': dependencies: '@electron/asar': 3.3.1 '@electron/get': 3.1.0 @@ -1775,14 +7769,10 @@ packages: yargs-parser: 21.1.1 transitivePeerDependencies: - supports-color - dev: true - /@electron/rebuild@3.7.1: - resolution: {integrity: sha512-sKGD+xav4Gh25+LcLY0rjIwcCFTw+f/HU1pB48UVbwxXXRGaXEqIH0AaYKN46dgd/7+6kuiDXzoyAEvx1zCsdw==} - engines: {node: '>=12.13.0'} - hasBin: true + '@electron/rebuild@3.7.1': dependencies: - '@electron/node-gyp': github.com/electron/node-gyp/06b29aafb7708acef8b3669835c8a7857ebc92d2 + '@electron/node-gyp': https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2 '@malept/cross-spawn-promise': 2.0.0 chalk: 4.1.2 debug: 4.4.0 @@ -1799,11 +7789,8 @@ packages: transitivePeerDependencies: - bluebird - supports-color - dev: true - /@electron/universal@2.0.1: - resolution: {integrity: sha512-fKpv9kg4SPmt+hY7SVBnIYULE9QJl8L3sCfcBsnqbJwwBwAeTLokJ9TRt9y7bK0JAzIW2y78TVVjvnQEms/yyA==} - engines: {node: '>=16.4'} + '@electron/universal@2.0.1': dependencies: '@electron/asar': 3.3.1 '@malept/cross-spawn-promise': 2.0.0 @@ -1814,12 +7801,8 @@ packages: plist: 3.1.0 transitivePeerDependencies: - supports-color - dev: true - /@electron/windows-sign@1.2.0: - resolution: {integrity: sha512-5zfLHfD6kGgsXzuYlKwlWWO8w6dboKy4dhd7rGnR4rQYumuDgPAF2TYjEa8LUi89KdHxtDy2btq02KvbjhK9Iw==} - engines: {node: '>=14.14'} - hasBin: true + '@electron/windows-sign@1.2.0': dependencies: cross-dirname: 0.1.0 debug: 4.4.0 @@ -1828,18 +7811,13 @@ packages: postject: 1.0.0-alpha.6 transitivePeerDependencies: - supports-color - dev: true - /@emnapi/runtime@1.3.1: - resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} - requiresBuild: true + '@emnapi/runtime@1.3.1': dependencies: tslib: 2.8.1 - dev: false optional: true - /@emotion/babel-plugin@11.13.5: - resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} + '@emotion/babel-plugin@11.13.5': dependencies: '@babel/helper-module-imports': 7.25.9 '@babel/runtime': 7.26.7 @@ -1854,40 +7832,24 @@ packages: stylis: 4.2.0 transitivePeerDependencies: - supports-color - dev: true - /@emotion/cache@11.14.0: - resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==} + '@emotion/cache@11.14.0': dependencies: '@emotion/memoize': 0.9.0 '@emotion/sheet': 1.4.0 '@emotion/utils': 1.4.2 '@emotion/weak-memoize': 0.4.0 stylis: 4.2.0 - dev: true - /@emotion/hash@0.9.2: - resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} - dev: true + '@emotion/hash@0.9.2': {} - /@emotion/is-prop-valid@1.3.1: - resolution: {integrity: sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==} + '@emotion/is-prop-valid@1.3.1': dependencies: '@emotion/memoize': 0.9.0 - dev: true - /@emotion/memoize@0.9.0: - resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} - dev: true + '@emotion/memoize@0.9.0': {} - /@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1): - resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==} - peerDependencies: - '@types/react': '*' - react: '>=16.8.0' - peerDependenciesMeta: - '@types/react': - optional: true + '@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1)': dependencies: '@babel/runtime': 7.26.7 '@emotion/babel-plugin': 11.13.5 @@ -1896,36 +7858,24 @@ packages: '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1) '@emotion/utils': 1.4.2 '@emotion/weak-memoize': 0.4.0 - '@types/react': 18.3.18 hoist-non-react-statics: 3.3.2 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 transitivePeerDependencies: - supports-color - dev: true - /@emotion/serialize@1.3.3: - resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==} + '@emotion/serialize@1.3.3': dependencies: '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 '@emotion/unitless': 0.10.0 '@emotion/utils': 1.4.2 csstype: 3.1.3 - dev: true - /@emotion/sheet@1.4.0: - resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} - dev: true + '@emotion/sheet@1.4.0': {} - /@emotion/styled@11.14.0(@emotion/react@11.14.0)(@types/react@18.3.18)(react@18.3.1): - resolution: {integrity: sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==} - peerDependencies: - '@emotion/react': ^11.0.0-rc.0 - '@types/react': '*' - react: '>=16.8.0' - peerDependenciesMeta: - '@types/react': - optional: true + '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1)': dependencies: '@babel/runtime': 7.26.7 '@emotion/babel-plugin': 11.13.5 @@ -1934,923 +7884,321 @@ packages: '@emotion/serialize': 1.3.3 '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1) '@emotion/utils': 1.4.2 - '@types/react': 18.3.18 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 transitivePeerDependencies: - supports-color - dev: true - /@emotion/unitless@0.10.0: - resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} - dev: true + '@emotion/unitless@0.10.0': {} - /@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@18.3.1): - resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==} - peerDependencies: - react: '>=16.8.0' + '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@18.3.1)': dependencies: react: 18.3.1 - dev: true - /@emotion/utils@1.4.2: - resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} - dev: true + '@emotion/utils@1.4.2': {} - /@emotion/weak-memoize@0.4.0: - resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} - dev: true + '@emotion/weak-memoize@0.4.0': {} - /@esbuild/aix-ppc64@0.21.5: - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - requiresBuild: true - dev: true + '@esbuild/aix-ppc64@0.21.5': optional: true - /@esbuild/aix-ppc64@0.23.1: - resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - requiresBuild: true - dev: true + '@esbuild/aix-ppc64@0.23.1': optional: true - /@esbuild/aix-ppc64@0.24.2: - resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - requiresBuild: true - dev: true + '@esbuild/aix-ppc64@0.24.2': optional: true - /@esbuild/aix-ppc64@0.25.0: - resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - requiresBuild: true - dev: false + '@esbuild/aix-ppc64@0.25.0': optional: true - /@esbuild/android-arm64@0.21.5: - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true + '@esbuild/android-arm64@0.21.5': optional: true - /@esbuild/android-arm64@0.23.1: - resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true + '@esbuild/android-arm64@0.23.1': optional: true - /@esbuild/android-arm64@0.24.2: - resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true + '@esbuild/android-arm64@0.24.2': optional: true - /@esbuild/android-arm64@0.25.0: - resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: false + '@esbuild/android-arm64@0.25.0': optional: true - /@esbuild/android-arm@0.21.5: - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true + '@esbuild/android-arm@0.21.5': optional: true - /@esbuild/android-arm@0.23.1: - resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true + '@esbuild/android-arm@0.23.1': optional: true - /@esbuild/android-arm@0.24.2: - resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true + '@esbuild/android-arm@0.24.2': optional: true - /@esbuild/android-arm@0.25.0: - resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: false + '@esbuild/android-arm@0.25.0': optional: true - /@esbuild/android-x64@0.21.5: - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true + '@esbuild/android-x64@0.21.5': optional: true - /@esbuild/android-x64@0.23.1: - resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true + '@esbuild/android-x64@0.23.1': optional: true - /@esbuild/android-x64@0.24.2: - resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true + '@esbuild/android-x64@0.24.2': optional: true - /@esbuild/android-x64@0.25.0: - resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: false + '@esbuild/android-x64@0.25.0': optional: true - /@esbuild/darwin-arm64@0.21.5: - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true + '@esbuild/darwin-arm64@0.21.5': optional: true - /@esbuild/darwin-arm64@0.23.1: - resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true + '@esbuild/darwin-arm64@0.23.1': optional: true - /@esbuild/darwin-arm64@0.24.2: - resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true + '@esbuild/darwin-arm64@0.24.2': optional: true - /@esbuild/darwin-arm64@0.25.0: - resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false + '@esbuild/darwin-arm64@0.25.0': optional: true - /@esbuild/darwin-x64@0.21.5: - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true + '@esbuild/darwin-x64@0.21.5': optional: true - /@esbuild/darwin-x64@0.23.1: - resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true + '@esbuild/darwin-x64@0.23.1': optional: true - /@esbuild/darwin-x64@0.24.2: - resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true + '@esbuild/darwin-x64@0.24.2': optional: true - /@esbuild/darwin-x64@0.25.0: - resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: false + '@esbuild/darwin-x64@0.25.0': optional: true - /@esbuild/freebsd-arm64@0.21.5: - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true + '@esbuild/freebsd-arm64@0.21.5': optional: true - /@esbuild/freebsd-arm64@0.23.1: - resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true + '@esbuild/freebsd-arm64@0.23.1': optional: true - /@esbuild/freebsd-arm64@0.24.2: - resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true + '@esbuild/freebsd-arm64@0.24.2': optional: true - /@esbuild/freebsd-arm64@0.25.0: - resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: false + '@esbuild/freebsd-arm64@0.25.0': optional: true - /@esbuild/freebsd-x64@0.21.5: - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true + '@esbuild/freebsd-x64@0.21.5': optional: true - /@esbuild/freebsd-x64@0.23.1: - resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true + '@esbuild/freebsd-x64@0.23.1': optional: true - /@esbuild/freebsd-x64@0.24.2: - resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true + '@esbuild/freebsd-x64@0.24.2': optional: true - /@esbuild/freebsd-x64@0.25.0: - resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: false + '@esbuild/freebsd-x64@0.25.0': optional: true - /@esbuild/linux-arm64@0.21.5: - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-arm64@0.21.5': optional: true - /@esbuild/linux-arm64@0.23.1: - resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-arm64@0.23.1': optional: true - /@esbuild/linux-arm64@0.24.2: - resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-arm64@0.24.2': optional: true - /@esbuild/linux-arm64@0.25.0: - resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false + '@esbuild/linux-arm64@0.25.0': optional: true - /@esbuild/linux-arm@0.21.5: - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-arm@0.21.5': optional: true - /@esbuild/linux-arm@0.23.1: - resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-arm@0.23.1': optional: true - /@esbuild/linux-arm@0.24.2: - resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-arm@0.24.2': optional: true - /@esbuild/linux-arm@0.25.0: - resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: false + '@esbuild/linux-arm@0.25.0': optional: true - /@esbuild/linux-ia32@0.21.5: - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-ia32@0.21.5': optional: true - /@esbuild/linux-ia32@0.23.1: - resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-ia32@0.23.1': optional: true - /@esbuild/linux-ia32@0.24.2: - resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-ia32@0.24.2': optional: true - /@esbuild/linux-ia32@0.25.0: - resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: false + '@esbuild/linux-ia32@0.25.0': optional: true - /@esbuild/linux-loong64@0.21.5: - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-loong64@0.21.5': optional: true - /@esbuild/linux-loong64@0.23.1: - resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-loong64@0.23.1': optional: true - /@esbuild/linux-loong64@0.24.2: - resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-loong64@0.24.2': optional: true - /@esbuild/linux-loong64@0.25.0: - resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: false + '@esbuild/linux-loong64@0.25.0': optional: true - /@esbuild/linux-mips64el@0.21.5: - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-mips64el@0.21.5': optional: true - /@esbuild/linux-mips64el@0.23.1: - resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-mips64el@0.23.1': optional: true - /@esbuild/linux-mips64el@0.24.2: - resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-mips64el@0.24.2': optional: true - /@esbuild/linux-mips64el@0.25.0: - resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: false + '@esbuild/linux-mips64el@0.25.0': optional: true - /@esbuild/linux-ppc64@0.21.5: - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-ppc64@0.21.5': optional: true - /@esbuild/linux-ppc64@0.23.1: - resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-ppc64@0.23.1': optional: true - /@esbuild/linux-ppc64@0.24.2: - resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-ppc64@0.24.2': optional: true - /@esbuild/linux-ppc64@0.25.0: - resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: false + '@esbuild/linux-ppc64@0.25.0': optional: true - /@esbuild/linux-riscv64@0.21.5: - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-riscv64@0.21.5': optional: true - /@esbuild/linux-riscv64@0.23.1: - resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-riscv64@0.23.1': optional: true - /@esbuild/linux-riscv64@0.24.2: - resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-riscv64@0.24.2': optional: true - /@esbuild/linux-riscv64@0.25.0: - resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: false + '@esbuild/linux-riscv64@0.25.0': optional: true - /@esbuild/linux-s390x@0.21.5: - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-s390x@0.21.5': optional: true - /@esbuild/linux-s390x@0.23.1: - resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-s390x@0.23.1': optional: true - /@esbuild/linux-s390x@0.24.2: - resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-s390x@0.24.2': optional: true - /@esbuild/linux-s390x@0.25.0: - resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: false + '@esbuild/linux-s390x@0.25.0': optional: true - /@esbuild/linux-x64@0.21.5: - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-x64@0.21.5': optional: true - /@esbuild/linux-x64@0.23.1: - resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-x64@0.23.1': optional: true - /@esbuild/linux-x64@0.24.2: - resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-x64@0.24.2': optional: true - /@esbuild/linux-x64@0.25.0: - resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false + '@esbuild/linux-x64@0.25.0': optional: true - /@esbuild/netbsd-arm64@0.24.2: - resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - requiresBuild: true - dev: true + '@esbuild/netbsd-arm64@0.24.2': optional: true - /@esbuild/netbsd-arm64@0.25.0: - resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - requiresBuild: true - dev: false + '@esbuild/netbsd-arm64@0.25.0': optional: true - /@esbuild/netbsd-x64@0.21.5: - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true + '@esbuild/netbsd-x64@0.21.5': optional: true - /@esbuild/netbsd-x64@0.23.1: - resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true + '@esbuild/netbsd-x64@0.23.1': optional: true - /@esbuild/netbsd-x64@0.24.2: - resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true + '@esbuild/netbsd-x64@0.24.2': optional: true - /@esbuild/netbsd-x64@0.25.0: - resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: false + '@esbuild/netbsd-x64@0.25.0': optional: true - /@esbuild/openbsd-arm64@0.23.1: - resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - requiresBuild: true - dev: true + '@esbuild/openbsd-arm64@0.23.1': optional: true - /@esbuild/openbsd-arm64@0.24.2: - resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - requiresBuild: true - dev: true + '@esbuild/openbsd-arm64@0.24.2': optional: true - /@esbuild/openbsd-arm64@0.25.0: - resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - requiresBuild: true - dev: false + '@esbuild/openbsd-arm64@0.25.0': optional: true - /@esbuild/openbsd-x64@0.21.5: - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true + '@esbuild/openbsd-x64@0.21.5': optional: true - /@esbuild/openbsd-x64@0.23.1: - resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true + '@esbuild/openbsd-x64@0.23.1': optional: true - /@esbuild/openbsd-x64@0.24.2: - resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true + '@esbuild/openbsd-x64@0.24.2': optional: true - /@esbuild/openbsd-x64@0.25.0: - resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: false + '@esbuild/openbsd-x64@0.25.0': optional: true - /@esbuild/sunos-x64@0.21.5: - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true + '@esbuild/sunos-x64@0.21.5': optional: true - /@esbuild/sunos-x64@0.23.1: - resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true + '@esbuild/sunos-x64@0.23.1': optional: true - /@esbuild/sunos-x64@0.24.2: - resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true + '@esbuild/sunos-x64@0.24.2': optional: true - /@esbuild/sunos-x64@0.25.0: - resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: false + '@esbuild/sunos-x64@0.25.0': optional: true - /@esbuild/win32-arm64@0.21.5: - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true + '@esbuild/win32-arm64@0.21.5': optional: true - /@esbuild/win32-arm64@0.23.1: - resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true + '@esbuild/win32-arm64@0.23.1': optional: true - /@esbuild/win32-arm64@0.24.2: - resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true + '@esbuild/win32-arm64@0.24.2': optional: true - /@esbuild/win32-arm64@0.25.0: - resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: false + '@esbuild/win32-arm64@0.25.0': optional: true - /@esbuild/win32-ia32@0.21.5: - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true + '@esbuild/win32-ia32@0.21.5': optional: true - /@esbuild/win32-ia32@0.23.1: - resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true + '@esbuild/win32-ia32@0.23.1': optional: true - /@esbuild/win32-ia32@0.24.2: - resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true + '@esbuild/win32-ia32@0.24.2': optional: true - /@esbuild/win32-ia32@0.25.0: - resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: false + '@esbuild/win32-ia32@0.25.0': optional: true - /@esbuild/win32-x64@0.21.5: - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true + '@esbuild/win32-x64@0.21.5': optional: true - /@esbuild/win32-x64@0.23.1: - resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true + '@esbuild/win32-x64@0.23.1': optional: true - /@esbuild/win32-x64@0.24.2: - resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true + '@esbuild/win32-x64@0.24.2': optional: true - /@esbuild/win32-x64@0.25.0: - resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false + '@esbuild/win32-x64@0.25.0': optional: true - /@eslint-community/eslint-utils@4.4.1(eslint@8.57.1): - resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/eslint-utils@4.4.1(eslint@8.57.1)': dependencies: eslint: 8.57.1 eslint-visitor-keys: 3.4.3 - dev: true - /@eslint-community/regexpp@4.12.1: - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true + '@eslint-community/regexpp@4.12.1': {} - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 debug: 4.4.0 @@ -2863,673 +8211,370 @@ packages: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - dev: true - /@eslint/js@8.57.1: - resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + '@eslint/js@8.57.1': {} - /@fastify/busboy@2.1.1: - resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} - engines: {node: '>=14'} - dev: true + '@fastify/busboy@2.1.1': {} - /@gar/promisify@1.1.3: - resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} - dev: true + '@gar/promisify@1.1.3': {} - /@google/generative-ai@0.11.5: - resolution: {integrity: sha512-DviMgrnljEKh6qkDT2pVFW+NEuVhggqBUoEnyy2PNL7l4ewxXRJubk3PctC9yPl1AdRIlhqP7E076QQt+IWuTg==} - engines: {node: '>=18.0.0'} - dev: true + '@google/generative-ai@0.11.5': {} - /@humanwhocodes/config-array@0.13.0: - resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead + '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 debug: 4.4.0 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - dev: true - /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - dev: true + '@humanwhocodes/module-importer@1.0.1': {} - /@humanwhocodes/object-schema@2.0.3: - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead - dev: true + '@humanwhocodes/object-schema@2.0.3': {} - /@img/sharp-darwin-arm64@0.33.3: - resolution: {integrity: sha512-FaNiGX1MrOuJ3hxuNzWgsT/mg5OHG/Izh59WW2mk1UwYHUwtfbhk5QNKYZgxf0pLOhx9ctGiGa2OykD71vOnSw==} - engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} - cpu: [arm64] - os: [darwin] - requiresBuild: true + '@img/sharp-darwin-arm64@0.33.3': optionalDependencies: '@img/sharp-libvips-darwin-arm64': 1.0.2 - dev: false optional: true - /@img/sharp-darwin-x64@0.33.3: - resolution: {integrity: sha512-2QeSl7QDK9ru//YBT4sQkoq7L0EAJZA3rtV+v9p8xTKl4U1bUqTIaCnoC7Ctx2kCjQgwFXDasOtPTCT8eCTXvw==} - engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} - cpu: [x64] - os: [darwin] - requiresBuild: true + '@img/sharp-darwin-x64@0.33.3': optionalDependencies: '@img/sharp-libvips-darwin-x64': 1.0.2 - dev: false optional: true - /@img/sharp-libvips-darwin-arm64@1.0.2: - resolution: {integrity: sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==} - engines: {macos: '>=11', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false + '@img/sharp-libvips-darwin-arm64@1.0.2': optional: true - /@img/sharp-libvips-darwin-x64@1.0.2: - resolution: {integrity: sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==} - engines: {macos: '>=10.13', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: false + '@img/sharp-libvips-darwin-x64@1.0.2': optional: true - /@img/sharp-libvips-linux-arm64@1.0.2: - resolution: {integrity: sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==} - engines: {glibc: '>=2.26', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false + '@img/sharp-libvips-linux-arm64@1.0.2': optional: true - /@img/sharp-libvips-linux-arm@1.0.2: - resolution: {integrity: sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==} - engines: {glibc: '>=2.28', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: false + '@img/sharp-libvips-linux-arm@1.0.2': optional: true - /@img/sharp-libvips-linux-s390x@1.0.2: - resolution: {integrity: sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==} - engines: {glibc: '>=2.28', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: false + '@img/sharp-libvips-linux-s390x@1.0.2': optional: true - /@img/sharp-libvips-linux-x64@1.0.2: - resolution: {integrity: sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==} - engines: {glibc: '>=2.26', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false + '@img/sharp-libvips-linux-x64@1.0.2': optional: true - /@img/sharp-libvips-linuxmusl-arm64@1.0.2: - resolution: {integrity: sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==} - engines: {musl: '>=1.2.2', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false + '@img/sharp-libvips-linuxmusl-arm64@1.0.2': optional: true - /@img/sharp-libvips-linuxmusl-x64@1.0.2: - resolution: {integrity: sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==} - engines: {musl: '>=1.2.2', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false + '@img/sharp-libvips-linuxmusl-x64@1.0.2': optional: true - /@img/sharp-linux-arm64@0.33.3: - resolution: {integrity: sha512-Zf+sF1jHZJKA6Gor9hoYG2ljr4wo9cY4twaxgFDvlG0Xz9V7sinsPp8pFd1XtlhTzYo0IhDbl3rK7P6MzHpnYA==} - engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} - cpu: [arm64] - os: [linux] - requiresBuild: true + '@img/sharp-linux-arm64@0.33.3': optionalDependencies: '@img/sharp-libvips-linux-arm64': 1.0.2 - dev: false optional: true - /@img/sharp-linux-arm@0.33.3: - resolution: {integrity: sha512-Q7Ee3fFSC9P7vUSqVEF0zccJsZ8GiiCJYGWDdhEjdlOeS9/jdkyJ6sUSPj+bL8VuOYFSbofrW0t/86ceVhx32w==} - engines: {glibc: '>=2.28', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} - cpu: [arm] - os: [linux] - requiresBuild: true + '@img/sharp-linux-arm@0.33.3': optionalDependencies: '@img/sharp-libvips-linux-arm': 1.0.2 - dev: false optional: true - /@img/sharp-linux-s390x@0.33.3: - resolution: {integrity: sha512-vFk441DKRFepjhTEH20oBlFrHcLjPfI8B0pMIxGm3+yilKyYeHEVvrZhYFdqIseSclIqbQ3SnZMwEMWonY5XFA==} - engines: {glibc: '>=2.28', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} - cpu: [s390x] - os: [linux] - requiresBuild: true + '@img/sharp-linux-s390x@0.33.3': optionalDependencies: '@img/sharp-libvips-linux-s390x': 1.0.2 - dev: false optional: true - /@img/sharp-linux-x64@0.33.3: - resolution: {integrity: sha512-Q4I++herIJxJi+qmbySd072oDPRkCg/SClLEIDh5IL9h1zjhqjv82H0Seupd+q2m0yOfD+/fJnjSoDFtKiHu2g==} - engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} - cpu: [x64] - os: [linux] - requiresBuild: true + '@img/sharp-linux-x64@0.33.3': optionalDependencies: '@img/sharp-libvips-linux-x64': 1.0.2 - dev: false optional: true - /@img/sharp-linuxmusl-arm64@0.33.3: - resolution: {integrity: sha512-qnDccehRDXadhM9PM5hLvcPRYqyFCBN31kq+ErBSZtZlsAc1U4Z85xf/RXv1qolkdu+ibw64fUDaRdktxTNP9A==} - engines: {musl: '>=1.2.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} - cpu: [arm64] - os: [linux] - requiresBuild: true + '@img/sharp-linuxmusl-arm64@0.33.3': optionalDependencies: '@img/sharp-libvips-linuxmusl-arm64': 1.0.2 - dev: false optional: true - /@img/sharp-linuxmusl-x64@0.33.3: - resolution: {integrity: sha512-Jhchim8kHWIU/GZ+9poHMWRcefeaxFIs9EBqf9KtcC14Ojk6qua7ghKiPs0sbeLbLj/2IGBtDcxHyjCdYWkk2w==} - engines: {musl: '>=1.2.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} - cpu: [x64] - os: [linux] - requiresBuild: true + '@img/sharp-linuxmusl-x64@0.33.3': optionalDependencies: '@img/sharp-libvips-linuxmusl-x64': 1.0.2 - dev: false optional: true - /@img/sharp-wasm32@0.33.3: - resolution: {integrity: sha512-68zivsdJ0koE96stdUfM+gmyaK/NcoSZK5dV5CAjES0FUXS9lchYt8LAB5rTbM7nlWtxaU/2GON0HVN6/ZYJAQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} - cpu: [wasm32] - requiresBuild: true + '@img/sharp-wasm32@0.33.3': dependencies: '@emnapi/runtime': 1.3.1 - dev: false optional: true - /@img/sharp-win32-ia32@0.33.3: - resolution: {integrity: sha512-CyimAduT2whQD8ER4Ux7exKrtfoaUiVr7HG0zZvO0XTFn2idUWljjxv58GxNTkFb8/J9Ub9AqITGkJD6ZginxQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: false + '@img/sharp-win32-ia32@0.33.3': optional: true - /@img/sharp-win32-x64@0.33.3: - resolution: {integrity: sha512-viT4fUIDKnli3IfOephGnolMzhz5VaTvDRkYqtZxOMIoMQ4MrAziO7pT1nVnOt2FAm7qW5aa+CCc13aEY6Le0g==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false + '@img/sharp-win32-x64@0.33.3': optional: true - /@inquirer/figures@1.0.10: - resolution: {integrity: sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw==} - engines: {node: '>=18'} - dev: true + '@inquirer/figures@1.0.10': {} - /@isaacs/cliui@8.0.2: - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 - string-width-cjs: /string-width@4.2.3 + string-width-cjs: string-width@4.2.3 strip-ansi: 7.1.0 - strip-ansi-cjs: /strip-ansi@6.0.1 + strip-ansi-cjs: strip-ansi@6.0.1 wrap-ansi: 8.1.0 - wrap-ansi-cjs: /wrap-ansi@7.0.0 - dev: true + wrap-ansi-cjs: wrap-ansi@7.0.0 - /@istanbuljs/schema@0.1.3: - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - dev: true + '@istanbuljs/schema@0.1.3': {} - /@jimp/bmp@0.22.12(@jimp/custom@0.22.12): - resolution: {integrity: sha512-aeI64HD0npropd+AR76MCcvvRaa+Qck6loCOS03CkkxGHN5/r336qTM5HPUdHKMDOGzqknuVPA8+kK1t03z12g==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/bmp@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@jimp/custom': 0.22.12 + '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/utils': 0.22.12 bmp-js: 0.1.0 - dev: false - /@jimp/core@0.22.12: - resolution: {integrity: sha512-l0RR0dOPyzMKfjUW1uebzueFEDtCOj9fN6pyTYWWOM/VS4BciXQ1VVrJs8pO3kycGYZxncRKhCoygbNr8eEZQA==} + '@jimp/core@0.22.12(encoding@0.1.13)': dependencies: '@jimp/utils': 0.22.12 any-base: 1.1.0 buffer: 5.7.1 exif-parser: 0.1.12 file-type: 16.5.4 - isomorphic-fetch: 3.0.0 + isomorphic-fetch: 3.0.0(encoding@0.1.13) pixelmatch: 4.0.2 tinycolor2: 1.6.0 transitivePeerDependencies: - encoding - dev: false - /@jimp/custom@0.22.12: - resolution: {integrity: sha512-xcmww1O/JFP2MrlGUMd3Q78S3Qu6W3mYTXYuIqFq33EorgYHV/HqymHfXy9GjiCJ7OI+7lWx6nYFOzU7M4rd1Q==} + '@jimp/custom@0.22.12(encoding@0.1.13)': dependencies: - '@jimp/core': 0.22.12 + '@jimp/core': 0.22.12(encoding@0.1.13) transitivePeerDependencies: - encoding - dev: false - /@jimp/gif@0.22.12(@jimp/custom@0.22.12): - resolution: {integrity: sha512-y6BFTJgch9mbor2H234VSjd9iwAhaNf/t3US5qpYIs0TSbAvM02Fbc28IaDETj9+4YB4676sz4RcN/zwhfu1pg==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/gif@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@jimp/custom': 0.22.12 + '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/utils': 0.22.12 gifwrap: 0.10.1 omggif: 1.0.10 - dev: false - /@jimp/jpeg@0.22.12(@jimp/custom@0.22.12): - resolution: {integrity: sha512-Rq26XC/uQWaQKyb/5lksCTCxXhtY01NJeBN+dQv5yNYedN0i7iYu+fXEoRsfaJ8xZzjoANH8sns7rVP4GE7d/Q==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/jpeg@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@jimp/custom': 0.22.12 + '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/utils': 0.22.12 jpeg-js: 0.4.4 - dev: false - /@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12): - resolution: {integrity: sha512-xslz2ZoFZOPLY8EZ4dC29m168BtDx95D6K80TzgUi8gqT7LY6CsajWO0FAxDwHz6h0eomHMfyGX0stspBrTKnQ==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@jimp/custom': 0.22.12 + '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/utils': 0.22.12 - dev: false - /@jimp/plugin-blur@0.22.12(@jimp/custom@0.22.12): - resolution: {integrity: sha512-S0vJADTuh1Q9F+cXAwFPlrKWzDj2F9t/9JAbUvaaDuivpyWuImEKXVz5PUZw2NbpuSHjwssbTpOZ8F13iJX4uw==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugin-blur@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@jimp/custom': 0.22.12 + '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/utils': 0.22.12 - dev: false - /@jimp/plugin-circle@0.22.12(@jimp/custom@0.22.12): - resolution: {integrity: sha512-SWVXx1yiuj5jZtMijqUfvVOJBwOifFn0918ou4ftoHgegc5aHWW5dZbYPjvC9fLpvz7oSlptNl2Sxr1zwofjTg==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugin-circle@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@jimp/custom': 0.22.12 + '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/utils': 0.22.12 - dev: false - /@jimp/plugin-color@0.22.12(@jimp/custom@0.22.12): - resolution: {integrity: sha512-xImhTE5BpS8xa+mAN6j4sMRWaUgUDLoaGHhJhpC+r7SKKErYDR0WQV4yCE4gP+N0gozD0F3Ka1LUSaMXrn7ZIA==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugin-color@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@jimp/custom': 0.22.12 + '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/utils': 0.22.12 tinycolor2: 1.6.0 - dev: false - /@jimp/plugin-contain@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12)(@jimp/plugin-resize@0.22.12)(@jimp/plugin-scale@0.22.12): - resolution: {integrity: sha512-Eo3DmfixJw3N79lWk8q/0SDYbqmKt1xSTJ69yy8XLYQj9svoBbyRpSnHR+n9hOw5pKXytHwUW6nU4u1wegHNoQ==} - peerDependencies: - '@jimp/custom': '>=0.3.5' - '@jimp/plugin-blit': '>=0.3.5' - '@jimp/plugin-resize': '>=0.3.5' - '@jimp/plugin-scale': '>=0.3.5' + '@jimp/plugin-contain@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))))': dependencies: - '@jimp/custom': 0.22.12 - '@jimp/plugin-blit': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-scale': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-resize@0.22.12) + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/plugin-blit': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-scale': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))) '@jimp/utils': 0.22.12 - dev: false - /@jimp/plugin-cover@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-crop@0.22.12)(@jimp/plugin-resize@0.22.12)(@jimp/plugin-scale@0.22.12): - resolution: {integrity: sha512-z0w/1xH/v/knZkpTNx+E8a7fnasQ2wHG5ze6y5oL2dhH1UufNua8gLQXlv8/W56+4nJ1brhSd233HBJCo01BXA==} - peerDependencies: - '@jimp/custom': '>=0.3.5' - '@jimp/plugin-crop': '>=0.3.5' - '@jimp/plugin-resize': '>=0.3.5' - '@jimp/plugin-scale': '>=0.3.5' + '@jimp/plugin-cover@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))))': dependencies: - '@jimp/custom': 0.22.12 - '@jimp/plugin-crop': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-scale': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-resize@0.22.12) + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/plugin-crop': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-scale': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))) '@jimp/utils': 0.22.12 - dev: false - /@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12): - resolution: {integrity: sha512-FNuUN0OVzRCozx8XSgP9MyLGMxNHHJMFt+LJuFjn1mu3k0VQxrzqbN06yIl46TVejhyAhcq5gLzqmSCHvlcBVw==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@jimp/custom': 0.22.12 + '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/utils': 0.22.12 - dev: false - /@jimp/plugin-displace@0.22.12(@jimp/custom@0.22.12): - resolution: {integrity: sha512-qpRM8JRicxfK6aPPqKZA6+GzBwUIitiHaZw0QrJ64Ygd3+AsTc7BXr+37k2x7QcyCvmKXY4haUrSIsBug4S3CA==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugin-displace@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@jimp/custom': 0.22.12 + '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/utils': 0.22.12 - dev: false - /@jimp/plugin-dither@0.22.12(@jimp/custom@0.22.12): - resolution: {integrity: sha512-jYgGdSdSKl1UUEanX8A85v4+QUm+PE8vHFwlamaKk89s+PXQe7eVE3eNeSZX4inCq63EHL7cX580dMqkoC3ZLw==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugin-dither@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@jimp/custom': 0.22.12 + '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/utils': 0.22.12 - dev: false - /@jimp/plugin-fisheye@0.22.12(@jimp/custom@0.22.12): - resolution: {integrity: sha512-LGuUTsFg+fOp6KBKrmLkX4LfyCy8IIsROwoUvsUPKzutSqMJnsm3JGDW2eOmWIS/jJpPaeaishjlxvczjgII+Q==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugin-fisheye@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@jimp/custom': 0.22.12 + '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/utils': 0.22.12 - dev: false - /@jimp/plugin-flip@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-rotate@0.22.12): - resolution: {integrity: sha512-m251Rop7GN8W0Yo/rF9LWk6kNclngyjIJs/VXHToGQ6EGveOSTSQaX2Isi9f9lCDLxt+inBIb7nlaLLxnvHX8Q==} - peerDependencies: - '@jimp/custom': '>=0.3.5' - '@jimp/plugin-rotate': '>=0.3.5' + '@jimp/plugin-flip@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-rotate@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))))': dependencies: - '@jimp/custom': 0.22.12 - '@jimp/plugin-rotate': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12)(@jimp/plugin-crop@0.22.12)(@jimp/plugin-resize@0.22.12) + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/plugin-rotate': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))) '@jimp/utils': 0.22.12 - dev: false - /@jimp/plugin-gaussian@0.22.12(@jimp/custom@0.22.12): - resolution: {integrity: sha512-sBfbzoOmJ6FczfG2PquiK84NtVGeScw97JsCC3rpQv1PHVWyW+uqWFF53+n3c8Y0P2HWlUjflEla2h/vWShvhg==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugin-gaussian@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@jimp/custom': 0.22.12 + '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/utils': 0.22.12 - dev: false - /@jimp/plugin-invert@0.22.12(@jimp/custom@0.22.12): - resolution: {integrity: sha512-N+6rwxdB+7OCR6PYijaA/iizXXodpxOGvT/smd/lxeXsZ/empHmFFFJ/FaXcYh19Tm04dGDaXcNF/dN5nm6+xQ==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugin-invert@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@jimp/custom': 0.22.12 + '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/utils': 0.22.12 - dev: false - /@jimp/plugin-mask@0.22.12(@jimp/custom@0.22.12): - resolution: {integrity: sha512-4AWZg+DomtpUA099jRV8IEZUfn1wLv6+nem4NRJC7L/82vxzLCgXKTxvNvBcNmJjT9yS1LAAmiJGdWKXG63/NA==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugin-mask@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@jimp/custom': 0.22.12 + '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/utils': 0.22.12 - dev: false - /@jimp/plugin-normalize@0.22.12(@jimp/custom@0.22.12): - resolution: {integrity: sha512-0So0rexQivnWgnhacX4cfkM2223YdExnJTTy6d06WbkfZk5alHUx8MM3yEzwoCN0ErO7oyqEWRnEkGC+As1FtA==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugin-normalize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@jimp/custom': 0.22.12 + '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/utils': 0.22.12 - dev: false - /@jimp/plugin-print@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12): - resolution: {integrity: sha512-c7TnhHlxm87DJeSnwr/XOLjJU/whoiKYY7r21SbuJ5nuH+7a78EW1teOaj5gEr2wYEd7QtkFqGlmyGXY/YclyQ==} - peerDependencies: - '@jimp/custom': '>=0.3.5' - '@jimp/plugin-blit': '>=0.3.5' + '@jimp/plugin-print@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))': dependencies: - '@jimp/custom': 0.22.12 - '@jimp/plugin-blit': 0.22.12(@jimp/custom@0.22.12) + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/plugin-blit': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) '@jimp/utils': 0.22.12 load-bmfont: 1.4.2 transitivePeerDependencies: - debug - dev: false - /@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12): - resolution: {integrity: sha512-3NyTPlPbTnGKDIbaBgQ3HbE6wXbAlFfxHVERmrbqAi8R3r6fQPxpCauA8UVDnieg5eo04D0T8nnnNIX//i/sXg==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@jimp/custom': 0.22.12 + '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/utils': 0.22.12 - dev: false - /@jimp/plugin-rotate@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12)(@jimp/plugin-crop@0.22.12)(@jimp/plugin-resize@0.22.12): - resolution: {integrity: sha512-9YNEt7BPAFfTls2FGfKBVgwwLUuKqy+E8bDGGEsOqHtbuhbshVGxN2WMZaD4gh5IDWvR+emmmPPWGgaYNYt1gA==} - peerDependencies: - '@jimp/custom': '>=0.3.5' - '@jimp/plugin-blit': '>=0.3.5' - '@jimp/plugin-crop': '>=0.3.5' - '@jimp/plugin-resize': '>=0.3.5' + '@jimp/plugin-rotate@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))': dependencies: - '@jimp/custom': 0.22.12 - '@jimp/plugin-blit': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-crop': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12) + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/plugin-blit': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-crop': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) '@jimp/utils': 0.22.12 - dev: false - /@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-resize@0.22.12): - resolution: {integrity: sha512-dghs92qM6MhHj0HrV2qAwKPMklQtjNpoYgAB94ysYpsXslhRTiPisueSIELRwZGEr0J0VUxpUY7HgJwlSIgGZw==} - peerDependencies: - '@jimp/custom': '>=0.3.5' - '@jimp/plugin-resize': '>=0.3.5' + '@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))': dependencies: - '@jimp/custom': 0.22.12 - '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12) + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) '@jimp/utils': 0.22.12 - dev: false - /@jimp/plugin-shadow@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blur@0.22.12)(@jimp/plugin-resize@0.22.12): - resolution: {integrity: sha512-FX8mTJuCt7/3zXVoeD/qHlm4YH2bVqBuWQHXSuBK054e7wFRnRnbSLPUqAwSeYP3lWqpuQzJtgiiBxV3+WWwTg==} - peerDependencies: - '@jimp/custom': '>=0.3.5' - '@jimp/plugin-blur': '>=0.3.5' - '@jimp/plugin-resize': '>=0.3.5' + '@jimp/plugin-shadow@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blur@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))': dependencies: - '@jimp/custom': 0.22.12 - '@jimp/plugin-blur': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12) + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/plugin-blur': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) '@jimp/utils': 0.22.12 - dev: false - /@jimp/plugin-threshold@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-color@0.22.12)(@jimp/plugin-resize@0.22.12): - resolution: {integrity: sha512-4x5GrQr1a/9L0paBC/MZZJjjgjxLYrqSmWd+e+QfAEPvmRxdRoQ5uKEuNgXnm9/weHQBTnQBQsOY2iFja+XGAw==} - peerDependencies: - '@jimp/custom': '>=0.3.5' - '@jimp/plugin-color': '>=0.8.0' - '@jimp/plugin-resize': '>=0.8.0' + '@jimp/plugin-threshold@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-color@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))': dependencies: - '@jimp/custom': 0.22.12 - '@jimp/plugin-color': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12) + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/plugin-color': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) '@jimp/utils': 0.22.12 - dev: false - /@jimp/plugins@0.22.12(@jimp/custom@0.22.12): - resolution: {integrity: sha512-yBJ8vQrDkBbTgQZLty9k4+KtUQdRjsIDJSPjuI21YdVeqZxYywifHl4/XWILoTZsjTUASQcGoH0TuC0N7xm3ww==} - peerDependencies: - '@jimp/custom': '>=0.3.5' - dependencies: - '@jimp/custom': 0.22.12 - '@jimp/plugin-blit': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-blur': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-circle': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-color': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-contain': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12)(@jimp/plugin-resize@0.22.12)(@jimp/plugin-scale@0.22.12) - '@jimp/plugin-cover': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-crop@0.22.12)(@jimp/plugin-resize@0.22.12)(@jimp/plugin-scale@0.22.12) - '@jimp/plugin-crop': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-displace': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-dither': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-fisheye': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-flip': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-rotate@0.22.12) - '@jimp/plugin-gaussian': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-invert': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-mask': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-normalize': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-print': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12) - '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-rotate': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12)(@jimp/plugin-crop@0.22.12)(@jimp/plugin-resize@0.22.12) - '@jimp/plugin-scale': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-resize@0.22.12) - '@jimp/plugin-shadow': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blur@0.22.12)(@jimp/plugin-resize@0.22.12) - '@jimp/plugin-threshold': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-color@0.22.12)(@jimp/plugin-resize@0.22.12) + '@jimp/plugins@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': + dependencies: + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/plugin-blit': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-blur': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-circle': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-color': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-contain': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))) + '@jimp/plugin-cover': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))) + '@jimp/plugin-crop': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-displace': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-dither': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-fisheye': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-flip': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-rotate@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))) + '@jimp/plugin-gaussian': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-invert': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-mask': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-normalize': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-print': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))) + '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-rotate': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))) + '@jimp/plugin-scale': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))) + '@jimp/plugin-shadow': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blur@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))) + '@jimp/plugin-threshold': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-color@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))) timm: 1.7.1 transitivePeerDependencies: - debug - dev: false - /@jimp/png@0.22.12(@jimp/custom@0.22.12): - resolution: {integrity: sha512-Mrp6dr3UTn+aLK8ty/dSKELz+Otdz1v4aAXzV5q53UDD2rbB5joKVJ/ChY310B+eRzNxIovbUF1KVrUsYdE8Hg==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/png@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@jimp/custom': 0.22.12 + '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/utils': 0.22.12 pngjs: 6.0.0 - dev: false - /@jimp/tiff@0.22.12(@jimp/custom@0.22.12): - resolution: {integrity: sha512-E1LtMh4RyJsoCAfAkBRVSYyZDTtLq9p9LUiiYP0vPtXyxX4BiYBUYihTLSBlCQg5nF2e4OpQg7SPrLdJ66u7jg==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/tiff@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@jimp/custom': 0.22.12 + '@jimp/custom': 0.22.12(encoding@0.1.13) utif2: 4.1.0 - dev: false - /@jimp/types@0.22.12(@jimp/custom@0.22.12): - resolution: {integrity: sha512-wwKYzRdElE1MBXFREvCto5s699izFHNVvALUv79GXNbsOVqlwlOxlWJ8DuyOGIXoLP4JW/m30YyuTtfUJgMRMA==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/types@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@jimp/bmp': 0.22.12(@jimp/custom@0.22.12) - '@jimp/custom': 0.22.12 - '@jimp/gif': 0.22.12(@jimp/custom@0.22.12) - '@jimp/jpeg': 0.22.12(@jimp/custom@0.22.12) - '@jimp/png': 0.22.12(@jimp/custom@0.22.12) - '@jimp/tiff': 0.22.12(@jimp/custom@0.22.12) + '@jimp/bmp': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/gif': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/jpeg': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/png': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/tiff': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) timm: 1.7.1 - dev: false - /@jimp/utils@0.22.12: - resolution: {integrity: sha512-yJ5cWUknGnilBq97ZXOyOS0HhsHOyAyjHwYfHxGbSyMTohgQI6sVyE8KPgDwH8HHW/nMKXk8TrSwAE71zt716Q==} + '@jimp/utils@0.22.12': dependencies: regenerator-runtime: 0.13.11 - dev: false - /@jridgewell/gen-mapping@0.3.8: - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 - dev: true - /@jridgewell/resolve-uri@3.1.2: - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - dev: true + '@jridgewell/resolve-uri@3.1.2': {} - /@jridgewell/set-array@1.2.1: - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - dev: true + '@jridgewell/set-array@1.2.1': {} - /@jridgewell/sourcemap-codec@1.5.0: - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - dev: true + '@jridgewell/sourcemap-codec@1.5.0': {} - /@jridgewell/trace-mapping@0.3.25: - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - dev: true - /@jridgewell/trace-mapping@0.3.9: - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - dev: true - /@malept/cross-spawn-promise@1.1.1: - resolution: {integrity: sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==} - engines: {node: '>= 10'} - requiresBuild: true + '@malept/cross-spawn-promise@1.1.1': dependencies: cross-spawn: 7.0.6 - dev: true optional: true - /@malept/cross-spawn-promise@2.0.0: - resolution: {integrity: sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==} - engines: {node: '>= 12.13.0'} + '@malept/cross-spawn-promise@2.0.0': dependencies: cross-spawn: 7.0.6 - dev: true - /@manypkg/find-root@1.1.0: - resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + '@manypkg/find-root@1.1.0': dependencies: '@babel/runtime': 7.26.7 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 - dev: true - /@manypkg/get-packages@1.1.3: - resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + '@manypkg/get-packages@1.1.3': dependencies: '@babel/runtime': 7.26.7 '@changesets/types': 4.1.0 @@ -3537,391 +8582,201 @@ packages: fs-extra: 8.1.0 globby: 11.1.0 read-yaml-file: 1.1.0 - dev: true - /@mistralai/mistralai@1.5.0(zod@3.24.1): - resolution: {integrity: sha512-AIn8pwAwA/fDvEUvmkt+40zH1ZmfaG3Q7oUWl17GUEC1tU7ZPwYz8Cv9P59lyS1SisHdDSu81oknO7f1ywkz8Q==} - peerDependencies: - zod: '>= 3' + '@mistralai/mistralai@1.5.0(zod@3.24.2)': dependencies: - zod: 3.24.1 - zod-to-json-schema: 3.24.1(zod@3.24.1) - dev: true + zod: 3.24.2 + zod-to-json-schema: 3.24.1(zod@3.24.2) - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - dev: true - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: true + '@nodelib/fs.stat@2.0.5': {} - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.0 - dev: true - /@npmcli/fs@2.1.2: - resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + '@npmcli/fs@2.1.2': dependencies: '@gar/promisify': 1.1.3 semver: 7.7.1 - dev: true - /@npmcli/move-file@2.0.1: - resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - deprecated: This functionality has been moved to @npmcli/fs + '@npmcli/move-file@2.0.1': dependencies: mkdirp: 1.0.4 rimraf: 3.0.2 - dev: true - /@octokit/auth-token@2.5.0: - resolution: {integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==} + '@octokit/auth-token@2.5.0': dependencies: '@octokit/types': 6.41.0 - dev: true - /@octokit/core@3.6.0: - resolution: {integrity: sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==} + '@octokit/core@3.6.0(encoding@0.1.13)': dependencies: '@octokit/auth-token': 2.5.0 - '@octokit/graphql': 4.8.0 - '@octokit/request': 5.6.3 + '@octokit/graphql': 4.8.0(encoding@0.1.13) + '@octokit/request': 5.6.3(encoding@0.1.13) '@octokit/request-error': 2.1.0 '@octokit/types': 6.41.0 before-after-hook: 2.2.3 universal-user-agent: 6.0.1 transitivePeerDependencies: - encoding - dev: true - /@octokit/endpoint@6.0.12: - resolution: {integrity: sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==} + '@octokit/endpoint@6.0.12': dependencies: '@octokit/types': 6.41.0 is-plain-object: 5.0.0 universal-user-agent: 6.0.1 - dev: true - /@octokit/graphql@4.8.0: - resolution: {integrity: sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==} + '@octokit/graphql@4.8.0(encoding@0.1.13)': dependencies: - '@octokit/request': 5.6.3 + '@octokit/request': 5.6.3(encoding@0.1.13) '@octokit/types': 6.41.0 universal-user-agent: 6.0.1 transitivePeerDependencies: - encoding - dev: true - /@octokit/openapi-types@12.11.0: - resolution: {integrity: sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==} - dev: true + '@octokit/openapi-types@12.11.0': {} - /@octokit/plugin-paginate-rest@2.21.3(@octokit/core@3.6.0): - resolution: {integrity: sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==} - peerDependencies: - '@octokit/core': '>=2' + '@octokit/plugin-paginate-rest@2.21.3(@octokit/core@3.6.0(encoding@0.1.13))': dependencies: - '@octokit/core': 3.6.0 + '@octokit/core': 3.6.0(encoding@0.1.13) '@octokit/types': 6.41.0 - dev: true - /@octokit/plugin-request-log@1.0.4(@octokit/core@3.6.0): - resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==} - peerDependencies: - '@octokit/core': '>=3' + '@octokit/plugin-request-log@1.0.4(@octokit/core@3.6.0(encoding@0.1.13))': dependencies: - '@octokit/core': 3.6.0 - dev: true + '@octokit/core': 3.6.0(encoding@0.1.13) - /@octokit/plugin-rest-endpoint-methods@5.16.2(@octokit/core@3.6.0): - resolution: {integrity: sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==} - peerDependencies: - '@octokit/core': '>=3' + '@octokit/plugin-rest-endpoint-methods@5.16.2(@octokit/core@3.6.0(encoding@0.1.13))': dependencies: - '@octokit/core': 3.6.0 + '@octokit/core': 3.6.0(encoding@0.1.13) '@octokit/types': 6.41.0 deprecation: 2.3.1 - dev: true - /@octokit/plugin-retry@3.0.9: - resolution: {integrity: sha512-r+fArdP5+TG6l1Rv/C9hVoty6tldw6cE2pRHNGmFPdyfrc696R6JjrQ3d7HdVqGwuzfyrcaLAKD7K8TX8aehUQ==} + '@octokit/plugin-retry@3.0.9': dependencies: '@octokit/types': 6.41.0 bottleneck: 2.19.5 - dev: true - /@octokit/request-error@2.1.0: - resolution: {integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==} + '@octokit/request-error@2.1.0': dependencies: '@octokit/types': 6.41.0 deprecation: 2.3.1 once: 1.4.0 - dev: true - /@octokit/request@5.6.3: - resolution: {integrity: sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==} + '@octokit/request@5.6.3(encoding@0.1.13)': dependencies: '@octokit/endpoint': 6.0.12 '@octokit/request-error': 2.1.0 '@octokit/types': 6.41.0 is-plain-object: 5.0.0 - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) universal-user-agent: 6.0.1 transitivePeerDependencies: - encoding - dev: true - /@octokit/rest@18.12.0: - resolution: {integrity: sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==} + '@octokit/rest@18.12.0(encoding@0.1.13)': dependencies: - '@octokit/core': 3.6.0 - '@octokit/plugin-paginate-rest': 2.21.3(@octokit/core@3.6.0) - '@octokit/plugin-request-log': 1.0.4(@octokit/core@3.6.0) - '@octokit/plugin-rest-endpoint-methods': 5.16.2(@octokit/core@3.6.0) + '@octokit/core': 3.6.0(encoding@0.1.13) + '@octokit/plugin-paginate-rest': 2.21.3(@octokit/core@3.6.0(encoding@0.1.13)) + '@octokit/plugin-request-log': 1.0.4(@octokit/core@3.6.0(encoding@0.1.13)) + '@octokit/plugin-rest-endpoint-methods': 5.16.2(@octokit/core@3.6.0(encoding@0.1.13)) transitivePeerDependencies: - encoding - dev: true - /@octokit/types@6.41.0: - resolution: {integrity: sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==} + '@octokit/types@6.41.0': dependencies: '@octokit/openapi-types': 12.11.0 - dev: true - /@octokit/webhooks-schemas@6.11.0: - resolution: {integrity: sha512-ekca2jZhb2vfQy43rjvJoV77IwEKvA42BmJ2m8H3WaNfG9BF05RodnFjh3MSOksNseoNO8w8IPLZ3d5546NH2w==} - dev: true + '@octokit/webhooks-schemas@6.11.0': {} - /@octokit/webhooks-types@6.11.0: - resolution: {integrity: sha512-AanzbulOHljrku1NGfafxdpTCfw2ENaWzH01N2vqQM+cUFbk868Cgh0xylz0JIM9BoKbfI++bdD6EYX0Q/UTEw==} - dev: true + '@octokit/webhooks-types@6.11.0': {} - /@pkgjs/parseargs@0.11.0: - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - requiresBuild: true - dev: true + '@pkgjs/parseargs@0.11.0': optional: true - /@pkgr/core@0.1.1: - resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - dev: true + '@pkgr/core@0.1.1': {} - /@playwright/test@1.50.1: - resolution: {integrity: sha512-Jii3aBg+CEDpgnuDxEp/h7BimHcUTDlpEtce89xEumlJ5ef2hqepZ+PWp1DDpYC/VO9fmWVI1IlEaoI5fK9FXQ==} - engines: {node: '>=18'} - hasBin: true + '@playwright/test@1.50.1': dependencies: playwright: 1.50.1 - dev: true - /@popperjs/core@2.11.8: - resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - dev: true + '@popperjs/core@2.11.8': {} - /@rollup/rollup-android-arm-eabi@4.34.6: - resolution: {integrity: sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true + '@rollup/rollup-android-arm-eabi@4.34.6': optional: true - /@rollup/rollup-android-arm64@4.34.6: - resolution: {integrity: sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true + '@rollup/rollup-android-arm64@4.34.6': optional: true - /@rollup/rollup-darwin-arm64@4.34.6: - resolution: {integrity: sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true + '@rollup/rollup-darwin-arm64@4.34.6': optional: true - /@rollup/rollup-darwin-x64@4.34.6: - resolution: {integrity: sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true + '@rollup/rollup-darwin-x64@4.34.6': optional: true - /@rollup/rollup-freebsd-arm64@4.34.6: - resolution: {integrity: sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true + '@rollup/rollup-freebsd-arm64@4.34.6': optional: true - /@rollup/rollup-freebsd-x64@4.34.6: - resolution: {integrity: sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true + '@rollup/rollup-freebsd-x64@4.34.6': optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.34.6: - resolution: {integrity: sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-arm-gnueabihf@4.34.6': optional: true - /@rollup/rollup-linux-arm-musleabihf@4.34.6: - resolution: {integrity: sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-arm-musleabihf@4.34.6': optional: true - /@rollup/rollup-linux-arm64-gnu@4.34.6: - resolution: {integrity: sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-arm64-gnu@4.34.6': optional: true - /@rollup/rollup-linux-arm64-musl@4.34.6: - resolution: {integrity: sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-arm64-musl@4.34.6': optional: true - /@rollup/rollup-linux-loongarch64-gnu@4.34.6: - resolution: {integrity: sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-loongarch64-gnu@4.34.6': optional: true - /@rollup/rollup-linux-powerpc64le-gnu@4.34.6: - resolution: {integrity: sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-powerpc64le-gnu@4.34.6': optional: true - /@rollup/rollup-linux-riscv64-gnu@4.34.6: - resolution: {integrity: sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-riscv64-gnu@4.34.6': optional: true - /@rollup/rollup-linux-s390x-gnu@4.34.6: - resolution: {integrity: sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-s390x-gnu@4.34.6': optional: true - /@rollup/rollup-linux-x64-gnu@4.34.6: - resolution: {integrity: sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-x64-gnu@4.34.6': optional: true - /@rollup/rollup-linux-x64-musl@4.34.6: - resolution: {integrity: sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-x64-musl@4.34.6': optional: true - /@rollup/rollup-win32-arm64-msvc@4.34.6: - resolution: {integrity: sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true + '@rollup/rollup-win32-arm64-msvc@4.34.6': optional: true - /@rollup/rollup-win32-ia32-msvc@4.34.6: - resolution: {integrity: sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true + '@rollup/rollup-win32-ia32-msvc@4.34.6': optional: true - /@rollup/rollup-win32-x64-msvc@4.34.6: - resolution: {integrity: sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true + '@rollup/rollup-win32-x64-msvc@4.34.6': optional: true - /@rtsao/scc@1.1.0: - resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - dev: true + '@rtsao/scc@1.1.0': {} - /@sindresorhus/is@4.6.0: - resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} - engines: {node: '>=10'} + '@sindresorhus/is@4.6.0': {} - /@szmarczak/http-timer@4.0.6: - resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} - engines: {node: '>=10'} + '@szmarczak/http-timer@4.0.6': dependencies: defer-to-connect: 2.0.1 - /@tokenizer/token@0.3.0: - resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} - dev: false + '@tokenizer/token@0.3.0': {} - /@tootallnate/once@2.0.0: - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - dev: true + '@tootallnate/once@2.0.0': {} - /@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.5.0): - resolution: {integrity: sha512-fYDQA9e6yTNmA13TLVSA+WMQRc5Bn/c0EUBditUHNfMMxN7M82c38b1kEggVE3pLpZ0FwkwJkUEKMiOi52JXFA==} - engines: {node: '>18.12'} - peerDependencies: - '@vue/compiler-sfc': 3.x - prettier: 2.x - 3.x - prettier-plugin-svelte: 3.x - svelte: 4.x || 5.x - peerDependenciesMeta: - '@vue/compiler-sfc': - optional: true - prettier-plugin-svelte: - optional: true - svelte: - optional: true + '@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.5.0)': dependencies: '@babel/generator': 7.26.8 '@babel/parser': 7.26.8 @@ -3932,203 +8787,128 @@ packages: prettier: 3.5.0 transitivePeerDependencies: - supports-color - dev: true - /@tsconfig/node10@1.0.11: - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - dev: true + '@tsconfig/node10@1.0.11': {} - /@tsconfig/node12@1.0.11: - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: true + '@tsconfig/node12@1.0.11': {} - /@tsconfig/node14@1.0.3: - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: true + '@tsconfig/node14@1.0.3': {} - /@tsconfig/node16@1.0.4: - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - dev: true + '@tsconfig/node16@1.0.4': {} - /@types/appdmg@0.5.5: - resolution: {integrity: sha512-G+n6DgZTZFOteITE30LnWj+HRVIGr7wMlAiLWOO02uJFWVEitaPU9JVXm9wJokkgshBawb2O1OykdcsmkkZfgg==} - requiresBuild: true + '@types/appdmg@0.5.5': dependencies: '@types/node': 20.17.17 - dev: true optional: true - /@types/babel__core@7.20.5: - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.26.8 '@babel/types': 7.26.8 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 - dev: true - /@types/babel__generator@7.6.8: - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + '@types/babel__generator@7.6.8': dependencies: '@babel/types': 7.26.8 - dev: true - /@types/babel__template@7.4.4: - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + '@types/babel__template@7.4.4': dependencies: '@babel/parser': 7.26.8 '@babel/types': 7.26.8 - dev: true - /@types/babel__traverse@7.20.6: - resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + '@types/babel__traverse@7.20.6': dependencies: '@babel/types': 7.26.8 - dev: true - /@types/cacheable-request@6.0.3: - resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + '@types/cacheable-request@6.0.3': dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 '@types/node': 20.17.17 '@types/responselike': 1.0.3 - /@types/conventional-commits-parser@5.0.1: - resolution: {integrity: sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==} + '@types/conventional-commits-parser@5.0.1': dependencies: '@types/node': 20.17.17 - dev: true - /@types/cookie@0.6.0: - resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - dev: true + '@types/cookie@0.6.0': {} - /@types/estree@1.0.6: - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - dev: true + '@types/estree@1.0.6': {} - /@types/fs-extra@9.0.13: - resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} - requiresBuild: true + '@types/fs-extra@9.0.13': dependencies: '@types/node': 20.17.17 - dev: true optional: true - /@types/gensync@1.0.4: - resolution: {integrity: sha512-C3YYeRQWp2fmq9OryX+FoDy8nXS6scQ7dPptD8LnFDAUNcKWJjXQKDNJD3HVm+kOUsXhTOkpi69vI4EuAr95bA==} - dev: true + '@types/gensync@1.0.4': {} - /@types/hoist-non-react-statics@3.3.6: - resolution: {integrity: sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==} + '@types/hoist-non-react-statics@3.3.6': dependencies: '@types/react': 18.3.18 hoist-non-react-statics: 3.3.2 - dev: true - /@types/http-cache-semantics@4.0.4: - resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + '@types/http-cache-semantics@4.0.4': {} - /@types/js-cookie@2.2.7: - resolution: {integrity: sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==} - dev: true + '@types/js-cookie@2.2.7': {} - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: true + '@types/json-schema@7.0.15': {} - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: true + '@types/json5@0.0.29': {} - /@types/keyv@3.1.4: - resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + '@types/keyv@3.1.4': dependencies: '@types/node': 20.17.17 - /@types/lodash.mergewith@4.6.9: - resolution: {integrity: sha512-fgkoCAOF47K7sxrQ7Mlud2TH023itugZs2bUg8h/KzT+BnZNrR2jAOmaokbLunHNnobXVWOezAeNn/lZqwxkcw==} + '@types/lodash.mergewith@4.6.9': dependencies: '@types/lodash': 4.17.15 - dev: true - /@types/lodash@4.17.15: - resolution: {integrity: sha512-w/P33JFeySuhN6JLkysYUK2gEmy9kHHFN7E8ro0tkfmlDOgxBDzWEZ/J8cWA+fHqFevpswDTFZnDx+R9lbL6xw==} - dev: true + '@types/lodash@4.17.15': {} - /@types/node-fetch@2.6.12: - resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} + '@types/node-fetch@2.6.12': dependencies: '@types/node': 20.17.17 form-data: 4.0.1 - /@types/node@12.20.55: - resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - dev: true + '@types/node@12.20.55': {} - /@types/node@16.9.1: - resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==} - dev: false + '@types/node@16.9.1': {} - /@types/node@18.19.75: - resolution: {integrity: sha512-UIksWtThob6ZVSyxcOqCLOUNg/dyO1Qvx4McgeuhrEtHTLFTf7BBhEazaE4K806FGTPtzd/2sE90qn4fVr7cyw==} + '@types/node@18.19.75': dependencies: undici-types: 5.26.5 - /@types/node@20.17.17: - resolution: {integrity: sha512-/WndGO4kIfMicEQLTi/mDANUu/iVUhT7KboZPdEqqHQ4aTS+3qT3U5gIqWDFV+XouorjfgGqvKILJeHhuQgFYg==} + '@types/node@20.17.17': dependencies: undici-types: 6.19.8 - /@types/parse-json@4.0.2: - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - dev: true + '@types/parse-json@4.0.2': {} - /@types/prop-types@15.7.14: - resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} + '@types/prop-types@15.7.14': {} - /@types/react-dom@18.3.5(@types/react@18.3.18): - resolution: {integrity: sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==} - peerDependencies: - '@types/react': ^18.0.0 + '@types/react-dom@18.3.5(@types/react@18.3.18)': dependencies: '@types/react': 18.3.18 - dev: true - /@types/react@18.3.18: - resolution: {integrity: sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==} + '@types/react@18.3.18': dependencies: '@types/prop-types': 15.7.14 csstype: 3.1.3 - /@types/responselike@1.0.3: - resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} + '@types/responselike@1.0.3': dependencies: '@types/node': 20.17.17 - /@types/semver@7.5.8: - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - dev: true + '@types/semver@7.5.8': {} - /@types/yauzl@2.10.3: - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - requiresBuild: true + '@types/yauzl@2.10.3': dependencies: '@types/node': 20.17.17 optional: true - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1)(typescript@5.7.3): - resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.1 '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.7.3) @@ -4142,21 +8922,12 @@ packages: natural-compare-lite: 1.4.0 semver: 7.7.1 tsutils: 3.21.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1)(typescript@5.7.3): - resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - '@typescript-eslint/parser': ^7.0.0 - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.1 '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.7.3) @@ -4169,40 +8940,24 @@ packages: ignore: 5.3.2 natural-compare: 1.4.0 ts-api-utils: 1.4.3(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.3): - resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.3)': dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.7.3) debug: 4.4.0 eslint: 8.57.1 + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.3): - resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.3)': dependencies: '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 @@ -4210,85 +8965,50 @@ packages: '@typescript-eslint/visitor-keys': 7.18.0 debug: 4.4.0 eslint: 8.57.1 + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/scope-manager@5.62.0: - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/scope-manager@5.62.0': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - dev: true - /@typescript-eslint/scope-manager@7.18.0: - resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/scope-manager@7.18.0': dependencies: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - dev: true - /@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@5.7.3): - resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@5.7.3)': dependencies: '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.7.3) '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.7.3) debug: 4.4.0 eslint: 8.57.1 tsutils: 3.21.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.7.3): - resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.7.3)': dependencies: '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.3) '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.7.3) debug: 4.4.0 eslint: 8.57.1 ts-api-utils: 1.4.3(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/types@5.62.0: - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + '@typescript-eslint/types@5.62.0': {} - /@typescript-eslint/types@7.18.0: - resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} - engines: {node: ^18.18.0 || >=20.0.0} - dev: true + '@typescript-eslint/types@7.18.0': {} - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.7.3): - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.7.3)': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 @@ -4297,19 +9017,12 @@ packages: is-glob: 4.0.3 semver: 7.7.1 tsutils: 3.21.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/typescript-estree@7.18.0(typescript@5.7.3): - resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/typescript-estree@7.18.0(typescript@5.7.3)': dependencies: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 @@ -4319,16 +9032,12 @@ packages: minimatch: 9.0.5 semver: 7.7.1 ts-api-utils: 1.4.3(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.7.3): - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.7.3)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) '@types/json-schema': 7.0.15 @@ -4342,13 +9051,8 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: true - /@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.7.3): - resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 + '@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.7.3)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) '@typescript-eslint/scope-manager': 7.18.0 @@ -4358,33 +9062,20 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: true - /@typescript-eslint/visitor-keys@5.62.0: - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/visitor-keys@5.62.0': dependencies: '@typescript-eslint/types': 5.62.0 eslint-visitor-keys: 3.4.3 - dev: true - /@typescript-eslint/visitor-keys@7.18.0: - resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/visitor-keys@7.18.0': dependencies: '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 - dev: true - /@ungap/structured-clone@1.3.0: - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - dev: true + '@ungap/structured-clone@1.3.0': {} - /@vitejs/plugin-react@4.3.4(vite@5.4.14): - resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^4.2.0 || ^5.0.0 || ^6.0.0 + '@vitejs/plugin-react@4.3.4(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4))': dependencies: '@babel/core': 7.26.8 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.8) @@ -4394,12 +9085,8 @@ packages: vite: 5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4) transitivePeerDependencies: - supports-color - dev: true - /@vitest/coverage-istanbul@3.0.5(vitest@3.0.5): - resolution: {integrity: sha512-yTcIwrpLHOyPP28PXXLRv1NzzKCrqDnmT7oVypTa1Q24P6OwGT4Wi6dXNEaJg33vmrPpoe81f31kwB5MtfM+ow==} - peerDependencies: - vitest: 3.0.5 + '@vitest/coverage-istanbul@3.0.5(vitest@3.0.5(@types/node@20.17.17)(sass-embedded@1.83.4))': dependencies: '@istanbuljs/schema': 0.1.3 debug: 4.4.0 @@ -4414,250 +9101,145 @@ packages: vitest: 3.0.5(@types/node@20.17.17)(sass-embedded@1.83.4) transitivePeerDependencies: - supports-color - dev: true - /@vitest/expect@3.0.5: - resolution: {integrity: sha512-nNIOqupgZ4v5jWuQx2DSlHLEs7Q4Oh/7AYwNyE+k0UQzG7tSmjPXShUikn1mpNGzYEN2jJbTvLejwShMitovBA==} + '@vitest/expect@3.0.5': dependencies: - '@vitest/spy': 3.0.5 - '@vitest/utils': 3.0.5 - chai: 5.1.2 - tinyrainbow: 2.0.0 - dev: true - - /@vitest/mocker@3.0.5(vite@5.4.14): - resolution: {integrity: sha512-CLPNBFBIE7x6aEGbIjaQAX03ZZlBMaWwAjBdMkIf/cAn6xzLTiM3zYqO/WAbieEjsAZir6tO71mzeHZoodThvw==} - peerDependencies: - msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true + '@vitest/spy': 3.0.5 + '@vitest/utils': 3.0.5 + chai: 5.1.2 + tinyrainbow: 2.0.0 + + '@vitest/mocker@3.0.5(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4))': dependencies: '@vitest/spy': 3.0.5 estree-walker: 3.0.3 magic-string: 0.30.17 + optionalDependencies: vite: 5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4) - dev: true - /@vitest/pretty-format@3.0.5: - resolution: {integrity: sha512-CjUtdmpOcm4RVtB+up8r2vVDLR16Mgm/bYdkGFe3Yj/scRfCpbSi2W/BDSDcFK7ohw8UXvjMbOp9H4fByd/cOA==} + '@vitest/pretty-format@3.0.5': dependencies: tinyrainbow: 2.0.0 - dev: true - /@vitest/runner@3.0.5: - resolution: {integrity: sha512-BAiZFityFexZQi2yN4OX3OkJC6scwRo8EhRB0Z5HIGGgd2q+Nq29LgHU/+ovCtd0fOfXj5ZI6pwdlUmC5bpi8A==} + '@vitest/runner@3.0.5': dependencies: '@vitest/utils': 3.0.5 - pathe: 2.0.2 - dev: true + pathe: 2.0.3 - /@vitest/snapshot@3.0.5: - resolution: {integrity: sha512-GJPZYcd7v8QNUJ7vRvLDmRwl+a1fGg4T/54lZXe+UOGy47F9yUfE18hRCtXL5aHN/AONu29NGzIXSVFh9K0feA==} + '@vitest/snapshot@3.0.5': dependencies: '@vitest/pretty-format': 3.0.5 magic-string: 0.30.17 - pathe: 2.0.2 - dev: true + pathe: 2.0.3 - /@vitest/spy@3.0.5: - resolution: {integrity: sha512-5fOzHj0WbUNqPK6blI/8VzZdkBlQLnT25knX0r4dbZI9qoZDf3qAdjoMmDcLG5A83W6oUUFJgUd0EYBc2P5xqg==} + '@vitest/spy@3.0.5': dependencies: tinyspy: 3.0.2 - dev: true - /@vitest/utils@3.0.5: - resolution: {integrity: sha512-N9AX0NUoUtVwKwy21JtwzaqR5L5R5A99GAbrHfCCXK1lp593i/3AZAXhSP43wRQuxYsflrdzEfXZFo1reR1Nkg==} + '@vitest/utils@3.0.5': dependencies: '@vitest/pretty-format': 3.0.5 loupe: 3.1.3 tinyrainbow: 2.0.0 - dev: true - /@xmldom/xmldom@0.8.10: - resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} - engines: {node: '>=10.0.0'} - dev: true + '@xmldom/xmldom@0.8.10': {} - /@xobotyi/scrollbar-width@1.9.5: - resolution: {integrity: sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==} - dev: true + '@xobotyi/scrollbar-width@1.9.5': {} - /@zag-js/dom-query@0.31.1: - resolution: {integrity: sha512-oiuohEXAXhBxpzzNm9k2VHGEOLC1SXlXSbRPcfBZ9so5NRQUA++zCE7cyQJqGLTZR0t3itFLlZqDbYEXRrefwg==} - dev: true + '@zag-js/dom-query@0.31.1': {} - /@zag-js/element-size@0.31.1: - resolution: {integrity: sha512-4T3yvn5NqqAjhlP326Fv+w9RqMIBbNN9H72g5q2ohwzhSgSfZzrKtjL4rs9axY/cw9UfMfXjRjEE98e5CMq7WQ==} - dev: true + '@zag-js/element-size@0.31.1': {} - /@zag-js/focus-visible@0.31.1: - resolution: {integrity: sha512-dbLksz7FEwyFoANbpIlNnd3bVm0clQSUsnP8yUVQucStZPsuWjCrhL2jlAbGNrTrahX96ntUMXHb/sM68TibFg==} + '@zag-js/focus-visible@0.31.1': dependencies: '@zag-js/dom-query': 0.31.1 - dev: true - /JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true + JSONStream@1.3.5: dependencies: jsonparse: 1.3.1 through: 2.3.8 - dev: true - /abbrev@1.1.1: - resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - dev: true + abbrev@1.1.1: {} - /abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} + abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 - /accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} + accepts@1.3.8: dependencies: mime-types: 2.1.35 negotiator: 0.6.3 - dev: true - /acorn-jsx@5.3.2(acorn@8.14.0): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: acorn: 8.14.0 - dev: true - /acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} - engines: {node: '>=0.4.0'} + acorn-walk@8.3.4: dependencies: acorn: 8.14.0 - dev: true - /acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true + acorn@8.14.0: {} - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} + agent-base@6.0.2: dependencies: debug: 4.4.0 transitivePeerDependencies: - supports-color - dev: true - /agent-base@7.1.3: - resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} - engines: {node: '>= 14'} - dev: true + agent-base@7.1.3: {} - /agentkeepalive@4.6.0: - resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} - engines: {node: '>= 8.0.0'} + agentkeepalive@4.6.0: dependencies: humanize-ms: 1.2.1 - /aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} + aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 - dev: true - /ajv-formats@3.0.1(ajv@8.17.1): - resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - dependencies: + ajv-formats@3.0.1(ajv@8.17.1): + optionalDependencies: ajv: 8.17.1 - dev: false - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - dev: true - /ajv@8.17.1: - resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 fast-uri: 3.0.6 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - /ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} - dev: true + ansi-colors@4.1.3: {} - /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} + ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 - dev: true - /ansi-escapes@5.0.0: - resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} - engines: {node: '>=12'} + ansi-escapes@5.0.0: dependencies: type-fest: 1.4.0 - dev: true - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true + ansi-regex@5.0.1: {} - /ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} - engines: {node: '>=12'} - dev: true + ansi-regex@6.1.0: {} - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - dev: true - /ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - dev: true + ansi-styles@6.2.1: {} - /any-base@1.1.0: - resolution: {integrity: sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==} - dev: false + any-base@1.1.0: {} - /any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: true + any-promise@1.3.0: {} - /appdmg@0.6.6: - resolution: {integrity: sha512-GRmFKlCG+PWbcYF4LUNonTYmy0GjguDy6Jh9WP8mpd0T6j80XIJyXBiWlD0U+MLNhqV9Nhx49Gl9GpVToulpLg==} - engines: {node: '>=8.5'} - os: [darwin] - hasBin: true - requiresBuild: true + appdmg@0.6.6: dependencies: async: 1.5.2 ds-store: 0.1.6 @@ -4670,52 +9252,32 @@ packages: parse-color: 1.0.0 path-exists: 4.0.0 repeat-string: 1.6.1 - dev: true optional: true - /arch@2.2.0: - resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} - dev: false + arch@2.2.0: {} - /arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: true + arg@4.1.3: {} - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 - dev: true - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + argparse@2.0.1: {} - /aria-hidden@1.2.4: - resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} - engines: {node: '>=10'} + aria-hidden@1.2.4: dependencies: tslib: 2.8.1 - dev: true - /array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} + array-buffer-byte-length@1.0.2: dependencies: call-bound: 1.0.3 is-array-buffer: 3.0.5 - dev: true - /array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - dev: true + array-flatten@1.1.1: {} - /array-ify@1.0.0: - resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} - dev: true + array-ify@1.0.0: {} - /array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} + array-includes@3.1.8: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 @@ -4723,16 +9285,10 @@ packages: es-object-atoms: 1.1.1 get-intrinsic: 1.2.7 is-string: 1.1.1 - dev: true - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - dev: true + array-union@2.1.0: {} - /array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} + array.prototype.findlast@1.2.5: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 @@ -4740,11 +9296,8 @@ packages: es-errors: 1.3.0 es-object-atoms: 1.1.1 es-shim-unscopables: 1.0.2 - dev: true - /array.prototype.findlastindex@1.2.5: - resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} - engines: {node: '>= 0.4'} + array.prototype.findlastindex@1.2.5: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 @@ -4752,42 +9305,30 @@ packages: es-errors: 1.3.0 es-object-atoms: 1.1.1 es-shim-unscopables: 1.0.2 - dev: true - /array.prototype.flat@1.3.3: - resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} - engines: {node: '>= 0.4'} + array.prototype.flat@1.3.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.9 es-shim-unscopables: 1.0.2 - dev: true - /array.prototype.flatmap@1.3.3: - resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} - engines: {node: '>= 0.4'} + array.prototype.flatmap@1.3.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.9 es-shim-unscopables: 1.0.2 - dev: true - /array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} - engines: {node: '>= 0.4'} + array.prototype.tosorted@1.1.4: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.9 es-errors: 1.3.0 es-shim-unscopables: 1.0.2 - dev: true - /arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} + arraybuffer.prototype.slice@1.0.4: dependencies: array-buffer-byte-length: 1.0.2 call-bind: 1.0.8 @@ -4796,130 +9337,79 @@ packages: es-errors: 1.3.0 get-intrinsic: 1.2.7 is-array-buffer: 3.0.5 - dev: true - /assertion-error@2.0.1: - resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} - engines: {node: '>=12'} - dev: true + assertion-error@2.0.1: {} - /async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} - engines: {node: '>= 0.4'} - dev: true + async-function@1.0.0: {} - /async-retry@1.3.3: - resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} + async-retry@1.3.3: dependencies: retry: 0.13.1 - dev: false - /async@1.5.2: - resolution: {integrity: sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==} - requiresBuild: true - dev: true + async@1.5.2: optional: true - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + asynckit@0.4.0: {} - /at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - dev: true + at-least-node@1.0.0: {} - /atomically@2.0.3: - resolution: {integrity: sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==} + atomically@2.0.3: dependencies: stubborn-fs: 1.2.5 when-exit: 2.1.4 - dev: false - /author-regex@1.0.0: - resolution: {integrity: sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g==} - engines: {node: '>=0.8'} - dev: true + author-regex@1.0.0: {} - /available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.1.0 - dev: true - /axios@1.7.9: - resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} + axios@1.7.9: dependencies: follow-redirects: 1.15.9 form-data: 4.0.1 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - dev: true - /babel-plugin-macros@3.1.0: - resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} - engines: {node: '>=10', npm: '>=6'} + babel-plugin-macros@3.1.0: dependencies: '@babel/runtime': 7.26.7 cosmiconfig: 7.1.0 resolve: 1.22.10 - dev: true - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@1.0.2: {} - /base32-encode@1.2.0: - resolution: {integrity: sha512-cHFU8XeRyx0GgmoWi5qHMCVRiqU6J3MHWxVgun7jggCBUpVzm1Ir7M9dYr2whjSNc3tFeXfQ/oZjQu/4u55h9A==} - requiresBuild: true + base32-encode@1.2.0: dependencies: to-data-view: 1.1.0 - dev: true optional: true - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + base64-js@1.5.1: {} - /before-after-hook@2.2.3: - resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} - dev: true + before-after-hook@2.2.3: {} - /better-path-resolve@1.0.0: - resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} - engines: {node: '>=4'} + better-path-resolve@1.0.0: dependencies: is-windows: 1.0.2 - dev: true - /big.js@6.2.2: - resolution: {integrity: sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==} - dev: false + big.js@6.2.2: {} - /bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + bindings@1.5.0: dependencies: file-uri-to-path: 1.0.0 - dev: false - /bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + bl@4.1.0: dependencies: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 - dev: true - /bluebird@3.7.2: - resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} - dev: true + bluebird@3.7.2: {} - /bmp-js@0.1.0: - resolution: {integrity: sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==} - dev: false + bmp-js@0.1.0: {} - /body-parser@1.20.3: - resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@1.20.3: dependencies: bytes: 3.1.2 content-type: 1.0.5 @@ -4935,108 +9425,65 @@ packages: unpipe: 1.0.0 transitivePeerDependencies: - supports-color - dev: true - /boolean@3.2.0: - resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - requiresBuild: true + boolean@3.2.0: optional: true - /bottleneck@2.19.5: - resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} - dev: true + bottleneck@2.19.5: {} - /bplist-creator@0.0.8: - resolution: {integrity: sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA==} - requiresBuild: true + bplist-creator@0.0.8: dependencies: stream-buffers: 2.2.0 - dev: true optional: true - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.1: dependencies: balanced-match: 1.0.2 - dev: true - /braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} + braces@3.0.3: dependencies: fill-range: 7.1.1 - dev: true - /browserslist@4.24.4: - resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + browserslist@4.24.4: dependencies: caniuse-lite: 1.0.30001699 electron-to-chromium: 1.5.97 node-releases: 2.0.19 update-browserslist-db: 1.1.2(browserslist@4.24.4) - dev: true - /buffer-builder@0.2.0: - resolution: {integrity: sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==} - dev: true + buffer-builder@0.2.0: {} - /buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + buffer-crc32@0.2.13: {} - /buffer-equal@0.0.1: - resolution: {integrity: sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==} - engines: {node: '>=0.4.0'} - dev: false + buffer-equal@0.0.1: {} - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true + buffer-from@1.1.2: {} - /buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + buffer@5.7.1: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - /buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + buffer@6.0.3: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: false - /bundle-require@5.1.0(esbuild@0.24.2): - resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - peerDependencies: - esbuild: '>=0.18' + bundle-require@5.1.0(esbuild@0.24.2): dependencies: esbuild: 0.24.2 load-tsconfig: 0.2.5 - dev: true - /bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - dev: true + bytes@3.1.2: {} - /cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - dev: true + cac@6.7.14: {} - /cacache@16.1.3: - resolution: {integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + cacache@16.1.3: dependencies: '@npmcli/fs': 2.1.2 '@npmcli/move-file': 2.0.1 @@ -5058,15 +9505,10 @@ packages: unique-filename: 2.0.1 transitivePeerDependencies: - bluebird - dev: true - /cacheable-lookup@5.0.4: - resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} - engines: {node: '>=10.6.0'} + cacheable-lookup@5.0.4: {} - /cacheable-request@7.0.4: - resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} - engines: {node: '>=8'} + cacheable-request@7.0.4: dependencies: clone-response: 1.0.3 get-stream: 5.2.0 @@ -5076,283 +9518,162 @@ packages: normalize-url: 6.1.0 responselike: 2.0.1 - /call-bind-apply-helpers@1.0.1: - resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} - engines: {node: '>= 0.4'} + call-bind-apply-helpers@1.0.1: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 - dev: true - /call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} - engines: {node: '>= 0.4'} + call-bind@1.0.8: dependencies: call-bind-apply-helpers: 1.0.1 es-define-property: 1.0.1 get-intrinsic: 1.2.7 set-function-length: 1.2.2 - dev: true - /call-bound@1.0.3: - resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} - engines: {node: '>= 0.4'} + call-bound@1.0.3: dependencies: call-bind-apply-helpers: 1.0.1 get-intrinsic: 1.2.7 - dev: true - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true + callsites@3.1.0: {} - /caniuse-lite@1.0.30001699: - resolution: {integrity: sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w==} - dev: true + caniuse-lite@1.0.30001699: {} - /centra@2.7.0: - resolution: {integrity: sha512-PbFMgMSrmgx6uxCdm57RUos9Tc3fclMvhLSATYN39XsDV29B89zZ3KA89jmY0vwSGazyU+uerqwa6t+KaodPcg==} + centra@2.7.0: dependencies: follow-redirects: 1.15.9 transitivePeerDependencies: - debug - dev: false - /chai@5.1.2: - resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} - engines: {node: '>=12'} + chai@5.1.2: dependencies: assertion-error: 2.0.1 check-error: 2.1.1 deep-eql: 5.0.2 loupe: 3.1.3 pathval: 2.0.0 - dev: true - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true + chalk@5.3.0: {} - /chalk@5.4.1: - resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true + chalk@5.4.1: {} - /chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: true + chardet@0.7.0: {} - /check-error@2.1.1: - resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} - engines: {node: '>= 16'} - dev: true + check-error@2.1.1: {} - /chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} + chokidar@4.0.3: dependencies: readdirp: 4.1.1 - dev: true - /chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - dev: true + chownr@2.0.0: {} - /chrome-trace-event@1.0.4: - resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} - engines: {node: '>=6.0'} - dev: true + chrome-trace-event@1.0.4: {} - /ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - dev: true + ci-info@3.9.0: {} - /clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - dev: true + clean-stack@2.2.0: {} - /cleye@1.3.3: - resolution: {integrity: sha512-co1Mo6qoua2PluWUmfh6NY9f4WkmfykIt/UjP+zYdMCx2rQqvdjh/mAeK7S4hgEChA14hvoYSsC+bb26RYILYg==} + cleye@1.3.4: dependencies: terminal-columns: 1.4.1 type-flag: 3.0.0 - dev: true - /cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} + cli-cursor@3.1.0: dependencies: restore-cursor: 3.1.0 - dev: true - /cli-cursor@4.0.0: - resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cli-cursor@4.0.0: dependencies: restore-cursor: 4.0.0 - dev: true - /cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - dev: true + cli-spinners@2.9.2: {} - /cli-truncate@3.1.0: - resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cli-truncate@3.1.0: dependencies: slice-ansi: 5.0.0 string-width: 5.1.2 - dev: true - /cli-width@4.1.0: - resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} - engines: {node: '>= 12'} - dev: true + cli-width@4.1.0: {} - /clipboardy@2.3.0: - resolution: {integrity: sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==} - engines: {node: '>=8'} + clipboardy@2.3.0: dependencies: arch: 2.2.0 execa: 1.0.0 is-wsl: 2.2.0 - dev: false - /cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - requiresBuild: true + cliui@7.0.4: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true optional: true - /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true - /clone-response@1.0.3: - resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + clone-response@1.0.3: dependencies: mimic-response: 1.0.1 - /clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - dev: true + clone@1.0.4: {} - /clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} - dev: true + clsx@2.1.1: {} - /color-convert@0.5.3: - resolution: {integrity: sha512-RwBeO/B/vZR3dfKL1ye/vx8MHZ40ugzpyfeVG5GsiuGnrlMWe2o8wxBbLCpw9CsxV+wHuzYlCiWnybrIA0ling==} - requiresBuild: true - dev: true + color-convert@0.5.3: optional: true - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-name@1.1.4: {} - /color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + color-string@1.9.1: dependencies: color-name: 1.1.4 simple-swizzle: 0.2.2 - dev: false - /color2k@2.0.3: - resolution: {integrity: sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==} - dev: true + color2k@2.0.3: {} - /color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} + color@4.2.3: dependencies: color-convert: 2.0.1 color-string: 1.9.1 - dev: false - /colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - dev: true + colorette@2.0.20: {} - /colorjs.io@0.5.2: - resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==} - dev: true + colorjs.io@0.5.2: {} - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 - /commander@11.0.0: - resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} - engines: {node: '>=16'} - dev: true + commander@11.0.0: {} - /commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - dev: true + commander@4.1.1: {} - /commander@5.1.0: - resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} - engines: {node: '>= 6'} - dev: true + commander@5.1.0: {} - /commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} - requiresBuild: true - dev: true + commander@9.5.0: {} - /compare-func@2.0.0: - resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + compare-func@2.0.0: dependencies: array-ify: 1.0.0 dot-prop: 5.3.0 - dev: true - /compare-version@0.1.2: - resolution: {integrity: sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==} - engines: {node: '>=0.10.0'} - dev: true + compare-version@0.1.2: {} - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + concat-map@0.0.1: {} - /conf@13.1.0: - resolution: {integrity: sha512-Bi6v586cy1CoTFViVO4lGTtx780lfF96fUmS1lSX6wpZf6330NvHUu6fReVuDP1de8Mg0nkZb01c8tAQdz1o3w==} - engines: {node: '>=18'} + conf@13.1.0: dependencies: ajv: 8.17.1 ajv-formats: 3.0.1(ajv@8.17.1) @@ -5363,143 +9684,79 @@ packages: json-schema-typed: 8.0.1 semver: 7.7.1 uint8array-extras: 1.4.0 - dev: false - /consola@3.4.0: - resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==} - engines: {node: ^14.18.0 || >=16.10.0} - dev: true + consola@3.4.0: {} - /content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} + content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 - dev: true - /content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - dev: true + content-type@1.0.5: {} - /conventional-changelog-angular@7.0.0: - resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} - engines: {node: '>=16'} + conventional-changelog-angular@7.0.0: dependencies: compare-func: 2.0.0 - dev: true - /conventional-changelog-conventionalcommits@7.0.2: - resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} - engines: {node: '>=16'} + conventional-changelog-conventionalcommits@7.0.2: dependencies: compare-func: 2.0.0 - dev: true - /conventional-commits-parser@5.0.0: - resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} - engines: {node: '>=16'} - hasBin: true + conventional-commits-parser@5.0.0: dependencies: JSONStream: 1.3.5 is-text-path: 2.0.0 meow: 12.1.1 split2: 4.2.0 - dev: true - /convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - dev: true - - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: true + convert-source-map@1.9.0: {} - /cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - dev: true + convert-source-map@2.0.0: {} - /cookie@0.7.1: - resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} - engines: {node: '>= 0.6'} - dev: true + cookie-signature@1.0.6: {} - /cookie@1.0.2: - resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} - engines: {node: '>=18'} - dev: true + cookie@0.7.1: {} - /copy-to-clipboard@3.3.3: - resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} + cookie@1.0.2: {} + + copy-to-clipboard@3.3.3: dependencies: toggle-selection: 1.0.6 - dev: true - /core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: false + core-util-is@1.0.3: {} - /cosmiconfig-typescript-loader@6.1.0(@types/node@20.17.17)(cosmiconfig@9.0.0)(typescript@5.7.3): - resolution: {integrity: sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==} - engines: {node: '>=v18'} - peerDependencies: - '@types/node': '*' - cosmiconfig: '>=9' - typescript: '>=5' + cosmiconfig-typescript-loader@6.1.0(@types/node@20.17.17)(cosmiconfig@9.0.0(typescript@5.7.3))(typescript@5.7.3): dependencies: '@types/node': 20.17.17 cosmiconfig: 9.0.0(typescript@5.7.3) jiti: 2.4.2 typescript: 5.7.3 - dev: true - /cosmiconfig@7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} - engines: {node: '>=10'} + cosmiconfig@7.1.0: dependencies: '@types/parse-json': 4.0.2 import-fresh: 3.3.1 parse-json: 5.2.0 path-type: 4.0.0 yaml: 1.10.2 - dev: true - /cosmiconfig@9.0.0(typescript@5.7.3): - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true + cosmiconfig@9.0.0(typescript@5.7.3): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 + optionalDependencies: typescript: 5.7.3 - dev: true - /create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: true + create-require@1.1.1: {} - /cross-dirname@0.1.0: - resolution: {integrity: sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==} - requiresBuild: true - dev: true + cross-dirname@0.1.0: {} - /cross-env@7.0.3: - resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} - engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} - hasBin: true + cross-env@7.0.3: dependencies: cross-spawn: 7.0.6 - dev: true - /cross-spawn@6.0.6: - resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} - engines: {node: '>=4.8'} + cross-spawn@6.0.6: dependencies: nice-try: 1.0.5 path-key: 2.0.1 @@ -5507,323 +9764,181 @@ packages: shebang-command: 1.2.0 which: 1.3.1 - /cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - /cross-zip@4.0.1: - resolution: {integrity: sha512-n63i0lZ0rvQ6FXiGQ+/JFCKAUyPFhLQYJIqKaa+tSJtfKeULF/IDNDAbdnSIxgS4NTuw2b0+lj8LzfITuq+ZxQ==} - engines: {node: '>=12.10'} - dev: true + cross-zip@4.0.1: {} - /crypto@1.0.1: - resolution: {integrity: sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==} - deprecated: This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in. - dev: true + crypto@1.0.1: {} - /css-in-js-utils@3.1.0: - resolution: {integrity: sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==} + css-in-js-utils@3.1.0: dependencies: hyphenate-style-name: 1.1.0 - dev: true - /css-tree@1.1.3: - resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} - engines: {node: '>=8.0.0'} + css-tree@1.1.3: dependencies: mdn-data: 2.0.14 source-map: 0.6.1 - dev: true - /csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + csstype@3.1.3: {} - /dargs@8.1.0: - resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} - engines: {node: '>=12'} - dev: true + dargs@8.1.0: {} - /data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} + data-view-buffer@1.0.2: dependencies: call-bound: 1.0.3 es-errors: 1.3.0 is-data-view: 1.0.2 - dev: true - /data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} + data-view-byte-length@1.0.2: dependencies: call-bound: 1.0.3 es-errors: 1.3.0 is-data-view: 1.0.2 - dev: true - /data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} + data-view-byte-offset@1.0.1: dependencies: call-bound: 1.0.3 es-errors: 1.3.0 is-data-view: 1.0.2 - dev: true - /debounce-fn@6.0.0: - resolution: {integrity: sha512-rBMW+F2TXryBwB54Q0d8drNEI+TfoS9JpNTAoVpukbWEhjXQq4rySFYLaqXMFXwdv61Zb2OHtj5bviSoimqxRQ==} - engines: {node: '>=18'} + debounce-fn@6.0.0: dependencies: mimic-function: 5.0.1 - dev: false - /debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@2.6.9: dependencies: ms: 2.0.0 - /debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@3.2.7: dependencies: ms: 2.1.3 - dev: true - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.3.4: dependencies: ms: 2.1.2 - dev: true - /debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.4.0: dependencies: ms: 2.1.3 - /decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} + decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 - /deep-eql@5.0.2: - resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} - engines: {node: '>=6'} - dev: true + deep-eql@5.0.2: {} - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true + deep-is@0.1.4: {} - /deepmerge@2.2.1: - resolution: {integrity: sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==} - engines: {node: '>=0.10.0'} - dev: true + deepmerge@2.2.1: {} - /defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + defaults@1.0.4: dependencies: clone: 1.0.4 - dev: true - /defer-to-connect@2.0.1: - resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} - engines: {node: '>=10'} + defer-to-connect@2.0.1: {} - /define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} + define-data-property@1.1.4: dependencies: es-define-property: 1.0.1 es-errors: 1.3.0 gopd: 1.2.0 - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + define-properties@1.2.1: dependencies: define-data-property: 1.1.4 has-property-descriptors: 1.0.2 object-keys: 1.1.1 - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} + delayed-stream@1.0.0: {} - /depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - dev: true + depd@2.0.0: {} - /deprecation@2.3.1: - resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} - dev: true + deprecation@2.3.1: {} - /dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - dev: true + dequal@2.0.3: {} - /destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dev: true + destroy@1.2.0: {} - /detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} - dev: true + detect-indent@6.1.0: {} - /detect-libc@2.0.3: - resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} - engines: {node: '>=8'} + detect-libc@2.0.3: {} - /detect-node-es@1.1.0: - resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} - dev: true + detect-node-es@1.1.0: {} - /detect-node@2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - requiresBuild: true + detect-node@2.1.0: optional: true - /detect-package-manager@3.0.2: - resolution: {integrity: sha512-8JFjJHutStYrfWwzfretQoyNGoZVW1Fsrp4JO9spa7h/fBfwgTMEIy4/LBzRDGsxwVPHU0q+T9YvwLDJoOApLQ==} - engines: {node: '>=12'} + detect-package-manager@3.0.2: dependencies: execa: 5.1.1 - dev: true - /diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dev: true + diff@4.0.2: {} - /dir-compare@4.2.0: - resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} + dir-compare@4.2.0: dependencies: minimatch: 3.1.2 p-limit: 3.1.0 - dev: true - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 - dev: true - /doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} + doctrine@2.1.0: dependencies: esutils: 2.0.3 - dev: true - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} + doctrine@3.0.0: dependencies: esutils: 2.0.3 - dev: true - /dom-walk@0.1.2: - resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} - dev: false + dom-walk@0.1.2: {} - /dot-prop@5.3.0: - resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} - engines: {node: '>=8'} + dot-prop@5.3.0: dependencies: is-obj: 2.0.0 - dev: true - /dot-prop@9.0.0: - resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} - engines: {node: '>=18'} + dot-prop@9.0.0: dependencies: type-fest: 4.34.1 - dev: false - /dotenv@16.4.7: - resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} - engines: {node: '>=12'} - dev: false + dotenv@16.4.7: {} - /ds-store@0.1.6: - resolution: {integrity: sha512-kY21M6Lz+76OS3bnCzjdsJSF7LBpLYGCVfavW8TgQD2XkcqIZ86W0y9qUDZu6fp7SIZzqosMDW2zi7zVFfv4hw==} - requiresBuild: true + ds-store@0.1.6: dependencies: bplist-creator: 0.0.8 macos-alias: 0.2.12 tn1150: 0.1.0 - dev: true optional: true - /dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.1 es-errors: 1.3.0 gopd: 1.2.0 - dev: true - /eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - dev: true + eastasianwidth@0.2.0: {} - /ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - dev: true + ee-first@1.1.1: {} - /electron-debug@3.2.0: - resolution: {integrity: sha512-7xZh+LfUvJ52M9rn6N+tPuDw6oRAjxUj9SoxAZfJ0hVCXhZCsdkrSt7TgXOiWiEOBgEV8qwUIO/ScxllsPS7ow==} + electron-debug@3.2.0: dependencies: electron-is-dev: 1.2.0 electron-localshortcut: 3.2.1 transitivePeerDependencies: - supports-color - dev: false - /electron-devtools-installer@3.2.1: - resolution: {integrity: sha512-FaCi+oDCOBTw0gJUsuw5dXW32b2Ekh5jO8lI1NRCQigo3azh2VogsIi0eelMVrP1+LkN/bewyH3Xoo1USjO0eQ==} + electron-devtools-installer@3.2.1: dependencies: rimraf: 3.0.2 semver: 7.7.1 tslib: 2.8.1 unzip-crx-3: 0.2.0 - dev: false - /electron-installer-common@0.10.4: - resolution: {integrity: sha512-8gMNPXfAqUE5CfXg8RL0vXpLE9HAaPkgLXVoHE3BMUzogMWenf4LmwQ27BdCUrEhkjrKl+igs2IHJibclR3z3Q==} - engines: {node: '>= 10.0.0'} - requiresBuild: true + electron-installer-common@0.10.4: dependencies: '@electron/asar': 3.3.1 '@malept/cross-spawn-promise': 1.1.1 @@ -5838,15 +9953,9 @@ packages: '@types/fs-extra': 9.0.13 transitivePeerDependencies: - supports-color - dev: true optional: true - /electron-installer-debian@3.2.0: - resolution: {integrity: sha512-58ZrlJ1HQY80VucsEIG9tQ//HrTlG6sfofA3nRGr6TmkX661uJyu4cMPPh6kXW+aHdq/7+q25KyQhDrXvRL7jw==} - engines: {node: '>= 10.0.0'} - os: [darwin, linux] - hasBin: true - requiresBuild: true + electron-installer-debian@3.2.0: dependencies: '@malept/cross-spawn-promise': 1.1.1 debug: 4.4.0 @@ -5858,14 +9967,9 @@ packages: yargs: 16.2.0 transitivePeerDependencies: - supports-color - dev: true optional: true - /electron-installer-dmg@5.0.1: - resolution: {integrity: sha512-qOa1aAQdX57C+vzhDk3549dd/PRlNL4F8y736MTD1a43qptD+PvHY97Bo9gSf+OZ8iUWE7BrYSpk/FgLUe40EA==} - engines: {node: '>= 16'} - hasBin: true - requiresBuild: true + electron-installer-dmg@5.0.1: dependencies: '@types/appdmg': 0.5.5 debug: 4.4.0 @@ -5874,15 +9978,9 @@ packages: appdmg: 0.6.6 transitivePeerDependencies: - supports-color - dev: true optional: true - /electron-installer-redhat@3.4.0: - resolution: {integrity: sha512-gEISr3U32Sgtj+fjxUAlSDo3wyGGq6OBx7rF5UdpIgbnpUvMN4W5uYb0ThpnAZ42VEJh/3aODQXHbFS4f5J3Iw==} - engines: {node: '>= 10.0.0'} - os: [darwin, linux] - hasBin: true - requiresBuild: true + electron-installer-redhat@3.4.0: dependencies: '@malept/cross-spawn-promise': 1.1.1 debug: 4.4.0 @@ -5893,19 +9991,13 @@ packages: yargs: 16.2.0 transitivePeerDependencies: - supports-color - dev: true optional: true - /electron-is-accelerator@0.1.2: - resolution: {integrity: sha512-fLGSAjXZtdn1sbtZxx52+krefmtNuVwnJCV2gNiVt735/ARUboMl8jnNC9fZEqQdlAv2ZrETfmBUsoQci5evJA==} - dev: false + electron-is-accelerator@0.1.2: {} - /electron-is-dev@1.2.0: - resolution: {integrity: sha512-R1oD5gMBPS7PVU8gJwH6CtT0e6VSoD0+SzSnYpNm+dBkcijgA+K7VAMHDfnRq/lkKPZArpzplTW6jfiMYosdzw==} - dev: false + electron-is-dev@1.2.0: {} - /electron-localshortcut@3.2.1: - resolution: {integrity: sha512-DWvhKv36GsdXKnaFFhEiK8kZZA+24/yFLgtTwJJHc7AFgDjNRIBJZ/jq62Y/dWv9E4ypYwrVWN2bVrCYw1uv7Q==} + electron-localshortcut@3.2.1: dependencies: debug: 4.4.0 electron-is-accelerator: 0.1.2 @@ -5913,63 +10005,36 @@ packages: keyboardevents-areequal: 0.2.2 transitivePeerDependencies: - supports-color - dev: false - /electron-log@5.2.4: - resolution: {integrity: sha512-iX12WXc5XAaKeHg2QpiFjVwL+S1NVHPFd3V5RXtCmKhpAzXsVQnR3UEc0LovM6p6NkUQxDWnkdkaam9FNUVmCA==} - engines: {node: '>= 14'} - dev: false + electron-log@5.2.4: {} - /electron-packager-languages@0.5.0: - resolution: {integrity: sha512-ryJsVXgHq0+7eZpJ+YSUQNYUnH4yPq2J4gXtmP9HEq8N6PHtygLEmohKMm4VrwI5qTir4HRCxy+O1UNo8mbwgg==} - engines: {node: '>6.0.0'} + electron-packager-languages@0.5.0: dependencies: rimraf: 2.7.1 - dev: true - /electron-playwright-helpers@1.7.1: - resolution: {integrity: sha512-S9mo7LfpERgub2WIuYVPpib4XKFeAqBP+mxYf5Bv7E0B5GUB+LUbSj6Fpu39h18Ar635Nf9nQYTmypjuvaYJng==} + electron-playwright-helpers@1.7.1: dependencies: '@electron/asar': 3.3.1 - dev: true - /electron-squirrel-startup@1.0.1: - resolution: {integrity: sha512-sTfFIHGku+7PsHLJ7v0dRcZNkALrV+YEozINTW8X1nM//e5O3L+rfYuvSW00lmGHnYmUjARZulD8F2V8ISI9RA==} + electron-squirrel-startup@1.0.1: dependencies: debug: 2.6.9 transitivePeerDependencies: - supports-color - dev: false - /electron-store@10.0.1: - resolution: {integrity: sha512-Ok0bF13WWdTzZi9rCtPN8wUfwx+yDMmV6PAnCMqjNRKEXHmklW/rV+6DofV/Vf5qoAh+Bl9Bj7dQ+0W+IL2psg==} - engines: {node: '>=20'} + electron-store@10.0.1: dependencies: conf: 13.1.0 type-fest: 4.34.1 - dev: false - /electron-to-chromium@1.5.97: - resolution: {integrity: sha512-HKLtaH02augM7ZOdYRuO19rWDeY+QSJ1VxnXFa/XDFLf07HvM90pALIJFgrO+UVaajI3+aJMMpojoUTLZyQ7JQ==} - dev: true + electron-to-chromium@1.5.97: {} - /electron-util@0.17.2: - resolution: {integrity: sha512-4Kg/aZxJ2BZklgyfH86px/D2GyROPyIcnAZar+7KiNmKI2I5l09pwQTP7V95zM3FVhgDQwV9iuJta5dyEvuWAw==} + electron-util@0.17.2: dependencies: electron-is-dev: 1.2.0 new-github-issue-url: 0.2.1 - dev: false - /electron-vite@2.3.0(vite@5.4.14): - resolution: {integrity: sha512-lsN2FymgJlp4k6MrcsphGqZQ9fKRdJKasoaiwIrAewN1tapYI/KINLdfEL7n10LuF0pPSNf/IqjzZbB5VINctg==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@swc/core': ^1.0.0 - vite: ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - '@swc/core': - optional: true + electron-vite@2.3.0(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)): dependencies: '@babel/core': 7.26.8 '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.8) @@ -5980,12 +10045,8 @@ packages: vite: 5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4) transitivePeerDependencies: - supports-color - dev: true - /electron-winstaller@5.4.0: - resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==} - engines: {node: '>=8.0.0'} - requiresBuild: true + electron-winstaller@5.4.0: dependencies: '@electron/asar': 3.3.1 debug: 4.4.0 @@ -5996,14 +10057,9 @@ packages: '@electron/windows-sign': 1.2.0 transitivePeerDependencies: - supports-color - dev: true optional: true - /electron@34.0.2: - resolution: {integrity: sha512-u3F+DSUlg9NaGS+9qnYmSRN8VjAnc3LJDDk1ye1uISJnh4gjG76y3681qLowsPMx4obvCP2eBINnmbLo0yT5WA==} - engines: {node: '>= 12.20.55'} - hasBin: true - requiresBuild: true + electron@30.5.1: dependencies: '@electron/get': 2.0.3 '@types/node': 20.17.17 @@ -6011,84 +10067,56 @@ packages: transitivePeerDependencies: - supports-color - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true + electron@34.1.1: + dependencies: + '@electron/get': 2.0.3 + '@types/node': 20.17.17 + extract-zip: 2.0.1 + transitivePeerDependencies: + - supports-color - /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: true + emoji-regex@8.0.0: {} - /encode-utf8@1.0.3: - resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==} - requiresBuild: true - dev: true + emoji-regex@9.2.2: {} + + encode-utf8@1.0.3: optional: true - /encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - dev: true + encodeurl@1.0.2: {} - /encodeurl@2.0.0: - resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} - engines: {node: '>= 0.8'} - dev: true + encodeurl@2.0.0: {} - /encoding@0.1.13: - resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} - requiresBuild: true + encoding@0.1.13: dependencies: iconv-lite: 0.6.3 - dev: true optional: true - /end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + end-of-stream@1.4.4: dependencies: once: 1.4.0 - /enquirer@2.4.1: - resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} - engines: {node: '>=8.6'} + enquirer@2.4.1: dependencies: ansi-colors: 4.1.3 strip-ansi: 6.0.1 - dev: true - /entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - dev: true + entities@4.5.0: {} - /env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} + env-paths@2.2.1: {} - /env-paths@3.0.0: - resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: false + env-paths@3.0.0: {} - /err-code@2.0.3: - resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - dev: true + err-code@2.0.3: {} - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 - dev: true - /error-stack-parser@2.1.4: - resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + error-stack-parser@2.1.4: dependencies: stackframe: 1.3.4 - dev: true - /es-abstract@1.23.9: - resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} - engines: {node: '>= 0.4'} + es-abstract@1.23.9: dependencies: array-buffer-byte-length: 1.0.2 arraybuffer.prototype.slice: 1.0.4 @@ -6141,19 +10169,12 @@ packages: typed-array-length: 1.0.7 unbox-primitive: 1.1.0 which-typed-array: 1.1.18 - dev: true - /es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} + es-define-property@1.0.1: {} - /es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} + es-errors@1.3.0: {} - /es-iterator-helpers@1.2.1: - resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} - engines: {node: '>= 0.4'} + es-iterator-helpers@1.2.1: dependencies: call-bind: 1.0.8 call-bound: 1.0.3 @@ -6171,65 +10192,41 @@ packages: internal-slot: 1.1.0 iterator.prototype: 1.1.5 safe-array-concat: 1.1.3 - dev: true - /es-module-lexer@1.6.0: - resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} - dev: true + es-module-lexer@1.6.0: {} - /es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 - dev: true - /es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} + es-set-tostringtag@2.1.0: dependencies: es-errors: 1.3.0 get-intrinsic: 1.2.7 has-tostringtag: 1.0.2 hasown: 2.0.2 - dev: true - /es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + es-shim-unscopables@1.0.2: dependencies: hasown: 2.0.2 - dev: true - /es-to-primitive@1.3.0: - resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} - engines: {node: '>= 0.4'} + es-to-primitive@1.3.0: dependencies: is-callable: 1.2.7 is-date-object: 1.1.0 is-symbol: 1.1.1 - dev: true - /es6-error@4.1.1: - resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} - requiresBuild: true + es6-error@4.1.1: optional: true - /esbuild-register@3.6.0(esbuild@0.25.0): - resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} - peerDependencies: - esbuild: '>=0.12 <1' + esbuild-register@3.6.0(esbuild@0.25.0): dependencies: debug: 4.4.0 esbuild: 0.25.0 transitivePeerDependencies: - supports-color - dev: false - /esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true + esbuild@0.21.5: optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 '@esbuild/android-arm': 0.21.5 @@ -6254,13 +10251,8 @@ packages: '@esbuild/win32-arm64': 0.21.5 '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 - dev: true - /esbuild@0.23.1: - resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} - engines: {node: '>=18'} - hasBin: true - requiresBuild: true + esbuild@0.23.1: optionalDependencies: '@esbuild/aix-ppc64': 0.23.1 '@esbuild/android-arm': 0.23.1 @@ -6286,13 +10278,8 @@ packages: '@esbuild/win32-arm64': 0.23.1 '@esbuild/win32-ia32': 0.23.1 '@esbuild/win32-x64': 0.23.1 - dev: true - /esbuild@0.24.2: - resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} - engines: {node: '>=18'} - hasBin: true - requiresBuild: true + esbuild@0.24.2: optionalDependencies: '@esbuild/aix-ppc64': 0.24.2 '@esbuild/android-arm': 0.24.2 @@ -6319,13 +10306,8 @@ packages: '@esbuild/win32-arm64': 0.24.2 '@esbuild/win32-ia32': 0.24.2 '@esbuild/win32-x64': 0.24.2 - dev: true - /esbuild@0.25.0: - resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==} - engines: {node: '>=18'} - hasBin: true - requiresBuild: true + esbuild@0.25.0: optionalDependencies: '@esbuild/aix-ppc64': 0.25.0 '@esbuild/android-arm': 0.25.0 @@ -6352,86 +10334,40 @@ packages: '@esbuild/win32-arm64': 0.25.0 '@esbuild/win32-ia32': 0.25.0 '@esbuild/win32-x64': 0.25.0 - dev: false - /escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - dev: true + escalade@3.2.0: {} - /escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - dev: true + escape-html@1.0.3: {} - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: true + escape-string-regexp@1.0.5: {} - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} + escape-string-regexp@4.0.0: {} - /eslint-config-prettier@9.1.0(eslint@8.57.1): - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' + eslint-config-prettier@9.1.0(eslint@8.57.1): dependencies: eslint: 8.57.1 - dev: true - /eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 is-core-module: 2.16.1 resolve: 1.22.10 transitivePeerDependencies: - supports-color - dev: true - - /eslint-module-utils@2.12.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): - resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true + + eslint-module-utils@2.12.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.7.3) debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.7.3) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - dev: true - /eslint-plugin-import@2.31.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1): - resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true + eslint-plugin-import@2.31.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1): dependencies: '@rtsao/scc': 1.1.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.7.3) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.3 @@ -6440,7 +10376,7 @@ packages: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -6451,38 +10387,23 @@ packages: semver: 6.3.1 string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.7.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - dev: true - /eslint-plugin-prettier@5.2.3(eslint-config-prettier@9.1.0)(eslint@8.57.1)(prettier@3.5.0): - resolution: {integrity: sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - '@types/eslint': '>=8.0.0' - eslint: '>=8.0.0' - eslint-config-prettier: '*' - prettier: '>=3.0.0' - peerDependenciesMeta: - '@types/eslint': - optional: true - eslint-config-prettier: - optional: true + eslint-plugin-prettier@5.2.3(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.5.0): dependencies: eslint: 8.57.1 - eslint-config-prettier: 9.1.0(eslint@8.57.1) prettier: 3.5.0 prettier-linter-helpers: 1.0.0 synckit: 0.9.2 - dev: true + optionalDependencies: + eslint-config-prettier: 9.1.0(eslint@8.57.1) - /eslint-plugin-react@7.37.4(eslint@8.57.1): - resolution: {integrity: sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + eslint-plugin-react@7.37.4(eslint@8.57.1): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -6503,34 +10424,20 @@ packages: semver: 6.3.1 string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - dev: true - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} + eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - dev: true - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@7.2.2: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - dev: true - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + eslint-visitor-keys@3.4.3: {} - /eslint@8.57.1: - resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. - hasBin: true + eslint@8.57.1: dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) '@eslint-community/regexpp': 4.12.1 @@ -6572,79 +10479,42 @@ packages: text-table: 0.2.0 transitivePeerDependencies: - supports-color - dev: true - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@9.6.1: dependencies: acorn: 8.14.0 acorn-jsx: 5.3.2(acorn@8.14.0) eslint-visitor-keys: 3.4.3 - dev: true - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: true + esprima@4.0.1: {} - /esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} + esquery@1.6.0: dependencies: estraverse: 5.3.0 - dev: true - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 - dev: true - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: true + estraverse@4.3.0: {} - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true + estraverse@5.3.0: {} - /estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + estree-walker@3.0.3: dependencies: '@types/estree': 1.0.6 - dev: true - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true + esutils@2.0.3: {} - /etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - dev: true + etag@1.8.1: {} - /event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} + event-target-shim@5.0.1: {} - /eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - dev: true + eventemitter3@5.0.1: {} - /events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - dev: false + events@3.3.0: {} - /execa@1.0.0: - resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} - engines: {node: '>=6'} + execa@1.0.0: dependencies: cross-spawn: 6.0.6 get-stream: 4.1.0 @@ -6654,9 +10524,7 @@ packages: signal-exit: 3.0.7 strip-eof: 1.0.0 - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + execa@5.1.1: dependencies: cross-spawn: 7.0.6 get-stream: 6.0.1 @@ -6668,9 +10536,7 @@ packages: signal-exit: 3.0.7 strip-final-newline: 2.0.0 - /execa@7.2.0: - resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} - engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + execa@7.2.0: dependencies: cross-spawn: 7.0.6 get-stream: 6.0.1 @@ -6681,44 +10547,26 @@ packages: onetime: 6.0.0 signal-exit: 3.0.7 strip-final-newline: 3.0.0 - dev: true - /exif-parser@0.1.12: - resolution: {integrity: sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==} - dev: false + exif-parser@0.1.12: {} - /expand-tilde@2.0.2: - resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} - engines: {node: '>=0.10.0'} + expand-tilde@2.0.2: dependencies: homedir-polyfill: 1.0.3 - dev: true - /expect-type@1.1.0: - resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} - engines: {node: '>=12.0.0'} - dev: true + expect-type@1.1.0: {} - /exponential-backoff@3.1.2: - resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} - dev: true + exponential-backoff@3.1.2: {} - /express-ws@5.0.2(express@4.21.2): - resolution: {integrity: sha512-0uvmuk61O9HXgLhGl3QhNSEtRsQevtmbL94/eILaliEADZBHZOQUAiHFrGPrgsjikohyrmSG5g+sCfASTt0lkQ==} - engines: {node: '>=4.5.0'} - peerDependencies: - express: ^4.0.0 || ^5.0.0-alpha.1 + express-ws@5.0.2(express@4.21.2): dependencies: express: 4.21.2 ws: 7.5.10 transitivePeerDependencies: - bufferutil - utf-8-validate - dev: true - /express@4.21.2: - resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} - engines: {node: '>= 0.10.0'} + express@4.21.2: dependencies: accepts: 1.3.8 array-flatten: 1.1.1 @@ -6753,25 +10601,16 @@ packages: vary: 1.1.2 transitivePeerDependencies: - supports-color - dev: true - /extendable-error@0.1.7: - resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} - dev: true + extendable-error@0.1.7: {} - /external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} + external-editor@3.1.0: dependencies: chardet: 0.7.0 iconv-lite: 0.4.24 tmp: 0.0.33 - dev: true - /extract-zip@2.0.1: - resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} - engines: {node: '>= 10.17.0'} - hasBin: true + extract-zip@2.0.1: dependencies: debug: 4.4.0 get-stream: 5.2.0 @@ -6781,109 +10620,65 @@ packages: transitivePeerDependencies: - supports-color - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-deep-equal@3.1.3: {} - /fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - dev: true + fast-diff@1.3.0: {} - /fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.8 - dev: true - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true + fast-json-stable-stringify@2.1.0: {} - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true + fast-levenshtein@2.0.6: {} - /fast-shallow-equal@1.0.0: - resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==} - dev: true + fast-shallow-equal@1.0.0: {} - /fast-uri@3.0.6: - resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + fast-uri@3.0.6: {} - /fastest-stable-stringify@2.0.2: - resolution: {integrity: sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==} - dev: true + fastest-stable-stringify@2.0.2: {} - /fastq@1.19.0: - resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} + fastq@1.19.0: dependencies: reusify: 1.0.4 - dev: true - /fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + fd-slicer@1.1.0: dependencies: pend: 1.2.0 - /fdir@6.4.3(picomatch@4.0.2): - resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - dependencies: + fdir@6.4.3(picomatch@4.0.2): + optionalDependencies: picomatch: 4.0.2 - dev: true - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@6.0.1: dependencies: flat-cache: 3.2.0 - dev: true - /file-type@16.5.4: - resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==} - engines: {node: '>=10'} + file-type@16.5.4: dependencies: readable-web-to-node-stream: 3.0.3 strtok3: 6.3.0 token-types: 4.2.1 - dev: false - /file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - dev: false + file-uri-to-path@1.0.0: {} - /filename-reserved-regex@2.0.0: - resolution: {integrity: sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==} - engines: {node: '>=4'} - dev: true + filename-reserved-regex@2.0.0: {} - /filenamify@4.3.0: - resolution: {integrity: sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==} - engines: {node: '>=8'} + filenamify@4.3.0: dependencies: filename-reserved-regex: 2.0.0 strip-outer: 1.0.1 trim-repeated: 1.0.0 - dev: true - /fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 - dev: true - /finalhandler@1.3.1: - resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} - engines: {node: '>= 0.8'} + finalhandler@1.3.1: dependencies: debug: 2.6.9 encodeurl: 2.0.0 @@ -6894,128 +10689,78 @@ packages: unpipe: 1.0.0 transitivePeerDependencies: - supports-color - dev: true - /find-root@1.1.0: - resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} - dev: true + find-root@1.1.0: {} - /find-up@2.1.0: - resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} - engines: {node: '>=4'} + find-up@2.1.0: dependencies: locate-path: 2.0.0 - dev: true - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} + find-up@4.1.0: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - dev: true - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true - /find-up@7.0.0: - resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} - engines: {node: '>=18'} + find-up@7.0.0: dependencies: locate-path: 7.2.0 path-exists: 5.0.0 unicorn-magic: 0.1.0 - dev: true - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@3.2.0: dependencies: flatted: 3.3.2 keyv: 4.5.4 rimraf: 3.0.2 - dev: true - /flatted@3.3.2: - resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} - dev: true + flatted@3.3.2: {} - /flora-colossus@2.0.0: - resolution: {integrity: sha512-dz4HxH6pOvbUzZpZ/yXhafjbR2I8cenK5xL0KtBFb7U2ADsR+OwXifnxZjij/pZWF775uSCMzWVd+jDik2H2IA==} - engines: {node: '>= 12'} + flora-colossus@2.0.0: dependencies: debug: 4.4.0 fs-extra: 10.1.0 transitivePeerDependencies: - supports-color - dev: true - /fmix@0.1.0: - resolution: {integrity: sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==} - requiresBuild: true + fmix@0.1.0: dependencies: imul: 1.0.1 - dev: true optional: true - /focus-lock@1.3.6: - resolution: {integrity: sha512-Ik/6OCk9RQQ0T5Xw+hKNLWrjSMtv51dD4GRmJjbD5a58TIEpI5a5iXagKVl3Z5UuyslMCA8Xwnu76jQob62Yhg==} - engines: {node: '>=10'} + focus-lock@1.3.6: dependencies: tslib: 2.8.1 - dev: true - /follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true + follow-redirects@1.15.9: {} - /for-each@0.3.4: - resolution: {integrity: sha512-kKaIINnFpzW6ffJNDjjyjrk21BkDx38c0xa/klsT8VzLCaMEefv4ZTacrcVR4DmgTeBra++jMDAfS/tS799YDw==} - engines: {node: '>= 0.4'} + for-each@0.3.5: dependencies: is-callable: 1.2.7 - dev: true - /foreground-child@3.3.0: - resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} - engines: {node: '>=14'} + foreground-child@3.3.0: dependencies: cross-spawn: 7.0.6 signal-exit: 4.1.0 - dev: true - /form-data-encoder@1.7.2: - resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} + form-data-encoder@1.7.2: {} - /form-data@4.0.1: - resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} - engines: {node: '>= 6'} + form-data@4.0.1: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 - /formdata-node@4.4.1: - resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} - engines: {node: '>= 12.20'} + formdata-node@4.4.1: dependencies: node-domexception: 1.0.0 web-streams-polyfill: 4.0.0-beta.3 - /formik@2.4.6(react@18.3.1): - resolution: {integrity: sha512-A+2EI7U7aG296q2TLGvNapDNTZp1khVt5Vk0Q/fyfSROss0V/V6+txt2aJnwEos44IxTCW/LYAi/zgWzlevj+g==} - peerDependencies: - react: '>=16.8.0' + formik@2.4.6(react@18.3.1): dependencies: '@types/hoist-non-react-statics': 3.3.6 deepmerge: 2.2.1 @@ -7026,139 +10771,79 @@ packages: react-fast-compare: 2.0.4 tiny-warning: 1.0.3 tslib: 2.8.1 - dev: true - /forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - dev: true + forwarded@0.2.0: {} - /framer-motion@11.18.2(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==} - peerDependencies: - '@emotion/is-prop-valid': '*' - react: ^18.0.0 || ^19.0.0 - react-dom: ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@emotion/is-prop-valid': - optional: true - react: - optional: true - react-dom: - optional: true + framer-motion@11.18.2(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: motion-dom: 11.18.1 motion-utils: 11.18.1 + tslib: 2.8.1 + optionalDependencies: + '@emotion/is-prop-valid': 1.3.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - tslib: 2.8.1 - dev: true - /framesync@6.1.2: - resolution: {integrity: sha512-jBTqhX6KaQVDyus8muwZbBeGGP0XgujBRbQ7gM7BRdS3CadCZIHiawyzYLnafYcvZIh5j8WE7cxZKFn7dXhu9g==} + framesync@6.1.2: dependencies: tslib: 2.4.0 - dev: true - /fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - dev: true + fresh@0.5.2: {} - /fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} + fs-extra@10.1.0: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - dev: true - /fs-extra@11.3.0: - resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} - engines: {node: '>=14.14'} + fs-extra@11.3.0: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - dev: true - /fs-extra@7.0.1: - resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} - engines: {node: '>=6 <7 || >=8'} + fs-extra@7.0.1: dependencies: graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 - dev: true - /fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} + fs-extra@8.1.0: dependencies: graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 - /fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} + fs-extra@9.1.0: dependencies: at-least-node: 1.0.0 graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - dev: true - /fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} + fs-minipass@2.1.0: dependencies: minipass: 3.3.6 - dev: true - /fs-temp@1.2.1: - resolution: {integrity: sha512-okTwLB7/Qsq82G6iN5zZJFsOfZtx2/pqrA7Hk/9fvy+c+eJS9CvgGXT2uNxwnI14BDY9L/jQPkaBgSvlKfSW9w==} - requiresBuild: true + fs-temp@1.2.1: dependencies: random-path: 0.1.2 - dev: true optional: true - /fs-xattr@0.3.1: - resolution: {integrity: sha512-UVqkrEW0GfDabw4C3HOrFlxKfx0eeigfRne69FxSBdHIP8Qt5Sq6Pu3RM9KmMlkygtC4pPKkj5CiPO5USnj2GA==} - engines: {node: '>=8.6.0'} - os: ['!win32'] - requiresBuild: true - dev: true + fs-xattr@0.3.1: optional: true - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fs.realpath@1.0.0: {} - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true + fsevents@2.3.2: optional: true - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true + fsevents@2.3.3: optional: true - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - dev: true + function-bind@1.1.2: {} - /function.prototype.name@1.1.8: - resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} - engines: {node: '>= 0.4'} + function.prototype.name@1.1.8: dependencies: call-bind: 1.0.8 call-bound: 1.0.3 @@ -7166,75 +10851,45 @@ packages: functions-have-names: 1.2.3 hasown: 2.0.2 is-callable: 1.2.7 - dev: true - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true + functions-have-names@1.2.3: {} - /galactus@1.0.0: - resolution: {integrity: sha512-R1fam6D4CyKQGNlvJne4dkNF+PvUUl7TAJInvTGa9fti9qAv95quQz29GXapA4d8Ec266mJJxFVh82M4GIIGDQ==} - engines: {node: '>= 12'} + galactus@1.0.0: dependencies: debug: 4.4.0 flora-colossus: 2.0.0 fs-extra: 10.1.0 transitivePeerDependencies: - supports-color - dev: true - /gar@1.0.4: - resolution: {integrity: sha512-w4n9cPWyP7aHxKxYHFQMegj7WIAsL/YX/C4Bs5Rr8s1H9M1rNtRWRsw+ovYMkXDQ5S4ZbYHsHAPmevPjPgw44w==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - requiresBuild: true - dev: true + gar@1.0.4: optional: true - /generate-function@2.3.1: - resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} - requiresBuild: true + generate-function@2.3.1: dependencies: is-property: 1.0.2 - dev: true optional: true - /generate-object-property@1.2.0: - resolution: {integrity: sha512-TuOwZWgJ2VAMEGJvAyPWvpqxSANF0LDpmyHauMjFYzaACvn+QTT/AZomvPCzVBV7yDN3OmwHQ5OvHaeLKre3JQ==} - requiresBuild: true + generate-object-property@1.2.0: dependencies: is-property: 1.0.2 - dev: true optional: true - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - dev: true + gensync@1.0.0-beta.2: {} - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true + get-caller-file@2.0.5: {} - /get-folder-size@2.0.1: - resolution: {integrity: sha512-+CEb+GDCM7tkOS2wdMKTn9vU7DgnKUTuDlehkNJKNSovdCOVxs14OfKCk4cvSaR3za4gj+OBdl9opPN9xrJ0zA==} - hasBin: true - requiresBuild: true + get-folder-size@2.0.1: dependencies: gar: 1.0.4 tiny-each-async: 2.0.3 - dev: true optional: true - /get-installed-path@2.1.1: - resolution: {integrity: sha512-Qkn9eq6tW5/q9BDVdMpB8tOHljX9OSP0jRC5TRNVA4qRc839t4g8KQaR8t0Uv0EFVL0MlyG7m/ofjEgAROtYsA==} + get-installed-path@2.1.1: dependencies: global-modules: 1.0.0 - dev: true - /get-intrinsic@1.2.7: - resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} - engines: {node: '>= 0.4'} + get-intrinsic@1.2.7: dependencies: call-bind-apply-helpers: 1.0.1 es-define-property: 1.0.1 @@ -7246,16 +10901,10 @@ packages: has-symbols: 1.1.0 hasown: 2.0.2 math-intrinsics: 1.1.0 - dev: true - /get-nonce@1.0.1: - resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} - engines: {node: '>=6'} - dev: true + get-nonce@1.0.1: {} - /get-package-info@1.0.0: - resolution: {integrity: sha512-SCbprXGAPdIhKAXiG+Mk6yeoFH61JlYunqdFQFHDtLjJlDjFf6x07dsS8acO+xWt52jpdVo49AlVDnUVK1sDNw==} - engines: {node: '>= 4.0'} + get-package-info@1.0.0: dependencies: bluebird: 3.7.2 debug: 2.6.9 @@ -7263,87 +10912,56 @@ packages: read-pkg-up: 2.0.0 transitivePeerDependencies: - supports-color - dev: true - /get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} + get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - dev: true - /get-stream@4.1.0: - resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} - engines: {node: '>=6'} + get-stream@4.1.0: dependencies: pump: 3.0.2 - /get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} + get-stream@5.2.0: dependencies: pump: 3.0.2 - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} + get-stream@6.0.1: {} - /get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} + get-symbol-description@1.1.0: dependencies: call-bound: 1.0.3 es-errors: 1.3.0 get-intrinsic: 1.2.7 - dev: true - /get-tsconfig@4.10.0: - resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} + get-tsconfig@4.10.0: dependencies: resolve-pkg-maps: 1.0.0 - dev: true - /gifwrap@0.10.1: - resolution: {integrity: sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw==} + gifwrap@0.10.1: dependencies: image-q: 4.0.0 omggif: 1.0.10 - dev: false - /git-raw-commits@4.0.0: - resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} - engines: {node: '>=16'} - hasBin: true + git-raw-commits@4.0.0: dependencies: dargs: 8.1.0 meow: 12.1.1 split2: 4.2.0 - dev: true - /github-url-to-object@4.0.6: - resolution: {integrity: sha512-NaqbYHMUAlPcmWFdrAB7bcxrNIiiJWJe8s/2+iOc9vlcHlwHqSGrPk+Yi3nu6ebTwgsZEa7igz+NH2vEq3gYwQ==} + github-url-to-object@4.0.6: dependencies: is-url: 1.2.4 - dev: false - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - dev: true - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - dev: true - /glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - hasBin: true + glob@10.4.5: dependencies: foreground-child: 3.3.0 jackspeak: 3.4.3 @@ -7351,24 +10969,17 @@ packages: minipass: 7.1.2 package-json-from-dist: 1.0.1 path-scurry: 1.11.1 - dev: true - /glob@11.0.1: - resolution: {integrity: sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==} - engines: {node: 20 || >=22} - hasBin: true + glob@11.0.1: dependencies: foreground-child: 3.3.0 - jackspeak: 4.0.2 + jackspeak: 4.0.3 minimatch: 10.0.1 minipass: 7.1.2 package-json-from-dist: 1.0.1 path-scurry: 2.0.0 - dev: true - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -7376,23 +10987,16 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - - /glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} - deprecated: Glob versions prior to v9 are no longer supported + + glob@8.1.0: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 minimatch: 5.1.6 once: 1.4.0 - dev: true - /global-agent@3.0.0: - resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} - engines: {node: '>=10.0'} - requiresBuild: true + global-agent@3.0.0: dependencies: boolean: 3.2.0 es6-error: 4.1.1 @@ -7402,62 +11006,41 @@ packages: serialize-error: 7.0.1 optional: true - /global-directory@4.0.1: - resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} - engines: {node: '>=18'} + global-directory@4.0.1: dependencies: ini: 4.1.1 - dev: true - /global-modules@1.0.0: - resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} - engines: {node: '>=0.10.0'} + global-modules@1.0.0: dependencies: global-prefix: 1.0.2 is-windows: 1.0.2 resolve-dir: 1.0.1 - dev: true - /global-prefix@1.0.2: - resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} - engines: {node: '>=0.10.0'} + global-prefix@1.0.2: dependencies: expand-tilde: 2.0.2 homedir-polyfill: 1.0.3 ini: 1.3.8 is-windows: 1.0.2 which: 1.3.1 - dev: true - /global@4.4.0: - resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} + global@4.4.0: dependencies: min-document: 2.19.0 process: 0.11.10 - dev: false - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - dev: true + globals@11.12.0: {} - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} + globals@13.24.0: dependencies: type-fest: 0.20.2 - dev: true - /globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} + globalthis@1.0.4: dependencies: define-properties: 1.2.1 gopd: 1.2.0 - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} + globby@11.1.0: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 @@ -7465,19 +11048,12 @@ packages: ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 - dev: true - /globrex@0.1.2: - resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - dev: true + globrex@0.1.2: {} - /gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} + gopd@1.2.0: {} - /got@11.8.6: - resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} - engines: {node: '>=10.19.0'} + got@11.8.6: dependencies: '@sindresorhus/is': 4.6.0 '@szmarczak/http-timer': 4.0.6 @@ -7491,277 +11067,160 @@ packages: p-cancelable: 2.1.1 responselike: 2.0.1 - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + graceful-fs@4.2.11: {} - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true + graphemer@1.4.0: {} - /has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} - dev: true + has-bigints@1.1.0: {} - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true + has-flag@4.0.0: {} - /has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.1 - /has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} + has-proto@1.2.0: dependencies: dunder-proto: 1.0.1 - dev: true - /has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - dev: true + has-symbols@1.1.0: {} - /has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: dependencies: has-symbols: 1.1.0 - dev: true - /hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} + hasown@2.0.2: dependencies: function-bind: 1.1.2 - dev: true - /hoist-non-react-statics@3.3.2: - resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + hoist-non-react-statics@3.3.2: dependencies: react-is: 16.13.1 - dev: true - /homedir-polyfill@1.0.3: - resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} - engines: {node: '>=0.10.0'} + homedir-polyfill@1.0.3: dependencies: parse-passwd: 1.0.0 - dev: true - /hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: true + hosted-git-info@2.8.9: {} - /html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - dev: true + html-escaper@2.0.2: {} - /http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + http-cache-semantics@4.1.1: {} - /http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} + http-errors@2.0.0: dependencies: depd: 2.0.0 inherits: 2.0.4 setprototypeof: 1.2.0 statuses: 2.0.1 toidentifier: 1.0.1 - dev: true - /http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} + http-proxy-agent@5.0.0: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 debug: 4.4.0 transitivePeerDependencies: - supports-color - dev: true - /http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} + http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.3 debug: 4.4.0 transitivePeerDependencies: - supports-color - dev: true - /http2-wrapper@1.0.3: - resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} - engines: {node: '>=10.19.0'} + http2-wrapper@1.0.3: dependencies: quick-lru: 5.1.1 resolve-alpn: 1.2.1 - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} + https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 debug: 4.4.0 transitivePeerDependencies: - supports-color - dev: true - /https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} + https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.3 debug: 4.4.0 transitivePeerDependencies: - supports-color - dev: true - /human-id@1.0.2: - resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} - dev: true + human-id@1.0.2: {} - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} + human-signals@2.1.0: {} - /human-signals@4.3.1: - resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} - engines: {node: '>=14.18.0'} - dev: true + human-signals@4.3.1: {} - /humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + humanize-ms@1.2.1: dependencies: ms: 2.1.3 - /husky@9.1.7: - resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} - engines: {node: '>=18'} - hasBin: true - dev: true + husky@9.1.7: {} - /hyphenate-style-name@1.1.0: - resolution: {integrity: sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==} - dev: true + hyphenate-style-name@1.1.0: {} - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 - dev: true - /iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - requiresBuild: true + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 - dev: true optional: true - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + ieee754@1.2.1: {} - /ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - dev: true + ignore@5.3.2: {} - /image-q@4.0.0: - resolution: {integrity: sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==} + image-q@4.0.0: dependencies: '@types/node': 16.9.1 - dev: false - /image-size@0.7.5: - resolution: {integrity: sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g==} - engines: {node: '>=6.9.0'} - hasBin: true - requiresBuild: true - dev: true + image-size@0.7.5: optional: true - /immediate@3.0.6: - resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - dev: false + immediate@3.0.6: {} - /immutable@5.0.3: - resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==} - dev: true + immutable@5.0.3: {} - /import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - dev: true - /import-meta-resolve@4.1.0: - resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} - dev: true + import-meta-resolve@4.1.0: {} - /imul@1.0.1: - resolution: {integrity: sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==} - engines: {node: '>=0.10.0'} - requiresBuild: true - dev: true + imul@1.0.1: optional: true - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true + imurmurhash@0.1.4: {} - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: true + indent-string@4.0.0: {} - /infer-owner@1.0.4: - resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} - dev: true + infer-owner@1.0.4: {} - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + inflight@1.0.6: dependencies: once: 1.4.0 wrappy: 1.0.2 - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + inherits@2.0.4: {} - /ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - dev: true + ini@1.3.8: {} - /ini@3.0.1: - resolution: {integrity: sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dev: true + ini@3.0.1: {} - /ini@4.1.1: - resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true + ini@4.1.1: {} - /inline-style-prefixer@7.0.1: - resolution: {integrity: sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw==} + inline-style-prefixer@7.0.1: dependencies: css-in-js-utils: 3.1.0 - dev: true - /inquirer@9.3.7: - resolution: {integrity: sha512-LJKFHCSeIRq9hanN14IlOtPSTe3lNES7TYDTE2xxdAy1LS5rYphajK1qtwvj3YmQXvvk0U2Vbmcni8P9EIQW9w==} - engines: {node: '>=18'} + inquirer@9.3.7: dependencies: '@inquirer/figures': 1.0.10 ansi-escapes: 4.3.2 @@ -7775,369 +11234,206 @@ packages: strip-ansi: 6.0.1 wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.2 - dev: true - /internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} + internal-slot@1.1.0: dependencies: es-errors: 1.3.0 hasown: 2.0.2 side-channel: 1.1.0 - dev: true - /interpret@3.1.1: - resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} - engines: {node: '>=10.13.0'} - dev: true + interpret@3.1.1: {} - /ip-address@9.0.5: - resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} - engines: {node: '>= 12'} + ip-address@9.0.5: dependencies: jsbn: 1.1.0 sprintf-js: 1.1.3 - dev: true - /ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - dev: true + ipaddr.js@1.9.1: {} - /is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} + is-array-buffer@3.0.5: dependencies: call-bind: 1.0.8 call-bound: 1.0.3 get-intrinsic: 1.2.7 - dev: true - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true + is-arrayish@0.2.1: {} - /is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - dev: false + is-arrayish@0.3.2: {} - /is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} - engines: {node: '>= 0.4'} + is-async-function@2.1.1: dependencies: async-function: 1.0.0 call-bound: 1.0.3 get-proto: 1.0.1 has-tostringtag: 1.0.2 safe-regex-test: 1.1.0 - dev: true - /is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} + is-bigint@1.1.0: dependencies: has-bigints: 1.1.0 - dev: true - /is-boolean-object@1.2.2: - resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} - engines: {node: '>= 0.4'} + is-boolean-object@1.2.2: dependencies: call-bound: 1.0.3 has-tostringtag: 1.0.2 - dev: true - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true + is-callable@1.2.7: {} - /is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} + is-core-module@2.16.1: dependencies: hasown: 2.0.2 - dev: true - /is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} + is-data-view@1.0.2: dependencies: call-bound: 1.0.3 get-intrinsic: 1.2.7 is-typed-array: 1.1.15 - dev: true - /is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} + is-date-object@1.1.0: dependencies: call-bound: 1.0.3 has-tostringtag: 1.0.2 - dev: true - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - dev: false + is-docker@2.2.1: {} - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true + is-extglob@2.1.1: {} - /is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} + is-finalizationregistry@1.1.1: dependencies: call-bound: 1.0.3 - dev: true - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true + is-fullwidth-code-point@3.0.0: {} - /is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} - dev: true + is-fullwidth-code-point@4.0.0: {} - /is-function@1.0.2: - resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} - dev: false + is-function@1.0.2: {} - /is-generator-function@1.1.0: - resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} - engines: {node: '>= 0.4'} + is-generator-function@1.1.0: dependencies: call-bound: 1.0.3 get-proto: 1.0.1 has-tostringtag: 1.0.2 safe-regex-test: 1.1.0 - dev: true - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - dev: true - /is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - dev: true + is-interactive@1.0.0: {} - /is-lambda@1.0.1: - resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} - dev: true + is-lambda@1.0.1: {} - /is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - dev: true + is-map@2.0.3: {} - /is-my-ip-valid@1.0.1: - resolution: {integrity: sha512-jxc8cBcOWbNK2i2aTkCZP6i7wkHF1bqKFrwEHuN5Jtg5BSaZHUZQ/JTOJwoV41YvHnOaRyWWh72T/KvfNz9DJg==} - requiresBuild: true - dev: true + is-my-ip-valid@1.0.1: optional: true - /is-my-json-valid@2.20.6: - resolution: {integrity: sha512-1JQwulVNjx8UqkPE/bqDaxtH4PXCe/2VRh/y3p99heOV87HG4Id5/VfDswd+YiAfHcRTfDlWgISycnHuhZq1aw==} - requiresBuild: true + is-my-json-valid@2.20.6: dependencies: generate-function: 2.3.1 generate-object-property: 1.2.0 is-my-ip-valid: 1.0.1 jsonpointer: 5.0.1 xtend: 4.0.2 - dev: true optional: true - /is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} + is-number-object@1.1.1: dependencies: call-bound: 1.0.3 has-tostringtag: 1.0.2 - dev: true - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true + is-number@7.0.0: {} - /is-obj@2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} - engines: {node: '>=8'} - dev: true + is-obj@2.0.0: {} - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true + is-path-inside@3.0.3: {} - /is-plain-object@5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} - dev: true + is-plain-object@5.0.0: {} - /is-property@1.0.2: - resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} - requiresBuild: true - dev: true + is-property@1.0.2: optional: true - /is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} + is-regex@1.2.1: dependencies: call-bound: 1.0.3 gopd: 1.2.0 has-tostringtag: 1.0.2 hasown: 2.0.2 - dev: true - /is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - dev: true + is-set@2.0.3: {} - /is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} + is-shared-array-buffer@1.0.4: dependencies: call-bound: 1.0.3 - dev: true - /is-stream@1.1.0: - resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} - engines: {node: '>=0.10.0'} + is-stream@1.1.0: {} - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} + is-stream@2.0.1: {} - /is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + is-stream@3.0.0: {} - /is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} + is-string@1.1.1: dependencies: call-bound: 1.0.3 has-tostringtag: 1.0.2 - dev: true - /is-subdir@1.2.0: - resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} - engines: {node: '>=4'} + is-subdir@1.2.0: dependencies: better-path-resolve: 1.0.0 - dev: true - /is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} + is-symbol@1.1.1: dependencies: call-bound: 1.0.3 has-symbols: 1.1.0 safe-regex-test: 1.1.0 - dev: true - /is-text-path@2.0.0: - resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} - engines: {node: '>=8'} + is-text-path@2.0.0: dependencies: text-extensions: 2.4.0 - dev: true - /is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} + is-typed-array@1.1.15: dependencies: which-typed-array: 1.1.18 - dev: true - /is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - dev: true + is-unicode-supported@0.1.0: {} - /is-url@1.2.4: - resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} - dev: false + is-url@1.2.4: {} - /is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - dev: true + is-weakmap@2.0.2: {} - /is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} - engines: {node: '>= 0.4'} + is-weakref@1.1.1: dependencies: call-bound: 1.0.3 - dev: true - /is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} + is-weakset@2.0.4: dependencies: call-bound: 1.0.3 get-intrinsic: 1.2.7 - dev: true - /is-windows@1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} - dev: true + is-windows@1.0.2: {} - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} + is-wsl@2.2.0: dependencies: is-docker: 2.2.1 - dev: false - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: false + isarray@1.0.0: {} - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true + isarray@2.0.5: {} - /isbinaryfile@4.0.10: - resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} - engines: {node: '>= 8.0.0'} - dev: true + isbinaryfile@4.0.10: {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + isexe@2.0.0: {} - /isomorphic-fetch@3.0.0: - resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==} + isomorphic-fetch@3.0.0(encoding@0.1.13): dependencies: - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) whatwg-fetch: 3.6.20 transitivePeerDependencies: - encoding - dev: false - /istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} - dev: true + istanbul-lib-coverage@3.2.2: {} - /istanbul-lib-instrument@6.0.3: - resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} - engines: {node: '>=10'} + istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.26.8 '@babel/parser': 7.26.8 @@ -8146,39 +11442,27 @@ packages: semver: 7.7.1 transitivePeerDependencies: - supports-color - dev: true - /istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} + istanbul-lib-report@3.0.1: dependencies: istanbul-lib-coverage: 3.2.2 make-dir: 4.0.0 supports-color: 7.2.0 - dev: true - /istanbul-lib-source-maps@5.0.6: - resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} - engines: {node: '>=10'} + istanbul-lib-source-maps@5.0.6: dependencies: '@jridgewell/trace-mapping': 0.3.25 debug: 4.4.0 istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: - supports-color - dev: true - /istanbul-reports@3.1.7: - resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} - engines: {node: '>=8'} + istanbul-reports@3.1.7: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - dev: true - /iterator.prototype@1.1.5: - resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} - engines: {node: '>= 0.4'} + iterator.prototype@1.1.5: dependencies: define-data-property: 1.1.4 es-object-atoms: 1.1.1 @@ -8186,231 +11470,139 @@ packages: get-proto: 1.0.1 has-symbols: 1.1.0 set-function-name: 2.0.2 - dev: true - /jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - dev: true - /jackspeak@4.0.2: - resolution: {integrity: sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==} - engines: {node: 20 || >=22} + jackspeak@4.0.3: dependencies: '@isaacs/cliui': 8.0.2 - dev: true - /javascript-natural-sort@0.7.1: - resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==} - dev: true + javascript-natural-sort@0.7.1: {} - /jimp@0.22.10: - resolution: {integrity: sha512-lCaHIJAgTOsplyJzC1w/laxSxrbSsEBw4byKwXgUdMmh+ayPsnidTblenQm+IvhIs44Gcuvlb6pd2LQ0wcKaKg==} + jimp@0.22.10(encoding@0.1.13): dependencies: - '@jimp/custom': 0.22.12 - '@jimp/plugins': 0.22.12(@jimp/custom@0.22.12) - '@jimp/types': 0.22.12(@jimp/custom@0.22.12) + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/plugins': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/types': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) regenerator-runtime: 0.13.11 transitivePeerDependencies: - debug - encoding - dev: false - /jiti@2.4.2: - resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} - hasBin: true - dev: true + jiti@2.4.2: {} - /joycon@3.1.1: - resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} - engines: {node: '>=10'} - dev: true + joycon@3.1.1: {} - /jpeg-js@0.4.4: - resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==} - dev: false + jpeg-js@0.4.4: {} - /js-cookie@2.2.1: - resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==} - dev: true + js-cookie@2.2.1: {} - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-tokens@4.0.0: {} - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true + js-yaml@3.14.1: dependencies: argparse: 1.0.10 esprima: 4.0.1 - dev: true - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - /jsbn@1.1.0: - resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - dev: true + jsbn@1.1.0: {} - /jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} - hasBin: true - dev: true + jsesc@3.1.0: {} - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + json-buffer@3.0.1: {} - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true + json-parse-even-better-errors@2.3.1: {} - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true + json-schema-traverse@0.4.1: {} - /json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-schema-traverse@1.0.0: {} - /json-schema-typed@8.0.1: - resolution: {integrity: sha512-XQmWYj2Sm4kn4WeTYvmpKEbyPsL7nBsb647c7pMe6l02/yx2+Jfc4dT6UZkEXnIUb5LhD55r2HPsJ1milQ4rDg==} - dev: false + json-schema-typed@8.0.1: {} - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true + json-stable-stringify-without-jsonify@1.0.1: {} - /json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - requiresBuild: true + json-stringify-safe@5.0.1: optional: true - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true + json5@1.0.2: dependencies: minimist: 1.2.8 - dev: true - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - dev: true + json5@2.2.3: {} - /jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 - /jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonfile@6.1.0: dependencies: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 - dev: true - /jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - dev: true + jsonparse@1.3.1: {} - /jsonpointer@5.0.1: - resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} - engines: {node: '>=0.10.0'} - requiresBuild: true - dev: true + jsonpointer@5.0.1: optional: true - /jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 array.prototype.flat: 1.3.3 object.assign: 4.1.7 object.values: 1.2.1 - dev: true - /jszip@3.10.1: - resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + jszip@3.10.1: dependencies: lie: 3.3.0 pako: 1.0.11 readable-stream: 2.3.8 setimmediate: 1.0.5 - dev: false - /junk@3.1.0: - resolution: {integrity: sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==} - engines: {node: '>=8'} - dev: true + junk@3.1.0: {} - /keyboardevent-from-electron-accelerator@2.0.0: - resolution: {integrity: sha512-iQcmNA0M4ETMNi0kG/q0h/43wZk7rMeKYrXP7sqKIJbHkTU8Koowgzv+ieR/vWJbOwxx5nDC3UnudZ0aLSu4VA==} - dev: false + keyboardevent-from-electron-accelerator@2.0.0: {} - /keyboardevents-areequal@0.2.2: - resolution: {integrity: sha512-Nv+Kr33T0mEjxR500q+I6IWisOQ0lK1GGOncV0kWE6n4KFmpcu7RUX5/2B0EUtX51Cb0HjZ9VJsSY3u4cBa0kw==} - dev: false + keyboardevents-areequal@0.2.2: {} - /keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true - /lie@3.3.0: - resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + lie@3.3.0: dependencies: immediate: 3.0.6 - dev: false - /lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - dev: true + lilconfig@2.1.0: {} - /lilconfig@3.1.3: - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} - engines: {node: '>=14'} - dev: true + lilconfig@3.1.3: {} - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true + lines-and-columns@1.2.4: {} - /linkify-it@5.0.0: - resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + linkify-it@5.0.0: dependencies: uc.micro: 2.1.0 - dev: true - /lint-staged@14.0.1: - resolution: {integrity: sha512-Mw0cL6HXnHN1ag0mN/Dg4g6sr8uf8sn98w2Oc1ECtFto9tvRF7nkXGJRbx8gPlHyoR0pLyBr2lQHbWwmUHe1Sw==} - engines: {node: ^16.14.0 || >=18.0.0} - hasBin: true + lint-staged@14.0.1(enquirer@2.4.1): dependencies: chalk: 5.3.0 commander: 11.0.0 debug: 4.3.4 execa: 7.2.0 lilconfig: 2.1.0 - listr2: 6.6.1 + listr2: 6.6.1(enquirer@2.4.1) micromatch: 4.0.5 pidtree: 0.6.0 string-argv: 0.3.2 @@ -8418,16 +11610,8 @@ packages: transitivePeerDependencies: - enquirer - supports-color - dev: true - /listr2@6.6.1: - resolution: {integrity: sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==} - engines: {node: '>=16.0.0'} - peerDependencies: - enquirer: '>= 2.3.0 < 3' - peerDependenciesMeta: - enquirer: - optional: true + listr2@6.6.1(enquirer@2.4.1): dependencies: cli-truncate: 3.1.0 colorette: 2.0.20 @@ -8435,11 +11619,10 @@ packages: log-update: 5.0.1 rfdc: 1.4.1 wrap-ansi: 8.1.0 - dev: true + optionalDependencies: + enquirer: 2.4.1 - /listr2@7.0.2: - resolution: {integrity: sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g==} - engines: {node: '>=16.0.0'} + listr2@7.0.2: dependencies: cli-truncate: 3.1.0 colorette: 2.0.20 @@ -8447,10 +11630,8 @@ packages: log-update: 5.0.1 rfdc: 1.4.1 wrap-ansi: 8.1.0 - dev: true - /load-bmfont@1.4.2: - resolution: {integrity: sha512-qElWkmjW9Oq1F9EI5Gt7aD9zcdHb9spJCW1L/dmPf7KzCCEJxq8nhHz5eCgI9aMf7vrG/wyaCqdsI+Iy9ZTlog==} + load-bmfont@1.4.2: dependencies: buffer-equal: 0.0.1 mime: 1.6.0 @@ -8462,202 +11643,116 @@ packages: xtend: 4.0.2 transitivePeerDependencies: - debug - dev: false - /load-json-file@2.0.0: - resolution: {integrity: sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ==} - engines: {node: '>=4'} + load-json-file@2.0.0: dependencies: graceful-fs: 4.2.11 parse-json: 2.2.0 pify: 2.3.0 strip-bom: 3.0.0 - dev: true - /load-tsconfig@0.2.5: - resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + load-tsconfig@0.2.5: {} - /locate-path@2.0.0: - resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} - engines: {node: '>=4'} + locate-path@2.0.0: dependencies: p-locate: 2.0.0 path-exists: 3.0.0 - dev: true - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} + locate-path@5.0.0: dependencies: p-locate: 4.1.0 - dev: true - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 - dev: true - /locate-path@7.2.0: - resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + locate-path@7.2.0: dependencies: p-locate: 6.0.0 - dev: true - /lodash-es@4.17.21: - resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} - dev: true + lodash-es@4.17.21: {} - /lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - dev: true + lodash.camelcase@4.3.0: {} - /lodash.get@4.4.2: - resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} - deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. - dev: true + lodash.get@4.4.2: {} - /lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - dev: true + lodash.isplainobject@4.0.6: {} - /lodash.kebabcase@4.1.1: - resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} - dev: true + lodash.kebabcase@4.1.1: {} - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true + lodash.merge@4.6.2: {} - /lodash.mergewith@4.6.2: - resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} - dev: true + lodash.mergewith@4.6.2: {} - /lodash.snakecase@4.1.1: - resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} - dev: true + lodash.snakecase@4.1.1: {} - /lodash.sortby@4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - dev: true + lodash.sortby@4.7.0: {} - /lodash.startcase@4.4.0: - resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - dev: true + lodash.startcase@4.4.0: {} - /lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - dev: true + lodash.uniq@4.5.0: {} - /lodash.upperfirst@4.3.1: - resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} - dev: true + lodash.upperfirst@4.3.1: {} - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true + lodash@4.17.21: {} - /log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} + log-symbols@4.1.0: dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 - dev: true - /log-update@5.0.1: - resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + log-update@5.0.1: dependencies: ansi-escapes: 5.0.0 cli-cursor: 4.0.0 slice-ansi: 5.0.0 strip-ansi: 7.1.0 wrap-ansi: 8.1.0 - dev: true - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 - /loupe@3.1.3: - resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} - dev: true + loupe@3.1.3: {} - /lowercase-keys@2.0.0: - resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} - engines: {node: '>=8'} + lowercase-keys@2.0.0: {} - /lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - dev: true + lru-cache@10.4.3: {} - /lru-cache@11.0.2: - resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==} - engines: {node: 20 || >=22} - dev: true + lru-cache@11.0.2: {} - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 - dev: true - /lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} - dev: true + lru-cache@7.18.3: {} - /macos-alias@0.2.12: - resolution: {integrity: sha512-yiLHa7cfJcGRFq4FrR4tMlpNHb4Vy4mWnpajlSSIFM5k4Lv8/7BbbDLzCAVogWNl0LlLhizRp1drXv0hK9h0Yw==} - os: [darwin] - requiresBuild: true + macos-alias@0.2.12: dependencies: nan: 2.22.0 - dev: true optional: true - /macos-version@5.2.1: - resolution: {integrity: sha512-OHJU8nTNxHYL1FQhD+nZawWgXKXAqDGr4kluLtaqKO4au3cR41y1mKuVShOU5U4rOYiuPanljq6oFGmV2B9DFA==} - engines: {node: '>=6'} + macos-version@5.2.1: dependencies: semver: 5.7.2 - dev: false - /magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 - dev: true - /magicast@0.3.5: - resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + magicast@0.3.5: dependencies: '@babel/parser': 7.26.8 '@babel/types': 7.26.8 source-map-js: 1.2.1 - dev: true - /make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} + make-dir@4.0.0: dependencies: semver: 7.7.1 - dev: true - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true + make-error@1.3.6: {} - /make-fetch-happen@10.2.1: - resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + make-fetch-happen@10.2.1: dependencies: agentkeepalive: 4.6.0 cacache: 16.1.3 @@ -8678,18 +11773,12 @@ packages: transitivePeerDependencies: - bluebird - supports-color - dev: true - /map-age-cleaner@0.1.3: - resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==} - engines: {node: '>=6'} + map-age-cleaner@0.1.3: dependencies: p-defer: 1.0.0 - dev: true - /markdown-it@14.1.0: - resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} - hasBin: true + markdown-it@14.1.0: dependencies: argparse: 2.0.1 entities: 4.5.0 @@ -8697,296 +11786,166 @@ packages: mdurl: 2.0.0 punycode.js: 2.3.1 uc.micro: 2.1.0 - dev: true - /matcher@3.0.0: - resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} - engines: {node: '>=10'} - requiresBuild: true + matcher@3.0.0: dependencies: escape-string-regexp: 4.0.0 optional: true - /math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - dev: true + math-intrinsics@1.1.0: {} - /mdn-data@2.0.14: - resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} - dev: true + mdn-data@2.0.14: {} - /mdurl@2.0.0: - resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} - dev: true + mdurl@2.0.0: {} - /media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - dev: true + media-typer@0.3.0: {} - /medium-zoom@1.1.0: - resolution: {integrity: sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==} - dev: true + medium-zoom@1.1.0: {} - /mem@4.3.0: - resolution: {integrity: sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==} - engines: {node: '>=6'} + mem@4.3.0: dependencies: map-age-cleaner: 0.1.3 mimic-fn: 2.1.0 p-is-promise: 2.1.0 - dev: true - /meow@12.1.1: - resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} - engines: {node: '>=16.10'} - dev: true + meow@12.1.1: {} - /merge-descriptors@1.0.3: - resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} - dev: true + merge-descriptors@1.0.3: {} - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + merge-stream@2.0.0: {} - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true + merge2@1.4.1: {} - /methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - dev: true + methods@1.1.2: {} - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} + micromatch@4.0.5: dependencies: braces: 3.0.3 picomatch: 2.3.1 - dev: true - /micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 - dev: true - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} + mime-db@1.52.0: {} - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + mime-types@2.1.35: dependencies: mime-db: 1.52.0 - /mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true + mime@1.6.0: {} - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} + mimic-fn@2.1.0: {} - /mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - dev: true + mimic-fn@4.0.0: {} - /mimic-function@5.0.1: - resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} - engines: {node: '>=18'} - dev: false + mimic-function@5.0.1: {} - /mimic-response@1.0.1: - resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} - engines: {node: '>=4'} + mimic-response@1.0.1: {} - /mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} + mimic-response@3.1.0: {} - /min-document@2.19.0: - resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} + min-document@2.19.0: dependencies: dom-walk: 0.1.2 - dev: false - /minimatch@10.0.1: - resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} - engines: {node: 20 || >=22} + minimatch@10.0.1: dependencies: brace-expansion: 2.0.1 - dev: true - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - /minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} + minimatch@5.1.6: dependencies: brace-expansion: 2.0.1 - dev: true - /minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 - dev: true - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + minimist@1.2.8: {} - /minipass-collect@1.0.2: - resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} - engines: {node: '>= 8'} + minipass-collect@1.0.2: dependencies: minipass: 3.3.6 - dev: true - /minipass-fetch@2.1.2: - resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + minipass-fetch@2.1.2: dependencies: minipass: 3.3.6 minipass-sized: 1.0.3 minizlib: 2.1.2 optionalDependencies: encoding: 0.1.13 - dev: true - /minipass-flush@1.0.5: - resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} - engines: {node: '>= 8'} + minipass-flush@1.0.5: dependencies: minipass: 3.3.6 - dev: true - /minipass-pipeline@1.2.4: - resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} - engines: {node: '>=8'} + minipass-pipeline@1.2.4: dependencies: minipass: 3.3.6 - dev: true - /minipass-sized@1.0.3: - resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} - engines: {node: '>=8'} + minipass-sized@1.0.3: dependencies: minipass: 3.3.6 - dev: true - /minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} + minipass@3.3.6: dependencies: yallist: 4.0.0 - dev: true - /minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - dev: true + minipass@5.0.0: {} - /minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - dev: true + minipass@7.1.2: {} - /minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} + minizlib@2.1.2: dependencies: minipass: 3.3.6 yallist: 4.0.0 - dev: true - /mitt@3.0.1: - resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} - dev: true + mitt@3.0.1: {} - /mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true + mkdirp@0.5.6: dependencies: minimist: 1.2.8 - /mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - dev: true + mkdirp@1.0.4: {} - /motion-dom@11.18.1: - resolution: {integrity: sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==} + motion-dom@11.18.1: dependencies: motion-utils: 11.18.1 - dev: true - /motion-utils@11.18.1: - resolution: {integrity: sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==} - dev: true + motion-utils@11.18.1: {} - /mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} - engines: {node: '>=4'} - dev: true + mri@1.2.0: {} - /ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + ms@2.0.0: {} - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true + ms@2.1.2: {} - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + ms@2.1.3: {} - /murmur-32@0.2.0: - resolution: {integrity: sha512-ZkcWZudylwF+ir3Ld1n7gL6bI2mQAzXvSobPwVtu8aYi2sbXeipeSkdcanRLzIofLcM5F53lGaKm2dk7orBi7Q==} - requiresBuild: true + murmur-32@0.2.0: dependencies: encode-utf8: 1.0.3 fmix: 0.1.0 imul: 1.0.1 - dev: true optional: true - /mute-stream@1.0.0: - resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true + mute-stream@1.0.0: {} - /mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + mz@2.7.0: dependencies: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 - dev: true - /nan@2.22.0: - resolution: {integrity: sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==} - requiresBuild: true - dev: true + nan@2.22.0: optional: true - /nano-css@5.6.2(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-+6bHaC8dSDGALM1HJjOHVXpuastdu2xFoZlC77Jh4cg+33Zcgm+Gxd+1xsnpZK14eyHObSp82+ll5y3SX75liw==} - peerDependencies: - react: '*' - react-dom: '*' + nano-css@5.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@jridgewell/sourcemap-codec': 1.5.0 css-tree: 1.1.3 @@ -8998,137 +11957,75 @@ packages: rtl-css-js: 1.16.1 stacktrace-js: 2.0.2 stylis: 4.3.6 - dev: true - /nanoid@3.3.8: - resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true + nanoid@3.3.8: {} - /natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - dev: true + natural-compare-lite@1.4.0: {} - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true + natural-compare@1.4.0: {} - /negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - dev: true + negotiator@0.6.3: {} - /negotiator@0.6.4: - resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} - engines: {node: '>= 0.6'} - dev: true + negotiator@0.6.4: {} - /new-github-issue-url@0.2.1: - resolution: {integrity: sha512-md4cGoxuT4T4d/HDOXbrUHkTKrp/vp+m3aOA7XXVYwNsUNMK49g3SQicTSeV5GIz/5QVGAeYRAOlyp9OvlgsYA==} - engines: {node: '>=10'} - dev: false + new-github-issue-url@0.2.1: {} - /nice-try@1.0.5: - resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + nice-try@1.0.5: {} - /node-abi@3.74.0: - resolution: {integrity: sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w==} - engines: {node: '>=10'} + node-abi@3.74.0: dependencies: semver: 7.7.1 - dev: true - /node-abort-controller@3.1.1: - resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} - dev: false + node-abort-controller@3.1.1: {} - /node-addon-api@5.0.0: - resolution: {integrity: sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==} - dev: false + node-addon-api@5.0.0: {} - /node-api-version@0.2.0: - resolution: {integrity: sha512-fthTTsi8CxaBXMaBAD7ST2uylwvsnYxh2PfaScwpMhos6KlSFajXQPcM4ogNE1q2s3Lbz9GCGqeIHC+C6OZnKg==} + node-api-version@0.2.0: dependencies: semver: 7.7.1 - dev: true - /node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} + node-domexception@1.0.0: {} - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + node-fetch@2.7.0(encoding@0.1.13): dependencies: whatwg-url: 5.0.0 + optionalDependencies: + encoding: 0.1.13 - /node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} - dev: true + node-releases@2.0.19: {} - /nopt@6.0.0: - resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - hasBin: true + nopt@6.0.0: dependencies: abbrev: 1.1.1 - dev: true - /normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 resolve: 1.22.10 semver: 5.7.2 validate-npm-package-license: 3.0.4 - dev: true - /normalize-url@6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} + normalize-url@6.1.0: {} - /npm-run-path@2.0.2: - resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} - engines: {node: '>=4'} + npm-run-path@2.0.2: dependencies: path-key: 2.0.1 - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 - /npm-run-path@5.3.0: - resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + npm-run-path@5.3.0: dependencies: path-key: 4.0.0 - dev: true - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: true + object-assign@4.1.1: {} - /object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} - dev: true + object-inspect@1.13.4: {} - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} + object-keys@1.1.1: {} - /object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} + object.assign@4.1.7: dependencies: call-bind: 1.0.8 call-bound: 1.0.3 @@ -9136,83 +12033,52 @@ packages: es-object-atoms: 1.1.1 has-symbols: 1.1.0 object-keys: 1.1.1 - dev: true - /object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} - engines: {node: '>= 0.4'} + object.entries@1.1.8: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 es-object-atoms: 1.1.1 - dev: true - /object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} + object.fromentries@2.0.8: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.9 es-object-atoms: 1.1.1 - dev: true - /object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} + object.groupby@1.0.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.9 - dev: true - /object.values@1.2.1: - resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} - engines: {node: '>= 0.4'} + object.values@1.2.1: dependencies: call-bind: 1.0.8 call-bound: 1.0.3 define-properties: 1.2.1 es-object-atoms: 1.1.1 - dev: true - /omggif@1.0.10: - resolution: {integrity: sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==} - dev: false + omggif@1.0.10: {} - /on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} + on-finished@2.4.1: dependencies: ee-first: 1.1.1 - dev: true - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + once@1.4.0: dependencies: wrappy: 1.0.2 - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + onetime@5.1.2: dependencies: mimic-fn: 2.1.0 - /onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} + onetime@6.0.0: dependencies: mimic-fn: 4.0.0 - dev: true - /openai@4.73.0(zod@3.24.1): - resolution: {integrity: sha512-NZstV77w3CEol9KQTRBRQ15+Sw6nxVTicAULSjYO4wn9E5gw72Mtp3fAVaBFXyyVPws4241YmFG6ya4L8v03tA==} - hasBin: true - peerDependencies: - zod: ^3.23.8 - peerDependenciesMeta: - zod: - optional: true + openai@4.73.0(encoding@0.1.13)(zod@3.24.2): dependencies: '@types/node': 18.19.75 '@types/node-fetch': 2.6.12 @@ -9220,46 +12086,42 @@ packages: agentkeepalive: 4.6.0 form-data-encoder: 1.7.2 formdata-node: 4.4.1 - node-fetch: 2.7.0 - zod: 3.24.1 + node-fetch: 2.7.0(encoding@0.1.13) + optionalDependencies: + zod: 3.24.2 transitivePeerDependencies: - encoding - /opencommit@3.2.5: - resolution: {integrity: sha512-hIleBRrmQh2L8KXzwUZQr2ggM4TABjFlL1iUfinfAVWu3DqIQKDmck9oq1Qq6TYN56kCGTErm9z4uiRNUHqnVw==} - hasBin: true + opencommit@3.2.5(encoding@0.1.13): dependencies: '@actions/core': 1.11.1 '@actions/exec': 1.1.1 - '@actions/github': 5.1.1 - '@anthropic-ai/sdk': 0.19.2 + '@actions/github': 5.1.1(encoding@0.1.13) + '@anthropic-ai/sdk': 0.19.2(encoding@0.1.13) '@azure/openai': 1.0.0-beta.13 '@clack/prompts': 0.6.3 '@dqbd/tiktoken': 1.0.20 '@google/generative-ai': 0.11.5 - '@mistralai/mistralai': 1.5.0(zod@3.24.1) + '@mistralai/mistralai': 1.5.0(zod@3.24.2) '@octokit/webhooks-schemas': 6.11.0 '@octokit/webhooks-types': 6.11.0 axios: 1.7.9 chalk: 5.4.1 - cleye: 1.3.3 + cleye: 1.3.4 crypto: 1.0.1 execa: 7.2.0 ignore: 5.3.2 ini: 3.0.1 inquirer: 9.3.7 - openai: 4.73.0(zod@3.24.1) + openai: 4.73.0(encoding@0.1.13)(zod@3.24.2) punycode: 2.3.1 - zod: 3.24.1 + zod: 3.24.2 transitivePeerDependencies: - debug - encoding - supports-color - dev: true - /optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} + optionator@0.9.4: dependencies: deep-is: 0.1.4 fast-levenshtein: 2.0.6 @@ -9267,11 +12129,8 @@ packages: prelude-ls: 1.2.1 type-check: 0.4.0 word-wrap: 1.2.5 - dev: true - /ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} + ora@5.4.1: dependencies: bl: 4.1.0 chalk: 4.1.2 @@ -9282,718 +12141,374 @@ packages: log-symbols: 4.1.0 strip-ansi: 6.0.1 wcwidth: 1.0.1 - dev: true - - /os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - dev: true - /outdent@0.5.0: - resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} - dev: true + os-tmpdir@1.0.2: {} - /own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} - engines: {node: '>= 0.4'} + outdent@0.5.0: {} + + own-keys@1.0.1: dependencies: get-intrinsic: 1.2.7 object-keys: 1.1.1 safe-push-apply: 1.0.0 - dev: true - /p-cancelable@2.1.1: - resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} - engines: {node: '>=8'} + p-cancelable@2.1.1: {} - /p-defer@1.0.0: - resolution: {integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==} - engines: {node: '>=4'} - dev: true + p-defer@1.0.0: {} - /p-filter@2.1.0: - resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} - engines: {node: '>=8'} + p-filter@2.1.0: dependencies: p-map: 2.1.0 - dev: true - /p-finally@1.0.0: - resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} - engines: {node: '>=4'} + p-finally@1.0.0: {} - /p-is-promise@2.1.0: - resolution: {integrity: sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==} - engines: {node: '>=6'} - dev: true + p-is-promise@2.1.0: {} - /p-limit@1.3.0: - resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} - engines: {node: '>=4'} + p-limit@1.3.0: dependencies: p-try: 1.0.0 - dev: true - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + p-limit@2.3.0: dependencies: p-try: 2.2.0 - dev: true - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - dev: true - /p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-limit@4.0.0: dependencies: yocto-queue: 1.1.1 - dev: true - /p-locate@2.0.0: - resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} - engines: {node: '>=4'} + p-locate@2.0.0: dependencies: p-limit: 1.3.0 - dev: true - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} + p-locate@4.1.0: dependencies: p-limit: 2.3.0 - dev: true - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + p-locate@5.0.0: dependencies: p-limit: 3.1.0 - dev: true - /p-locate@6.0.0: - resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-locate@6.0.0: dependencies: p-limit: 4.0.0 - dev: true - /p-map@2.1.0: - resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} - engines: {node: '>=6'} - dev: true + p-map@2.1.0: {} - /p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} + p-map@4.0.0: dependencies: aggregate-error: 3.1.0 - dev: true - /p-try@1.0.0: - resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} - engines: {node: '>=4'} - dev: true + p-try@1.0.0: {} - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: true + p-try@2.2.0: {} - /package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - dev: true + package-json-from-dist@1.0.1: {} - /package-manager-detector@0.2.9: - resolution: {integrity: sha512-+vYvA/Y31l8Zk8dwxHhL3JfTuHPm6tlxM2A3GeQyl7ovYnSp1+mzAxClxaOr0qO1TtPxbQxetI7v5XqKLJZk7Q==} - dev: true + package-manager-detector@0.2.9: {} - /pako@1.0.11: - resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} - dev: false + pako@1.0.11: {} - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + parent-module@1.0.1: dependencies: callsites: 3.1.0 - dev: true - /parse-author@2.0.0: - resolution: {integrity: sha512-yx5DfvkN8JsHL2xk2Os9oTia467qnvRgey4ahSm2X8epehBLx/gWLcy5KI+Y36ful5DzGbCS6RazqZGgy1gHNw==} - engines: {node: '>=0.10.0'} + parse-author@2.0.0: dependencies: author-regex: 1.0.0 - dev: true - /parse-bmfont-ascii@1.0.6: - resolution: {integrity: sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==} - dev: false + parse-bmfont-ascii@1.0.6: {} - /parse-bmfont-binary@1.0.6: - resolution: {integrity: sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==} - dev: false + parse-bmfont-binary@1.0.6: {} - /parse-bmfont-xml@1.1.6: - resolution: {integrity: sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==} + parse-bmfont-xml@1.1.6: dependencies: xml-parse-from-string: 1.0.1 xml2js: 0.5.0 - dev: false - /parse-color@1.0.0: - resolution: {integrity: sha512-fuDHYgFHJGbpGMgw9skY/bj3HL/Jrn4l/5rSspy00DoT4RyLnDcRvPxdZ+r6OFwIsgAuhDh4I09tAId4mI12bw==} - requiresBuild: true + parse-color@1.0.0: dependencies: color-convert: 0.5.3 - dev: true optional: true - /parse-headers@2.0.5: - resolution: {integrity: sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==} - dev: false + parse-headers@2.0.5: {} - /parse-json@2.2.0: - resolution: {integrity: sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==} - engines: {node: '>=0.10.0'} + parse-json@2.2.0: dependencies: error-ex: 1.3.2 - dev: true - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + parse-json@5.2.0: dependencies: '@babel/code-frame': 7.26.2 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - dev: true - /parse-passwd@1.0.0: - resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} - engines: {node: '>=0.10.0'} - dev: true + parse-passwd@1.0.0: {} - /parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - dev: true + parseurl@1.3.3: {} - /path-exists@3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} - dev: true + path-exists@3.0.0: {} - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true + path-exists@4.0.0: {} - /path-exists@5.0.0: - resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + path-exists@5.0.0: {} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} + path-is-absolute@1.0.1: {} - /path-key@2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} - engines: {node: '>=4'} + path-key@2.0.1: {} - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} + path-key@3.1.1: {} - /path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - dev: true + path-key@4.0.0: {} - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true + path-parse@1.0.7: {} - /path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} + path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 minipass: 7.1.2 - dev: true - /path-scurry@2.0.0: - resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} - engines: {node: 20 || >=22} + path-scurry@2.0.0: dependencies: lru-cache: 11.0.2 minipass: 7.1.2 - dev: true - /path-to-regexp@0.1.12: - resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} - dev: true + path-to-regexp@0.1.12: {} - /path-type@2.0.0: - resolution: {integrity: sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ==} - engines: {node: '>=4'} + path-type@2.0.0: dependencies: pify: 2.3.0 - dev: true - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: true + path-type@4.0.0: {} - /pathe@2.0.2: - resolution: {integrity: sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==} - dev: true + pathe@2.0.3: {} - /pathval@2.0.0: - resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} - engines: {node: '>= 14.16'} - dev: true + pathval@2.0.0: {} - /pe-library@1.0.1: - resolution: {integrity: sha512-nh39Mo1eGWmZS7y+mK/dQIqg7S1lp38DpRxkyoHf0ZcUs/HDc+yyTjuOtTvSMZHmfSLuSQaX945u05Y2Q6UWZg==} - engines: {node: '>=14', npm: '>=7'} - dev: true + pe-library@1.0.1: {} - /peek-readable@4.1.0: - resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==} - engines: {node: '>=8'} - dev: false + peek-readable@4.1.0: {} - /pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + pend@1.2.0: {} - /phin@3.7.1: - resolution: {integrity: sha512-GEazpTWwTZaEQ9RhL7Nyz0WwqilbqgLahDM3D0hxWwmVDI52nXEybHqiN6/elwpkJBhcuj+WbBu+QfT0uhPGfQ==} - engines: {node: '>= 8'} + phin@3.7.1: dependencies: centra: 2.7.0 transitivePeerDependencies: - debug - dev: false - /picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - dev: true + picocolors@1.1.1: {} - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true + picomatch@2.3.1: {} - /picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} - engines: {node: '>=12'} - dev: true + picomatch@4.0.2: {} - /pidtree@0.6.0: - resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} - engines: {node: '>=0.10'} - hasBin: true - dev: true + pidtree@0.6.0: {} - /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - dev: true + pify@2.3.0: {} - /pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} - engines: {node: '>=6'} - dev: true + pify@4.0.1: {} - /pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - dev: true + pirates@4.0.6: {} - /pixelmatch@4.0.2: - resolution: {integrity: sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==} - hasBin: true + pixelmatch@4.0.2: dependencies: pngjs: 3.4.0 - dev: false - /playwright-core@1.50.1: - resolution: {integrity: sha512-ra9fsNWayuYumt+NiM069M6OkcRb1FZSK8bgi66AtpFoWkg2+y0bJSNmkFrWhMbEBbVKC/EruAHH3g0zmtwGmQ==} - engines: {node: '>=18'} - hasBin: true - dev: true + playwright-core@1.50.1: {} - /playwright@1.50.1: - resolution: {integrity: sha512-G8rwsOQJ63XG6BbKj2w5rHeavFjy5zynBA9zsJMMtBoe/Uf757oG12NXz6e6OirF7RCrTVAKFXbLmn1RbL7Qaw==} - engines: {node: '>=18'} - hasBin: true + playwright@1.50.1: dependencies: playwright-core: 1.50.1 optionalDependencies: fsevents: 2.3.2 - dev: true - /plist@3.1.0: - resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} - engines: {node: '>=10.4.0'} + plist@3.1.0: dependencies: '@xmldom/xmldom': 0.8.10 base64-js: 1.5.1 xmlbuilder: 15.1.1 - dev: true - /pngjs@3.4.0: - resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==} - engines: {node: '>=4.0.0'} - dev: false + pngjs@3.4.0: {} - /pngjs@6.0.0: - resolution: {integrity: sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==} - engines: {node: '>=12.13.0'} - dev: false + pngjs@6.0.0: {} - /possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} - engines: {node: '>= 0.4'} - dev: true + possible-typed-array-names@1.1.0: {} - /postcss-load-config@6.0.1(tsx@4.19.2): - resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} - engines: {node: '>= 18'} - peerDependencies: - jiti: '>=1.21.0' - postcss: '>=8.0.9' - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - jiti: - optional: true - postcss: - optional: true - tsx: - optional: true - yaml: - optional: true + postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.5.2)(tsx@4.19.2): dependencies: lilconfig: 3.1.3 + optionalDependencies: + jiti: 2.4.2 + postcss: 8.5.2 tsx: 4.19.2 - dev: true - /postcss@8.5.2: - resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} - engines: {node: ^10 || ^12 || >=14} + postcss@8.5.2: dependencies: nanoid: 3.3.8 picocolors: 1.1.1 source-map-js: 1.2.1 - dev: true - /postject@1.0.0-alpha.6: - resolution: {integrity: sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A==} - engines: {node: '>=14.0.0'} - hasBin: true - requiresBuild: true + postject@1.0.0-alpha.6: dependencies: commander: 9.5.0 - dev: true - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true + prelude-ls@1.2.1: {} - /prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} + prettier-linter-helpers@1.0.0: dependencies: fast-diff: 1.3.0 - dev: true - /prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} - hasBin: true - dev: true + prettier@2.8.8: {} - /prettier@3.5.0: - resolution: {integrity: sha512-quyMrVt6svPS7CjQ9gKb3GLEX/rl3BCL2oa/QkNcXv4YNVBC9olt3s+H7ukto06q7B1Qz46PbrKLO34PR6vXcA==} - engines: {node: '>=14'} - hasBin: true - dev: true + prettier@3.5.0: {} - /proc-log@2.0.1: - resolution: {integrity: sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dev: true + proc-log@2.0.1: {} - /process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: false + process-nextick-args@2.0.1: {} - /process@0.11.10: - resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} - engines: {node: '>= 0.6.0'} - dev: false + process@0.11.10: {} - /progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} + progress@2.0.3: {} - /promise-inflight@1.0.1: - resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} - peerDependencies: - bluebird: '*' - peerDependenciesMeta: - bluebird: - optional: true - dev: true + promise-inflight@1.0.1: {} - /promise-retry@2.0.1: - resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} - engines: {node: '>=10'} + promise-retry@2.0.1: dependencies: err-code: 2.0.3 retry: 0.12.0 - dev: true - /prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 - dev: true - /proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 ipaddr.js: 1.9.1 - dev: true - /proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: true + proxy-from-env@1.1.0: {} - /pump@3.0.2: - resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + pump@3.0.2: dependencies: end-of-stream: 1.4.4 once: 1.4.0 - /punycode.js@2.3.1: - resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} - engines: {node: '>=6'} - dev: true + punycode.js@2.3.1: {} - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - dev: true + punycode@2.3.1: {} - /qs@6.13.0: - resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} - engines: {node: '>=0.6'} + qs@6.13.0: dependencies: side-channel: 1.1.0 - dev: true - /qs@6.13.1: - resolution: {integrity: sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==} - engines: {node: '>=0.6'} + qs@6.13.1: dependencies: side-channel: 1.1.0 - dev: true - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true + queue-microtask@1.2.3: {} - /quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} + quick-lru@5.1.1: {} - /random-path@0.1.2: - resolution: {integrity: sha512-4jY0yoEaQ5v9StCl5kZbNIQlg1QheIDBrdkDn53EynpPb9FgO6//p3X/tgMnrC45XN6QZCzU1Xz/+pSSsJBpRw==} - requiresBuild: true + random-path@0.1.2: dependencies: base32-encode: 1.2.0 murmur-32: 0.2.0 - dev: true optional: true - /range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - dev: true + range-parser@1.2.1: {} - /raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} - engines: {node: '>= 0.8'} + raw-body@2.5.2: dependencies: bytes: 3.1.2 http-errors: 2.0.0 iconv-lite: 0.4.24 unpipe: 1.0.0 - dev: true - /react-clientside-effect@1.2.7(react@18.3.1): - resolution: {integrity: sha512-gce9m0Pk/xYYMEojRI9bgvqQAkl6hm7ozQvqWPyQx+kULiatdHgkNM1QG4DQRx5N9BAzWSCJmt9mMV8/KsdgVg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + react-clientside-effect@1.2.7(react@18.3.1): dependencies: '@babel/runtime': 7.26.7 react: 18.3.1 - dev: true - /react-dom@18.3.1(react@18.3.1): - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} - peerDependencies: - react: ^18.3.1 + react-dom@18.3.1(react@18.3.1): dependencies: loose-envify: 1.4.0 react: 18.3.1 scheduler: 0.23.2 - dev: true - /react-fast-compare@2.0.4: - resolution: {integrity: sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==} - dev: true + react-fast-compare@2.0.4: {} - /react-fast-compare@3.2.2: - resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} - dev: true + react-fast-compare@3.2.2: {} - /react-focus-lock@2.13.6(@types/react@18.3.18)(react@18.3.1): - resolution: {integrity: sha512-ehylFFWyYtBKXjAO9+3v8d0i+cnc1trGS0vlTGhzFW1vbFXVUTmR8s2tt/ZQG8x5hElg6rhENlLG1H3EZK0Llg==} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true + react-focus-lock@2.13.6(@types/react@18.3.18)(react@18.3.1): dependencies: '@babel/runtime': 7.26.7 - '@types/react': 18.3.18 focus-lock: 1.3.6 prop-types: 15.8.1 react: 18.3.1 react-clientside-effect: 1.2.7(react@18.3.1) use-callback-ref: 1.3.3(@types/react@18.3.18)(react@18.3.1) use-sidecar: 1.1.3(@types/react@18.3.18)(react@18.3.1) - dev: true + optionalDependencies: + '@types/react': 18.3.18 - /react-icons@5.4.0(react@18.3.1): - resolution: {integrity: sha512-7eltJxgVt7X64oHh6wSWNwwbKTCtMfK35hcjvJS0yxEAhPM8oUKdS3+kqaW1vicIltw+kR2unHaa12S9pPALoQ==} - peerDependencies: - react: '*' + react-icons@5.4.0(react@18.3.1): dependencies: react: 18.3.1 - dev: true - /react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - dev: true + react-is@16.13.1: {} - /react-refresh@0.14.2: - resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} - engines: {node: '>=0.10.0'} - dev: true + react-refresh@0.14.2: {} - /react-remove-scroll-bar@2.3.8(@types/react@18.3.18)(react@18.3.1): - resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@types/react': - optional: true + react-remove-scroll-bar@2.3.8(@types/react@18.3.18)(react@18.3.1): dependencies: - '@types/react': 18.3.18 react: 18.3.1 react-style-singleton: 2.2.3(@types/react@18.3.18)(react@18.3.1) tslib: 2.8.1 - dev: true + optionalDependencies: + '@types/react': 18.3.18 - /react-remove-scroll@2.6.3(@types/react@18.3.18)(react@18.3.1): - resolution: {integrity: sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true + react-remove-scroll@2.6.3(@types/react@18.3.18)(react@18.3.1): dependencies: - '@types/react': 18.3.18 react: 18.3.1 react-remove-scroll-bar: 2.3.8(@types/react@18.3.18)(react@18.3.1) react-style-singleton: 2.2.3(@types/react@18.3.18)(react@18.3.1) tslib: 2.8.1 use-callback-ref: 1.3.3(@types/react@18.3.18)(react@18.3.1) use-sidecar: 1.1.3(@types/react@18.3.18)(react@18.3.1) - dev: true + optionalDependencies: + '@types/react': 18.3.18 - /react-router@7.1.5(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-8BUF+hZEU4/z/JD201yK6S+UYhsf58bzYIDq2NS1iGpwxSXDu7F+DeGSkIXMFBuHZB21FSiCzEcUb18cQNdRkA==} - engines: {node: '>=20.0.0'} - peerDependencies: - react: '>=18' - react-dom: '>=18' - peerDependenciesMeta: - react-dom: - optional: true + react-router@7.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@types/cookie': 0.6.0 - cookie: 1.0.2 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - set-cookie-parser: 2.7.1 - turbo-stream: 2.4.0 - dev: true - - /react-style-singleton@2.2.3(@types/react@18.3.18)(react@18.3.1): - resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true + cookie: 1.0.2 + react: 18.3.1 + set-cookie-parser: 2.7.1 + turbo-stream: 2.4.0 + optionalDependencies: + react-dom: 18.3.1(react@18.3.1) + + react-style-singleton@2.2.3(@types/react@18.3.18)(react@18.3.1): dependencies: - '@types/react': 18.3.18 get-nonce: 1.0.1 react: 18.3.1 tslib: 2.8.1 - dev: true + optionalDependencies: + '@types/react': 18.3.18 - /react-universal-interface@0.6.2(react@18.3.1)(tslib@2.8.1): - resolution: {integrity: sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==} - peerDependencies: - react: '*' - tslib: '*' + react-universal-interface@0.6.2(react@18.3.1)(tslib@2.8.1): dependencies: react: 18.3.1 tslib: 2.8.1 - dev: true - /react-use@17.6.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-OmedEScUMKFfzn1Ir8dBxiLLSOzhKe/dPZwVxcujweSj45aNM7BEGPb9BEVIgVEqEXx6f3/TsXzwIktNgUR02g==} - peerDependencies: - react: '*' - react-dom: '*' + react-use@17.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@types/js-cookie': 2.2.7 '@xobotyi/scrollbar-width': 1.9.5 @@ -10001,7 +12516,7 @@ packages: fast-deep-equal: 3.1.3 fast-shallow-equal: 1.0.0 js-cookie: 2.2.1 - nano-css: 5.6.2(react-dom@18.3.1)(react@18.3.1) + nano-css: 5.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-universal-interface: 0.6.2(react@18.3.1)(tslib@2.8.1) @@ -10011,52 +12526,36 @@ packages: throttle-debounce: 3.0.1 ts-easing: 0.2.0 tslib: 2.8.1 - dev: true - /react@18.3.1: - resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} - engines: {node: '>=0.10.0'} + react@18.3.1: dependencies: loose-envify: 1.4.0 - /read-binary-file-arch@1.0.6: - resolution: {integrity: sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==} - hasBin: true + read-binary-file-arch@1.0.6: dependencies: debug: 4.4.0 transitivePeerDependencies: - supports-color - dev: true - /read-pkg-up@2.0.0: - resolution: {integrity: sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w==} - engines: {node: '>=4'} + read-pkg-up@2.0.0: dependencies: find-up: 2.1.0 read-pkg: 2.0.0 - dev: true - /read-pkg@2.0.0: - resolution: {integrity: sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA==} - engines: {node: '>=4'} + read-pkg@2.0.0: dependencies: load-json-file: 2.0.0 normalize-package-data: 2.5.0 path-type: 2.0.0 - dev: true - /read-yaml-file@1.1.0: - resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} - engines: {node: '>=6'} + read-yaml-file@1.1.0: dependencies: graceful-fs: 4.2.11 js-yaml: 3.14.1 pify: 4.0.1 strip-bom: 3.0.0 - dev: true - /readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -10065,51 +12564,33 @@ packages: safe-buffer: 5.1.2 string_decoder: 1.1.1 util-deprecate: 1.0.2 - dev: false - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} + readable-stream@3.6.2: dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - dev: true - /readable-stream@4.7.0: - resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + readable-stream@4.7.0: dependencies: abort-controller: 3.0.0 buffer: 6.0.3 events: 3.3.0 process: 0.11.10 string_decoder: 1.3.0 - dev: false - /readable-web-to-node-stream@3.0.3: - resolution: {integrity: sha512-In3boYjBnbGVrLuuRu/Ath/H6h1jgk30nAsk/71tCare1dTVoe1oMBGRn5LGf0n3c1BcHwwAqpraxX4AUAP5KA==} - engines: {node: '>=8'} + readable-web-to-node-stream@3.0.3: dependencies: process: 0.11.10 readable-stream: 4.7.0 - dev: false - /readdirp@4.1.1: - resolution: {integrity: sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==} - engines: {node: '>= 14.18.0'} - dev: true + readdirp@4.1.1: {} - /rechoir@0.8.0: - resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} - engines: {node: '>= 10.13.0'} + rechoir@0.8.0: dependencies: resolve: 1.22.10 - dev: true - /reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} + reflect.getprototypeof@1.0.10: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 @@ -10119,19 +12600,12 @@ packages: get-intrinsic: 1.2.7 get-proto: 1.0.1 which-builtin-type: 1.2.1 - dev: true - /regenerator-runtime@0.13.11: - resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} - dev: false + regenerator-runtime@0.13.11: {} - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - dev: true + regenerator-runtime@0.14.1: {} - /regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} + regexp.prototype.flags@1.5.4: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 @@ -10139,164 +12613,90 @@ packages: get-proto: 1.0.1 gopd: 1.2.0 set-function-name: 2.0.2 - dev: true - /repeat-string@1.6.1: - resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} - engines: {node: '>=0.10'} - requiresBuild: true - dev: true + repeat-string@1.6.1: optional: true - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true + require-directory@2.1.1: {} - /require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} + require-from-string@2.0.2: {} - /resedit@2.0.3: - resolution: {integrity: sha512-oTeemxwoMuxxTYxXUwjkrOPfngTQehlv0/HoYFNkB4uzsP1Un1A9nI8JQKGOFkxpqkC7qkMs0lUsGrvUlbLNUA==} - engines: {node: '>=14', npm: '>=7'} + resedit@2.0.3: dependencies: pe-library: 1.0.1 - dev: true - /resize-observer-polyfill@1.5.1: - resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} - dev: true + resize-observer-polyfill@1.5.1: {} - /resolve-alpn@1.2.1: - resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + resolve-alpn@1.2.1: {} - /resolve-dir@1.0.1: - resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} - engines: {node: '>=0.10.0'} + resolve-dir@1.0.1: dependencies: expand-tilde: 2.0.2 global-modules: 1.0.0 - dev: true - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true + resolve-from@4.0.0: {} - /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: true + resolve-from@5.0.0: {} - /resolve-package@1.0.1: - resolution: {integrity: sha512-rzB7NnQpOkPHBWFPP3prUMqOP6yg3HkRGgcvR+lDyvyHoY3fZLFLYDkPXh78SPVBAE6VTCk/V+j8we4djg6o4g==} - engines: {node: '>=4', npm: '>=2'} + resolve-package@1.0.1: dependencies: get-installed-path: 2.1.1 - dev: true - /resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - dev: true + resolve-pkg-maps@1.0.0: {} - /resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} - engines: {node: '>= 0.4'} - hasBin: true + resolve@1.22.10: dependencies: is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true - /resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true + resolve@2.0.0-next.5: dependencies: is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true - /responselike@2.0.1: - resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + responselike@2.0.1: dependencies: lowercase-keys: 2.0.0 - /restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} + restore-cursor@3.1.0: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - dev: true - /restore-cursor@4.0.0: - resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + restore-cursor@4.0.0: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - dev: true - /retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} - dev: true + retry@0.12.0: {} - /retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - dev: false + retry@0.13.1: {} - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true + reusify@1.0.4: {} - /rfdc@1.4.1: - resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - dev: true + rfdc@1.4.1: {} - /rimraf@2.6.3: - resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - requiresBuild: true + rimraf@2.6.3: dependencies: glob: 7.2.3 - dev: true optional: true - /rimraf@2.7.1: - resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true + rimraf@2.7.1: dependencies: glob: 7.2.3 - dev: true - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true + rimraf@3.0.2: dependencies: glob: 7.2.3 - /rimraf@6.0.1: - resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} - engines: {node: 20 || >=22} - hasBin: true + rimraf@6.0.1: dependencies: glob: 11.0.1 package-json-from-dist: 1.0.1 - dev: true - /roarr@2.15.4: - resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} - engines: {node: '>=8.0'} - requiresBuild: true + roarr@2.15.4: dependencies: boolean: 3.2.0 detect-node: 2.1.0 @@ -10306,10 +12706,7 @@ packages: sprintf-js: 1.1.3 optional: true - /rollup@4.34.6: - resolution: {integrity: sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true + rollup@4.34.6: dependencies: '@types/estree': 1.0.6 optionalDependencies: @@ -10333,254 +12730,107 @@ packages: '@rollup/rollup-win32-ia32-msvc': 4.34.6 '@rollup/rollup-win32-x64-msvc': 4.34.6 fsevents: 2.3.3 - dev: true - /rtl-css-js@1.16.1: - resolution: {integrity: sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==} + rtl-css-js@1.16.1: dependencies: '@babel/runtime': 7.26.7 - dev: true - /run-async@3.0.0: - resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} - engines: {node: '>=0.12.0'} - dev: true + run-async@3.0.0: {} - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - dev: true - /rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + rxjs@7.8.1: dependencies: tslib: 2.8.1 - dev: true - /safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} - engines: {node: '>=0.4'} + safe-array-concat@1.1.3: dependencies: call-bind: 1.0.8 call-bound: 1.0.3 get-intrinsic: 1.2.7 has-symbols: 1.1.0 isarray: 2.0.5 - dev: true - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: false + safe-buffer@5.1.2: {} - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-buffer@5.2.1: {} - /safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} + safe-push-apply@1.0.0: dependencies: es-errors: 1.3.0 isarray: 2.0.5 - dev: true - /safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} + safe-regex-test@1.1.0: dependencies: call-bound: 1.0.3 es-errors: 1.3.0 is-regex: 1.2.1 - dev: true - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true + safer-buffer@2.1.2: {} - /sass-embedded-android-arm64@1.83.4: - resolution: {integrity: sha512-tgX4FzmbVqnQmD67ZxQDvI+qFNABrboOQgwsG05E5bA/US42zGajW9AxpECJYiMXVOHmg+d81ICbjb0fsVHskw==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true + sass-embedded-android-arm64@1.83.4: optional: true - /sass-embedded-android-arm@1.83.4: - resolution: {integrity: sha512-9Z4pJAOgEkXa3VDY/o+U6l5XvV0mZTJcSl0l/mSPHihjAHSpLYnOW6+KOWeM8dxqrsqTYcd6COzhanI/a++5Gw==} - engines: {node: '>=14.0.0'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true + sass-embedded-android-arm@1.83.4: optional: true - /sass-embedded-android-ia32@1.83.4: - resolution: {integrity: sha512-RsFOziFqPcfZXdFRULC4Ayzy9aK6R6FwQ411broCjlOBX+b0gurjRadkue3cfUEUR5mmy0KeCbp7zVKPLTK+5Q==} - engines: {node: '>=14.0.0'} - cpu: [ia32] - os: [android] - requiresBuild: true - dev: true + sass-embedded-android-ia32@1.83.4: optional: true - /sass-embedded-android-riscv64@1.83.4: - resolution: {integrity: sha512-EHwh0nmQarBBrMRU928eTZkFGx19k/XW2YwbPR4gBVdWLkbTgCA5aGe8hTE6/1zStyx++3nDGvTZ78+b/VvvLg==} - engines: {node: '>=14.0.0'} - cpu: [riscv64] - os: [android] - requiresBuild: true - dev: true + sass-embedded-android-riscv64@1.83.4: optional: true - /sass-embedded-android-x64@1.83.4: - resolution: {integrity: sha512-0PgQNuPWYy1jEOEPDVsV89KfqOsMLIp9CSbjBY7jRcwRhyVAcigqrUG6bDeNtojHUYKA1kU+Eh/85WxOHUOgBw==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true + sass-embedded-android-x64@1.83.4: optional: true - /sass-embedded-darwin-arm64@1.83.4: - resolution: {integrity: sha512-rp2ywymWc3nymnSnAFG5R/8hvxWCsuhK3wOnD10IDlmNB7o4rzKby1c+2ZfpQGowlYGWsWWTgz8FW2qzmZsQRw==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true + sass-embedded-darwin-arm64@1.83.4: optional: true - /sass-embedded-darwin-x64@1.83.4: - resolution: {integrity: sha512-kLkN2lXz9PCgGfDS8Ev5YVcl/V2173L6379en/CaFuJJi7WiyPgBymW7hOmfCt4uO4R1y7CP2Uc08DRtZsBlAA==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true + sass-embedded-darwin-x64@1.83.4: optional: true - /sass-embedded-linux-arm64@1.83.4: - resolution: {integrity: sha512-E0zjsZX2HgESwyqw31EHtI39DKa7RgK7nvIhIRco1d0QEw227WnoR9pjH3M/ZQy4gQj3GKilOFHM5Krs/omeIA==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + sass-embedded-linux-arm64@1.83.4: optional: true - /sass-embedded-linux-arm@1.83.4: - resolution: {integrity: sha512-nL90ryxX2lNmFucr9jYUyHHx21AoAgdCL1O5Ltx2rKg2xTdytAGHYo2MT5S0LIeKLa/yKP/hjuSvrbICYNDvtA==} - engines: {node: '>=14.0.0'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true + sass-embedded-linux-arm@1.83.4: optional: true - /sass-embedded-linux-ia32@1.83.4: - resolution: {integrity: sha512-ew5HpchSzgAYbQoriRh8QhlWn5Kw2nQ2jHoV9YLwGKe3fwwOWA0KDedssvDv7FWnY/FCqXyymhLd6Bxae4Xquw==} - engines: {node: '>=14.0.0'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true + sass-embedded-linux-ia32@1.83.4: optional: true - /sass-embedded-linux-musl-arm64@1.83.4: - resolution: {integrity: sha512-IzMgalf6MZOxgp4AVCgsaWAFDP/IVWOrgVXxkyhw29fyAEoSWBJH4k87wyPhEtxSuzVHLxKNbc8k3UzdWmlBFg==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + sass-embedded-linux-musl-arm64@1.83.4: optional: true - /sass-embedded-linux-musl-arm@1.83.4: - resolution: {integrity: sha512-0RrJRwMrmm+gG0VOB5b5Cjs7Sd+lhqpQJa6EJNEaZHljJokEfpE5GejZsGMRMIQLxEvVphZnnxl6sonCGFE/QQ==} - engines: {node: '>=14.0.0'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true + sass-embedded-linux-musl-arm@1.83.4: optional: true - /sass-embedded-linux-musl-ia32@1.83.4: - resolution: {integrity: sha512-LLb4lYbcxPzX4UaJymYXC+WwokxUlfTJEFUv5VF0OTuSsHAGNRs/rslPtzVBTvMeG9TtlOQDhku1F7G6iaDotA==} - engines: {node: '>=14.0.0'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true + sass-embedded-linux-musl-ia32@1.83.4: optional: true - /sass-embedded-linux-musl-riscv64@1.83.4: - resolution: {integrity: sha512-zoKlPzD5Z13HKin1UGR74QkEy+kZEk2AkGX5RelRG494mi+IWwRuWCppXIovor9+BQb9eDWPYPoMVahwN5F7VA==} - engines: {node: '>=14.0.0'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true + sass-embedded-linux-musl-riscv64@1.83.4: optional: true - /sass-embedded-linux-musl-x64@1.83.4: - resolution: {integrity: sha512-hB8+/PYhfEf2zTIcidO5Bpof9trK6WJjZ4T8g2MrxQh8REVtdPcgIkoxczRynqybf9+fbqbUwzXtiUao2GV+vQ==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + sass-embedded-linux-musl-x64@1.83.4: optional: true - /sass-embedded-linux-riscv64@1.83.4: - resolution: {integrity: sha512-83fL4n+oeDJ0Y4KjASmZ9jHS1Vl9ESVQYHMhJE0i4xDi/P3BNarm2rsKljq/QtrwGpbqwn8ujzOu7DsNCMDSHA==} - engines: {node: '>=14.0.0'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true + sass-embedded-linux-riscv64@1.83.4: optional: true - /sass-embedded-linux-x64@1.83.4: - resolution: {integrity: sha512-NlnGdvCmTD5PK+LKXlK3sAuxOgbRIEoZfnHvxd157imCm/s2SYF/R28D0DAAjEViyI8DovIWghgbcqwuertXsA==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + sass-embedded-linux-x64@1.83.4: optional: true - /sass-embedded-win32-arm64@1.83.4: - resolution: {integrity: sha512-J2BFKrEaeSrVazU2qTjyQdAk+MvbzJeTuCET0uAJEXSKtvQ3AzxvzndS7LqkDPbF32eXAHLw8GVpwcBwKbB3Uw==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true + sass-embedded-win32-arm64@1.83.4: optional: true - /sass-embedded-win32-ia32@1.83.4: - resolution: {integrity: sha512-uPAe9T/5sANFhJS5dcfAOhOJy8/l2TRYG4r+UO3Wp4yhqbN7bggPvY9c7zMYS0OC8tU/bCvfYUDFHYMCl91FgA==} - engines: {node: '>=14.0.0'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true + sass-embedded-win32-ia32@1.83.4: optional: true - /sass-embedded-win32-x64@1.83.4: - resolution: {integrity: sha512-C9fkDY0jKITdJFij4UbfPFswxoXN9O/Dr79v17fJnstVwtUojzVJWKHUXvF0Zg2LIR7TCc4ju3adejKFxj7ueA==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true + sass-embedded-win32-x64@1.83.4: optional: true - /sass-embedded@1.83.4: - resolution: {integrity: sha512-Hf2burRA/y5PGxsg6jB9UpoK/xZ6g/pgrkOcdl6j+rRg1Zj8XhGKZ1MTysZGtTPUUmiiErqzkP5+Kzp95yv9GQ==} - engines: {node: '>=16.0.0'} - hasBin: true + sass-embedded@1.83.4: dependencies: '@bufbuild/protobuf': 2.2.3 buffer-builder: 0.2.0 @@ -10611,44 +12861,25 @@ packages: sass-embedded-win32-arm64: 1.83.4 sass-embedded-win32-ia32: 1.83.4 sass-embedded-win32-x64: 1.83.4 - dev: true - /sax@1.4.1: - resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} - dev: false + sax@1.4.1: {} - /scheduler@0.23.2: - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + scheduler@0.23.2: dependencies: loose-envify: 1.4.0 - dev: true - /screenfull@5.2.0: - resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==} - engines: {node: '>=0.10.0'} - dev: true + screenfull@5.2.0: {} - /semver-compare@1.0.0: - resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} - requiresBuild: true + semver-compare@1.0.0: optional: true - /semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true + semver@5.7.2: {} - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true + semver@6.3.1: {} - /semver@7.7.1: - resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} - engines: {node: '>=10'} - hasBin: true + semver@7.7.1: {} - /send@0.19.0: - resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} - engines: {node: '>= 0.8.0'} + send@0.19.0: dependencies: debug: 2.6.9 depd: 2.0.0 @@ -10665,19 +12896,13 @@ packages: statuses: 2.0.1 transitivePeerDependencies: - supports-color - dev: true - /serialize-error@7.0.1: - resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} - engines: {node: '>=10'} - requiresBuild: true + serialize-error@7.0.1: dependencies: type-fest: 0.13.1 optional: true - /serve-static@1.16.2: - resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} - engines: {node: '>= 0.8.0'} + serve-static@1.16.2: dependencies: encodeurl: 2.0.0 escape-html: 1.0.3 @@ -10685,15 +12910,10 @@ packages: send: 0.19.0 transitivePeerDependencies: - supports-color - dev: true - /set-cookie-parser@2.7.1: - resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} - dev: true + set-cookie-parser@2.7.1: {} - /set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 @@ -10701,44 +12921,27 @@ packages: get-intrinsic: 1.2.7 gopd: 1.2.0 has-property-descriptors: 1.0.2 - dev: true - /set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} + set-function-name@2.0.2: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 - dev: true - /set-harmonic-interval@1.0.1: - resolution: {integrity: sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==} - engines: {node: '>=6.9'} - dev: true + set-harmonic-interval@1.0.1: {} - /set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} + set-proto@1.0.0: dependencies: dunder-proto: 1.0.1 es-errors: 1.3.0 es-object-atoms: 1.1.1 - dev: true - /setimmediate@1.0.5: - resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} - dev: false + setimmediate@1.0.5: {} - /setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - dev: true + setprototypeof@1.2.0: {} - /sharp@0.33.3: - resolution: {integrity: sha512-vHUeXJU1UvlO/BNwTpT0x/r53WkLUVxrmb5JTgW92fdFCFk0ispLMAeu/jPO2vjkXM1fYUi3K7/qcLF47pwM1A==} - engines: {libvips: '>=8.15.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0} - requiresBuild: true + sharp@0.33.3: dependencies: color: 4.2.3 detect-libc: 2.0.3 @@ -10763,280 +12966,168 @@ packages: '@img/sharp-wasm32': 0.33.3 '@img/sharp-win32-ia32': 0.33.3 '@img/sharp-win32-x64': 0.33.3 - dev: false - /shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} + shebang-command@1.2.0: dependencies: shebang-regex: 1.0.0 - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - /shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} + shebang-regex@1.0.0: {} - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} + shebang-regex@3.0.0: {} - /side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} + side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 object-inspect: 1.13.4 - dev: true - /side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} + side-channel-map@1.0.1: dependencies: call-bound: 1.0.3 es-errors: 1.3.0 get-intrinsic: 1.2.7 object-inspect: 1.13.4 - dev: true - /side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} + side-channel-weakmap@1.0.2: dependencies: call-bound: 1.0.3 es-errors: 1.3.0 get-intrinsic: 1.2.7 object-inspect: 1.13.4 side-channel-map: 1.0.1 - dev: true - /side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} + side-channel@1.1.0: dependencies: es-errors: 1.3.0 object-inspect: 1.13.4 side-channel-list: 1.0.0 side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 - dev: true - /siginfo@2.0.0: - resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - dev: true + siginfo@2.0.0: {} - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + signal-exit@3.0.7: {} - /signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - dev: true + signal-exit@4.1.0: {} - /simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + simple-swizzle@0.2.2: dependencies: is-arrayish: 0.3.2 - dev: false - /sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - dev: true + sisteransi@1.0.5: {} - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - dev: true + slash@3.0.0: {} - /slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} + slice-ansi@5.0.0: dependencies: ansi-styles: 6.2.1 is-fullwidth-code-point: 4.0.0 - dev: true - /smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - dev: true + smart-buffer@4.2.0: {} - /socks-proxy-agent@7.0.0: - resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} - engines: {node: '>= 10'} + socks-proxy-agent@7.0.0: dependencies: agent-base: 6.0.2 debug: 4.4.0 socks: 2.8.4 transitivePeerDependencies: - supports-color - dev: true - /socks@2.8.4: - resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + socks@2.8.4: dependencies: ip-address: 9.0.5 smart-buffer: 4.2.0 - dev: true - /source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - dev: true + source-map-js@1.2.1: {} - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - dev: true - /source-map@0.5.6: - resolution: {integrity: sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==} - engines: {node: '>=0.10.0'} - dev: true + source-map@0.5.6: {} - /source-map@0.5.7: - resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} - engines: {node: '>=0.10.0'} - dev: true + source-map@0.5.7: {} - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true + source-map@0.6.1: {} - /source-map@0.8.0-beta.0: - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} - engines: {node: '>= 8'} + source-map@0.8.0-beta.0: dependencies: whatwg-url: 7.1.0 - dev: true - /spawndamnit@3.0.1: - resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} + spawndamnit@3.0.1: dependencies: cross-spawn: 7.0.6 signal-exit: 4.1.0 - dev: true - /spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 spdx-license-ids: 3.0.21 - dev: true - /spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - dev: true + spdx-exceptions@2.5.0: {} - /spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.5.0 spdx-license-ids: 3.0.21 - dev: true - /spdx-license-ids@3.0.21: - resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} - dev: true + spdx-license-ids@3.0.21: {} - /split2@4.2.0: - resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} - engines: {node: '>= 10.x'} - dev: true + split2@4.2.0: {} - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: true + sprintf-js@1.0.3: {} - /sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + sprintf-js@1.1.3: {} - /ssri@9.0.1: - resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + ssri@9.0.1: dependencies: minipass: 3.3.6 - dev: true - /stack-generator@2.0.10: - resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==} + stack-generator@2.0.10: dependencies: stackframe: 1.3.4 - dev: true - /stackback@0.0.2: - resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - dev: true + stackback@0.0.2: {} - /stackframe@1.3.4: - resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} - dev: true + stackframe@1.3.4: {} - /stacktrace-gps@3.1.2: - resolution: {integrity: sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==} + stacktrace-gps@3.1.2: dependencies: source-map: 0.5.6 stackframe: 1.3.4 - dev: true - /stacktrace-js@2.0.2: - resolution: {integrity: sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==} + stacktrace-js@2.0.2: dependencies: error-stack-parser: 2.1.4 stack-generator: 2.0.10 stacktrace-gps: 3.1.2 - dev: true - /statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - dev: true + statuses@2.0.1: {} - /std-env@3.8.0: - resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} - dev: true + std-env@3.8.0: {} - /stream-buffers@2.2.0: - resolution: {integrity: sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==} - engines: {node: '>= 0.10.0'} - requiresBuild: true - dev: true + stream-buffers@2.2.0: optional: true - /string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} - dev: true + string-argv@0.3.2: {} - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: true - /string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} + string-width@5.1.2: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.1.0 - dev: true - /string.prototype.matchall@4.0.12: - resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} - engines: {node: '>= 0.4'} + string.prototype.matchall@4.0.12: dependencies: call-bind: 1.0.8 call-bound: 1.0.3 @@ -11051,18 +13142,13 @@ packages: regexp.prototype.flags: 1.5.4 set-function-name: 2.0.2 side-channel: 1.1.0 - dev: true - /string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + string.prototype.repeat@1.0.0: dependencies: define-properties: 1.2.1 es-abstract: 1.23.9 - dev: true - /string.prototype.trim@1.2.10: - resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} - engines: {node: '>= 0.4'} + string.prototype.trim@1.2.10: dependencies: call-bind: 1.0.8 call-bound: 1.0.3 @@ -11071,106 +13157,62 @@ packages: es-abstract: 1.23.9 es-object-atoms: 1.1.1 has-property-descriptors: 1.0.2 - dev: true - /string.prototype.trimend@1.0.9: - resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} - engines: {node: '>= 0.4'} + string.prototype.trimend@1.0.9: dependencies: call-bind: 1.0.8 call-bound: 1.0.3 define-properties: 1.2.1 es-object-atoms: 1.1.1 - dev: true - /string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} + string.prototype.trimstart@1.0.8: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 es-object-atoms: 1.1.1 - dev: true - /string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 - dev: false - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - dev: true - /strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} + strip-ansi@7.1.0: dependencies: ansi-regex: 6.1.0 - dev: true - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - dev: true + strip-bom@3.0.0: {} - /strip-eof@1.0.0: - resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} - engines: {node: '>=0.10.0'} + strip-eof@1.0.0: {} - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} + strip-final-newline@2.0.0: {} - /strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - dev: true + strip-final-newline@3.0.0: {} - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true + strip-json-comments@3.1.1: {} - /strip-outer@1.0.1: - resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} - engines: {node: '>=0.10.0'} + strip-outer@1.0.1: dependencies: escape-string-regexp: 1.0.5 - dev: true - /strtok3@6.3.0: - resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} - engines: {node: '>=10'} + strtok3@6.3.0: dependencies: '@tokenizer/token': 0.3.0 peek-readable: 4.1.0 - dev: false - /stubborn-fs@1.2.5: - resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} - dev: false + stubborn-fs@1.2.5: {} - /stylis@4.2.0: - resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} - dev: true + stylis@4.2.0: {} - /stylis@4.3.6: - resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} - dev: true + stylis@4.3.6: {} - /sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true + sucrase@3.35.0: dependencies: '@jridgewell/gen-mapping': 0.3.8 commander: 4.1.1 @@ -11179,77 +13221,45 @@ packages: mz: 2.7.0 pirates: 4.0.6 ts-interface-checker: 0.1.13 - dev: true - /sudo-prompt@9.2.1: - resolution: {integrity: sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - dev: true + sudo-prompt@9.2.1: {} - /sumchecker@3.0.1: - resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==} - engines: {node: '>= 8.0'} + sumchecker@3.0.1: dependencies: debug: 4.4.0 transitivePeerDependencies: - supports-color - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - dev: true - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} + supports-color@8.1.1: dependencies: has-flag: 4.0.0 - dev: true - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true + supports-preserve-symlinks-flag@1.0.0: {} - /swr@2.3.2(react@18.3.1): - resolution: {integrity: sha512-RosxFpiabojs75IwQ316DGoDRmOqtiAj0tg8wCcbEu4CiLZBs/a9QNtHV7TUfDXmmlgqij/NqzKq/eLelyv9xA==} - peerDependencies: - react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + swr@2.3.2(react@18.3.1): dependencies: dequal: 2.0.3 react: 18.3.1 use-sync-external-store: 1.4.0(react@18.3.1) - dev: true - /sync-child-process@1.0.2: - resolution: {integrity: sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==} - engines: {node: '>=16.0.0'} + sync-child-process@1.0.2: dependencies: sync-message-port: 1.1.3 - dev: true - /sync-message-port@1.1.3: - resolution: {integrity: sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==} - engines: {node: '>=16.0.0'} - dev: true + sync-message-port@1.1.3: {} - /synckit@0.9.2: - resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} - engines: {node: ^14.18.0 || >=16.0.0} + synckit@0.9.2: dependencies: '@pkgr/core': 0.1.1 tslib: 2.8.1 - dev: true - /tailwind-merge@2.5.5: - resolution: {integrity: sha512-0LXunzzAZzo0tEPxV3I297ffKZPlKDrjj7NXphC8V5ak9yHC5zRmxnOe2m/Rd/7ivsOMJe3JZ2JVocoDdQTRBA==} - dev: true + tailwind-merge@2.5.5: {} - /tar@6.2.1: - resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} - engines: {node: '>=10'} + tar@6.2.1: dependencies: chownr: 2.0.0 fs-minipass: 2.1.0 @@ -11257,228 +13267,117 @@ packages: minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 - dev: true - /temp@0.9.4: - resolution: {integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==} - engines: {node: '>=6.0.0'} - requiresBuild: true + temp@0.9.4: dependencies: mkdirp: 0.5.6 rimraf: 2.6.3 - dev: true optional: true - /term-size@2.2.1: - resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} - engines: {node: '>=8'} - dev: true + term-size@2.2.1: {} - /terminal-columns@1.4.1: - resolution: {integrity: sha512-IKVL/itiMy947XWVv4IHV7a0KQXvKjj4ptbi7Ew9MPMcOLzkiQeyx3Gyvh62hKrfJ0RZc4M1nbhzjNM39Kyujw==} - dev: true + terminal-columns@1.4.1: {} - /test-exclude@7.0.1: - resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} - engines: {node: '>=18'} + test-exclude@7.0.1: dependencies: '@istanbuljs/schema': 0.1.3 glob: 10.4.5 minimatch: 9.0.5 - dev: true - /text-extensions@2.4.0: - resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} - engines: {node: '>=8'} - dev: true + text-extensions@2.4.0: {} - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true + text-table@0.2.0: {} - /thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} + thenify-all@1.6.0: dependencies: thenify: 3.3.1 - dev: true - /thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + thenify@3.3.1: dependencies: any-promise: 1.3.0 - dev: true - /throttle-debounce@3.0.1: - resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==} - engines: {node: '>=10'} - dev: true + throttle-debounce@3.0.1: {} - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true + through@2.3.8: {} - /timm@1.7.1: - resolution: {integrity: sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==} - dev: false + timm@1.7.1: {} - /tiny-each-async@2.0.3: - resolution: {integrity: sha512-5ROII7nElnAirvFn8g7H7MtpfV1daMcyfTGQwsn/x2VtyV+VPiO5CjReCJtWLvoKTDEDmZocf3cNPraiMnBXLA==} - requiresBuild: true - dev: true + tiny-each-async@2.0.3: optional: true - /tiny-warning@1.0.3: - resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} - dev: true + tiny-warning@1.0.3: {} - /tinybench@2.9.0: - resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - dev: true + tinybench@2.9.0: {} - /tinycolor2@1.6.0: - resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} - dev: false + tinycolor2@1.6.0: {} - /tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - dev: true + tinyexec@0.3.2: {} - /tinyglobby@0.2.10: - resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} - engines: {node: '>=12.0.0'} + tinyglobby@0.2.10: dependencies: fdir: 6.4.3(picomatch@4.0.2) picomatch: 4.0.2 - dev: true - /tinypool@1.0.2: - resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} - engines: {node: ^18.0.0 || >=20.0.0} - dev: true + tinypool@1.0.2: {} - /tinyrainbow@2.0.0: - resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} - engines: {node: '>=14.0.0'} - dev: true + tinyrainbow@2.0.0: {} - /tinyspy@3.0.2: - resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} - engines: {node: '>=14.0.0'} - dev: true + tinyspy@3.0.2: {} - /tmp-promise@3.0.3: - resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} - requiresBuild: true + tmp-promise@3.0.3: dependencies: tmp: 0.2.3 - dev: true optional: true - /tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 - dev: true - /tmp@0.2.3: - resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} - engines: {node: '>=14.14'} - requiresBuild: true - dev: true + tmp@0.2.3: optional: true - /tn1150@0.1.0: - resolution: {integrity: sha512-DbplOfQFkqG5IHcDyyrs/lkvSr3mPUVsFf/RbDppOshs22yTPnSJWEe6FkYd1txAwU/zcnR905ar2fi4kwF29w==} - engines: {node: '>=0.12'} - requiresBuild: true + tn1150@0.1.0: dependencies: unorm: 1.6.0 - dev: true optional: true - /to-data-view@1.1.0: - resolution: {integrity: sha512-1eAdufMg6mwgmlojAx3QeMnzB/BTVp7Tbndi3U7ftcT2zCZadjxkkmLmd97zmaxWi+sgGcgWrokmpEoy0Dn0vQ==} - requiresBuild: true - dev: true + to-data-view@1.1.0: optional: true - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - dev: true - /toggle-selection@1.0.6: - resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} - dev: true + toggle-selection@1.0.6: {} - /toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - dev: true + toidentifier@1.0.1: {} - /token-types@4.2.1: - resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} - engines: {node: '>=10'} + token-types@4.2.1: dependencies: '@tokenizer/token': 0.3.0 ieee754: 1.2.1 - dev: false - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tr46@0.0.3: {} - /tr46@1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + tr46@1.0.1: dependencies: punycode: 2.3.1 - dev: true - /tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - dev: true + tree-kill@1.2.2: {} - /trim-repeated@1.0.0: - resolution: {integrity: sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==} - engines: {node: '>=0.10.0'} + trim-repeated@1.0.0: dependencies: escape-string-regexp: 1.0.5 - dev: true - /ts-api-utils@1.4.3(typescript@5.7.3): - resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} - engines: {node: '>=16'} - peerDependencies: - typescript: '>=4.2.0' + ts-api-utils@1.4.3(typescript@5.7.3): dependencies: typescript: 5.7.3 - dev: true - /ts-easing@0.2.0: - resolution: {integrity: sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==} - dev: true + ts-easing@0.2.0: {} - /ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - dev: true + ts-interface-checker@0.1.13: {} - /ts-node@10.9.2(@types/node@20.17.17)(typescript@5.7.3): - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true + ts-node@10.9.2(@types/node@20.17.17)(typescript@5.7.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -11495,59 +13394,25 @@ packages: typescript: 5.7.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - dev: true - /tsconfck@3.1.5(typescript@5.7.3): - resolution: {integrity: sha512-CLDfGgUp7XPswWnezWwsCRxNmgQjhYq3VXHM0/XIRxhVrKw0M1if9agzryh1QS3nxjCROvV+xWxoJO1YctzzWg==} - engines: {node: ^18 || >=20} - hasBin: true - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - dependencies: + tsconfck@3.1.5(typescript@5.7.3): + optionalDependencies: typescript: 5.7.3 - dev: true - /tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 - dev: true - /tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: true + tslib@1.14.1: {} - /tslib@2.4.0: - resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} - dev: true + tslib@2.4.0: {} - /tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tslib@2.8.1: {} - /tsup@8.3.6(tsx@4.19.2)(typescript@5.7.3): - resolution: {integrity: sha512-XkVtlDV/58S9Ye0JxUUTcrQk4S+EqlOHKzg6Roa62rdjL1nGWNUstG0xgI4vanHdfIpjP448J8vlN0oK6XOJ5g==} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - '@microsoft/api-extractor': ^7.36.0 - '@swc/core': ^1 - postcss: ^8.4.12 - typescript: '>=4.5.0' - peerDependenciesMeta: - '@microsoft/api-extractor': - optional: true - '@swc/core': - optional: true - postcss: - optional: true - typescript: - optional: true + tsup@8.3.6(jiti@2.4.2)(postcss@8.5.2)(tsx@4.19.2)(typescript@5.7.3): dependencies: bundle-require: 5.1.0(esbuild@0.24.2) cac: 6.7.14 @@ -11557,7 +13422,7 @@ packages: esbuild: 0.24.2 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(tsx@4.19.2) + postcss-load-config: 6.0.1(jiti@2.4.2)(postcss@8.5.2)(tsx@4.19.2) resolve-from: 5.0.0 rollup: 4.34.6 source-map: 0.8.0-beta.0 @@ -11565,338 +13430,198 @@ packages: tinyexec: 0.3.2 tinyglobby: 0.2.10 tree-kill: 1.2.2 + optionalDependencies: + postcss: 8.5.2 typescript: 5.7.3 transitivePeerDependencies: - jiti - supports-color - tsx - yaml - dev: true - /tsutils@3.21.0(typescript@5.7.3): - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + tsutils@3.21.0(typescript@5.7.3): dependencies: tslib: 1.14.1 typescript: 5.7.3 - dev: true - /tsx@4.19.2: - resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} - engines: {node: '>=18.0.0'} - hasBin: true + tsx@4.19.2: dependencies: esbuild: 0.23.1 get-tsconfig: 4.10.0 optionalDependencies: fsevents: 2.3.3 - dev: true - /tunnel@0.0.6: - resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} - engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} - dev: true + tunnel@0.0.6: {} - /turbo-stream@2.4.0: - resolution: {integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==} - dev: true + turbo-stream@2.4.0: {} - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - dev: true - /type-fest@0.13.1: - resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} - engines: {node: '>=10'} - requiresBuild: true + type-fest@0.13.1: optional: true - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true + type-fest@0.20.2: {} - /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - dev: true + type-fest@0.21.3: {} - /type-fest@1.4.0: - resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} - engines: {node: '>=10'} - dev: true + type-fest@1.4.0: {} - /type-fest@4.34.1: - resolution: {integrity: sha512-6kSc32kT0rbwxD6QL1CYe8IqdzN/J/ILMrNK+HMQCKH3insCDRY/3ITb0vcBss0a3t72fzh2YSzj8ko1HgwT3g==} - engines: {node: '>=16'} - dev: false + type-fest@4.34.1: {} - /type-flag@3.0.0: - resolution: {integrity: sha512-3YaYwMseXCAhBB14RXW5cRQfJQlEknS6i4C8fCfeUdS3ihG9EdccdR9kt3vP73ZdeTGmPb4bZtkDn5XMIn1DLA==} - dev: true + type-flag@3.0.0: {} - /type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} + type-is@1.6.18: dependencies: media-typer: 0.3.0 mime-types: 2.1.35 - dev: true - /typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} - engines: {node: '>= 0.4'} + typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.3 es-errors: 1.3.0 is-typed-array: 1.1.15 - dev: true - /typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} + typed-array-byte-length@1.0.3: dependencies: call-bind: 1.0.8 - for-each: 0.3.4 + for-each: 0.3.5 gopd: 1.2.0 has-proto: 1.2.0 is-typed-array: 1.1.15 - dev: true - /typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} - engines: {node: '>= 0.4'} + typed-array-byte-offset@1.0.4: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.8 - for-each: 0.3.4 + for-each: 0.3.5 gopd: 1.2.0 has-proto: 1.2.0 is-typed-array: 1.1.15 reflect.getprototypeof: 1.0.10 - dev: true - /typed-array-length@1.0.7: - resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} - engines: {node: '>= 0.4'} + typed-array-length@1.0.7: dependencies: call-bind: 1.0.8 - for-each: 0.3.4 + for-each: 0.3.5 gopd: 1.2.0 is-typed-array: 1.1.15 possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - dev: true - /typescript@5.7.3: - resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} - engines: {node: '>=14.17'} - hasBin: true - dev: true + typescript@5.7.3: {} - /uc.micro@2.1.0: - resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} - dev: true + uc.micro@2.1.0: {} - /uint8array-extras@1.4.0: - resolution: {integrity: sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==} - engines: {node: '>=18'} - dev: false + uint8array-extras@1.4.0: {} - /unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} + unbox-primitive@1.1.0: dependencies: call-bound: 1.0.3 has-bigints: 1.1.0 has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - dev: true - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@5.26.5: {} - /undici-types@6.19.8: - resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici-types@6.19.8: {} - /undici@5.28.5: - resolution: {integrity: sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==} - engines: {node: '>=14.0'} + undici@5.28.5: dependencies: '@fastify/busboy': 2.1.1 - dev: true - /unicorn-magic@0.1.0: - resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} - engines: {node: '>=18'} - dev: true + unicorn-magic@0.1.0: {} - /unique-filename@2.0.1: - resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + unique-filename@2.0.1: dependencies: unique-slug: 3.0.0 - dev: true - /unique-slug@3.0.0: - resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + unique-slug@3.0.0: dependencies: imurmurhash: 0.1.4 - dev: true - - /universal-user-agent@6.0.1: - resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} - dev: true - /universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} + universal-user-agent@6.0.1: {} - /universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - dev: true + universalify@0.1.2: {} - /unorm@1.6.0: - resolution: {integrity: sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==} - engines: {node: '>= 0.4.0'} - requiresBuild: true - dev: true + universalify@2.0.1: {} + + unorm@1.6.0: optional: true - /unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - dev: true + unpipe@1.0.0: {} - /unzip-crx-3@0.2.0: - resolution: {integrity: sha512-0+JiUq/z7faJ6oifVB5nSwt589v1KCduqIJupNVDoWSXZtWDmjDGO3RAEOvwJ07w90aoXoP4enKsR7ecMrJtWQ==} + unzip-crx-3@0.2.0: dependencies: jszip: 3.10.1 mkdirp: 0.5.6 yaku: 0.16.7 - dev: false - /update-browserslist-db@1.1.2(browserslist@4.24.4): - resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + update-browserslist-db@1.1.2(browserslist@4.24.4): dependencies: browserslist: 4.24.4 escalade: 3.2.0 picocolors: 1.1.1 - dev: true - /update-electron-app@3.1.1: - resolution: {integrity: sha512-7duRr6sYn014tifhKgT/5i8N+6xLzmJVJ8hVtNrHXlIDNP6QbRe6VxZ1hSi2UH5oJPzhor/PH7yKU9em5xjRzQ==} + update-electron-app@3.1.1: dependencies: github-url-to-object: 4.0.6 ms: 2.1.3 - dev: false - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uri-js@4.4.1: dependencies: punycode: 2.3.1 - dev: true - /use-callback-ref@1.3.3(@types/react@18.3.18)(react@18.3.1): - resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true + use-callback-ref@1.3.3(@types/react@18.3.18)(react@18.3.1): dependencies: - '@types/react': 18.3.18 react: 18.3.1 tslib: 2.8.1 - dev: true + optionalDependencies: + '@types/react': 18.3.18 - /use-sidecar@1.1.3(@types/react@18.3.18)(react@18.3.1): - resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true + use-sidecar@1.1.3(@types/react@18.3.18)(react@18.3.1): dependencies: - '@types/react': 18.3.18 detect-node-es: 1.1.0 react: 18.3.1 tslib: 2.8.1 - dev: true + optionalDependencies: + '@types/react': 18.3.18 - /use-sync-external-store@1.4.0(react@18.3.1): - resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + use-sync-external-store@1.4.0(react@18.3.1): dependencies: react: 18.3.1 - dev: true - /username@5.1.0: - resolution: {integrity: sha512-PCKbdWw85JsYMvmCv5GH3kXmM66rCd9m1hBEDutPNv94b/pqCMT4NtcKyeWYvLFiE8b+ha1Jdl8XAaUdPn5QTg==} - engines: {node: '>=8'} + username@5.1.0: dependencies: execa: 1.0.0 mem: 4.3.0 - dev: true - /utif2@4.1.0: - resolution: {integrity: sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w==} + utif2@4.1.0: dependencies: pako: 1.0.11 - dev: false - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + util-deprecate@1.0.2: {} - /utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - dev: true + utils-merge@1.0.1: {} - /v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: true + v8-compile-cache-lib@3.0.1: {} - /validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - dev: true - /varint@6.0.0: - resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} - dev: true + varint@6.0.0: {} - /vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - dev: true + vary@1.1.2: {} - /vite-node@3.0.5(@types/node@20.17.17)(sass-embedded@1.83.4): - resolution: {integrity: sha512-02JEJl7SbtwSDJdYS537nU6l+ktdvcREfLksk/NDAqtdKWGqHl+joXzEubHROmS3E6pip+Xgu2tFezMu75jH7A==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true + vite-node@3.0.5(@types/node@20.17.17)(sass-embedded@1.83.4): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 - pathe: 2.0.2 + pathe: 2.0.3 vite: 5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4) transitivePeerDependencies: - '@types/node' @@ -11908,96 +13633,32 @@ packages: - sugarss - supports-color - terser - dev: true - /vite-tsconfig-paths@5.1.4(typescript@5.7.3)(vite@5.4.14): - resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==} - peerDependencies: - vite: '*' - peerDependenciesMeta: - vite: - optional: true + vite-tsconfig-paths@5.1.4(typescript@5.7.3)(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)): dependencies: debug: 4.4.0 globrex: 0.1.2 tsconfck: 3.1.5(typescript@5.7.3) + optionalDependencies: vite: 5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4) transitivePeerDependencies: - supports-color - typescript - dev: true - /vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4): - resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true + vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4): dependencies: - '@types/node': 20.17.17 esbuild: 0.21.5 postcss: 8.5.2 rollup: 4.34.6 - sass-embedded: 1.83.4 optionalDependencies: + '@types/node': 20.17.17 fsevents: 2.3.3 - dev: true + sass-embedded: 1.83.4 - /vitest@3.0.5(@types/node@20.17.17)(sass-embedded@1.83.4): - resolution: {integrity: sha512-4dof+HvqONw9bvsYxtkfUp2uHsTN9bV2CZIi1pWgoFpL1Lld8LA1ka9q/ONSsoScAKG7NVGf2stJTI7XRkXb2Q==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@types/debug': ^4.1.12 - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.0.5 - '@vitest/ui': 3.0.5 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@types/debug': - optional: true - '@types/node': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true + vitest@3.0.5(@types/node@20.17.17)(sass-embedded@1.83.4): dependencies: - '@types/node': 20.17.17 '@vitest/expect': 3.0.5 - '@vitest/mocker': 3.0.5(vite@5.4.14) + '@vitest/mocker': 3.0.5(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)) '@vitest/pretty-format': 3.0.5 '@vitest/runner': 3.0.5 '@vitest/snapshot': 3.0.5 @@ -12007,7 +13668,7 @@ packages: debug: 4.4.0 expect-type: 1.1.0 magic-string: 0.30.17 - pathe: 2.0.2 + pathe: 2.0.3 std-env: 3.8.0 tinybench: 2.9.0 tinyexec: 0.3.2 @@ -12016,6 +13677,8 @@ packages: vite: 5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4) vite-node: 3.0.5(@types/node@20.17.17)(sass-embedded@1.83.4) why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 20.17.17 transitivePeerDependencies: - less - lightningcss @@ -12026,66 +13689,43 @@ packages: - sugarss - supports-color - terser - dev: true - /wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + wcwidth@1.0.1: dependencies: defaults: 1.0.4 - dev: true - /web-streams-polyfill@3.3.3: - resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} - engines: {node: '>= 8'} - dev: true + web-streams-polyfill@3.3.3: {} - /web-streams-polyfill@4.0.0-beta.3: - resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} - engines: {node: '>= 14'} + web-streams-polyfill@4.0.0-beta.3: {} - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webidl-conversions@3.0.1: {} - /webidl-conversions@4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - dev: true + webidl-conversions@4.0.2: {} - /whatwg-fetch@3.6.20: - resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} - dev: false + whatwg-fetch@3.6.20: {} - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - /whatwg-url@7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + whatwg-url@7.1.0: dependencies: lodash.sortby: 4.7.0 tr46: 1.0.1 webidl-conversions: 4.0.2 - dev: true - /when-exit@2.1.4: - resolution: {integrity: sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg==} - dev: false + when-exit@2.1.4: {} - /which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} + which-boxed-primitive@1.1.1: dependencies: is-bigint: 1.1.0 is-boolean-object: 1.2.2 is-number-object: 1.1.1 is-string: 1.1.1 is-symbol: 1.1.1 - dev: true - /which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} + which-builtin-type@1.2.1: dependencies: call-bound: 1.0.3 function.prototype.name: 1.1.8 @@ -12100,201 +13740,108 @@ packages: which-boxed-primitive: 1.1.1 which-collection: 1.0.2 which-typed-array: 1.1.18 - dev: true - /which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} + which-collection@1.0.2: dependencies: is-map: 2.0.3 is-set: 2.0.3 is-weakmap: 2.0.2 is-weakset: 2.0.4 - dev: true - /which-typed-array@1.1.18: - resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} - engines: {node: '>= 0.4'} + which-typed-array@1.1.18: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.8 call-bound: 1.0.3 - for-each: 0.3.4 + for-each: 0.3.5 gopd: 1.2.0 has-tostringtag: 1.0.2 - dev: true - /which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true + which@1.3.1: dependencies: isexe: 2.0.0 - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which@2.0.2: dependencies: isexe: 2.0.0 - /why-is-node-running@2.3.0: - resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} - engines: {node: '>=8'} - hasBin: true + why-is-node-running@2.3.0: dependencies: siginfo: 2.0.0 stackback: 0.0.2 - dev: true - /word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - dev: true + word-wrap@1.2.5: {} - /wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} + wrap-ansi@6.2.0: dependencies: 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==} - engines: {node: '>=10'} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true - /wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} + wrap-ansi@8.1.0: dependencies: ansi-styles: 6.2.1 string-width: 5.1.2 strip-ansi: 7.1.0 - dev: true - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + wrappy@1.0.2: {} - /ws@7.5.10: - resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true + ws@7.5.10: {} - /xhr@2.6.0: - resolution: {integrity: sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==} + xhr@2.6.0: dependencies: global: 4.4.0 is-function: 1.0.2 parse-headers: 2.0.5 xtend: 4.0.2 - dev: false - /xml-parse-from-string@1.0.1: - resolution: {integrity: sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==} - dev: false + xml-parse-from-string@1.0.1: {} - /xml2js@0.5.0: - resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} - engines: {node: '>=4.0.0'} + xml2js@0.5.0: dependencies: sax: 1.4.1 xmlbuilder: 11.0.1 - dev: false - /xmlbuilder@11.0.1: - resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} - engines: {node: '>=4.0'} - dev: false + xmlbuilder@11.0.1: {} - /xmlbuilder@15.1.1: - resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} - engines: {node: '>=8.0'} - dev: true + xmlbuilder@15.1.1: {} - /xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} + xtend@4.0.2: {} - /xterm-addon-fit@0.5.0(xterm@4.19.0): - resolution: {integrity: sha512-DsS9fqhXHacEmsPxBJZvfj2la30Iz9xk+UKjhQgnYNkrUIN5CYLbw7WEfz117c7+S86S/tpHPfvNxJsF5/G8wQ==} - deprecated: This package is now deprecated. Move to @xterm/addon-fit instead. - peerDependencies: - xterm: ^4.0.0 + xterm-addon-fit@0.5.0(xterm@4.19.0): dependencies: xterm: 4.19.0 - dev: true - /xterm-addon-search@0.8.2(xterm@4.19.0): - resolution: {integrity: sha512-I1863mjn8P6uVrqm/X+btalVsqjAKLhnhpbP7SavAOpEkI1jJhbHU2UTp7NjeRtcKTks6UWk/ycgds5snDSejg==} - deprecated: This package is now deprecated. Move to @xterm/addon-search instead. - peerDependencies: - xterm: ^4.0.0 + xterm-addon-search@0.8.2(xterm@4.19.0): dependencies: xterm: 4.19.0 - dev: true - /xterm@4.19.0: - resolution: {integrity: sha512-c3Cp4eOVsYY5Q839dR5IejghRPpxciGmLWWaP9g+ppfMeBChMeLa1DCA+pmX/jyDZ+zxFOmlJL/82qVdayVoGQ==} - deprecated: This package is now deprecated. Move to @xterm/xterm instead. - dev: true + xterm@4.19.0: {} - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true + y18n@5.0.8: {} - /yaku@0.16.7: - resolution: {integrity: sha512-Syu3IB3rZvKvYk7yTiyl1bo/jiEFaaStrgv1V2TIJTqYPStSMQVO8EQjg/z+DRzLq/4LIIharNT3iH1hylEIRw==} - dev: false + yaku@0.16.7: {} - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: true + yallist@3.1.1: {} - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true + yallist@4.0.0: {} - /yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - dev: true + yaml@1.10.2: {} - /yaml@2.3.1: - resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} - engines: {node: '>= 14'} - dev: true + yaml@2.3.1: {} - /yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - requiresBuild: true - dev: true + yargs-parser@20.2.9: optional: true - /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - dev: true + yargs-parser@21.1.1: {} - /yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} - requiresBuild: true + yargs@16.2.0: dependencies: cliui: 7.0.4 escalade: 3.2.0 @@ -12303,12 +13850,9 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 20.2.9 - dev: true optional: true - /yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + yargs@17.7.2: dependencies: cliui: 8.0.1 escalade: 3.2.0 @@ -12317,95 +13861,28 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - dev: true - /yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + yauzl@2.10.0: dependencies: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 - /yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - dev: true + yn@3.1.1: {} - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true + yocto-queue@0.1.0: {} - /yocto-queue@1.1.1: - resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} - engines: {node: '>=12.20'} - dev: true + yocto-queue@1.1.1: {} - /yoctocolors-cjs@2.1.2: - resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} - engines: {node: '>=18'} - dev: true + yoctocolors-cjs@2.1.2: {} - /zod-to-json-schema@3.24.1(zod@3.24.1): - resolution: {integrity: sha512-3h08nf3Vw3Wl3PK+q3ow/lIil81IT2Oa7YpQyUUDsEWbXveMesdfK1xBd2RhCkynwZndAxixji/7SYJJowr62w==} - peerDependencies: - zod: ^3.24.1 + zod-to-json-schema@3.24.1(zod@3.24.2): dependencies: - zod: 3.24.1 - dev: true + zod: 3.24.2 - /zod@3.24.1: - resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} + zod@3.24.2: {} - /zustand@5.0.3(@types/react@18.3.18)(react@18.3.1): - resolution: {integrity: sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg==} - engines: {node: '>=12.20.0'} - peerDependencies: - '@types/react': '>=18.0.0' - immer: '>=9.0.6' - react: '>=18.0.0' - use-sync-external-store: '>=1.2.0' - peerDependenciesMeta: - '@types/react': - optional: true - immer: - optional: true - react: - optional: true - use-sync-external-store: - optional: true - dependencies: + zustand@5.0.3(@types/react@18.3.18)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)): + optionalDependencies: '@types/react': 18.3.18 react: 18.3.1 - dev: false - - /zutron@0.4.0(electron@34.0.2)(zustand@5.0.3): - resolution: {integrity: sha512-x7f4IyRBROIYXGR7Nj3akhVy5/fXPDEW/A90cXq4ZeKDdKV4IsgVnXRx42GNBDYvTNHTOwZ4i19FkhOcMSXJ/A==} - peerDependencies: - electron: '>=12' - zustand: '>=5.0.0' - dependencies: - electron: 34.0.2 - zustand: 5.0.3(@types/react@18.3.18)(react@18.3.1) - dev: false - - github.com/electron/node-gyp/06b29aafb7708acef8b3669835c8a7857ebc92d2: - resolution: {tarball: https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2} - name: '@electron/node-gyp' - version: 10.2.0-electron.1 - engines: {node: '>=12.13.0'} - hasBin: true - dependencies: - env-paths: 2.2.1 - exponential-backoff: 3.1.2 - glob: 8.1.0 - graceful-fs: 4.2.11 - make-fetch-happen: 10.2.1 - nopt: 6.0.0 - proc-log: 2.0.1 - semver: 7.7.1 - tar: 6.2.1 - which: 2.0.2 - transitivePeerDependencies: - - bluebird - - supports-color - dev: true + use-sync-external-store: 1.4.0(react@18.3.1) diff --git a/src/main/agent/index.ts b/src/main/agent/index.ts index caeb12337..c688ef078 100644 --- a/src/main/agent/index.ts +++ b/src/main/agent/index.ts @@ -198,6 +198,7 @@ export class ComputerUseAgent { if (!isValidImage) { loopCnt -= 1; snapshotErrCnt += 1; + await sleep(1000); continue; } diff --git a/src/main/agent/llm/ui-tars.ts b/src/main/agent/llm/ui-tars.ts index 4a1d5df20..b9d6e6823 100644 --- a/src/main/agent/llm/ui-tars.ts +++ b/src/main/agent/llm/ui-tars.ts @@ -6,11 +6,11 @@ import OpenAI from 'openai'; import { convertToOpenAIMessages } from '@main/agent/utils'; import { logger } from '@main/logger'; -import { store } from '@main/store/create'; import { preprocessResizeImage } from '@main/utils/image'; import { MAX_PIXELS } from '../constant'; import { VLM, VlmRequest, VlmRequestOptions, VlmResponse } from './base'; +import { SettingStore } from '@main/store/setting'; export interface UITARSOptions { reflection: boolean; @@ -26,7 +26,7 @@ export interface UITARSOptions { export class UITARS implements VLM { get vlmModel() { - return store.getState().getSetting('vlmModelName'); + return SettingStore.getStore().vlmModelName; } // [image, prompt] @@ -44,8 +44,8 @@ export class UITARS implements VLM { conversations, images: compressedImages, }); - const vlmBaseUrl = store.getState().getSetting('vlmBaseUrl'); - const vlmApiKey = store.getState().getSetting('vlmApiKey'); + const vlmBaseUrl = SettingStore.getStore().vlmBaseUrl; + const vlmApiKey = SettingStore.getStore().vlmApiKey; logger.info('vlmBaseUrl', vlmBaseUrl, 'vlmApiKey', vlmApiKey); const openai = new OpenAI({ diff --git a/src/main/ipcRoutes/agent.ts b/src/main/ipcRoutes/agent.ts new file mode 100644 index 000000000..437c3f8cd --- /dev/null +++ b/src/main/ipcRoutes/agent.ts @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { initIpc } from '@ui-tars/electron-ipc/main'; +import { StatusEnum, Conversation } from '@ui-tars/shared/types'; +import { store } from '@main/store/create'; +import { runAgent } from '@main/services/runAgent'; +import { showWindow } from '@main/window/index'; + +import { closeScreenMarker } from '@main/window/ScreenMarker'; + +const t = initIpc.create(); + +export const agentRoute = t.router({ + runAgent: t.procedure.input().handle(async () => { + const { thinking } = store.getState(); + if (thinking) { + return; + } + + store.setState({ + abortController: new AbortController(), + thinking: true, + errorMsg: null, + }); + + await runAgent(store.setState, store.getState); + + store.setState({ thinking: false }); + }), + stopRun: t.procedure.input().handle(async () => { + const { abortController } = store.getState(); + store.setState({ status: StatusEnum.END, thinking: false }); + + showWindow(); + + abortController?.abort(); + + closeScreenMarker(); + }), + setInstructions: t.procedure + .input<{ instructions: string }>() + .handle(async ({ input }) => { + store.setState({ instructions: input.instructions }); + }), + setMessages: t.procedure + .input<{ messages: Conversation[] }>() + .handle(async ({ input }) => { + store.setState({ messages: input.messages }); + }), + clearHistory: t.procedure.input().handle(async () => { + store.setState({ + status: StatusEnum.END, + messages: [], + thinking: false, + errorMsg: null, + }); + }), +}); diff --git a/src/main/ipcRoutes/index.ts b/src/main/ipcRoutes/index.ts new file mode 100644 index 000000000..6f24eefaa --- /dev/null +++ b/src/main/ipcRoutes/index.ts @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { initIpc, createServer } from '@ui-tars/electron-ipc/main'; +import { screenRoute } from './screen'; +import { windowRoute } from './window'; +import { permissionRoute } from './permission'; +import { agentRoute } from './agent'; + +const t = initIpc.create(); + +export const ipcRoutes = t.router({ + ...screenRoute, + ...windowRoute, + ...permissionRoute, + ...agentRoute, +}); +export type Router = typeof ipcRoutes; + +export const server = createServer(ipcRoutes); diff --git a/src/main/ipcRoutes/permission.ts b/src/main/ipcRoutes/permission.ts new file mode 100644 index 000000000..f3257f22a --- /dev/null +++ b/src/main/ipcRoutes/permission.ts @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { initIpc } from '@ui-tars/electron-ipc/main'; +import * as env from '@main/env'; +import { store } from '@main/store/create'; +const t = initIpc.create(); + +export const permissionRoute = t.router({ + getEnsurePermissions: t.procedure.input().handle(async () => { + if (env.isMacOS) { + const { ensurePermissions } = await import( + '@main/utils/systemPermissions' + ); + store.setState({ ensurePermissions: ensurePermissions() }); + } else { + store.setState({ + ensurePermissions: { screenCapture: true, accessibility: true }, + }); + } + console.log( + '[getEnsurePermissions] ensurePermissions', + store.getState().ensurePermissions, + ); + return store.getState().ensurePermissions; + }), +}); diff --git a/src/main/ipcRoutes/screen.ts b/src/main/ipcRoutes/screen.ts new file mode 100644 index 000000000..076929c60 --- /dev/null +++ b/src/main/ipcRoutes/screen.ts @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { screen } from 'electron'; +import { initIpc } from '@ui-tars/electron-ipc/main'; + +const t = initIpc.create(); + +export const screenRoute = t.router({ + getScreenSize: t.procedure.input().handle(async () => { + const primaryDisplay = screen.getPrimaryDisplay(); + return { + screenWidth: primaryDisplay.size.width, + screenHeight: primaryDisplay.size.height, + }; + }), +}); diff --git a/src/main/ipcRoutes/window.ts b/src/main/ipcRoutes/window.ts new file mode 100644 index 000000000..2d7a1ff00 --- /dev/null +++ b/src/main/ipcRoutes/window.ts @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { initIpc } from '@ui-tars/electron-ipc/main'; +import { + LauncherWindow, + closeSettingsWindow, + createSettingsWindow, +} from '@main/window/index'; + +const t = initIpc.create(); + +export const windowRoute = t.router({ + openSettingsWindow: t.procedure.input().handle(async () => { + createSettingsWindow(); + }), + closeSettingsWindow: t.procedure.input().handle(async () => { + closeSettingsWindow(); + }), + openLauncher: t.procedure.input().handle(async () => { + LauncherWindow.getInstance().show(); + }), + closeLauncher: t.procedure.input().handle(async () => { + LauncherWindow.getInstance().blur(); + LauncherWindow.getInstance().hide(); + }), +}); diff --git a/src/main/main.ts b/src/main/main.ts index 890946d3c..98e43bfa8 100644 --- a/src/main/main.ts +++ b/src/main/main.ts @@ -5,16 +5,17 @@ import { electronApp, optimizer } from '@electron-toolkit/utils'; import { app, + BrowserView, + BrowserWindow, desktopCapturer, globalShortcut, ipcMain, - screen, session, + WebContentsView, } from 'electron'; import squirrelStartup from 'electron-squirrel-startup'; import ElectronStore from 'electron-store'; import { updateElectronApp, UpdateSourceType } from 'update-electron-app'; -import { mainZustandBridge } from 'zutron/main'; import * as env from '@main/env'; import { logger } from '@main/logger'; @@ -23,10 +24,15 @@ import { createMainWindow, createSettingsWindow, } from '@main/window/index'; +import { registerIpcMain } from '@ui-tars/electron-ipc/main'; +import { ipcRoutes } from './ipcRoutes'; import { UTIOService } from './services/utio'; import { store } from './store/create'; +import { SettingStore } from './store/setting'; import { createTray } from './tray'; +import { registerSettingsHandlers } from './services/settings'; +import { sanitizeState } from './utils/sanitizeState'; const { isProd } = env; @@ -53,19 +59,13 @@ class AppUpdater { repo: 'bytedance/UI-TARS-desktop', host: 'https://update.electronjs.org', }, - updateInterval: '10 minutes', + updateInterval: '20 minutes', logger, }); } } } -ipcMain.on('ipc-example', async (event, arg) => { - const msgTemplate = (pingPong: string) => `IPC test: ${pingPong}`; - console.log(msgTemplate(arg)); - event.reply('ipc-example', msgTemplate('pong')); -}); - if (isProd) { import('source-map-support').then(({ default: sourceMapSupport }) => { sourceMapSupport.install(); @@ -103,7 +103,7 @@ const initializeApp = async () => { logger.info('ensureScreenCapturePermission', ensureScreenCapturePermission); } - // if (isDev) { + // if (env.isDev) { await loadDevDebugTools(); // } @@ -121,10 +121,8 @@ const initializeApp = async () => { }); logger.info('createMainWindow'); - const mainWindow = createMainWindow(); - const settingsWindow = createSettingsWindow({ - showInBackground: true, - }); + let mainWindow = createMainWindow(); + const settingsWindow = createSettingsWindow({ showInBackground: true }); // Remove this if your app does not use auto updates // eslint-disable-next-line @@ -146,41 +144,97 @@ const initializeApp = async () => { logger.info('mainZustandBridge'); - const { unsubscribe } = mainZustandBridge( - ipcMain, - store, - [ - mainWindow, - settingsWindow, - ...(launcherWindowIns.getWindow() - ? [launcherWindowIns.getWindow()!] - : []), - ], - { - // reducer: rootReducer, - }, - ); + const { unsubscribe } = registerIPCHandlers([ + mainWindow, + settingsWindow, + ...(launcherWindowIns.getWindow() ? [launcherWindowIns.getWindow()!] : []), + ]); + + app.on('window-all-closed', () => { + logger.info('window-all-closed'); + if (!env.isMacOS) { + app.quit(); + } + }); + + app.on('before-quit', () => { + logger.info('before-quit'); + const windows = BrowserWindow.getAllWindows(); + windows.forEach((window) => window.destroy()); + }); - app.on('quit', unsubscribe); + app.on('quit', () => { + logger.info('app quit'); + unsubscribe(); + }); + + app.on('activate', () => { + logger.info('app activate'); + if (!mainWindow || mainWindow.isDestroyed()) { + mainWindow = createMainWindow(); + } else { + if (!mainWindow.isVisible()) { + mainWindow.show(); + } + mainWindow.focus(); + } + }); logger.info('initializeApp end'); + + // Check and update remote presets + const settings = SettingStore.getStore(); + if ( + settings.presetSource?.type === 'remote' && + settings.presetSource.autoUpdate + ) { + try { + await SettingStore.importPresetFromUrl(settings.presetSource.url!, true); + } catch (error) { + logger.error('Failed to update preset:', error); + } + } }; /** * Register IPC handlers */ -const registerIPCHandlers = () => { +const registerIPCHandlers = ( + wrappers: (BrowserWindow | WebContentsView | BrowserView)[], +) => { + ipcMain.handle('getState', () => { + const state = store.getState(); + return sanitizeState(state); + }); + + // only send state to the wrappers that are not destroyed + ipcMain.on('subscribe', (state: unknown) => { + for (const wrapper of wrappers) { + const webContents = wrapper?.webContents; + if (webContents?.isDestroyed()) { + break; + } + webContents?.send( + 'subscribe', + sanitizeState(state as Record), + ); + } + }); + + const unsubscribe = store.subscribe((state: unknown) => + ipcMain.emit('subscribe', state), + ); + + // TODO: move to ipc routes ipcMain.handle('utio:shareReport', async (_, params) => { await UTIOService.getInstance().shareReport(params); }); - ipcMain.handle('get-screen-size', () => { - const primaryDisplay = screen.getPrimaryDisplay(); - return { - screenWidth: primaryDisplay.size.width, - screenHeight: primaryDisplay.size.height, - }; - }); + registerSettingsHandlers(); + // register ipc services routes + registerIpcMain(ipcRoutes); + + return { unsubscribe }; }; /** @@ -209,8 +263,6 @@ app await initializeApp(); - registerIPCHandlers(); - logger.info('app.whenReady end'); }) .catch(console.log); diff --git a/src/main/store/runAgent.ts b/src/main/services/runAgent.ts similarity index 90% rename from src/main/store/runAgent.ts rename to src/main/services/runAgent.ts index 6e84c0d08..e52a262e8 100644 --- a/src/main/store/runAgent.ts +++ b/src/main/services/runAgent.ts @@ -20,8 +20,8 @@ import { showPredictionMarker, showScreenWaterFlow, } from '@main/window/ScreenMarker'; -import { SettingStore } from './setting'; -import { AppState } from './types'; +import { SettingStore } from '@main/store/setting'; +import { AppState } from '@main/store/types'; export const runAgent = async ( setState: (state: AppState) => void, @@ -29,12 +29,12 @@ export const runAgent = async ( ) => { logger.info('runAgent'); const settings = SettingStore.getStore(); - const { instructions, abortController, getSetting } = getState(); + const { instructions, abortController } = getState(); const device = new Desktop(); const vlm = new UITARS(); assert(instructions, 'instructions is required'); - const language = getSetting('language') || 'en'; + const language = settings.language ?? 'en'; const agent = new ComputerUseAgent({ systemPrompt: getSystemPrompt(language), @@ -87,9 +87,7 @@ export const runAgent = async ( await hideWindowBlock(async () => { await agent - .runAgentLoop({ - loopWaitTime: () => 800, - }) + .runAgentLoop({ loopWaitTime: () => 800 }) .catch((e) => { logger.error('[runAgentLoop error]', e); setState({ diff --git a/src/main/services/settings.ts b/src/main/services/settings.ts new file mode 100644 index 000000000..6d3a8a6a8 --- /dev/null +++ b/src/main/services/settings.ts @@ -0,0 +1,95 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { ipcMain } from 'electron'; +import { SettingStore } from '../store/setting'; +import { logger } from '../logger'; +import { LocalStore } from '@main/store/validate'; + +export function registerSettingsHandlers() { + /** + * Get setting + */ + ipcMain.handle('setting:get', () => { + return SettingStore.getStore(); + }); + + /** + * Clear setting + */ + ipcMain.handle('setting:clear', () => { + SettingStore.clear(); + }); + + /** + * Reset setting preset + */ + ipcMain.handle('setting:resetPreset', () => { + SettingStore.getInstance().delete('presetSource'); + }); + + /** + * Update setting + */ + ipcMain.handle('setting:update', async (_, settings: LocalStore) => { + SettingStore.setStore(settings); + }); + + /** + * Import setting preset from text + */ + ipcMain.handle('setting:importPresetFromText', async (_, yamlContent) => { + try { + const newSettings = await SettingStore.importPresetFromText(yamlContent); + SettingStore.setStore(newSettings); + } catch (error) { + logger.error('Failed to import preset:', error); + throw error; + } + }); + + /** + * Import setting preset from url + */ + ipcMain.handle('setting:importPresetFromUrl', async (_, url, autoUpdate) => { + try { + const newSettings = await SettingStore.fetchPresetFromUrl(url); + SettingStore.setStore({ + ...newSettings, + presetSource: { + type: 'remote', + url: url, + autoUpdate: autoUpdate, + lastUpdated: Date.now(), + }, + }); + } catch (error) { + logger.error('Failed to import preset from URL:', error); + throw error; + } + }); + + /** + * Update setting preset from url + */ + ipcMain.handle('setting:updatePresetFromRemote', async () => { + const settings = SettingStore.getStore(); + if (settings.presetSource?.type === 'remote' && settings.presetSource.url) { + const newSettings = await SettingStore.fetchPresetFromUrl( + settings.presetSource.url, + ); + SettingStore.setStore({ + ...newSettings, + presetSource: { + type: 'remote', + url: settings.presetSource.url, + autoUpdate: settings.presetSource.autoUpdate, + lastUpdated: Date.now(), + }, + }); + } else { + throw new Error('No remote preset configured'); + } + }); +} diff --git a/src/main/services/utio.ts b/src/main/services/utio.ts index 5676ae96f..c35d14f7b 100644 --- a/src/main/services/utio.ts +++ b/src/main/services/utio.ts @@ -1,3 +1,7 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ import os from 'node:os'; import { screen } from 'electron'; @@ -5,7 +9,7 @@ import { screen } from 'electron'; import { UTIO, UTIOPayload } from '@ui-tars/utio'; import { logger } from '../logger'; -import { store } from '../store/create'; +import { SettingStore } from '@main/store/setting'; export class UTIOService { private static instance: UTIOService; @@ -19,7 +23,7 @@ export class UTIOService { } private getEndpoint(): string | undefined { - const endpoint = store.getState().getSetting('utioBaseUrl'); + const endpoint = SettingStore.getStore().utioBaseUrl; logger.debug('[UTIO] endpoint:', endpoint); return endpoint; } diff --git a/src/main/store/create.ts b/src/main/store/create.ts index e22ab7bfd..1bd163078 100644 --- a/src/main/store/create.ts +++ b/src/main/store/create.ts @@ -3,120 +3,23 @@ * SPDX-License-Identifier: Apache-2.0 */ import { createStore } from 'zustand/vanilla'; -import { createDispatch } from 'zutron/main'; -import { StatusEnum, Conversation } from '@ui-tars/shared/types'; +import { StatusEnum } from '@ui-tars/shared/types'; -import * as env from '@main/env'; -import { - LauncherWindow, - closeSettingsWindow, - createSettingsWindow, - showWindow, -} from '@main/window/index'; - -import { closeScreenMarker } from '@main/window/ScreenMarker'; -import { runAgent } from './runAgent'; -import { SettingStore } from './setting'; -import { AppState } from './types'; +import type { AppState } from './types'; export const store = createStore( - (set, get) => + () => ({ theme: 'light', restUserData: null, instructions: '', status: StatusEnum.INIT, messages: [], - settings: null, errorMsg: null, - getSetting: (key) => SettingStore.get(key), ensurePermissions: {}, abortController: null, thinking: false, - - // dispatch for renderer - OPEN_SETTINGS_WINDOW: () => { - createSettingsWindow(); - }, - - CLOSE_SETTINGS_WINDOW: () => { - closeSettingsWindow(); - }, - - OPEN_LAUNCHER: () => { - LauncherWindow.getInstance().show(); - }, - - CLOSE_LAUNCHER: () => { - LauncherWindow.getInstance().blur(); - LauncherWindow.getInstance().hide(); - }, - - GET_SETTINGS: () => { - const settings = SettingStore.getStore(); - set({ settings }); - }, - - SET_SETTINGS: (state) => { - SettingStore.setStore(state); - set({ settings: SettingStore.getStore() }); - }, - - GET_ENSURE_PERMISSIONS: async () => { - if (env.isMacOS) { - const { ensurePermissions } = await import( - '@main/utils/systemPermissions' - ); - set({ ensurePermissions: ensurePermissions() }); - } else { - set({ - ensurePermissions: { - screenCapture: true, - accessibility: true, - }, - }); - } - }, - - RUN_AGENT: async () => { - if (get().thinking) { - return; - } - - set({ - abortController: new AbortController(), - thinking: true, - errorMsg: null, - }); - - await runAgent(set, get); - - set({ thinking: false }); - }, - STOP_RUN: () => { - set({ status: StatusEnum.END, thinking: false }); - showWindow(); - get().abortController?.abort(); - - closeScreenMarker(); - }, - SET_INSTRUCTIONS: (instructions) => { - set({ - instructions, - }); - }, - SET_MESSAGES: (messages: Conversation[]) => set({ messages }), - CLEAR_HISTORY: () => { - set({ - status: StatusEnum.END, - messages: [], - thinking: false, - errorMsg: null, - }); - }, }) satisfies AppState, ); - -export const dispatch = createDispatch(store); diff --git a/src/main/store/setting.ts b/src/main/store/setting.ts index 2ddd0f854..01f1f4872 100644 --- a/src/main/store/setting.ts +++ b/src/main/store/setting.ts @@ -3,47 +3,136 @@ * SPDX-License-Identifier: Apache-2.0 */ import ElectronStore from 'electron-store'; +import yaml from 'js-yaml'; import * as env from '@main/env'; +import { logger } from '@main/logger'; import { LocalStore, VlmProvider } from './types'; +import { validatePreset } from './validate'; +import { BrowserWindow } from 'electron'; + +export const DEFAULT_SETTING: LocalStore = { + language: 'en', + vlmProvider: (env.vlmProvider as VlmProvider) || VlmProvider.Huggingface, + vlmBaseUrl: env.vlmBaseUrl || '', + vlmApiKey: env.vlmApiKey || '', + vlmModelName: env.vlmModelName || '', + reportStorageBaseUrl: '', + utioBaseUrl: '', +}; export class SettingStore { - private static instance = new ElectronStore({ - name: 'ui_tars.setting', - defaults: { - language: 'en', - vlmProvider: (env.vlmProvider as VlmProvider) || VlmProvider.Huggingface, - vlmBaseUrl: env.vlmBaseUrl || '', - vlmApiKey: env.vlmApiKey || '', - vlmModelName: env.vlmModelName || '', - }, - }); + private static instance: ElectronStore; + + public static getInstance(): ElectronStore { + if (!SettingStore.instance) { + SettingStore.instance = new ElectronStore({ + name: 'ui_tars.setting', + defaults: DEFAULT_SETTING, + }); + + SettingStore.instance.onDidAnyChange((newValue, oldValue) => { + logger.log( + `SettingStore: ${JSON.stringify(oldValue)} changed to ${JSON.stringify(newValue)}`, + ); + // Notify that value updated + BrowserWindow.getAllWindows().forEach((win) => { + win.webContents.send('setting-updated', newValue); + }); + }); + } + return SettingStore.instance; + } public static set( key: K, value: LocalStore[K], ): void { - SettingStore.instance.set(key, value); + SettingStore.getInstance().set(key, value); } public static setStore(state: LocalStore): void { - SettingStore.instance.set(state); + SettingStore.getInstance().set(state); } public static get(key: K): LocalStore[K] { - return SettingStore.instance.get(key); + return SettingStore.getInstance().get(key); + } + + public static remove(key: K): void { + SettingStore.getInstance().delete(key); } public static getStore(): LocalStore { - return SettingStore.instance.store; + return SettingStore.getInstance().store; } public static clear(): void { - SettingStore.instance.clear(); + SettingStore.getInstance().set(DEFAULT_SETTING); } public static openInEditor(): void { - SettingStore.instance.openInEditor(); + SettingStore.getInstance().openInEditor(); + } + + public static async importPresetFromUrl( + url: string, + autoUpdate = false, + ): Promise { + try { + const response = await fetch(url); + if (!response.ok) { + throw new Error(`Failed to fetch preset: ${response.status}`); + } + + const yamlText = await response.text(); + const preset = yaml.load(yamlText); + const validatedPreset = validatePreset(preset); + + SettingStore.setStore({ + ...validatedPreset, + presetSource: { + type: 'remote', + url, + autoUpdate, + lastUpdated: Date.now(), + }, + }); + } catch (error) { + logger.error(error); + throw new Error( + `Failed to import preset: ${error instanceof Error ? error.message : error}`, + ); + } + } + + public static async importPresetFromText( + yamlContent: string, + ): Promise { + try { + const settings = await parsePresetYaml(yamlContent); + return settings; + } catch (error) { + logger.error('Failed to import preset from text:', error); + throw error; + } } + + public static async fetchPresetFromUrl(url: string): Promise { + try { + const response = await fetch(url); + const yamlContent = await response.text(); + return await this.importPresetFromText(yamlContent); + } catch (error) { + logger.error('Failed to fetch preset from URL:', error); + throw error; + } + } +} + +async function parsePresetYaml(yamlContent: string): Promise { + const preset = yaml.load(yamlContent); + const validatedPreset = validatePreset(preset); + return validatedPreset; } diff --git a/src/main/store/types.ts b/src/main/store/types.ts index dd5d4fffa..52f0f6714 100644 --- a/src/main/store/types.ts +++ b/src/main/store/types.ts @@ -2,9 +2,9 @@ * Copyright (c) 2025 Bytedance, Inc. and its affiliates. * SPDX-License-Identifier: Apache-2.0 */ -import { ComputerUseUserData, Conversation } from '@ui-tars/shared/types'; +import { ComputerUseUserData } from '@ui-tars/shared/types'; -import { SettingStore } from './setting'; +import { LocalStore, PresetSource } from './validate'; export type NextAction = | { type: 'key'; text: string } @@ -22,33 +22,14 @@ export type NextAction = export type AppState = { theme: 'dark' | 'light'; - ensurePermissions: { - screenCapture?: boolean; - accessibility?: boolean; - }; + ensurePermissions: { screenCapture?: boolean; accessibility?: boolean }; instructions: string | null; restUserData: Omit | null; status: ComputerUseUserData['status']; errorMsg: string | null; messages: ComputerUseUserData['conversations']; - settings: Partial | null; - getSetting: typeof SettingStore.get; abortController: AbortController | null; thinking: boolean; - - // === dispatch === - OPEN_SETTINGS_WINDOW: () => void; - CLOSE_SETTINGS_WINDOW: () => void; - OPEN_LAUNCHER: () => void; - CLOSE_LAUNCHER: () => void; - SET_SETTINGS: typeof SettingStore.setStore; - GET_SETTINGS: () => void; - GET_ENSURE_PERMISSIONS: () => void; - RUN_AGENT: () => void; - STOP_RUN: () => void; - SET_INSTRUCTIONS: (instructions: string) => void; - SET_MESSAGES: (messages: Conversation[]) => void; - CLEAR_HISTORY: () => void; }; export enum VlmProvider { @@ -57,13 +38,4 @@ export enum VlmProvider { vLLM = 'vLLM', } -export type LocalStore = { - language: 'zh' | 'en'; - vlmProvider: VlmProvider; - vlmBaseUrl: string; - vlmApiKey: string; - vlmModelName: string; - screenshotScale?: number; // 0.1 ~ 1.0 - reportStorageBaseUrl?: string; - utioBaseUrl?: string; -}; +export type { PresetSource, LocalStore }; diff --git a/src/main/store/validate.ts b/src/main/store/validate.ts new file mode 100644 index 000000000..6bec227ed --- /dev/null +++ b/src/main/store/validate.ts @@ -0,0 +1,36 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { z } from 'zod'; + +import { VlmProvider } from './types'; + +const PresetSourceSchema = z.object({ + type: z.enum(['local', 'remote']), + url: z.string().url().optional(), + autoUpdate: z.boolean().optional(), + lastUpdated: z.number().optional(), +}); + +export const PresetSchema = z.object({ + // Required fields + vlmProvider: z.nativeEnum(VlmProvider), + vlmBaseUrl: z.string().url(), + vlmApiKey: z.string().min(1), + vlmModelName: z.string().min(1), + + // Optional fields + language: z.enum(['zh', 'en']).optional(), + screenshotScale: z.number().min(0.1).max(1).optional(), + reportStorageBaseUrl: z.string().url().optional(), + utioBaseUrl: z.string().url().optional(), + presetSource: PresetSourceSchema.optional(), +}); + +export type PresetSource = z.infer; +export type LocalStore = z.infer; + +export const validatePreset = (data: unknown): LocalStore => { + return PresetSchema.parse(data); +}; diff --git a/src/main/tray.ts b/src/main/tray.ts index 42ded0d6c..9b03c9503 100644 --- a/src/main/tray.ts +++ b/src/main/tray.ts @@ -11,6 +11,7 @@ import { exportLogs } from '@main/logger'; import { createSettingsWindow, showWindow } from '@main/window'; import { store } from './store/create'; +import { server } from '@main/ipcRoutes'; export let tray: Tray | null = null; @@ -29,8 +30,8 @@ export async function createTray() { tray?.setImage(normalIcon); // 点击处理函数 - const handleTrayClick = () => { - store.getState().STOP_RUN(); + const handleTrayClick = async () => { + await server.stopRun(); }; // 监听状态变化 diff --git a/src/main/utils/image.ts b/src/main/utils/image.ts index 670d771d4..0d8e4ab96 100644 --- a/src/main/utils/image.ts +++ b/src/main/utils/image.ts @@ -142,14 +142,6 @@ export async function preprocessResizeImage( const currentPixels = metadata.width * metadata.height; if (currentPixels > maxPixels) { const resizeFactor = Math.sqrt(maxPixels / currentPixels); - logger.debug( - '[resizeFactor] maxPixels', - maxPixels, - 'currentPixels', - currentPixels, - 'resizeFactor', - resizeFactor, - ); const newWidth = Math.floor(metadata.width * resizeFactor); const newHeight = Math.floor(metadata.height * resizeFactor); diff --git a/src/main/utils/sanitizeState.ts b/src/main/utils/sanitizeState.ts new file mode 100644 index 000000000..b0a77937d --- /dev/null +++ b/src/main/utils/sanitizeState.ts @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ + +export function sanitizeState(state: Record) { + const safeState: Record = {}; + + for (const statePropName in state) { + const stateProp = state[statePropName]; + if (typeof stateProp !== 'function') { + safeState[statePropName] = stateProp; + } + } + + return safeState; +} diff --git a/src/main/window/ScreenMarker.ts b/src/main/window/ScreenMarker.ts index 1b21b7b47..7e3ceb09a 100644 --- a/src/main/window/ScreenMarker.ts +++ b/src/main/window/ScreenMarker.ts @@ -14,8 +14,8 @@ import { PredictionParsed, Conversation } from '@ui-tars/shared/types'; import * as env from '@main/env'; import { logger } from '@main/logger'; -import { store } from '@main/store/create'; import { setOfMarksOverlays } from '@main/shared/setOfMarks'; +import { server } from '@main/ipcRoutes'; class ScreenMarker { private static instance: ScreenMarker; @@ -54,10 +54,7 @@ class ScreenMarker { thickFrame: false, paintWhenInitiallyHidden: true, type: 'panel', - webPreferences: { - nodeIntegration: true, - contextIsolation: false, - }, + webPreferences: { nodeIntegration: true, contextIsolation: false }, }); this.screenWaterFlow.setFocusable(false); @@ -155,10 +152,7 @@ class ScreenMarker { skipTaskbar: true, focusable: false, type: 'toolbar', - webPreferences: { - nodeIntegration: true, - contextIsolation: false, - }, + webPreferences: { nodeIntegration: true, contextIsolation: false }, }); this.pauseButton.setFocusable(false); @@ -197,8 +191,8 @@ class ScreenMarker { `); // 监听来自渲染进程的点击事件 - ipcMain.once('pause-button-clicked', () => { - store.getState().STOP_RUN(); + ipcMain.once('pause-button-clicked', async () => { + await server.stopRun(); }); } @@ -233,10 +227,7 @@ class ScreenMarker { thickFrame: false, paintWhenInitiallyHidden: true, type: 'panel', - webPreferences: { - nodeIntegration: true, - contextIsolation: false, - }, + webPreferences: { nodeIntegration: true, contextIsolation: false }, ...(overlay.xPos && overlay.yPos && { x: overlay.xPos + overlay.offsetX, diff --git a/src/main/window/index.ts b/src/main/window/index.ts index c9e28e50d..8ee3c1cff 100644 --- a/src/main/window/index.ts +++ b/src/main/window/index.ts @@ -2,9 +2,10 @@ * Copyright (c) 2025 Bytedance, Inc. and its affiliates. * SPDX-License-Identifier: Apache-2.0 */ -import { BrowserWindow, app, ipcMain, screen } from 'electron'; +import { BrowserWindow, screen } from 'electron'; import { logger } from '@main/logger'; +import * as env from '@main/env'; import { createWindow } from './createWindow'; @@ -25,10 +26,6 @@ export function show() { } export function createMainWindow() { - ipcMain.removeHandler('minimize-window'); - ipcMain.removeHandler('maximize-window'); - ipcMain.removeHandler('close-window'); - mainWindow = createWindow({ routerPath: '/', width: 430, @@ -36,50 +33,21 @@ export function createMainWindow() { alwaysOnTop: false, }); - ipcMain.handle('minimize-window', () => { - mainWindow?.minimize(); - }); - - ipcMain.handle('maximize-window', () => { - if (mainWindow?.isMaximized()) { - mainWindow?.unmaximize(); + mainWindow.on('close', (event) => { + logger.info('mainWindow closed'); + if (env.isMacOS) { + event.preventDefault(); + mainWindow?.hide(); } else { - mainWindow?.maximize(); - } - }); - - ipcMain.handle('close-window', async () => { - if (mainWindow) { - mainWindow.close(); + mainWindow = null; } }); - app.on('activate', () => { - const windows = BrowserWindow.getAllWindows(); - const existingWindow = windows.find((win) => !win.isDestroyed()); - - if (!existingWindow) { - createMainWindow(); - } else { - if (!existingWindow.isVisible()) { - existingWindow.show(); - } - existingWindow.focus(); - } - }); - - mainWindow.on('closed', () => { - mainWindow = null; - }); - return mainWindow; } export function createSettingsWindow( - config: { - childPath?: string; - showInBackground?: boolean; - } = { + config: { childPath?: string; showInBackground?: boolean } = { childPath: '', showInBackground: false, }, @@ -114,8 +82,24 @@ export function createSettingsWindow( showInBackground, }); - settingsWindow.on('closed', () => { - settingsWindow = null; + settingsWindow.on('close', (event) => { + if (env.isMacOS) { + event.preventDefault(); + settingsWindow?.hide(); + } else { + settingsWindow = null; + } + + // if mainWindow is not visible, show it + if (mainWindow?.isMinimized()) { + mainWindow?.restore(); + } + mainWindow?.setAlwaysOnTop(true); + mainWindow?.show(); + mainWindow?.focus(); + setTimeout(() => { + mainWindow?.setAlwaysOnTop(false); + }, 100); }); return settingsWindow; @@ -124,7 +108,6 @@ export function createSettingsWindow( export async function closeSettingsWindow() { if (settingsWindow) { settingsWindow.close(); - settingsWindow = null; } } @@ -162,7 +145,9 @@ export async function hideWindowBlock( return result; } finally { mainWindow?.setContentProtection(false); - mainWindow?.setAlwaysOnTop(false); + setTimeout(() => { + mainWindow?.setAlwaysOnTop(false); + }, 100); // restore mainWindow if (mainWindow && originalBounds) { mainWindow?.setBounds(originalBounds); diff --git a/src/preload/index.ts b/src/preload/index.ts index a28e7bf4c..facf059d5 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -3,13 +3,13 @@ * SPDX-License-Identifier: Apache-2.0 */ import { IpcRendererEvent, contextBridge, ipcRenderer } from 'electron'; -import { preloadZustandBridge } from 'zutron/preload'; +// import { preloadZustandBridge } from 'zutron/preload'; import type { UTIOPayload } from '@ui-tars/utio'; -import type { AppState } from '@main/store/types'; +import type { AppState, LocalStore } from '@main/store/types'; -export type Channels = 'ipc-example'; +export type Channels = ''; const electronHandler = { ipcRenderer: { @@ -31,24 +31,42 @@ const electronHandler = { ipcRenderer.once(channel, (_event, ...args) => func(...args)); }, }, - // Add window controls - windowControls: { - minimize: () => ipcRenderer.invoke('minimize-window'), - maximize: () => ipcRenderer.invoke('maximize-window'), - close: () => ipcRenderer.invoke('close-window'), - }, utio: { shareReport: (params: UTIOPayload<'shareReport'>) => ipcRenderer.invoke('utio:shareReport', params), }, + setting: { + getSetting: () => ipcRenderer.invoke('setting:get'), + clearSetting: () => ipcRenderer.invoke('setting:clear'), + updateSetting: (setting: Partial) => + ipcRenderer.invoke('setting:update', setting), + importPresetFromText: (yamlContent: string) => + ipcRenderer.invoke('setting:importPresetFromText', yamlContent), + importPresetFromUrl: (url: string, autoUpdate: boolean) => + ipcRenderer.invoke('setting:importPresetFromUrl', url, autoUpdate), + updatePresetFromRemote: () => + ipcRenderer.invoke('setting:updatePresetFromRemote'), + resetPreset: () => ipcRenderer.invoke('setting:resetPreset'), + onUpdate: (callback: (setting: LocalStore) => void) => { + ipcRenderer.on('setting-updated', (_, state) => callback(state)); + }, + }, }; -// Initialize Zutron bridge -const { handlers } = preloadZustandBridge(ipcRenderer); +// Initialize zustand bridge +const zustandBridge = { + getState: () => ipcRenderer.invoke('getState'), + subscribe: (callback) => { + const subscription = (_: unknown, state: AppState) => callback(state); + ipcRenderer.on('subscribe', subscription); + + return () => ipcRenderer.off('subscribe', subscription); + }, +}; // Expose both electron and zutron handlers contextBridge.exposeInMainWorld('electron', electronHandler); -contextBridge.exposeInMainWorld('zutron', handlers); +contextBridge.exposeInMainWorld('zustandBridge', zustandBridge); contextBridge.exposeInMainWorld('platform', process.platform); export type ElectronHandler = typeof electronHandler; diff --git a/src/renderer/index.html b/src/renderer/index.html index 2824527bb..6b1415ba2 100644 --- a/src/renderer/index.html +++ b/src/renderer/index.html @@ -17,6 +17,7 @@ .draggable-area { user-select: none; -webkit-app-region: drag; + cursor: grab; } .non-draggable-area { @@ -40,10 +41,38 @@ body { overflow: hidden; } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + + .loading-spinner { + display: inline-block; + width: 30px; + height: 30px; + border: 3px solid rgba(0, 0, 0, 0.1); + border-radius: 50%; + border-top-color: #767676; + animation: spin 1s ease-in-out infinite; + margin: 20px; + } + + .loading-container { + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + } + -
    +
    +
    +
    +
    +
    diff --git a/src/renderer/src/api.ts b/src/renderer/src/api.ts new file mode 100644 index 000000000..70a4c6b96 --- /dev/null +++ b/src/renderer/src/api.ts @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { createClient } from '@ui-tars/electron-ipc/renderer'; +import type { Router } from '@main/ipcRoutes'; + +export const api = createClient({ + ipcInvoke: window.electron.ipcRenderer.invoke, +}); diff --git a/src/renderer/src/components/ChatInput/index.tsx b/src/renderer/src/components/ChatInput/index.tsx index f6668894e..884cf91fc 100644 --- a/src/renderer/src/components/ChatInput/index.tsx +++ b/src/renderer/src/components/ChatInput/index.tsx @@ -23,7 +23,6 @@ import { FaPaperPlane, FaStop, FaTrash } from 'react-icons/fa'; import { HiChevronDown } from 'react-icons/hi'; import { FaRegShareFromSquare } from 'react-icons/fa6'; import { IoPlay } from 'react-icons/io5'; -import { useDispatch } from 'zutron'; import { IMAGE_PLACEHOLDER } from '@ui-tars/shared/constants'; import { StatusEnum, ComputerUseUserData } from '@ui-tars/shared/types'; @@ -35,6 +34,8 @@ import { uploadReport } from '@renderer/utils/share'; import { isCallUserMessage } from '@renderer/utils/message'; import { useScreenRecord } from '@renderer/hooks/useScreenRecord'; +import { useSetting } from '@renderer/hooks/useSetting'; +import { api } from '@renderer/api'; const ChatInput = forwardRef((_props, _ref) => { const { @@ -42,12 +43,10 @@ const ChatInput = forwardRef((_props, _ref) => { instructions: savedInstructions, messages, restUserData, - settings, } = useStore(); + const { settings } = useSetting(); - const [localInstructions, setLocalInstructions] = React.useState( - savedInstructions ?? '', - ); + const [localInstructions, setLocalInstructions] = React.useState(''); const toast = useToast(); const { run } = useRunAgent(); @@ -67,7 +66,7 @@ const ChatInput = forwardRef((_props, _ref) => { const textareaRef = useRef(null); const running = status === 'running'; const maxLoop = status === 'max_loop'; - const dispatch = useDispatch(window.zutron); + // const dispatch = useDispatch(window.zutron); const startRun = () => { startRecording().catch((e) => { @@ -178,7 +177,7 @@ const ChatInput = forwardRef((_props, _ref) => { } as ComputerUseUserData; const htmlContent = reportHTMLContent(html, [userData]); - + let uploadSuccess = false; let reportUrl: string | undefined; if (settings?.reportStorageBaseUrl) { @@ -188,6 +187,7 @@ const ChatInput = forwardRef((_props, _ref) => { settings.reportStorageBaseUrl, ); reportUrl = url; + uploadSuccess = true; await navigator.clipboard.writeText(url); toast({ title: 'Report link copied to clipboard!', @@ -198,7 +198,7 @@ const ChatInput = forwardRef((_props, _ref) => { variant: 'ui-tars-success', }); } catch (error) { - console.error('Share failed:', error); + console.error('Upload report failed:', error); toast({ title: 'Failed to upload report', description: @@ -211,7 +211,7 @@ const ChatInput = forwardRef((_props, _ref) => { } } - // Send UTIO data through IPC + // Send UTIO data through IPC if configured if (settings?.utioBaseUrl) { const lastScreenshot = messages .filter((m) => m.screenshotBase64) @@ -225,21 +225,24 @@ const ChatInput = forwardRef((_props, _ref) => { }); } - // If shareEndpoint is not configured or the upload fails, fall back to downloading the file - const blob = new Blob([htmlContent], { type: 'text/html' }); - const url = window.URL.createObjectURL(blob); - const a = document.createElement('a'); - a.href = url; - a.download = `report-${Date.now()}.html`; - document.body.appendChild(a); - a.click(); - document.body.removeChild(a); - window.URL.revokeObjectURL(url); + // Only fall back to file download if upload was not configured or failed + if (!settings?.reportStorageBaseUrl || !uploadSuccess) { + const blob = new Blob([htmlContent], { type: 'text/html' }); + const url = window.URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = `report-${Date.now()}.html`; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + window.URL.revokeObjectURL(url); + } } } catch (error) { console.error('Share failed:', error); toast({ title: 'Failed to generate share content', + description: error instanceof Error ? error.message : JSON.stringify(error), status: 'error', @@ -256,8 +259,12 @@ const ChatInput = forwardRef((_props, _ref) => { } }; - const handleClearMessages = () => { - dispatch('CLEAR_HISTORY'); + const handleClearMessages = async () => { + await api.clearHistory(); + }; + + const stopRun = async () => { + await api.stopRun(); }; return ( @@ -386,7 +393,7 @@ const ChatInput = forwardRef((_props, _ref) => { )} + + + + + + Preset URL + setRemoteUrl(e.target.value)} + placeholder="https://example.com/preset.yaml" + /> + + + Auto update on startup + setAutoUpdate(e.target.checked)} + /> + + + + + + + + + + + + + ); +} diff --git a/src/renderer/src/pages/settings/index.tsx b/src/renderer/src/pages/settings/index.tsx index c56300318..71af8e3f9 100644 --- a/src/renderer/src/pages/settings/index.tsx +++ b/src/renderer/src/pages/settings/index.tsx @@ -9,6 +9,7 @@ import { FormControl, FormLabel, HStack, + IconButton, Input, Select, Spinner, @@ -17,38 +18,39 @@ import { TabPanel, TabPanels, Tabs, + Text, + Tooltip, VStack, useToast, } from '@chakra-ui/react'; import { Field, Form, Formik } from 'formik'; -import { useLayoutEffect } from 'react'; -import { useDispatch } from 'zutron'; +import { useState } from 'react'; +import { IoAdd, IoInformationCircle, IoTrash } from 'react-icons/io5'; import { VlmProvider } from '@main/store/types'; -import { useStore } from '@renderer/hooks/useStore'; +import { PresetImport } from './PresetImport'; +import { useSetting } from '@renderer/hooks/useSetting'; +import { api } from '@renderer/api'; import { isWindows } from '@renderer/utils/os'; -const Settings = () => { - const { settings, thinking } = useStore(); +export default function Settings() { + const { settings, updateSetting, clearSetting, updatePresetFromRemote } = + useSetting(); + const [isPresetModalOpen, setPresetModalOpen] = useState(false); const toast = useToast(); - const dispatch = useDispatch(window.zutron); + // const dispatch = useDispatch(window.zutron); + const isRemoteAutoUpdatedPreset = + settings?.presetSource && + settings.presetSource.type === 'remote' && + settings.presetSource.autoUpdate; - useLayoutEffect(() => { - console.log('get_settings'); - dispatch({ - type: 'GET_SETTINGS', - payload: null, - }); - }, []); - - console.log('settings', settings, 'thinking', thinking); + console.log('settings', settings); const handleSubmit = async (values) => { - dispatch({ - type: 'SET_SETTINGS', - payload: values, - }); + updateSetting(values); + console.log('values', values); + // dispatch({ type: 'SET_SETTINGS', payload: values }); toast({ title: 'Settings saved successfully', @@ -57,206 +59,400 @@ const Settings = () => { duration: 1500, isClosable: true, variant: 'ui-tars-success', - // onCloseComplete: () => { - // dispatch({ - // type: 'CLOSE_SETTINGS_WINDOW', - // payload: null, - // }); - // }, }); }; - const handleCancel = () => { - dispatch({ - type: 'CLOSE_SETTINGS_WINDOW', - payload: null, - }); + const handleCancel = async () => { + await api.closeSettingsWindow(); }; console.log('initialValues', settings); + const handleUpdatePreset = async () => { + try { + await updatePresetFromRemote(); + toast({ + title: 'Preset updated successfully', + status: 'success', + duration: 2000, + }); + } catch (error) { + toast({ + title: 'Failed to update preset', + description: + error instanceof Error ? error.message : 'Unknown error occurred', + status: 'error', + duration: 3000, + }); + } + }; + + const handleClearSettings = async () => { + try { + await clearSetting(); + toast({ + title: 'All settings cleared successfully', + status: 'success', + duration: 2000, + }); + } catch (error) { + toast({ + title: 'Failed to clear settings', + description: + error instanceof Error ? error.message : 'Unknown error occurred', + status: 'error', + duration: 3000, + }); + } + }; return ( - - {!isWindows && ( - - )} - - - General - + <> + {!isWindows && } + + + + + General + + } + aria-label="Import Preset" + variant="ghost" + onClick={() => setPresetModalOpen(true)} + /> + + + - - - - {settings ? ( - - {({ values = {}, setFieldValue }) => ( -
    - - - Language - + + + + {isRemoteAutoUpdatedPreset && ( + + + + + + Remote Preset Management + + + + + + + + + - - VLM Provider - { - const newValue = e.target.value; - setFieldValue('vlmProvider', newValue); + + + {settings.presetSource!.url} + + {settings.presetSource!.lastUpdated && ( + + Last updated:{' '} + {new Date( + settings.presetSource!.lastUpdated, + ).toLocaleString()} + + )} + - if (!settings.vlmBaseUrl) { - setFieldValue('vlmProvider', newValue); - if (newValue === VlmProvider.vLLM) { - setFieldValue( - 'vlmBaseUrl', - 'http://localhost:8000/v1', - ); - setFieldValue('vlmModelName', 'ui-tars'); - } else if ( - newValue === VlmProvider.Huggingface - ) { - setFieldValue( - 'vlmBaseUrl', - 'https://.us-east-1.aws.endpoints.huggingface.cloud/v1', - ); - setFieldValue('vlmApiKey', 'your_api_key'); - setFieldValue( - 'vlmModelName', - 'your_model_name', - ); - } - } - }} - > - {Object.values(VlmProvider).map((item) => ( - - ))} - - + + + + )} - - VLM Base URL - - + {settings ? ( + + {({ values = {}, setFieldValue }) => { + const inputProps = { + bg: 'white', + borderColor: 'gray.200', + _hover: isRemoteAutoUpdatedPreset + ? {} + : { borderColor: 'gray.300' }, + _focus: isRemoteAutoUpdatedPreset + ? {} + : { borderColor: 'gray.400', boxShadow: 'none' }, + isReadOnly: isRemoteAutoUpdatedPreset, + opacity: isRemoteAutoUpdatedPreset ? 0.7 : 1, + cursor: isRemoteAutoUpdatedPreset + ? 'not-allowed' + : 'pointer', + }; - - VLM API Key - - + return ( + + + + Language + + + + + - - VLM Model Name - - + + + VLM Provider + + { + if (isRemoteAutoUpdatedPreset) return; + const newValue = e.target.value; + setFieldValue('vlmProvider', newValue); - {/* - - Report Storage Base URL - - - + if (!settings.vlmBaseUrl) { + setFieldValue('vlmProvider', newValue); + if (newValue === VlmProvider.vLLM) { + setFieldValue( + 'vlmBaseUrl', + 'http://localhost:8000/v1', + ); + setFieldValue( + 'vlmModelName', + 'ui-tars', + ); + } else if ( + newValue === VlmProvider.Huggingface + ) { + setFieldValue( + 'vlmBaseUrl', + 'https://.us-east-1.aws.endpoints.huggingface.cloud/v1', + ); + setFieldValue( + 'vlmApiKey', + 'your_api_key', + ); + setFieldValue( + 'vlmModelName', + 'your_model_name', + ); + } + } + }} + > + {Object.values(VlmProvider).map((item) => ( + + ))} + + - - UTIO Base URL - - */} + + + VLM Base URL + + + - - - - - - + + + VLM API Key + + + + + + + VLM Model Name + + + + + + + Report Storage Base URL + + + + + + + UTIO Base URL + + + + + + ); + }} +
    + ) : ( +
    + +
    )} - - ) : ( -
    - -
    - )} -
    -
    -
    -
    -
    - ); -}; + +
    + + + + + + + + + -export default Settings; + } + variant="ghost" + colorScheme="red" + onClick={handleClearSettings} + /> + + +
    + + setPresetModalOpen(false)} + /> +
    + + ); +} export { Settings as Component }; diff --git a/src/renderer/src/typings/preload.d.ts b/src/renderer/src/typings/preload.d.ts index 38dca0228..745bd5b64 100644 --- a/src/renderer/src/typings/preload.d.ts +++ b/src/renderer/src/typings/preload.d.ts @@ -9,7 +9,7 @@ declare global { interface Window { electron: ElectronHandler; platform: NodeJS.Platform; - zutron: any; + zustandBridge: any; } } diff --git a/src/renderer/src/typings/style.d.ts b/src/renderer/src/typings/style.d.ts index bc19aaa40..a9462850d 100644 --- a/src/renderer/src/typings/style.d.ts +++ b/src/renderer/src/typings/style.d.ts @@ -11,3 +11,7 @@ declare module '*?url' { const value: string; export default value; } + +declare module '*.png?asset' { + export default string; +} diff --git a/tsconfig.web.json b/tsconfig.web.json index 84efa0d13..fdad135a0 100644 --- a/tsconfig.web.json +++ b/tsconfig.web.json @@ -6,6 +6,7 @@ "src/renderer/src/**/*.tsx", "src/main/store/types.ts", "src/main/shared/**/*.ts", + "src/main/ipcRoutes/index.ts", "src/preload/*.d.ts" ], "compilerOptions": { From e4294ac30044bde5b93dd4ad31f64abba8cd9d8d Mon Sep 17 00:00:00 2001 From: Charles Date: Wed, 12 Feb 2025 17:23:37 +0800 Subject: [PATCH 02/62] bump: v0.0.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7d3b89908..74804878e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ui-tars-desktop", - "version": "0.0.5-beta.1", + "version": "0.0.5", "private": true, "packageManager": "pnpm@9.10.0", "description": "A GUI Agent application based on UI-TARS(Vision-Lanuage Model) that allows you to control your computer using natural language.", From e9a5e4e9c9f3acff1bc12e04cc867f725a5547b4 Mon Sep 17 00:00:00 2001 From: Charles Date: Wed, 12 Feb 2025 19:46:18 +0800 Subject: [PATCH 03/62] fix(share): not use system picker (#101) * fix: not use system picker * chore: version * chore: version reset --- src/main/main.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/main.ts b/src/main/main.ts index 98e43bfa8..34649df91 100644 --- a/src/main/main.ts +++ b/src/main/main.ts @@ -134,12 +134,8 @@ const initializeApp = async () => { // Grant access to the first screen found. callback({ video: sources[0], audio: 'loopback' }); }); - // If true, use the system picker if available. - // Note: this is currently experimental. If the system picker - // is available, it will be used and the media request handler - // will not be invoked. }, - { useSystemPicker: true }, + { useSystemPicker: false }, ); logger.info('mainZustandBridge'); From b2203cff466fdb138f91ed15020b5d3c15e29586 Mon Sep 17 00:00:00 2001 From: jinxin001 Date: Wed, 12 Feb 2025 19:49:01 +0800 Subject: [PATCH 04/62] chore: menu label --- src/main/menu.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/menu.ts b/src/main/menu.ts index d31c408d5..5583b0747 100644 --- a/src/main/menu.ts +++ b/src/main/menu.ts @@ -54,17 +54,17 @@ export default class MenuBuilder { buildDarwinTemplate(): MenuItemConstructorOptions[] { const subMenuAbout: DarwinMenuItemConstructorOptions = { - label: 'Electron', + label: 'UI-TARS Desktop', submenu: [ { - label: 'About ElectronReact', + label: 'About UI-TARS Desktop', selector: 'orderFrontStandardAboutPanel:', }, { type: 'separator' }, { label: 'Services', submenu: [] }, { type: 'separator' }, { - label: 'Hide ElectronReact', + label: 'Hide UI-TARS Desktop', accelerator: 'Command+H', selector: 'hide:', }, From 741bd8de795f95d948fb77a06680b5bf4bfebd8a Mon Sep 17 00:00:00 2001 From: ULIVZ Date: Thu, 13 Feb 2025 14:28:29 +0800 Subject: [PATCH 05/62] chore: tweak setting doc and utio types (#102) --- docs/setting.md | 10 +++++++++- packages/utio/src/types.ts | 8 ++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/docs/setting.md b/docs/setting.md index f3244ed94..56bf9b8e8 100644 --- a/docs/setting.md +++ b/docs/setting.md @@ -162,9 +162,13 @@ The server handles three types of events: ```typescript interface AppLaunchedEvent { type: 'appLaunched'; - platform: 'iOS' | 'Android' | 'Web'; + /** Platform type */ + platform: string; + /** OS version, e.g. "major.minor.patch" format */ osVersion: string; + /** Screen width in pixels */ screenWidth: number; + /** Screen height in pixels */ screenHeight: number; } ``` @@ -173,6 +177,7 @@ interface AppLaunchedEvent { ```typescript interface SendInstructionEvent { type: 'sendInstruction'; + /** User-submitted instruction content */ instruction: string; } ``` @@ -181,8 +186,11 @@ interface SendInstructionEvent { ```typescript interface ShareReportEvent { type: 'shareReport'; + /** Optional last screenshot url or base64 content */ lastScreenshot?: string; + /** Optional report url */ report?: string; + /** Related instruction */ instruction: string; } ``` diff --git a/packages/utio/src/types.ts b/packages/utio/src/types.ts index f65454364..4ee485a59 100644 --- a/packages/utio/src/types.ts +++ b/packages/utio/src/types.ts @@ -18,7 +18,7 @@ interface BaseEvent { export interface AppLaunchedEvent extends BaseEvent<'appLaunched'> { /** Platform type */ platform: string; - /** OS version in "major.minor.patch" format */ + /** OS version, e.g. "major.minor.patch" format */ osVersion: string; /** Screen width in pixels */ screenWidth: number; @@ -30,7 +30,7 @@ export interface AppLaunchedEvent extends BaseEvent<'appLaunched'> { * User-sent instruction event */ export interface SendInstructionEvent extends BaseEvent<'sendInstruction'> { - /** Instruction content */ + /** User-submitted instruction content */ instruction: string; } @@ -38,9 +38,9 @@ export interface SendInstructionEvent extends BaseEvent<'sendInstruction'> { * Report sharing event */ export interface ShareReportEvent extends BaseEvent<'shareReport'> { - /** Optional last screenshot path */ + /** Optional last screenshot url or base64 content */ lastScreenshot?: string; - /** Optional report content */ + /** Optional report url */ report?: string; /** Related instruction */ instruction: string; From 000f1a18aafa7ced90d891ff382231e61acbe900 Mon Sep 17 00:00:00 2001 From: "wanghaoming.whm" Date: Thu, 13 Feb 2025 16:10:25 +0800 Subject: [PATCH 06/62] update discord link --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 98b2f03e6..e6364f674 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ UI-TARS Desktop is a GUI Agent application based on [UI-TARS (Vision-Language Mo
    - - - {{js}} - - - + + {{dump}} + +
    + + + + + + + + + {{js}} + + - + \ No newline at end of file diff --git a/packages/visualizer/modern.config.ts b/packages/visualizer/modern.config.ts index dd7f2b7b0..985dfc627 100644 --- a/packages/visualizer/modern.config.ts +++ b/packages/visualizer/modern.config.ts @@ -9,30 +9,38 @@ import { modulePluginNodePolyfill } from '@modern-js/plugin-module-node-polyfill import { version } from './package.json'; -const externals = ['playwright', 'langsmith']; - -const commonConfig = { - asset: { - svgr: true, - }, - autoExternal: false, - externals: [...externals], - target: 'es2018', - minify: process.env.CI - ? { - compress: true, - } - : undefined, - define: { - __VERSION__: JSON.stringify(version), - global: 'globalThis', - }, -}; +const externals = [ + 'playwright', + 'langsmith', + 'react', + 'react-dom', + 'dayjs', + 'antd', + // 'pixi.js', // pixi.js and pixi.js-legacy use same globalName: PIXI + 'pixi.js-legacy', + 'pixi-filters', +]; export default defineConfig({ buildConfig: [ { - ...commonConfig, + asset: { + svgr: true, + }, + autoExternal: false, + externals: [...externals], + define: { + __VERSION__: JSON.stringify(version), + global: 'globalThis', + }, + minify: 'terser', + umdGlobals: { + react: 'React', + 'react-dom': 'ReactDOM', + dayjs: 'dayjs', + antd: 'antd', + 'pixi.js-legacy': 'PIXI', + }, alias: { async_hooks: path.join(__dirname, './src/blank_polyfill.ts'), }, diff --git a/packages/visualizer/package.json b/packages/visualizer/package.json index bbb45d6c3..c32091e04 100644 --- a/packages/visualizer/package.json +++ b/packages/visualizer/package.json @@ -54,6 +54,7 @@ "@types/node": "^18.0.0", "@types/react": "18.3.3", "@types/react-dom": "18.3.0", + "@types/clean-css": "4.2.11", "antd": "5.21.6", "console-browserify": "1.2.0", "dayjs": "1.11.11", @@ -71,7 +72,8 @@ "rimraf": "~3.0.2", "tsx": "4.19.2", "typescript": "~5.0.4", - "zustand": "4.5.2" + "zustand": "4.5.2", + "clean-css": "5.3.3" }, "sideEffects": [ "**/*.css", diff --git a/packages/visualizer/pnpm-lock.yaml b/packages/visualizer/pnpm-lock.yaml index 32c893cec..6946dab0a 100644 --- a/packages/visualizer/pnpm-lock.yaml +++ b/packages/visualizer/pnpm-lock.yaml @@ -1,2889 +1,8928 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -devDependencies: - '@ant-design/icons': - specifier: 5.3.7 - version: 5.3.7(react-dom@18.3.1)(react@18.3.1) - '@midscene/core': - specifier: 0.8.13 - version: 0.8.13(zod@3.24.1) - '@midscene/shared': - specifier: 0.8.13 - version: 0.8.13 - '@midscene/web': - specifier: 0.8.13 - version: 0.8.13(playwright@1.50.1)(zod@3.24.1) - '@modern-js/module-tools': - specifier: 2.60.6 - version: 2.60.6(typescript@5.0.4) - '@modern-js/plugin-module-doc': - specifier: ^2.33.1 - version: 2.33.1(@modern-js/core@2.64.1)(@modern-js/doc-tools@2.32.1)(@modern-js/module-tools@2.60.6)(@types/react@18.3.3)(react-dom@18.3.1)(react-router-dom@6.29.0)(react@18.3.1)(typescript@5.0.4)(webpack@5.97.1) - '@modern-js/plugin-module-node-polyfill': - specifier: 2.60.6 - version: 2.60.6(@modern-js/module-tools@2.60.6) - '@modern-js/runtime': - specifier: 2.60.6 - version: 2.60.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@pixi/unsafe-eval': - specifier: 7.4.2 - version: 7.4.2(@pixi/core@7.4.2) - '@types/chrome': - specifier: 0.0.279 - version: 0.0.279 - '@types/node': - specifier: ^18.0.0 - version: 18.19.75 - '@types/react': - specifier: 18.3.3 - version: 18.3.3 - '@types/react-dom': - specifier: 18.3.0 - version: 18.3.0 - antd: - specifier: 5.21.6 - version: 5.21.6(react-dom@18.3.1)(react@18.3.1) - console-browserify: - specifier: 1.2.0 - version: 1.2.0 - dayjs: - specifier: 1.11.11 - version: 1.11.11 - execa: - specifier: 9.3.0 - version: 9.3.0 - http-server: - specifier: 14.1.1 - version: 14.1.1 - npm-watch: - specifier: 0.13.0 - version: 0.13.0 - pixi-filters: - specifier: 6.0.5 - version: 6.0.5(pixi.js@8.1.1) - pixi.js: - specifier: 8.1.1 - version: 8.1.1 - pixi.js-legacy: - specifier: 7.4.2 - version: 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2)(@pixi/extract@7.4.2)(@pixi/graphics@7.4.2)(@pixi/mesh-extras@7.4.2)(@pixi/mesh@7.4.2)(@pixi/particle-container@7.4.2)(@pixi/prepare@7.4.2)(@pixi/sprite-tiling@7.4.2)(@pixi/sprite@7.4.2)(@pixi/text@7.4.2) - process: - specifier: 0.11.10 - version: 0.11.10 - query-string: - specifier: 9.1.1 - version: 9.1.1 - react: - specifier: ^18.2.0 - version: 18.3.1 - react-dom: - specifier: ^18.2.0 - version: 18.3.1(react@18.3.1) - react-resizable-panels: - specifier: 2.0.22 - version: 2.0.22(react-dom@18.3.1)(react@18.3.1) - rimraf: - specifier: ~3.0.2 - version: 3.0.2 - tsx: - specifier: 4.19.2 - version: 4.19.2 - typescript: - specifier: ~5.0.4 - version: 5.0.4 - zustand: - specifier: 4.5.2 - version: 4.5.2(@types/react@18.3.3)(react@18.3.1) +importers: + + .: + devDependencies: + '@ant-design/icons': + specifier: 5.3.7 + version: 5.3.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@midscene/core': + specifier: 0.8.13 + version: 0.8.13(zod@3.24.2) + '@midscene/shared': + specifier: 0.8.13 + version: 0.8.13 + '@midscene/web': + specifier: 0.8.13 + version: 0.8.13(playwright@1.50.1)(zod@3.24.2) + '@modern-js/module-tools': + specifier: 2.60.6 + version: 2.60.6(typescript@5.0.4) + '@modern-js/plugin-module-doc': + specifier: ^2.33.1 + version: 2.33.1(@babel/traverse@7.26.9)(@modern-js/core@2.60.6)(@modern-js/doc-tools@2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0))(@modern-js/module-tools@2.60.6(typescript@5.0.4))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react-router-dom@6.29.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0) + '@modern-js/plugin-module-node-polyfill': + specifier: 2.60.6 + version: 2.60.6(@modern-js/module-tools@2.60.6(typescript@5.0.4)) + '@modern-js/runtime': + specifier: 2.60.6 + version: 2.60.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@pixi/unsafe-eval': + specifier: 7.4.2 + version: 7.4.2(@pixi/core@7.4.2) + '@types/chrome': + specifier: 0.0.279 + version: 0.0.279 + '@types/clean-css': + specifier: 4.2.11 + version: 4.2.11 + '@types/node': + specifier: ^18.0.0 + version: 18.19.76 + '@types/react': + specifier: 18.3.3 + version: 18.3.3 + '@types/react-dom': + specifier: 18.3.0 + version: 18.3.0 + antd: + specifier: 5.21.6 + version: 5.21.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + clean-css: + specifier: 5.3.3 + version: 5.3.3 + console-browserify: + specifier: 1.2.0 + version: 1.2.0 + dayjs: + specifier: 1.11.11 + version: 1.11.11 + execa: + specifier: 9.3.0 + version: 9.3.0 + http-server: + specifier: 14.1.1 + version: 14.1.1 + npm-watch: + specifier: 0.13.0 + version: 0.13.0 + pixi-filters: + specifier: 6.0.5 + version: 6.0.5(pixi.js@8.1.1) + pixi.js: + specifier: 8.1.1 + version: 8.1.1 + pixi.js-legacy: + specifier: 7.4.2 + version: 7.4.2(b8c41235b07ba7e580c31fab611ea1c0) + process: + specifier: 0.11.10 + version: 0.11.10 + query-string: + specifier: 9.1.1 + version: 9.1.1 + react: + specifier: ^18.2.0 + version: 18.3.1 + react-dom: + specifier: ^18.2.0 + version: 18.3.1(react@18.3.1) + react-resizable-panels: + specifier: 2.0.22 + version: 2.0.22(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rimraf: + specifier: ~3.0.2 + version: 3.0.2 + tsx: + specifier: 4.19.2 + version: 4.19.2 + typescript: + specifier: ~5.0.4 + version: 5.0.4 + zustand: + specifier: 4.5.2 + version: 4.5.2(@types/react@18.3.3)(immer@9.0.21)(react@18.3.1) packages: - /@ampproject/remapping@2.3.0: + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - dev: true - /@ant-design/colors@7.2.0: + '@ant-design/colors@7.2.0': resolution: {integrity: sha512-bjTObSnZ9C/O8MB/B4OUtd/q9COomuJAR2SYfhxLyHvCKn4EKwCN3e+fWGMo7H5InAyV0wL17jdE9ALrdOW/6A==} - dependencies: - '@ant-design/fast-color': 2.0.6 - dev: true - /@ant-design/cssinjs-utils@1.1.3(react-dom@18.3.1)(react@18.3.1): + '@ant-design/cssinjs-utils@1.1.3': resolution: {integrity: sha512-nOoQMLW1l+xR1Co8NFVYiP8pZp3VjIIzqV6D6ShYF2ljtdwWJn5WSsH+7kvCktXL/yhEtWURKOfH5Xz/gzlwsg==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' - dependencies: - '@ant-design/cssinjs': 1.23.0(react-dom@18.3.1)(react@18.3.1) - '@babel/runtime': 7.26.7 - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - dev: true - /@ant-design/cssinjs@1.23.0(react-dom@18.3.1)(react@18.3.1): + '@ant-design/cssinjs@1.23.0': resolution: {integrity: sha512-7GAg9bD/iC9ikWatU9ym+P9ugJhi/WbsTWzcKN6T4gU0aehsprtke1UAaaSxxkjjmkJb3llet/rbUSLPgwlY4w==} peerDependencies: react: '>=16.0.0' react-dom: '>=16.0.0' - dependencies: - '@babel/runtime': 7.26.7 - '@emotion/hash': 0.8.0 - '@emotion/unitless': 0.7.5 - classnames: 2.5.1 - csstype: 3.1.3 - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - stylis: 4.3.6 - dev: true - /@ant-design/fast-color@2.0.6: + '@ant-design/fast-color@2.0.6': resolution: {integrity: sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA==} engines: {node: '>=8.x'} - dependencies: - '@babel/runtime': 7.26.7 - dev: true - /@ant-design/icons-svg@4.4.2: + '@ant-design/icons-svg@4.4.2': resolution: {integrity: sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==} - dev: true - /@ant-design/icons@5.3.7(react-dom@18.3.1)(react@18.3.1): + '@ant-design/icons@5.3.7': resolution: {integrity: sha512-bCPXTAg66f5bdccM4TT21SQBDO1Ek2gho9h3nO9DAKXJP4sq+5VBjrQMSxMVXSB3HyEz+cUbHQ5+6ogxCOpaew==} engines: {node: '>=8'} peerDependencies: react: '>=16.0.0' react-dom: '>=16.0.0' - dependencies: - '@ant-design/colors': 7.2.0 - '@ant-design/icons-svg': 4.4.2 - '@babel/runtime': 7.26.7 - classnames: 2.5.1 - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - dev: true - /@ant-design/icons@5.6.1(react-dom@18.3.1)(react@18.3.1): + '@ant-design/icons@5.6.1': resolution: {integrity: sha512-0/xS39c91WjPAZOWsvi1//zjx6kAp4kxWwctR6kuU6p133w8RU0D2dSCvZC19uQyharg/sAvYxGYWl01BbZZfg==} engines: {node: '>=8'} peerDependencies: react: '>=16.0.0' react-dom: '>=16.0.0' - dependencies: - '@ant-design/colors': 7.2.0 - '@ant-design/icons-svg': 4.4.2 - '@babel/runtime': 7.26.7 - classnames: 2.5.1 - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - dev: true - /@ant-design/react-slick@1.1.2(react@18.3.1): + '@ant-design/react-slick@1.1.2': resolution: {integrity: sha512-EzlvzE6xQUBrZuuhSAFTdsr4P2bBBHGZwKFemEfq8gIGyIQCxalYfZW/T2ORbtQx5rU69o+WycP3exY/7T1hGA==} peerDependencies: react: '>=16.9.0' - dependencies: - '@babel/runtime': 7.26.7 - classnames: 2.5.1 - json2mq: 0.2.0 - react: 18.3.1 - resize-observer-polyfill: 1.5.1 - throttle-debounce: 5.0.2 - dev: true - /@anthropic-ai/sdk@0.33.1: + '@anthropic-ai/sdk@0.33.1': resolution: {integrity: sha512-VrlbxiAdVRGuKP2UQlCnsShDHJKWepzvfRCkZMpU+oaUdKLpOfmylLMRojGrAgebV+kDtPjewCVP0laHXg+vsA==} - dependencies: - '@types/node': 18.19.75 - '@types/node-fetch': 2.6.12 - abort-controller: 3.0.0 - agentkeepalive: 4.6.0 - form-data-encoder: 1.7.2 - formdata-node: 4.4.1 - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - dev: true - /@arr/every@1.0.1: + '@arr/every@1.0.1': resolution: {integrity: sha512-UQFQ6SgyJ6LX42W8rHCs8KVc0JS0tzVL9ct4XYedJukskYVWTo49tNiMEK9C2HTyarbNiT/RVIRSY82vH+6sTg==} engines: {node: '>=4'} - dev: true - /@ast-grep/napi-darwin-arm64@0.16.0: + '@ast-grep/napi-darwin-arm64@0.16.0': resolution: {integrity: sha512-ESjIg03S0ln+8CP43TKqY6+QPL2Kkm+6iMS5kAUMVtH/WNWd2z0oQLg9bmadUNPylYbB42B3zRtuTKwm/nCpdA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@ast-grep/napi-darwin-x64@0.16.0: + '@ast-grep/napi-darwin-x64@0.16.0': resolution: {integrity: sha512-a7cOdfACgmsGyTSMLkVuGiK/v+M8eTgUWew5X/4gcPHX4GcqVbptP82kbtiVVWZW5QXX2j6VYkFCsmJ7knkXBA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@ast-grep/napi-linux-arm64-gnu@0.16.0: + '@ast-grep/napi-linux-arm64-gnu@0.16.0': resolution: {integrity: sha512-5BaueDB3ZJxLy/qGDzWO16zSmU02da96ABkp6S210OTlaThDgLpjfztoI10iwu/f3WpTnOvbggjfzOLWUAL3Aw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true - optional: true + libc: [glibc] - /@ast-grep/napi-linux-x64-gnu@0.16.0: + '@ast-grep/napi-linux-x64-gnu@0.16.0': resolution: {integrity: sha512-QjiY45TvPI50I2UxPlfPuoeDeEYJxGDyLegqYfrLsxtdv+wX2Jdgjew6myiMXCVG9oJWgtmp/z28zpl7H8YLPA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - requiresBuild: true - dev: true - optional: true + libc: [glibc] - /@ast-grep/napi-win32-arm64-msvc@0.16.0: + '@ast-grep/napi-win32-arm64-msvc@0.16.0': resolution: {integrity: sha512-4OCpEf44h63RVFiNA2InIoRNlTB2XJUq1nUiFacTagSP5L3HwnZQ4URC1+fdmZh1ESedm7KxzvhgByqGeUyzgA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@ast-grep/napi-win32-ia32-msvc@0.16.0: + '@ast-grep/napi-win32-ia32-msvc@0.16.0': resolution: {integrity: sha512-bJW9w9btdE9OuGKZSNiKkBR+Ax4113VhiJgxC2t9KbhmOsOM9E4l2U570h+DrjWdf+H3Oyb4Cz8so2noh5LQqw==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] - requiresBuild: true - dev: true - optional: true - /@ast-grep/napi-win32-x64-msvc@0.16.0: + '@ast-grep/napi-win32-x64-msvc@0.16.0': resolution: {integrity: sha512-+qUauPADrUIBgSGMmjnCBuy2xuGlG97qjrRAYo9y+Mv9gGnAMpGA5zzLZArHcQwNzXwFB9aIqavtCL+tu28wHg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@ast-grep/napi@0.16.0: + '@ast-grep/napi@0.16.0': resolution: {integrity: sha512-qOqQG9o97Q4tIZXZyWI7JuDZGJi3yibTN7LiGLmnzNLaIhmpv26BWj5OYJibUyQLVH/aTjdZSNx4spa7EihUzg==} engines: {node: '>= 10'} - optionalDependencies: - '@ast-grep/napi-darwin-arm64': 0.16.0 - '@ast-grep/napi-darwin-x64': 0.16.0 - '@ast-grep/napi-linux-arm64-gnu': 0.16.0 - '@ast-grep/napi-linux-x64-gnu': 0.16.0 - '@ast-grep/napi-win32-arm64-msvc': 0.16.0 - '@ast-grep/napi-win32-ia32-msvc': 0.16.0 - '@ast-grep/napi-win32-x64-msvc': 0.16.0 - dev: true - /@azure/abort-controller@2.1.2: + '@azure/abort-controller@2.1.2': resolution: {integrity: sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==} engines: {node: '>=18.0.0'} - dependencies: - tslib: 2.8.1 - dev: true - /@azure/core-auth@1.9.0: + '@azure/core-auth@1.9.0': resolution: {integrity: sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw==} engines: {node: '>=18.0.0'} - dependencies: - '@azure/abort-controller': 2.1.2 - '@azure/core-util': 1.11.0 - tslib: 2.8.1 - dev: true - /@azure/core-client@1.9.2: + '@azure/core-client@1.9.2': resolution: {integrity: sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w==} engines: {node: '>=18.0.0'} - dependencies: - '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.9.0 - '@azure/core-rest-pipeline': 1.19.0 - '@azure/core-tracing': 1.2.0 - '@azure/core-util': 1.11.0 - '@azure/logger': 1.1.4 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - dev: true - /@azure/core-rest-pipeline@1.19.0: + '@azure/core-rest-pipeline@1.19.0': resolution: {integrity: sha512-bM3308LRyg5g7r3Twprtqww0R/r7+GyVxj4BafcmVPo4WQoGt5JXuaqxHEFjw2o3rvFZcUPiqJMg6WuvEEeVUA==} engines: {node: '>=18.0.0'} - dependencies: - '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.9.0 - '@azure/core-tracing': 1.2.0 - '@azure/core-util': 1.11.0 - '@azure/logger': 1.1.4 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - dev: true - /@azure/core-tracing@1.2.0: + '@azure/core-tracing@1.2.0': resolution: {integrity: sha512-UKTiEJPkWcESPYJz3X5uKRYyOcJD+4nYph+KpfdPRnQJVrZfk0KJgdnaAWKfhsBBtAf/D58Az4AvCJEmWgIBAg==} engines: {node: '>=18.0.0'} - dependencies: - tslib: 2.8.1 - dev: true - /@azure/core-util@1.11.0: + '@azure/core-util@1.11.0': resolution: {integrity: sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g==} engines: {node: '>=18.0.0'} - dependencies: - '@azure/abort-controller': 2.1.2 - tslib: 2.8.1 - dev: true - /@azure/identity@4.5.0: + '@azure/identity@4.5.0': resolution: {integrity: sha512-EknvVmtBuSIic47xkOqyNabAme0RYTw52BTMz8eBgU1ysTyMrD1uOoM+JdS0J/4Yfp98IBT3osqq3BfwSaNaGQ==} engines: {node: '>=18.0.0'} - dependencies: - '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.9.0 - '@azure/core-client': 1.9.2 - '@azure/core-rest-pipeline': 1.19.0 - '@azure/core-tracing': 1.2.0 - '@azure/core-util': 1.11.0 - '@azure/logger': 1.1.4 - '@azure/msal-browser': 3.28.1 - '@azure/msal-node': 2.16.2 - events: 3.3.0 - jws: 4.0.0 - open: 8.4.2 - stoppable: 1.1.0 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - dev: true - /@azure/logger@1.1.4: + '@azure/logger@1.1.4': resolution: {integrity: sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ==} engines: {node: '>=18.0.0'} - dependencies: - tslib: 2.8.1 - dev: true - /@azure/msal-browser@3.28.1: + '@azure/msal-browser@3.28.1': resolution: {integrity: sha512-OHHEWMB5+Zrix8yKvLVzU3rKDFvh7SOzAzXfICD7YgUXLxfHpTPX2pzOotrri1kskwhHqIj4a5LvhZlIqE7C7g==} engines: {node: '>=0.8.0'} - dependencies: - '@azure/msal-common': 14.16.0 - dev: true - /@azure/msal-common@14.16.0: + '@azure/msal-common@14.16.0': resolution: {integrity: sha512-1KOZj9IpcDSwpNiQNjt0jDYZpQvNZay7QAEi/5DLubay40iGYtLzya/jbjRPLyOTZhEKyL1MzPuw2HqBCjceYA==} engines: {node: '>=0.8.0'} - dev: true - /@azure/msal-node@2.16.2: + '@azure/msal-node@2.16.2': resolution: {integrity: sha512-An7l1hEr0w1HMMh1LU+rtDtqL7/jw74ORlc9Wnh06v7TU/xpG39/Zdr1ZJu3QpjUfKJ+E0/OXMW8DRSWTlh7qQ==} engines: {node: '>=16'} - dependencies: - '@azure/msal-common': 14.16.0 - jsonwebtoken: 9.0.2 - uuid: 8.3.2 - dev: true - /@babel/code-frame@7.26.2: + '@babel/code-frame@7.26.2': resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.25.9 - js-tokens: 4.0.0 - picocolors: 1.1.1 - dev: true - /@babel/compat-data@7.26.8: + '@babel/compat-data@7.26.8': resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} engines: {node: '>=6.9.0'} - dev: true - /@babel/core@7.26.8: - resolution: {integrity: sha512-l+lkXCHS6tQEc5oUpK28xBOZ6+HwaH7YwoYQbLFiYb4nS2/l1tKnZEtEWkD0GuiYdvArf9qBS0XlQGXzPMsNqQ==} + '@babel/core@7.26.9': + resolution: {integrity: sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==} engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.8 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.8) - '@babel/helpers': 7.26.7 - '@babel/parser': 7.26.8 - '@babel/template': 7.26.8 - '@babel/traverse': 7.26.8(supports-color@5.5.0) - '@babel/types': 7.26.8 - '@types/gensync': 1.0.4 - convert-source-map: 2.0.0 - debug: 4.4.0(supports-color@5.5.0) - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/generator@7.26.8: - resolution: {integrity: sha512-ef383X5++iZHWAXX0SXQR6ZyQhw/0KtTkrTz61WXRhFM6dhpHulO/RJz79L8S6ugZHJkOOkUrUdxgdF2YiPFnA==} + '@babel/generator@7.26.9': + resolution: {integrity: sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/parser': 7.26.8 - '@babel/types': 7.26.8 - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.1.0 - dev: true - /@babel/helper-annotate-as-pure@7.25.9: + '@babel/helper-annotate-as-pure@7.25.9': resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.26.8 - dev: true - /@babel/helper-compilation-targets@7.26.5: + '@babel/helper-compilation-targets@7.26.5': resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/compat-data': 7.26.8 - '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.4 - lru-cache: 5.1.1 - semver: 6.3.1 - dev: true - /@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.8): - resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} + '@babel/helper-create-class-features-plugin@7.26.9': + resolution: {integrity: sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-member-expression-to-functions': 7.25.9 - '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.8) - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/traverse': 7.26.8(supports-color@5.5.0) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-create-regexp-features-plugin@7.26.3(@babel/core@7.26.8): + '@babel/helper-create-regexp-features-plugin@7.26.3': resolution: {integrity: sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-annotate-as-pure': 7.25.9 - regexpu-core: 6.2.0 - semver: 6.3.1 - dev: true - /@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.26.8): + '@babel/helper-define-polyfill-provider@0.6.3': resolution: {integrity: sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-plugin-utils': 7.26.5 - debug: 4.4.0(supports-color@5.5.0) - lodash.debounce: 4.0.8 - resolve: 1.22.10 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-member-expression-to-functions@7.25.9: + '@babel/helper-member-expression-to-functions@7.25.9': resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/traverse': 7.26.8(supports-color@5.5.0) - '@babel/types': 7.26.8 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-module-imports@7.25.9(supports-color@5.5.0): + '@babel/helper-module-imports@7.25.9': resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/traverse': 7.26.8(supports-color@5.5.0) - '@babel/types': 7.26.8 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-module-transforms@7.26.0(@babel/core@7.26.8): + '@babel/helper-module-transforms@7.26.0': resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.8(supports-color@5.5.0) - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-optimise-call-expression@7.25.9: + '@babel/helper-optimise-call-expression@7.25.9': resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.26.8 - dev: true - /@babel/helper-plugin-utils@7.26.5: + '@babel/helper-plugin-utils@7.26.5': resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.8): + '@babel/helper-remap-async-to-generator@7.25.9': resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-wrap-function': 7.25.9 - '@babel/traverse': 7.26.8(supports-color@5.5.0) - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-replace-supers@7.26.5(@babel/core@7.26.8): + '@babel/helper-replace-supers@7.26.5': resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-member-expression-to-functions': 7.25.9 - '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.26.8(supports-color@5.5.0) - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-skip-transparent-expression-wrappers@7.25.9: + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/traverse': 7.26.8(supports-color@5.5.0) - '@babel/types': 7.26.8 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-string-parser@7.25.9: + '@babel/helper-string-parser@7.25.9': resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-validator-identifier@7.25.9: + '@babel/helper-validator-identifier@7.25.9': resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-validator-option@7.25.9: + '@babel/helper-validator-option@7.25.9': resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-wrap-function@7.25.9: + '@babel/helper-wrap-function@7.25.9': resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.26.8 - '@babel/traverse': 7.26.8(supports-color@5.5.0) - '@babel/types': 7.26.8 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helpers@7.26.7: - resolution: {integrity: sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==} + '@babel/helpers@7.26.9': + resolution: {integrity: sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.26.8 - '@babel/types': 7.26.8 - dev: true - /@babel/parser@7.26.8: - resolution: {integrity: sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw==} + '@babel/parser@7.26.9': + resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==} engines: {node: '>=6.0.0'} hasBin: true - dependencies: - '@babel/types': 7.26.8 - dev: true - /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.8): + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9': resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.26.8(supports-color@5.5.0) - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.8): + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9': resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.8): + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9': resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.8): + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9': resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.8) - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.8): + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9': resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.26.8(supports-color@5.5.0) - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.26.8): + '@babel/plugin-proposal-class-properties@7.18.6': resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.8) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-proposal-decorators@7.25.9(@babel/core@7.26.8): + '@babel/plugin-proposal-decorators@7.25.9': resolution: {integrity: sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.8) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.26.8) - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.8): + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - dev: true - /@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.26.8): + '@babel/plugin-syntax-decorators@7.25.9': resolution: {integrity: sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.26.8): + '@babel/plugin-syntax-dynamic-import@7.8.3': resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.8): + '@babel/plugin-syntax-import-assertions@7.26.0': resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.8): + '@babel/plugin-syntax-import-attributes@7.26.0': resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.8): + '@babel/plugin-syntax-jsx@7.25.9': resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.8): + '@babel/plugin-syntax-typescript@7.25.9': resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.8): + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.8) - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-arrow-functions@7.25.9': resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-async-generator-functions@7.26.8(@babel/core@7.26.8): + '@babel/plugin-transform-async-generator-functions@7.26.8': resolution: {integrity: sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.8) - '@babel/traverse': 7.26.8(supports-color@5.5.0) - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-async-to-generator@7.25.9': resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.8) - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.26.8): + '@babel/plugin-transform-block-scoped-functions@7.26.5': resolution: {integrity: sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-block-scoping@7.25.9': resolution: {integrity: sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-class-properties@7.25.9': resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.8) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.8): + '@babel/plugin-transform-class-static-block@7.26.0': resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.8) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-classes@7.25.9': resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.8) - '@babel/traverse': 7.26.8(supports-color@5.5.0) - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-computed-properties@7.25.9': resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/template': 7.26.8 - dev: true - /@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-destructuring@7.25.9': resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-dotall-regex@7.25.9': resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.8) - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-duplicate-keys@7.25.9': resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9': resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.8) - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-dynamic-import@7.25.9': resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.8): + '@babel/plugin-transform-exponentiation-operator@7.26.3': resolution: {integrity: sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-export-namespace-from@7.25.9': resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-for-of@7.25.9(@babel/core@7.26.8): - resolution: {integrity: sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==} + '@babel/plugin-transform-for-of@7.26.9': + resolution: {integrity: sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-function-name@7.25.9': resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.26.8(supports-color@5.5.0) - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-json-strings@7.25.9': resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-literals@7.25.9': resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-logical-assignment-operators@7.25.9': resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-member-expression-literals@7.25.9': resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-modules-amd@7.25.9': resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.8) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.8): + '@babel/plugin-transform-modules-commonjs@7.26.3': resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.8) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-modules-systemjs@7.25.9': resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.8) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.8(supports-color@5.5.0) - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-modules-umd@7.25.9': resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.8) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9': resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.8) - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-new-target@7.25.9': resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.26.8): + '@babel/plugin-transform-nullish-coalescing-operator@7.26.6': resolution: {integrity: sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-numeric-separator@7.25.9': resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-object-rest-spread@7.25.9': resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.8) - dev: true - /@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-object-super@7.25.9': resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.8) - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-optional-catch-binding@7.25.9': resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-optional-chaining@7.25.9': resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-parameters@7.25.9': resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-private-methods@7.25.9': resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.8) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-private-property-in-object@7.25.9': resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.8) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-property-literals@7.25.9': resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-react-constant-elements@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-react-constant-elements@7.25.9': resolution: {integrity: sha512-Ncw2JFsJVuvfRsa2lSHiC55kETQVLSnsYGQ1JDDwkUeWGTL/8Tom8aLTnlqgoeuopWrbbGndrc9AlLYrIosrow==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-react-display-name@7.25.9': resolution: {integrity: sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-react-jsx-development@7.25.9': resolution: {integrity: sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.8) - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-react-jsx@7.25.9': resolution: {integrity: sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.8) - '@babel/types': 7.26.8 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-react-pure-annotations@7.25.9': resolution: {integrity: sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-regenerator@7.25.9': resolution: {integrity: sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - regenerator-transform: 0.15.2 - dev: true - /@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.8): + '@babel/plugin-transform-regexp-modifiers@7.26.0': resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.8) - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-reserved-words@7.25.9': resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-runtime@7.26.8(@babel/core@7.26.8): - resolution: {integrity: sha512-H0jlQxFMI0Q8SyGPsj9pO3ygVQRxPkIGytsL3m1Zqca8KrCPpMlvh+e2dxknqdfS8LFwBw+PpiYPD9qy/FPQpA==} + '@babel/plugin-transform-runtime@7.26.9': + resolution: {integrity: sha512-Jf+8y9wXQbbxvVYTM8gO5oEF2POdNji0NMltEkG7FtmzD9PVz7/lxpqSdTvwsjTMU5HIHuDVNf2SOxLkWi+wPQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) - '@babel/helper-plugin-utils': 7.26.5 - babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.8) - babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.8) - babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.8) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-shorthand-properties@7.25.9': resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-spread@7.25.9': resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-sticky-regex@7.25.9': resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-template-literals@7.26.8(@babel/core@7.26.8): + '@babel/plugin-transform-template-literals@7.26.8': resolution: {integrity: sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-typeof-symbol@7.26.7(@babel/core@7.26.8): + '@babel/plugin-transform-typeof-symbol@7.26.7': resolution: {integrity: sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-typescript@7.26.8(@babel/core@7.26.8): + '@babel/plugin-transform-typescript@7.26.8': resolution: {integrity: sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.8) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.8) - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-unicode-escapes@7.25.9': resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-unicode-property-regex@7.25.9': resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.8) - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-unicode-regex@7.25.9': resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.8) - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.8): + '@babel/plugin-transform-unicode-sets-regex@7.25.9': resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.8) - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/preset-env@7.26.8(@babel/core@7.26.8): - resolution: {integrity: sha512-um7Sy+2THd697S4zJEfv/U5MHGJzkN2xhtsR3T/SWRbVSic62nbISh51VVfU9JiO/L/Z97QczHTaFVkOU8IzNg==} + '@babel/preset-env@7.26.9': + resolution: {integrity: sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.26.8 - '@babel/core': 7.26.8 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.8) - '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.8) - '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.8) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.8) - '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.26.8) - '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.26.8) - '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.8) - '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.26.8) - '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.8) - '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.26.8) - '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.26.8) - '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-template-literals': 7.26.8(@babel/core@7.26.8) - '@babel/plugin-transform-typeof-symbol': 7.26.7(@babel/core@7.26.8) - '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.8) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.8) - babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.8) - babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.8) - babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.8) - core-js-compat: 3.40.0 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.8): + '@babel/preset-modules@0.1.6-no-external-plugins': resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/types': 7.26.8 - esutils: 2.0.3 - dev: true - /@babel/preset-react@7.26.3(@babel/core@7.26.8): + '@babel/preset-react@7.26.3': resolution: {integrity: sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-react-jsx-development': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-react-pure-annotations': 7.25.9(@babel/core@7.26.8) - transitivePeerDependencies: - - supports-color - dev: true - /@babel/preset-typescript@7.26.0(@babel/core@7.26.8): + '@babel/preset-typescript@7.26.0': resolution: {integrity: sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.8) - '@babel/plugin-transform-typescript': 7.26.8(@babel/core@7.26.8) - transitivePeerDependencies: - - supports-color - dev: true - /@babel/register@7.25.9(@babel/core@7.26.8): + '@babel/register@7.25.9': resolution: {integrity: sha512-8D43jXtGsYmEeDvm4MWHYUpWf8iiXgWYx3fW7E7Wb7Oe6FWqJPl5K6TuFW0dOwNZzEE5rjlaSJYH9JjrUKJszA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - clone-deep: 4.0.1 - find-cache-dir: 2.1.0 - make-dir: 2.1.0 - pirates: 4.0.6 - source-map-support: 0.5.21 - dev: true - /@babel/runtime@7.26.7: - resolution: {integrity: sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==} + '@babel/runtime@7.26.9': + resolution: {integrity: sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==} engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.1 - dev: true - /@babel/template@7.26.8: - resolution: {integrity: sha512-iNKaX3ZebKIsCvJ+0jd6embf+Aulaa3vNBqZ41kM7iTWjx5qzWKXGHiJUW3+nTpQ18SG11hdF8OAzKrpXkb96Q==} + '@babel/template@7.26.9': + resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.8 - '@babel/types': 7.26.8 - dev: true - /@babel/traverse@7.26.8(supports-color@5.5.0): - resolution: {integrity: sha512-nic9tRkjYH0oB2dzr/JoGIm+4Q6SuYeLEiIiZDwBscRMYFJ+tMAz98fuel9ZnbXViA2I0HVSSRRK8DW5fjXStA==} + '@babel/traverse@7.26.9': + resolution: {integrity: sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.8 - '@babel/parser': 7.26.8 - '@babel/template': 7.26.8 - '@babel/types': 7.26.8 - debug: 4.4.0(supports-color@5.5.0) - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/types@7.26.8: - resolution: {integrity: sha512-eUuWapzEGWFEpHFxgEaBG8e3n6S8L3MSu0oda755rOfabWPnh0Our1AozNFVUxGFIhbKgd1ksprsoDGMinTOTA==} + '@babel/types@7.26.9': + resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - dev: true - /@changesets/apply-release-plan@7.0.8: - resolution: {integrity: sha512-qjMUj4DYQ1Z6qHawsn7S71SujrExJ+nceyKKyI9iB+M5p9lCL55afuEd6uLBPRpLGWQwkwvWegDHtwHJb1UjpA==} - dependencies: - '@changesets/config': 3.0.5 - '@changesets/get-version-range-type': 0.4.0 - '@changesets/git': 3.0.2 - '@changesets/should-skip-package': 0.1.1 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - detect-indent: 6.1.0 - fs-extra: 7.0.1 - lodash.startcase: 4.4.0 - outdent: 0.5.0 - prettier: 2.8.8 - resolve-from: 5.0.0 - semver: 7.7.1 - dev: true + '@changesets/apply-release-plan@7.0.9': + resolution: {integrity: sha512-xB1shQP6WhflnAN+rV8eJ7j4oBgka/K62+pHuEv6jmUtSqlx2ZvJSnCGzyNfkiQmSfVsqXoI3pbAuyVpTbsKzA==} - /@changesets/assemble-release-plan@6.0.5: - resolution: {integrity: sha512-IgvBWLNKZd6k4t72MBTBK3nkygi0j3t3zdC1zrfusYo0KpdsvnDjrMM9vPnTCLCMlfNs55jRL4gIMybxa64FCQ==} - dependencies: - '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.2 - '@changesets/should-skip-package': 0.1.1 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - semver: 7.7.1 - dev: true + '@changesets/assemble-release-plan@6.0.6': + resolution: {integrity: sha512-Frkj8hWJ1FRZiY3kzVCKzS0N5mMwWKwmv9vpam7vt8rZjLL1JMthdh6pSDVSPumHPshTTkKZ0VtNbE0cJHZZUg==} - /@changesets/changelog-git@0.2.0: - resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} - dependencies: - '@changesets/types': 6.0.0 - dev: true + '@changesets/changelog-git@0.2.1': + resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==} - /@changesets/cli@2.27.12: - resolution: {integrity: sha512-9o3fOfHYOvBnyEn0mcahB7wzaA3P4bGJf8PNqGit5PKaMEFdsRixik+txkrJWd2VX+O6wRFXpxQL8j/1ANKE9g==} + '@changesets/cli@2.28.0': + resolution: {integrity: sha512-of9/8Gzc+DP/Ol9Lak++Y0RsB1oO1CRzZoGIWTYcvHNREJQNqxW5tXm3YzqsA1Gx8ecZZw82FfahtiS+HkNqIw==} hasBin: true - dependencies: - '@changesets/apply-release-plan': 7.0.8 - '@changesets/assemble-release-plan': 6.0.5 - '@changesets/changelog-git': 0.2.0 - '@changesets/config': 3.0.5 - '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.2 - '@changesets/get-release-plan': 4.0.6 - '@changesets/git': 3.0.2 - '@changesets/logger': 0.1.1 - '@changesets/pre': 2.0.1 - '@changesets/read': 0.6.2 - '@changesets/should-skip-package': 0.1.1 - '@changesets/types': 6.0.0 - '@changesets/write': 0.3.2 - '@manypkg/get-packages': 1.1.3 - ansi-colors: 4.1.3 - ci-info: 3.9.0 - enquirer: 2.4.1 - external-editor: 3.1.0 - fs-extra: 7.0.1 - mri: 1.2.0 - p-limit: 2.3.0 - package-manager-detector: 0.2.9 - picocolors: 1.1.1 - resolve-from: 5.0.0 - semver: 7.7.1 - spawndamnit: 3.0.1 - term-size: 2.2.1 - dev: true - /@changesets/config@3.0.5: - resolution: {integrity: sha512-QyXLSSd10GquX7hY0Mt4yQFMEeqnO5z/XLpbIr4PAkNNoQNKwDyiSrx4yd749WddusH1v3OSiA0NRAYmH/APpQ==} - dependencies: - '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.2 - '@changesets/logger': 0.1.1 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - fs-extra: 7.0.1 - micromatch: 4.0.8 - dev: true + '@changesets/config@3.1.0': + resolution: {integrity: sha512-UbZsPkRnv2SF8Ln72B8opmNLhsazv7/M0r6GSQSQzLY++/ZPr5dDSz3L+6G2fDZ+AN1ZjsEGDdBkpEna9eJtrA==} - /@changesets/errors@0.1.4: + '@changesets/errors@0.1.4': resolution: {integrity: sha512-HAcqPF7snsUJ/QzkWoKfRfXushHTu+K5KZLJWPb34s4eCZShIf8BFO3fwq6KU8+G7L5KdtN2BzQAXOSXEyiY9Q==} - dependencies: - extendable-error: 0.1.7 - dev: true - /@changesets/errors@0.2.0: + '@changesets/errors@0.2.0': resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} - dependencies: - extendable-error: 0.1.7 - dev: true - /@changesets/get-dependents-graph@2.1.2: - resolution: {integrity: sha512-sgcHRkiBY9i4zWYBwlVyAjEM9sAzs4wYVwJUdnbDLnVG3QwAaia1Mk5P8M7kraTOZN+vBET7n8KyB0YXCbFRLQ==} - dependencies: - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - picocolors: 1.1.1 - semver: 7.7.1 - dev: true + '@changesets/get-dependents-graph@2.1.3': + resolution: {integrity: sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==} - /@changesets/get-release-plan@4.0.6: - resolution: {integrity: sha512-FHRwBkY7Eili04Y5YMOZb0ezQzKikTka4wL753vfUA5COSebt7KThqiuCN9BewE4/qFGgF/5t3AuzXx1/UAY4w==} - dependencies: - '@changesets/assemble-release-plan': 6.0.5 - '@changesets/config': 3.0.5 - '@changesets/pre': 2.0.1 - '@changesets/read': 0.6.2 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - dev: true + '@changesets/get-release-plan@4.0.7': + resolution: {integrity: sha512-FdXJ5B4ZcIWtTu+SEIAthnSScwF+mS+e657gagYUyprVLFSkAJKrA50MqoW3iOopbwQ/UhYaTESNyF9cpg1bQA==} - /@changesets/get-version-range-type@0.4.0: + '@changesets/get-version-range-type@0.4.0': resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} - dev: true - /@changesets/git@2.0.0: + '@changesets/git@2.0.0': resolution: {integrity: sha512-enUVEWbiqUTxqSnmesyJGWfzd51PY4H7mH9yUw0hPVpZBJ6tQZFMU3F3mT/t9OJ/GjyiM4770i+sehAn6ymx6A==} - dependencies: - '@babel/runtime': 7.26.7 - '@changesets/errors': 0.1.4 - '@changesets/types': 5.2.1 - '@manypkg/get-packages': 1.1.3 - is-subdir: 1.2.0 - micromatch: 4.0.8 - spawndamnit: 2.0.0 - dev: true - /@changesets/git@3.0.2: + '@changesets/git@3.0.2': resolution: {integrity: sha512-r1/Kju9Y8OxRRdvna+nxpQIsMsRQn9dhhAZt94FLDeu0Hij2hnOozW8iqnHBgvu+KdnJppCveQwK4odwfw/aWQ==} - dependencies: - '@changesets/errors': 0.2.0 - '@manypkg/get-packages': 1.1.3 - is-subdir: 1.2.0 - micromatch: 4.0.8 - spawndamnit: 3.0.1 - dev: true - /@changesets/logger@0.0.5: + '@changesets/logger@0.0.5': resolution: {integrity: sha512-gJyZHomu8nASHpaANzc6bkQMO9gU/ib20lqew1rVx753FOxffnCrJlGIeQVxNWCqM+o6OOleCo/ivL8UAO5iFw==} - dependencies: - chalk: 2.4.2 - dev: true - /@changesets/logger@0.1.1: + '@changesets/logger@0.1.1': resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} - dependencies: - picocolors: 1.1.1 - dev: true - /@changesets/parse@0.3.16: + '@changesets/parse@0.3.16': resolution: {integrity: sha512-127JKNd167ayAuBjUggZBkmDS5fIKsthnr9jr6bdnuUljroiERW7FBTDNnNVyJ4l69PzR57pk6mXQdtJyBCJKg==} - dependencies: - '@changesets/types': 5.2.1 - js-yaml: 3.14.1 - dev: true - /@changesets/parse@0.4.0: - resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} - dependencies: - '@changesets/types': 6.0.0 - js-yaml: 3.14.1 - dev: true + '@changesets/parse@0.4.1': + resolution: {integrity: sha512-iwksMs5Bf/wUItfcg+OXrEpravm5rEd9Bf4oyIPL4kVTmJQ7PNDSd6MDYkpSJR1pn7tz/k8Zf2DhTCqX08Ou+Q==} - /@changesets/pre@2.0.1: - resolution: {integrity: sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ==} - dependencies: - '@changesets/errors': 0.2.0 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - fs-extra: 7.0.1 - dev: true + '@changesets/pre@2.0.2': + resolution: {integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==} - /@changesets/read@0.5.9: + '@changesets/read@0.5.9': resolution: {integrity: sha512-T8BJ6JS6j1gfO1HFq50kU3qawYxa4NTbI/ASNVVCBTsKquy2HYwM9r7ZnzkiMe8IEObAJtUVGSrePCOxAK2haQ==} - dependencies: - '@babel/runtime': 7.26.7 - '@changesets/git': 2.0.0 - '@changesets/logger': 0.0.5 - '@changesets/parse': 0.3.16 - '@changesets/types': 5.2.1 - chalk: 2.4.2 - fs-extra: 7.0.1 - p-filter: 2.1.0 - dev: true - /@changesets/read@0.6.2: - resolution: {integrity: sha512-wjfQpJvryY3zD61p8jR87mJdyx2FIhEcdXhKUqkja87toMrP/3jtg/Yg29upN+N4Ckf525/uvV7a4tzBlpk6gg==} - dependencies: - '@changesets/git': 3.0.2 - '@changesets/logger': 0.1.1 - '@changesets/parse': 0.4.0 - '@changesets/types': 6.0.0 - fs-extra: 7.0.1 - p-filter: 2.1.0 - picocolors: 1.1.1 - dev: true + '@changesets/read@0.6.3': + resolution: {integrity: sha512-9H4p/OuJ3jXEUTjaVGdQEhBdqoT2cO5Ts95JTFsQyawmKzpL8FnIeJSyhTDPW1MBRDnwZlHFEM9SpPwJDY5wIg==} - /@changesets/should-skip-package@0.1.1: - resolution: {integrity: sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg==} - dependencies: - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - dev: true + '@changesets/should-skip-package@0.1.2': + resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==} - /@changesets/types@4.1.0: + '@changesets/types@4.1.0': resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} - dev: true - /@changesets/types@5.2.1: + '@changesets/types@5.2.1': resolution: {integrity: sha512-myLfHbVOqaq9UtUKqR/nZA/OY7xFjQMdfgfqeZIBK4d0hA6pgxArvdv8M+6NUzzBsjWLOtvApv8YHr4qM+Kpfg==} - dev: true - /@changesets/types@6.0.0: - resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} - dev: true + '@changesets/types@6.1.0': + resolution: {integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==} - /@changesets/write@0.3.2: - resolution: {integrity: sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==} - dependencies: - '@changesets/types': 6.0.0 - fs-extra: 7.0.1 - human-id: 1.0.2 - prettier: 2.8.8 - dev: true + '@changesets/write@0.4.0': + resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} - /@ctrl/tinycolor@3.6.1: + '@ctrl/tinycolor@3.6.1': resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==} engines: {node: '>=10'} - dev: true - /@emotion/hash@0.8.0: + '@emotion/hash@0.8.0': resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==} - dev: true - /@emotion/is-prop-valid@1.3.1: + '@emotion/is-prop-valid@1.3.1': resolution: {integrity: sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==} - dependencies: - '@emotion/memoize': 0.9.0 - dev: true - /@emotion/memoize@0.9.0: + '@emotion/memoize@0.9.0': resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} - dev: true - /@emotion/stylis@0.8.5: + '@emotion/stylis@0.8.5': resolution: {integrity: sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==} - dev: true - /@emotion/unitless@0.7.5: + '@emotion/unitless@0.7.5': resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} - dev: true - /@esbuild/aix-ppc64@0.23.1: + '@esbuild/aix-ppc64@0.23.1': resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm64@0.17.19: + '@esbuild/android-arm64@0.17.19': resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} engines: {node: '>=12'} cpu: [arm64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm64@0.19.2: + '@esbuild/android-arm64@0.19.2': resolution: {integrity: sha512-lsB65vAbe90I/Qe10OjkmrdxSX4UJDjosDgb8sZUKcg3oefEuW2OT2Vozz8ef7wrJbMcmhvCC+hciF8jY/uAkw==} engines: {node: '>=12'} cpu: [arm64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm64@0.23.1: + '@esbuild/android-arm64@0.23.1': resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} engines: {node: '>=18'} cpu: [arm64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm@0.17.19: + '@esbuild/android-arm@0.17.19': resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} engines: {node: '>=12'} cpu: [arm] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm@0.19.2: + '@esbuild/android-arm@0.19.2': resolution: {integrity: sha512-tM8yLeYVe7pRyAu9VMi/Q7aunpLwD139EY1S99xbQkT4/q2qa6eA4ige/WJQYdJ8GBL1K33pPFhPfPdJ/WzT8Q==} engines: {node: '>=12'} cpu: [arm] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm@0.23.1: + '@esbuild/android-arm@0.23.1': resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} engines: {node: '>=18'} cpu: [arm] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-x64@0.17.19: + '@esbuild/android-x64@0.17.19': resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} engines: {node: '>=12'} cpu: [x64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-x64@0.19.2: + '@esbuild/android-x64@0.19.2': resolution: {integrity: sha512-qK/TpmHt2M/Hg82WXHRc/W/2SGo/l1thtDHZWqFq7oi24AjZ4O/CpPSu6ZuYKFkEgmZlFoa7CooAyYmuvnaG8w==} engines: {node: '>=12'} cpu: [x64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-x64@0.23.1: + '@esbuild/android-x64@0.23.1': resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} engines: {node: '>=18'} cpu: [x64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.17.19: + '@esbuild/darwin-arm64@0.17.19': resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.19.2: + '@esbuild/darwin-arm64@0.19.2': resolution: {integrity: sha512-Ora8JokrvrzEPEpZO18ZYXkH4asCdc1DLdcVy8TGf5eWtPO1Ie4WroEJzwI52ZGtpODy3+m0a2yEX9l+KUn0tA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.23.1: + '@esbuild/darwin-arm64@0.23.1': resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.17.19: + '@esbuild/darwin-x64@0.17.19': resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.19.2: + '@esbuild/darwin-x64@0.19.2': resolution: {integrity: sha512-tP+B5UuIbbFMj2hQaUr6EALlHOIOmlLM2FK7jeFBobPy2ERdohI4Ka6ZFjZ1ZYsrHE/hZimGuU90jusRE0pwDw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.23.1: + '@esbuild/darwin-x64@0.23.1': resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.17.19: + '@esbuild/freebsd-arm64@0.17.19': resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.19.2: + '@esbuild/freebsd-arm64@0.19.2': resolution: {integrity: sha512-YbPY2kc0acfzL1VPVK6EnAlig4f+l8xmq36OZkU0jzBVHcOTyQDhnKQaLzZudNJQyymd9OqQezeaBgkTGdTGeQ==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.23.1: + '@esbuild/freebsd-arm64@0.23.1': resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.17.19: + '@esbuild/freebsd-x64@0.17.19': resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.19.2: + '@esbuild/freebsd-x64@0.19.2': resolution: {integrity: sha512-nSO5uZT2clM6hosjWHAsS15hLrwCvIWx+b2e3lZ3MwbYSaXwvfO528OF+dLjas1g3bZonciivI8qKR/Hm7IWGw==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.23.1: + '@esbuild/freebsd-x64@0.23.1': resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.17.19: + '@esbuild/linux-arm64@0.17.19': resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} engines: {node: '>=12'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.19.2: + '@esbuild/linux-arm64@0.19.2': resolution: {integrity: sha512-ig2P7GeG//zWlU0AggA3pV1h5gdix0MA3wgB+NsnBXViwiGgY77fuN9Wr5uoCrs2YzaYfogXgsWZbm+HGr09xg==} engines: {node: '>=12'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.23.1: + '@esbuild/linux-arm64@0.23.1': resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.17.19: + '@esbuild/linux-arm@0.17.19': resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} engines: {node: '>=12'} cpu: [arm] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.19.2: + '@esbuild/linux-arm@0.19.2': resolution: {integrity: sha512-Odalh8hICg7SOD7XCj0YLpYCEc+6mkoq63UnExDCiRA2wXEmGlK5JVrW50vZR9Qz4qkvqnHcpH+OFEggO3PgTg==} engines: {node: '>=12'} cpu: [arm] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.23.1: + '@esbuild/linux-arm@0.23.1': resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} engines: {node: '>=18'} cpu: [arm] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.17.19: + '@esbuild/linux-ia32@0.17.19': resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} engines: {node: '>=12'} cpu: [ia32] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.19.2: + '@esbuild/linux-ia32@0.19.2': resolution: {integrity: sha512-mLfp0ziRPOLSTek0Gd9T5B8AtzKAkoZE70fneiiyPlSnUKKI4lp+mGEnQXcQEHLJAcIYDPSyBvsUbKUG2ri/XQ==} engines: {node: '>=12'} cpu: [ia32] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.23.1: + '@esbuild/linux-ia32@0.23.1': resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-loong64@0.17.19: + '@esbuild/linux-loong64@0.17.19': resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-loong64@0.19.2: + '@esbuild/linux-loong64@0.19.2': resolution: {integrity: sha512-hn28+JNDTxxCpnYjdDYVMNTR3SKavyLlCHHkufHV91fkewpIyQchS1d8wSbmXhs1fiYDpNww8KTFlJ1dHsxeSw==} engines: {node: '>=12'} cpu: [loong64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-loong64@0.23.1: + '@esbuild/linux-loong64@0.23.1': resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-mips64el@0.17.19: + '@esbuild/linux-mips64el@0.17.19': resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-mips64el@0.19.2: + '@esbuild/linux-mips64el@0.19.2': resolution: {integrity: sha512-KbXaC0Sejt7vD2fEgPoIKb6nxkfYW9OmFUK9XQE4//PvGIxNIfPk1NmlHmMg6f25x57rpmEFrn1OotASYIAaTg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-mips64el@0.23.1: + '@esbuild/linux-mips64el@0.23.1': resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ppc64@0.17.19: + '@esbuild/linux-ppc64@0.17.19': resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ppc64@0.19.2: + '@esbuild/linux-ppc64@0.19.2': resolution: {integrity: sha512-dJ0kE8KTqbiHtA3Fc/zn7lCd7pqVr4JcT0JqOnbj4LLzYnp+7h8Qi4yjfq42ZlHfhOCM42rBh0EwHYLL6LEzcw==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ppc64@0.23.1: + '@esbuild/linux-ppc64@0.23.1': resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-riscv64@0.17.19: + '@esbuild/linux-riscv64@0.17.19': resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-riscv64@0.19.2: + '@esbuild/linux-riscv64@0.19.2': resolution: {integrity: sha512-7Z/jKNFufZ/bbu4INqqCN6DDlrmOTmdw6D0gH+6Y7auok2r02Ur661qPuXidPOJ+FSgbEeQnnAGgsVynfLuOEw==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-riscv64@0.23.1: + '@esbuild/linux-riscv64@0.23.1': resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.17.19: + '@esbuild/linux-s390x@0.17.19': resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} engines: {node: '>=12'} cpu: [s390x] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.19.2: + '@esbuild/linux-s390x@0.19.2': resolution: {integrity: sha512-U+RinR6aXXABFCcAY4gSlv4CL1oOVvSSCdseQmGO66H+XyuQGZIUdhG56SZaDJQcLmrSfRmx5XZOWyCJPRqS7g==} engines: {node: '>=12'} cpu: [s390x] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.23.1: + '@esbuild/linux-s390x@0.23.1': resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.17.19: + '@esbuild/linux-x64@0.17.19': resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} engines: {node: '>=12'} cpu: [x64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.19.2: + '@esbuild/linux-x64@0.19.2': resolution: {integrity: sha512-oxzHTEv6VPm3XXNaHPyUTTte+3wGv7qVQtqaZCrgstI16gCuhNOtBXLEBkBREP57YTd68P0VgDgG73jSD8bwXQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.23.1: + '@esbuild/linux-x64@0.23.1': resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} engines: {node: '>=18'} cpu: [x64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.17.19: + '@esbuild/netbsd-x64@0.17.19': resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.19.2: + '@esbuild/netbsd-x64@0.19.2': resolution: {integrity: sha512-WNa5zZk1XpTTwMDompZmvQLHszDDDN7lYjEHCUmAGB83Bgs20EMs7ICD+oKeT6xt4phV4NDdSi/8OfjPbSbZfQ==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.23.1: + '@esbuild/netbsd-x64@0.23.1': resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-arm64@0.23.1: + '@esbuild/openbsd-arm64@0.23.1': resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.17.19: + '@esbuild/openbsd-x64@0.17.19': resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.19.2: + '@esbuild/openbsd-x64@0.19.2': resolution: {integrity: sha512-S6kI1aT3S++Dedb7vxIuUOb3oAxqxk2Rh5rOXOTYnzN8JzW1VzBd+IqPiSpgitu45042SYD3HCoEyhLKQcDFDw==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.23.1: + '@esbuild/openbsd-x64@0.23.1': resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.17.19: + '@esbuild/sunos-x64@0.17.19': resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.19.2: + '@esbuild/sunos-x64@0.19.2': resolution: {integrity: sha512-VXSSMsmb+Z8LbsQGcBMiM+fYObDNRm8p7tkUDMPG/g4fhFX5DEFmjxIEa3N8Zr96SjsJ1woAhF0DUnS3MF3ARw==} engines: {node: '>=12'} cpu: [x64] os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.23.1: + '@esbuild/sunos-x64@0.23.1': resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.17.19: + '@esbuild/win32-arm64@0.17.19': resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} engines: {node: '>=12'} cpu: [arm64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.19.2: + '@esbuild/win32-arm64@0.19.2': resolution: {integrity: sha512-5NayUlSAyb5PQYFAU9x3bHdsqB88RC3aM9lKDAz4X1mo/EchMIT1Q+pSeBXNgkfNmRecLXA0O8xP+x8V+g/LKg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.23.1: + '@esbuild/win32-arm64@0.23.1': resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-ia32@0.17.19: + '@esbuild/win32-ia32@0.17.19': resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} engines: {node: '>=12'} cpu: [ia32] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-ia32@0.19.2: + '@esbuild/win32-ia32@0.19.2': resolution: {integrity: sha512-47gL/ek1v36iN0wL9L4Q2MFdujR0poLZMJwhO2/N3gA89jgHp4MR8DKCmwYtGNksbfJb9JoTtbkoe6sDhg2QTA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-ia32@0.23.1: + '@esbuild/win32-ia32@0.23.1': resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-x64@0.17.19: + '@esbuild/win32-x64@0.17.19': resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} engines: {node: '>=12'} cpu: [x64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-x64@0.19.2: + '@esbuild/win32-x64@0.19.2': resolution: {integrity: sha512-tcuhV7ncXBqbt/Ybf0IyrMcwVOAPDckMK9rXNHtF17UTK18OKLpg08glminN06pt2WCoALhXdLfSPbVvK/6fxw==} engines: {node: '>=12'} cpu: [x64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-x64@0.23.1: + '@esbuild/win32-x64@0.23.1': resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} engines: {node: '>=18'} cpu: [x64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@headlessui/react@1.7.19(react-dom@18.3.1)(react@18.3.1): + '@headlessui/react@1.7.19': resolution: {integrity: sha512-Ll+8q3OlMJfJbAKM/+/Y2q6PPYbryqNTXDbryx7SXLIDamkF6iQFbriYHga0dY44PvDhvvBWCx1Xj4U5+G4hOw==} engines: {node: '>=10'} peerDependencies: react: ^16 || ^17 || ^18 react-dom: ^16 || ^17 || ^18 - dependencies: - '@tanstack/react-virtual': 3.13.0(react-dom@18.3.1)(react@18.3.1) - client-only: 0.0.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - dev: true - /@inquirer/checkbox@2.5.0: + '@inquirer/checkbox@2.5.0': resolution: {integrity: sha512-sMgdETOfi2dUHT8r7TT1BTKOwNvdDGFDXYWtQ2J69SvlYNntk9I/gJe7r5yvMwwsuKnYbuRs3pNhx4tgNck5aA==} engines: {node: '>=18'} - dependencies: - '@inquirer/core': 9.2.1 - '@inquirer/figures': 1.0.10 - '@inquirer/type': 1.5.5 - ansi-escapes: 4.3.2 - yoctocolors-cjs: 2.1.2 - dev: true - /@inquirer/confirm@3.2.0: + '@inquirer/confirm@3.2.0': resolution: {integrity: sha512-oOIwPs0Dvq5220Z8lGL/6LHRTEr9TgLHmiI99Rj1PJ1p1czTys+olrgBqZk4E2qC0YTzeHprxSQmoHioVdJ7Lw==} engines: {node: '>=18'} - dependencies: - '@inquirer/core': 9.2.1 - '@inquirer/type': 1.5.5 - dev: true - /@inquirer/core@9.2.1: + '@inquirer/core@9.2.1': resolution: {integrity: sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==} engines: {node: '>=18'} - dependencies: - '@inquirer/figures': 1.0.10 - '@inquirer/type': 2.0.0 - '@types/mute-stream': 0.0.4 - '@types/node': 22.13.1 - '@types/wrap-ansi': 3.0.0 - ansi-escapes: 4.3.2 - cli-width: 4.1.0 - mute-stream: 1.0.0 - signal-exit: 4.1.0 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.2 - dev: true - /@inquirer/editor@2.2.0: + '@inquirer/editor@2.2.0': resolution: {integrity: sha512-9KHOpJ+dIL5SZli8lJ6xdaYLPPzB8xB9GZItg39MBybzhxA16vxmszmQFrRwbOA918WA2rvu8xhDEg/p6LXKbw==} engines: {node: '>=18'} - dependencies: - '@inquirer/core': 9.2.1 - '@inquirer/type': 1.5.5 - external-editor: 3.1.0 - dev: true - /@inquirer/expand@2.3.0: + '@inquirer/expand@2.3.0': resolution: {integrity: sha512-qnJsUcOGCSG1e5DTOErmv2BPQqrtT6uzqn1vI/aYGiPKq+FgslGZmtdnXbhuI7IlT7OByDoEEqdnhUnVR2hhLw==} engines: {node: '>=18'} - dependencies: - '@inquirer/core': 9.2.1 - '@inquirer/type': 1.5.5 - yoctocolors-cjs: 2.1.2 - dev: true - /@inquirer/figures@1.0.10: + '@inquirer/figures@1.0.10': resolution: {integrity: sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw==} engines: {node: '>=18'} - dev: true - /@inquirer/input@2.3.0: + '@inquirer/input@2.3.0': resolution: {integrity: sha512-XfnpCStx2xgh1LIRqPXrTNEEByqQWoxsWYzNRSEUxJ5c6EQlhMogJ3vHKu8aXuTacebtaZzMAHwEL0kAflKOBw==} engines: {node: '>=18'} - dependencies: - '@inquirer/core': 9.2.1 - '@inquirer/type': 1.5.5 - dev: true - /@inquirer/number@1.1.0: + '@inquirer/number@1.1.0': resolution: {integrity: sha512-ilUnia/GZUtfSZy3YEErXLJ2Sljo/mf9fiKc08n18DdwdmDbOzRcTv65H1jjDvlsAuvdFXf4Sa/aL7iw/NanVA==} engines: {node: '>=18'} - dependencies: - '@inquirer/core': 9.2.1 - '@inquirer/type': 1.5.5 - dev: true - /@inquirer/password@2.2.0: + '@inquirer/password@2.2.0': resolution: {integrity: sha512-5otqIpgsPYIshqhgtEwSspBQE40etouR8VIxzpJkv9i0dVHIpyhiivbkH9/dGiMLdyamT54YRdGJLfl8TFnLHg==} engines: {node: '>=18'} - dependencies: - '@inquirer/core': 9.2.1 - '@inquirer/type': 1.5.5 - ansi-escapes: 4.3.2 - dev: true - /@inquirer/prompts@5.5.0: + '@inquirer/prompts@5.5.0': resolution: {integrity: sha512-BHDeL0catgHdcHbSFFUddNzvx/imzJMft+tWDPwTm3hfu8/tApk1HrooNngB2Mb4qY+KaRWF+iZqoVUPeslEog==} engines: {node: '>=18'} - dependencies: - '@inquirer/checkbox': 2.5.0 - '@inquirer/confirm': 3.2.0 - '@inquirer/editor': 2.2.0 - '@inquirer/expand': 2.3.0 - '@inquirer/input': 2.3.0 - '@inquirer/number': 1.1.0 - '@inquirer/password': 2.2.0 - '@inquirer/rawlist': 2.3.0 - '@inquirer/search': 1.1.0 - '@inquirer/select': 2.5.0 - dev: true - /@inquirer/rawlist@2.3.0: + '@inquirer/rawlist@2.3.0': resolution: {integrity: sha512-zzfNuINhFF7OLAtGHfhwOW2TlYJyli7lOUoJUXw/uyklcwalV6WRXBXtFIicN8rTRK1XTiPWB4UY+YuW8dsnLQ==} engines: {node: '>=18'} - dependencies: - '@inquirer/core': 9.2.1 - '@inquirer/type': 1.5.5 - yoctocolors-cjs: 2.1.2 - dev: true - /@inquirer/search@1.1.0: + '@inquirer/search@1.1.0': resolution: {integrity: sha512-h+/5LSj51dx7hp5xOn4QFnUaKeARwUCLs6mIhtkJ0JYPBLmEYjdHSYh7I6GrLg9LwpJ3xeX0FZgAG1q0QdCpVQ==} engines: {node: '>=18'} - dependencies: - '@inquirer/core': 9.2.1 - '@inquirer/figures': 1.0.10 - '@inquirer/type': 1.5.5 - yoctocolors-cjs: 2.1.2 - dev: true - /@inquirer/select@2.5.0: + '@inquirer/select@2.5.0': resolution: {integrity: sha512-YmDobTItPP3WcEI86GvPo+T2sRHkxxOq/kXmsBjHS5BVXUgvgZ5AfJjkvQvZr03T81NnI3KrrRuMzeuYUQRFOA==} engines: {node: '>=18'} - dependencies: - '@inquirer/core': 9.2.1 - '@inquirer/figures': 1.0.10 - '@inquirer/type': 1.5.5 - ansi-escapes: 4.3.2 - yoctocolors-cjs: 2.1.2 - dev: true - /@inquirer/type@1.5.5: + '@inquirer/type@1.5.5': resolution: {integrity: sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==} engines: {node: '>=18'} - dependencies: - mute-stream: 1.0.0 - dev: true - /@inquirer/type@2.0.0: + '@inquirer/type@2.0.0': resolution: {integrity: sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==} engines: {node: '>=18'} - dependencies: - mute-stream: 1.0.0 - dev: true - /@jimp/bmp@0.22.12(@jimp/custom@0.22.12): + '@jimp/bmp@0.22.12': resolution: {integrity: sha512-aeI64HD0npropd+AR76MCcvvRaa+Qck6loCOS03CkkxGHN5/r336qTM5HPUdHKMDOGzqknuVPA8+kK1t03z12g==} peerDependencies: '@jimp/custom': '>=0.3.5' - dependencies: - '@jimp/custom': 0.22.12 - '@jimp/utils': 0.22.12 - bmp-js: 0.1.0 - dev: true - /@jimp/core@0.22.12: + '@jimp/core@0.22.12': resolution: {integrity: sha512-l0RR0dOPyzMKfjUW1uebzueFEDtCOj9fN6pyTYWWOM/VS4BciXQ1VVrJs8pO3kycGYZxncRKhCoygbNr8eEZQA==} - dependencies: - '@jimp/utils': 0.22.12 - any-base: 1.1.0 - buffer: 5.7.1 - exif-parser: 0.1.12 - file-type: 16.5.4 - isomorphic-fetch: 3.0.0 - pixelmatch: 4.0.2 - tinycolor2: 1.6.0 - transitivePeerDependencies: - - encoding - dev: true - /@jimp/custom@0.22.12: + '@jimp/custom@0.22.12': resolution: {integrity: sha512-xcmww1O/JFP2MrlGUMd3Q78S3Qu6W3mYTXYuIqFq33EorgYHV/HqymHfXy9GjiCJ7OI+7lWx6nYFOzU7M4rd1Q==} - dependencies: - '@jimp/core': 0.22.12 - transitivePeerDependencies: - - encoding - dev: true - /@jimp/gif@0.22.12(@jimp/custom@0.22.12): + '@jimp/gif@0.22.12': resolution: {integrity: sha512-y6BFTJgch9mbor2H234VSjd9iwAhaNf/t3US5qpYIs0TSbAvM02Fbc28IaDETj9+4YB4676sz4RcN/zwhfu1pg==} peerDependencies: '@jimp/custom': '>=0.3.5' - dependencies: - '@jimp/custom': 0.22.12 - '@jimp/utils': 0.22.12 - gifwrap: 0.10.1 - omggif: 1.0.10 - dev: true - /@jimp/jpeg@0.22.12(@jimp/custom@0.22.12): + '@jimp/jpeg@0.22.12': resolution: {integrity: sha512-Rq26XC/uQWaQKyb/5lksCTCxXhtY01NJeBN+dQv5yNYedN0i7iYu+fXEoRsfaJ8xZzjoANH8sns7rVP4GE7d/Q==} peerDependencies: '@jimp/custom': '>=0.3.5' - dependencies: - '@jimp/custom': 0.22.12 - '@jimp/utils': 0.22.12 - jpeg-js: 0.4.4 - dev: true - /@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12): + '@jimp/plugin-blit@0.22.12': resolution: {integrity: sha512-xslz2ZoFZOPLY8EZ4dC29m168BtDx95D6K80TzgUi8gqT7LY6CsajWO0FAxDwHz6h0eomHMfyGX0stspBrTKnQ==} peerDependencies: '@jimp/custom': '>=0.3.5' - dependencies: - '@jimp/custom': 0.22.12 - '@jimp/utils': 0.22.12 - dev: true - /@jimp/plugin-blur@0.22.12(@jimp/custom@0.22.12): + '@jimp/plugin-blur@0.22.12': resolution: {integrity: sha512-S0vJADTuh1Q9F+cXAwFPlrKWzDj2F9t/9JAbUvaaDuivpyWuImEKXVz5PUZw2NbpuSHjwssbTpOZ8F13iJX4uw==} peerDependencies: '@jimp/custom': '>=0.3.5' - dependencies: - '@jimp/custom': 0.22.12 - '@jimp/utils': 0.22.12 - dev: true - /@jimp/plugin-circle@0.22.12(@jimp/custom@0.22.12): + '@jimp/plugin-circle@0.22.12': resolution: {integrity: sha512-SWVXx1yiuj5jZtMijqUfvVOJBwOifFn0918ou4ftoHgegc5aHWW5dZbYPjvC9fLpvz7oSlptNl2Sxr1zwofjTg==} peerDependencies: '@jimp/custom': '>=0.3.5' - dependencies: - '@jimp/custom': 0.22.12 - '@jimp/utils': 0.22.12 - dev: true - /@jimp/plugin-color@0.22.12(@jimp/custom@0.22.12): + '@jimp/plugin-color@0.22.12': resolution: {integrity: sha512-xImhTE5BpS8xa+mAN6j4sMRWaUgUDLoaGHhJhpC+r7SKKErYDR0WQV4yCE4gP+N0gozD0F3Ka1LUSaMXrn7ZIA==} peerDependencies: '@jimp/custom': '>=0.3.5' - dependencies: - '@jimp/custom': 0.22.12 - '@jimp/utils': 0.22.12 - tinycolor2: 1.6.0 - dev: true - /@jimp/plugin-contain@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12)(@jimp/plugin-resize@0.22.12)(@jimp/plugin-scale@0.22.12): + '@jimp/plugin-contain@0.22.12': resolution: {integrity: sha512-Eo3DmfixJw3N79lWk8q/0SDYbqmKt1xSTJ69yy8XLYQj9svoBbyRpSnHR+n9hOw5pKXytHwUW6nU4u1wegHNoQ==} peerDependencies: '@jimp/custom': '>=0.3.5' '@jimp/plugin-blit': '>=0.3.5' '@jimp/plugin-resize': '>=0.3.5' '@jimp/plugin-scale': '>=0.3.5' - dependencies: - '@jimp/custom': 0.22.12 - '@jimp/plugin-blit': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-scale': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-resize@0.22.12) - '@jimp/utils': 0.22.12 - dev: true - /@jimp/plugin-cover@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-crop@0.22.12)(@jimp/plugin-resize@0.22.12)(@jimp/plugin-scale@0.22.12): + '@jimp/plugin-cover@0.22.12': resolution: {integrity: sha512-z0w/1xH/v/knZkpTNx+E8a7fnasQ2wHG5ze6y5oL2dhH1UufNua8gLQXlv8/W56+4nJ1brhSd233HBJCo01BXA==} peerDependencies: '@jimp/custom': '>=0.3.5' '@jimp/plugin-crop': '>=0.3.5' '@jimp/plugin-resize': '>=0.3.5' '@jimp/plugin-scale': '>=0.3.5' - dependencies: - '@jimp/custom': 0.22.12 - '@jimp/plugin-crop': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-scale': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-resize@0.22.12) - '@jimp/utils': 0.22.12 - dev: true - /@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12): + '@jimp/plugin-crop@0.22.12': resolution: {integrity: sha512-FNuUN0OVzRCozx8XSgP9MyLGMxNHHJMFt+LJuFjn1mu3k0VQxrzqbN06yIl46TVejhyAhcq5gLzqmSCHvlcBVw==} peerDependencies: '@jimp/custom': '>=0.3.5' - dependencies: - '@jimp/custom': 0.22.12 - '@jimp/utils': 0.22.12 - dev: true - /@jimp/plugin-displace@0.22.12(@jimp/custom@0.22.12): + '@jimp/plugin-displace@0.22.12': resolution: {integrity: sha512-qpRM8JRicxfK6aPPqKZA6+GzBwUIitiHaZw0QrJ64Ygd3+AsTc7BXr+37k2x7QcyCvmKXY4haUrSIsBug4S3CA==} peerDependencies: '@jimp/custom': '>=0.3.5' - dependencies: - '@jimp/custom': 0.22.12 - '@jimp/utils': 0.22.12 - dev: true - /@jimp/plugin-dither@0.22.12(@jimp/custom@0.22.12): + '@jimp/plugin-dither@0.22.12': resolution: {integrity: sha512-jYgGdSdSKl1UUEanX8A85v4+QUm+PE8vHFwlamaKk89s+PXQe7eVE3eNeSZX4inCq63EHL7cX580dMqkoC3ZLw==} peerDependencies: '@jimp/custom': '>=0.3.5' - dependencies: - '@jimp/custom': 0.22.12 - '@jimp/utils': 0.22.12 - dev: true - /@jimp/plugin-fisheye@0.22.12(@jimp/custom@0.22.12): + '@jimp/plugin-fisheye@0.22.12': resolution: {integrity: sha512-LGuUTsFg+fOp6KBKrmLkX4LfyCy8IIsROwoUvsUPKzutSqMJnsm3JGDW2eOmWIS/jJpPaeaishjlxvczjgII+Q==} peerDependencies: '@jimp/custom': '>=0.3.5' - dependencies: - '@jimp/custom': 0.22.12 - '@jimp/utils': 0.22.12 - dev: true - /@jimp/plugin-flip@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-rotate@0.22.12): + '@jimp/plugin-flip@0.22.12': resolution: {integrity: sha512-m251Rop7GN8W0Yo/rF9LWk6kNclngyjIJs/VXHToGQ6EGveOSTSQaX2Isi9f9lCDLxt+inBIb7nlaLLxnvHX8Q==} peerDependencies: '@jimp/custom': '>=0.3.5' '@jimp/plugin-rotate': '>=0.3.5' - dependencies: - '@jimp/custom': 0.22.12 - '@jimp/plugin-rotate': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12)(@jimp/plugin-crop@0.22.12)(@jimp/plugin-resize@0.22.12) - '@jimp/utils': 0.22.12 - dev: true - /@jimp/plugin-gaussian@0.22.12(@jimp/custom@0.22.12): + '@jimp/plugin-gaussian@0.22.12': resolution: {integrity: sha512-sBfbzoOmJ6FczfG2PquiK84NtVGeScw97JsCC3rpQv1PHVWyW+uqWFF53+n3c8Y0P2HWlUjflEla2h/vWShvhg==} peerDependencies: '@jimp/custom': '>=0.3.5' - dependencies: - '@jimp/custom': 0.22.12 - '@jimp/utils': 0.22.12 - dev: true - /@jimp/plugin-invert@0.22.12(@jimp/custom@0.22.12): + '@jimp/plugin-invert@0.22.12': resolution: {integrity: sha512-N+6rwxdB+7OCR6PYijaA/iizXXodpxOGvT/smd/lxeXsZ/empHmFFFJ/FaXcYh19Tm04dGDaXcNF/dN5nm6+xQ==} peerDependencies: '@jimp/custom': '>=0.3.5' - dependencies: - '@jimp/custom': 0.22.12 - '@jimp/utils': 0.22.12 - dev: true - /@jimp/plugin-mask@0.22.12(@jimp/custom@0.22.12): + '@jimp/plugin-mask@0.22.12': resolution: {integrity: sha512-4AWZg+DomtpUA099jRV8IEZUfn1wLv6+nem4NRJC7L/82vxzLCgXKTxvNvBcNmJjT9yS1LAAmiJGdWKXG63/NA==} peerDependencies: '@jimp/custom': '>=0.3.5' - dependencies: - '@jimp/custom': 0.22.12 - '@jimp/utils': 0.22.12 - dev: true - /@jimp/plugin-normalize@0.22.12(@jimp/custom@0.22.12): + '@jimp/plugin-normalize@0.22.12': resolution: {integrity: sha512-0So0rexQivnWgnhacX4cfkM2223YdExnJTTy6d06WbkfZk5alHUx8MM3yEzwoCN0ErO7oyqEWRnEkGC+As1FtA==} peerDependencies: '@jimp/custom': '>=0.3.5' - dependencies: - '@jimp/custom': 0.22.12 - '@jimp/utils': 0.22.12 - dev: true - /@jimp/plugin-print@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12): + '@jimp/plugin-print@0.22.12': resolution: {integrity: sha512-c7TnhHlxm87DJeSnwr/XOLjJU/whoiKYY7r21SbuJ5nuH+7a78EW1teOaj5gEr2wYEd7QtkFqGlmyGXY/YclyQ==} peerDependencies: '@jimp/custom': '>=0.3.5' '@jimp/plugin-blit': '>=0.3.5' + + '@jimp/plugin-resize@0.22.12': + resolution: {integrity: sha512-3NyTPlPbTnGKDIbaBgQ3HbE6wXbAlFfxHVERmrbqAi8R3r6fQPxpCauA8UVDnieg5eo04D0T8nnnNIX//i/sXg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-rotate@0.22.12': + resolution: {integrity: sha512-9YNEt7BPAFfTls2FGfKBVgwwLUuKqy+E8bDGGEsOqHtbuhbshVGxN2WMZaD4gh5IDWvR+emmmPPWGgaYNYt1gA==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-blit': '>=0.3.5' + '@jimp/plugin-crop': '>=0.3.5' + '@jimp/plugin-resize': '>=0.3.5' + + '@jimp/plugin-scale@0.22.12': + resolution: {integrity: sha512-dghs92qM6MhHj0HrV2qAwKPMklQtjNpoYgAB94ysYpsXslhRTiPisueSIELRwZGEr0J0VUxpUY7HgJwlSIgGZw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-resize': '>=0.3.5' + + '@jimp/plugin-shadow@0.22.12': + resolution: {integrity: sha512-FX8mTJuCt7/3zXVoeD/qHlm4YH2bVqBuWQHXSuBK054e7wFRnRnbSLPUqAwSeYP3lWqpuQzJtgiiBxV3+WWwTg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-blur': '>=0.3.5' + '@jimp/plugin-resize': '>=0.3.5' + + '@jimp/plugin-threshold@0.22.12': + resolution: {integrity: sha512-4x5GrQr1a/9L0paBC/MZZJjjgjxLYrqSmWd+e+QfAEPvmRxdRoQ5uKEuNgXnm9/weHQBTnQBQsOY2iFja+XGAw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-color': '>=0.8.0' + '@jimp/plugin-resize': '>=0.8.0' + + '@jimp/plugins@0.22.12': + resolution: {integrity: sha512-yBJ8vQrDkBbTgQZLty9k4+KtUQdRjsIDJSPjuI21YdVeqZxYywifHl4/XWILoTZsjTUASQcGoH0TuC0N7xm3ww==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/png@0.22.12': + resolution: {integrity: sha512-Mrp6dr3UTn+aLK8ty/dSKELz+Otdz1v4aAXzV5q53UDD2rbB5joKVJ/ChY310B+eRzNxIovbUF1KVrUsYdE8Hg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/tiff@0.22.12': + resolution: {integrity: sha512-E1LtMh4RyJsoCAfAkBRVSYyZDTtLq9p9LUiiYP0vPtXyxX4BiYBUYihTLSBlCQg5nF2e4OpQg7SPrLdJ66u7jg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/types@0.22.12': + resolution: {integrity: sha512-wwKYzRdElE1MBXFREvCto5s699izFHNVvALUv79GXNbsOVqlwlOxlWJ8DuyOGIXoLP4JW/m30YyuTtfUJgMRMA==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/utils@0.22.12': + resolution: {integrity: sha512-yJ5cWUknGnilBq97ZXOyOS0HhsHOyAyjHwYfHxGbSyMTohgQI6sVyE8KPgDwH8HHW/nMKXk8TrSwAE71zt716Q==} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@loadable/babel-plugin@5.15.3': + resolution: {integrity: sha512-kwEsPxCk8vnwbTfbA4lHqT5t0u0czCQTnCcmOaTjxT5lCn7yZCBTBa9D7lHs+MLM2WyPsZlee3Qh0TTkMMi5jg==} + engines: {node: '>=8'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@loadable/component@5.15.2': + resolution: {integrity: sha512-ryFAZOX5P2vFkUdzaAtTG88IGnr9qxSdvLRvJySXcUA4B4xVWurUNADu3AnKPksxOZajljqTrDEDcYjeL4lvLw==} + engines: {node: '>=8'} + peerDependencies: + react: '>=16.3.0' + + '@loadable/component@5.15.3': + resolution: {integrity: sha512-VOgYgCABn6+/7aGIpg7m0Ruj34tGetaJzt4bQ345FwEovDQZ+dua+NWLmuJKv8rWZyxOUSfoJkmGnzyDXH2BAQ==} + engines: {node: '>=8'} + peerDependencies: + react: ^16.3.0 || ^17.0.0 || ^18.0.0 + + '@loadable/server@5.15.3': + resolution: {integrity: sha512-Bm/BGe+RlChuHDKNNXpQOi4AJ0cKVuSLI+J8U0Q06zTIfT0S1RLoy85qs5RXm3cLIfefygL8+9bcYFgeWcoM8A==} + engines: {node: '>=8'} + peerDependencies: + '@loadable/component': ^5.0.1 + react: ^16.3.0 || ^17.0.0 || ^18.0.0 + + '@manypkg/find-root@1.1.0': + resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + + '@manypkg/get-packages@1.1.3': + resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + + '@mdx-js/loader@2.2.1': + resolution: {integrity: sha512-J4E8A5H+xtk4otZiEZ5AXl61Tj04Avm5MqLQazITdI3+puVXVnTTuZUKM1oNHTtfDIfOl0uMt+o/Ij+x6Fvf+g==} + peerDependencies: + webpack: '>=4' + + '@mdx-js/mdx@2.2.1': + resolution: {integrity: sha512-hZ3ex7exYLJn6FfReq8yTvA6TE53uW9UHJQM9IlSauOuS55J9y8RtA7W+dzp6Yrzr00/U1sd7q+Wf61q6SfiTQ==} + + '@mdx-js/react@2.2.1': + resolution: {integrity: sha512-YdXcMcEnqZhzql98RNrqYo9cEhTTesBiCclEtoiQUbJwx87q9453GTapYU6kJ8ZZ2ek1Vp25SiAXEFy5O/eAPw==} + peerDependencies: + react: '>=16' + + '@midscene/core@0.8.13': + resolution: {integrity: sha512-NuzfEuc4rLYqCph1LtcBJxINcqMZj8NrvvEq5IcF/HL6hg/D1p6uYroaU5Fd79LaJKIxq+ZzeSXRCKs2is7wrA==} + engines: {node: '>=18.0.0'} + + '@midscene/shared@0.8.13': + resolution: {integrity: sha512-HxaQmhR4eslOWbuLT0So+FS1DJvKXNB68R1KLaeu5dmKqW0nicl+f0J6Lv4NbrY7Fpvr3P5GI7FVhXGsSthVrg==} + + '@midscene/web@0.8.13': + resolution: {integrity: sha512-bR0Jytwfo4asYyYXcyVkyzdNzP0eyQytqR+FMnOPR/gV9MJFhAtxcZ/TAc09UJKxtD9Ri86i0HfxCApf1hR9Dw==} + engines: {node: '>=18.0.0'} + hasBin: true + peerDependencies: + '@playwright/test': ^1.44.1 + playwright: ^1.44.1 + puppeteer: '>=20.0.0' + webdriverio: '>=9.0.6' + peerDependenciesMeta: + '@playwright/test': + optional: true + puppeteer: + optional: true + webdriverio: + optional: true + + '@modern-js-reduck/plugin-auto-actions@1.1.11': + resolution: {integrity: sha512-Xn13uPuFh+UnV3BC6tO4N1sC5+aITX2zj5QDwU0wJgc/5zBz9fcElfQ8B+kvQe0/0VlY0ENArmFIl2h1N5TIkQ==} + peerDependencies: + '@modern-js-reduck/store': ^1.1.11 + + '@modern-js-reduck/plugin-devtools@1.1.11': + resolution: {integrity: sha512-PEyJ1/K2wKtXV/JtaFGBC2fUGeY6hjnK/ZXt6p9O2HG3WOub3l76uYpR6B8QCu00+cIWph4MspgO9lHMAuQA8Q==} + peerDependencies: + '@modern-js-reduck/store': ^1.1.11 + + '@modern-js-reduck/plugin-effects@1.1.11': + resolution: {integrity: sha512-koc8ObEWakI9um6qARbMtMOwith/lc+D2uKKhOAvMfWjKC0gER/SpTScWstweAzcvQCtwftynEOpeQyJC2FARA==} + peerDependencies: + '@modern-js-reduck/store': ^1.1.11 + + '@modern-js-reduck/plugin-immutable@1.1.11': + resolution: {integrity: sha512-52gdosxffpmq+FhSKjJqNtnW/wtX6iy/Zq2pn28eyvGCARREVT3E28qZX0kCUH4L5ij2N7QJoQOSovYuXwOlRw==} + peerDependencies: + '@modern-js-reduck/store': ^1.1.11 + + '@modern-js-reduck/react@1.1.11': + resolution: {integrity: sha512-6ViI1wyrkSIAkwpKfK6bC8dnzmyfp2FTWL2AAI2PrIYNAhd+jMuTM4ik6xDHncQmTny3+rAH2B8FfsUIVm7fxQ==} + peerDependencies: + '@types/react': ^16.8 || ^17.0 || ^18.0 + '@types/react-dom': ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@modern-js-reduck/store@1.1.11': + resolution: {integrity: sha512-fvUeswe1pvF9IjC39/KgtQGV4FbwjOmVs2Fk4uxrxXEa7209qRJlDfqIGr5KsnXVporXg0oiDqwcg1xsEljw/A==} + + '@modern-js/babel-compiler@2.31.2': + resolution: {integrity: sha512-4taDHDF3AqLQZo8kBYXILe3lAcRB0aBmJiYxESBvl9nU7t6FQUf0JeCpBicEvmhY+5y0PXNgg4u8tR+bortjog==} + + '@modern-js/babel-compiler@2.32.1': + resolution: {integrity: sha512-Ql4S51OYZiiY2EpiZitzaeptlydzeIMCA307NAbBxM+gqWq1lc7a9NAZjdZBb4agFOPJTkvEHNnt2DboikNNNQ==} + + '@modern-js/babel-plugin-module-resolver@2.31.2': + resolution: {integrity: sha512-V8Ob1i8V8SLTSJ+M6vghiMHK8Jb6INIe2mP/JCqv1K07Jt8Es+UaYW1dZMogxG3mPWpx0jlTg/6nZg/8BdnqSQ==} + + '@modern-js/babel-plugin-module-resolver@2.32.1': + resolution: {integrity: sha512-Rz6qMy1TN+MqO13dbICw3Sga0+Fz+/GO5d7gpOcewKIlypLaH+Ani++8KLOhqMUOyUVFjQj6DdAdxfyPFnq2lQ==} + + '@modern-js/babel-preset-base@2.31.2': + resolution: {integrity: sha512-/GdSCL1c51Fn/Ja4+4EidGYCBI1igEEXPZqdMzSmOgMlhXEFfUogZm4AgASwr+0vK8yHiwOsN/B9vj5MU+jHqw==} + + '@modern-js/babel-preset-base@2.32.1': + resolution: {integrity: sha512-2gbOs/DHYoi6IUTwsgLaxM8oNyPeMOapyRj9hIAvtNIOrQshkhXHORFQ4wBRF+Co+NWNvHjLnbL0aZXVKs5ILw==} + + '@modern-js/builder-rspack-provider@2.31.2': + resolution: {integrity: sha512-DbnV7Nk/NC3OFxAozn6B+muLOi1yE7iKlDvNHU+gLuaRlOLvx/gyzmE2YbFssaZ7iNnbga0XqLXfUkoZ9AK3jw==} + engines: {node: '>=14.0.0'} + + '@modern-js/builder-rspack-provider@2.32.1': + resolution: {integrity: sha512-3av1MRavBSuskgbK7Tr1aSmjZOOwSf56bheu1Elmn8AWK3h4O+m0LhveFZ1cRrE14egU4lM04NH0CDqDVFCu4Q==} + engines: {node: '>=14.0.0'} + + '@modern-js/builder-shared@2.31.2': + resolution: {integrity: sha512-55S0YMU1Ux/mVkb7xcSSUVdZj2+ty+VV6CGUbQGUlpWq7zWVvHDz0SnjzuXPN9gk6uDtZQ6/YFFELaUkVhX31g==} + engines: {node: '>=14.0.0'} + + '@modern-js/builder-shared@2.32.1': + resolution: {integrity: sha512-ql7YOoaqAJC8WUcUv623M3nmZBM8tC9eEesXl0JzY8AQMfiATVNxf8TGZGtjBnmfNt6Zs+jF/zdzuzj3xor3Zg==} + engines: {node: '>=14.0.0'} + + '@modern-js/builder@2.31.2': + resolution: {integrity: sha512-CCKcQXFWZvLa1gEt4XDzvoUddTxOQuaDfShD4C3n6PB233x17rDR0Lk32zk+lp/ArmQjWR1CCrsjq/4dnOPSqw==} + engines: {node: '>=14.0.0'} + + '@modern-js/builder@2.32.1': + resolution: {integrity: sha512-eCK3Xc18eipmiZpy/xQNiCTSxWaY/JuKQIPM/XqNgupBQAkMVf6UThvia1hatDD+nqHvIQp322hKFIRGhf6oPA==} + engines: {node: '>=14.0.0'} + + '@modern-js/core@2.32.1': + resolution: {integrity: sha512-/9UHYiotFL5NkAZgncj1q1XsBV1LKXjKOJcWjkh6cwikynQ7WZtgN5oQWKkWfW2bOFcaZhTeWvrdXNu+/9qJLA==} + + '@modern-js/core@2.60.6': + resolution: {integrity: sha512-zfhOkB8uoOH6Mj06E9/sD8k+efC2b+cG1X/fDzRGyMI91k25Pqpq0yGl5lWn0Zz0/WnH2bLkHlIRlAcOmGgI8g==} + + '@modern-js/doc-core@2.31.2': + resolution: {integrity: sha512-W2o/3jWQLzXTEkFQT1GrJOi5oQIUiuluJfIEKZpt+OfZ66+Wyf4YY/hlRpDmm6oaeeYMWI7RTh4D4Izi63QUxg==} + engines: {node: '>=14.17.6'} + peerDependencies: + '@modern-js/core': ^2.31.2 + react: '>=17' + + '@modern-js/doc-core@2.32.1': + resolution: {integrity: sha512-mJJSgm+4jnoWNNy2uBqoglOB3CE/sqSAunjzZF+mKrf/aSUqJ0hk+Nh0CRhLVrIRZlL8+Sf1pN/Ss7YcWnbXYA==} + engines: {node: '>=14.17.6'} + peerDependencies: + '@modern-js/core': ^2.32.1 + react: '>=17' + + '@modern-js/doc-plugin-api-docgen@2.31.2': + resolution: {integrity: sha512-zNhoNC9l0yOpyiodo9fcBuJ44TWB06U8LgthwDeEO2i2dsdm+eepynkiij/LCQs4qrKDp3IpaFncmvOE4K2J4g==} + engines: {node: '>=14.17.6'} + peerDependencies: + react: '>=17' + react-router-dom: ^6.8.1 + + '@modern-js/doc-plugin-medium-zoom@2.31.2': + resolution: {integrity: sha512-mqmk/dDwJ0Lq/Gatsh8tVol6h+F+uwrzCT6am+rW3/sh6b+7GQHWKe39nWO50WdBXOWJWBbp0yGhu2jcUT42pw==} + engines: {node: '>=14.17.6'} + peerDependencies: + '@modern-js/doc-tools': ^2.31.2 + react: '>=17' + + '@modern-js/doc-plugin-medium-zoom@2.32.1': + resolution: {integrity: sha512-/iHSHyOOzkVvgvNQ/44Ep+TYQnsjHXwaxwZy7p5Can8DMYJdHVI7/U9JVxojqDhcPQqgXWObbkekSdKCte4vYQ==} + engines: {node: '>=14.17.6'} + peerDependencies: + '@modern-js/doc-tools': ^2.32.1 + react: '>=17' + + '@modern-js/doc-plugin-preview@2.31.2': + resolution: {integrity: sha512-f7AAS9rc/OQIIRrTxEaAjvP0LcBZkiQbbOI/d5BVQWMEoTAN4dgKq15IKoi2T73CmRhmvCk2Rf0nnf6F3quOFA==} + engines: {node: '>=14.17.6'} + peerDependencies: + react: '>=17' + react-router-dom: ^6.8.1 + + '@modern-js/doc-tools@2.32.1': + resolution: {integrity: sha512-DOxLh/o7tzxyjBgANSF6OSP//3buN/LMwT7oD0bfs8z2Ku13KYiovio0I+/HY3cm2FErTFucVNG18LAlzIGQRA==} + engines: {node: '>=14.17.6'} + hasBin: true + peerDependencies: + react: '>=17' + + '@modern-js/mdx-rs-binding-darwin-arm64@0.2.4': + resolution: {integrity: sha512-HQXNiDV4HUkt3Coe7wiiihttkexJ9Ghd2O0ximIY+CVlS4jT+BPct44tbMKRH7gAlKWFw6YZAtBbRBVkHg3kTQ==} + engines: {node: '>=14.12'} + cpu: [arm64] + os: [darwin] + + '@modern-js/mdx-rs-binding-darwin-x64@0.2.4': + resolution: {integrity: sha512-6t7eiuk6J5XcBNd6ovXFM6cOllKkntpJTxcSF+QVGm6eq6ScJbwzqSIGrrOpFjEspx8K5UAzVgqBchYSon6PCw==} + engines: {node: '>=14.12'} + cpu: [x64] + os: [darwin] + + '@modern-js/mdx-rs-binding-linux-arm-gnueabihf@0.2.4': + resolution: {integrity: sha512-JHXfaoi9WQZ+lTZjMFOvM0sJAdGAwG+F0NggIjkGu90h2TVmyU1pfvCLSJyFjk3un92ZDoL+fAVDIMKI10PcHw==} + engines: {node: '>=14.12'} + cpu: [arm] + os: [linux] + + '@modern-js/mdx-rs-binding-linux-arm64-gnu@0.2.4': + resolution: {integrity: sha512-1se6fjDuLT4Kj8PX3l7aI3E0/vLaAZH82EnKydSNS8Fbc2SYdk/x5X1Qc/niMi9hw2TLcx5VZOzj2NN4R2Dv6Q==} + engines: {node: '>=14.12'} + cpu: [arm64] + os: [linux] + + '@modern-js/mdx-rs-binding-linux-arm64-musl@0.2.4': + resolution: {integrity: sha512-fHueN1I2dHRmqa3C0UFP+F9ePAnZK8FsVmTDkeQMFZ3gIrooz+bt0G8PyJIzf0pgX6srhPw48gnGVeGngOMHcQ==} + engines: {node: '>=14.12'} + cpu: [arm64] + os: [linux] + + '@modern-js/mdx-rs-binding-linux-x64-gnu@0.2.4': + resolution: {integrity: sha512-AgxPTIcGtuInyYJpkMoVu9nXBVT2Ib96Bc7VEN/NfgLwAadG+XVpMdcjJTk7wiBtlF/5v0gFogwe/fWNW0UQmA==} + engines: {node: '>=14.12'} + cpu: [x64] + os: [linux] + + '@modern-js/mdx-rs-binding-linux-x64-musl@0.2.4': + resolution: {integrity: sha512-jwPAOmIVwAk1sVKESP+T/n+218LraT81l2bKBaZTDaikCAhIV4vWfbi4IbefWWh0BtXVkldchmBl/XyS4J1HBA==} + engines: {node: '>=14.12'} + cpu: [x64] + os: [linux] + + '@modern-js/mdx-rs-binding-win32-arm64-msvc@0.2.4': + resolution: {integrity: sha512-bjgRrZOPf7ahOk5r2/WCznVJD5DhIcQW6NONjHPxv5MGttZm6FdKXXAMFBXO/MtnasN9Ooroch7uh5S+ijc50Q==} + engines: {node: '>=14.12'} + cpu: [arm64] + os: [win32] + + '@modern-js/mdx-rs-binding-win32-x64-msvc@0.2.4': + resolution: {integrity: sha512-3V37CIN2jMF/AkL3ZMwOCsF/2ukHzgJbbeRfIG8JZURNIkQQ3rU/mDFIs3hB7laZir6OtBuKNTYXVRfeDcDpaA==} + engines: {node: '>=14.12'} + cpu: [x64] + os: [win32] + + '@modern-js/mdx-rs-binding@0.2.4': + resolution: {integrity: sha512-3kS3R64ZtoZW4IfTa6GpFfUSsi7L+S5Hrl97wiv2by3WUDiTWE8HuqY0a1wcZHbTcYBgU5YIghvHmqwY8UxgMQ==} + engines: {node: '>= 10'} + + '@modern-js/module-tools@2.60.6': + resolution: {integrity: sha512-zixrEPOfsLn3NtcUEdQf4Km5O4id/PkFbhrOKubBebXowMQx8RbWRQPvy+2qOy3x8Bg/n+U+yhrMqKW5GmWB/Q==} + engines: {node: '>=16.0.0'} + hasBin: true + peerDependencies: + typescript: ^4 || ^5 + peerDependenciesMeta: + typescript: + optional: true + + '@modern-js/monorepo-utils@2.31.2': + resolution: {integrity: sha512-CIayMqHzTj+zBfBxMtf6AV2QIOBcic9ZJcV7/a8Sk6SqY31TBCfvlNISeNqu3CDO8Cv7bE98srernEcYYUISdA==} + + '@modern-js/monorepo-utils@2.32.1': + resolution: {integrity: sha512-YriKUGx2n7sO9KeLzAvhJYsTQqg3HIk+9hsWSJtKYxfv1oV9zZkkbAHolOrBc9aE9IC84bKDmU43cisdJUzLAQ==} + + '@modern-js/node-bundle-require@2.32.1': + resolution: {integrity: sha512-N8MCaLqYg/SV6ul15JZRAV9r/nvXZfjVssxvOg8tHcxuA4XLRopvcL2uy/ULa9s9b8XY4yvpSEysUSbVvo6Xbg==} + + '@modern-js/node-bundle-require@2.60.6': + resolution: {integrity: sha512-xrchg6yAg9dNPB9aAd94/ftpcIG21LXD//0EVxpdcFsMaHYbtXKG8hcA/9MgxlEA1ELJwxedRQov4N3/wFfvNQ==} + + '@modern-js/plugin-changeset@2.60.6': + resolution: {integrity: sha512-cQyFVxoWibC/Am2fw18eEpZPRaIzT6sNu7UXd0J7/E6xdlUVEVndZiOfpCEYSgo8EgTHG4JVxPDWsIJwvbfrrQ==} + + '@modern-js/plugin-data-loader@2.60.6': + resolution: {integrity: sha512-Clc8Rgr2GhThf1HUJPX4Pp9qZJIfZ+tSvr0paWOWRPO56uadNT3yHS7dt4vhOTbK6/WkVVMarbkXWeVd68OVVQ==} + engines: {node: '>=16.2.0'} + peerDependencies: + react: '>=17.0.0' + + '@modern-js/plugin-i18n@2.60.6': + resolution: {integrity: sha512-0yVbRH/bkXEs7oh75GcPaK9CqV+j+UPNVGOIvMliH3ZmHnesGDbK9huzYscBfoDb9zNLmArI9lNsDmS/074mAQ==} + + '@modern-js/plugin-module-doc@2.33.1': + resolution: {integrity: sha512-f1K4055a6pxXdzg5oh6YeOhEWJwpXhTBYUrWGnZaZTAmyZq5cPt5cmaPsy+M4yaaSSWJPuadwjtFeRoetxSS2g==} + peerDependencies: + '@modern-js/module-tools': ^2.33.1 + react: ^18.2.0 + react-dom: ^18.2.0 + + '@modern-js/plugin-module-node-polyfill@2.60.6': + resolution: {integrity: sha512-3xqE2YcVixNssd9sZeht4DTZk/8mbyimQpDXp/4CNZo7eTmha4muuEV/x+nuJrbBxzXACd9sH4B8rrevLLSefA==} + peerDependencies: + '@modern-js/module-tools': ^2.60.6 + peerDependenciesMeta: + '@modern-js/module-tools': + optional: true + + '@modern-js/plugin@2.31.2': + resolution: {integrity: sha512-Gd9wj0uwIBfRme93s7vAcnRhQKdTzPPqmk+J+oqoew3E3c4NPCViD54xmK9/neW5ELPvmri5tKGvZUpmnklNWw==} + + '@modern-js/plugin@2.32.1': + resolution: {integrity: sha512-CaUlKO6LAT4q0+qJ7aucdAAxIKMs/7gzdAYO3MGAjWR4/dPJsD/pWEQTvzxdmbxUHhZxRyUlcw/q8GpPU1Nqqg==} + + '@modern-js/plugin@2.60.6': + resolution: {integrity: sha512-27CPUvnKEerq3kY7uPTYLO9PvP6LB2fV3Xo1RDPTNFgx3WhDUgiPtbqDi2yfzMIgPsaPn9AEdoJMGtD9EuXqfA==} + + '@modern-js/prod-server@2.31.2': + resolution: {integrity: sha512-xUgmC+P4FMDOsTRKZAQ4HZ86OsmIJdky2mpS7k5bPydtqZL5usmhWXRyX02u+MgyPKLHy1x3FGVDI9ZkqqdWEw==} + + '@modern-js/prod-server@2.32.1': + resolution: {integrity: sha512-tQGurvUyv4+zTEVoSirDZdhYmwneiQmUfdHn/g86xOkkap8ms6fwYbYIovUGWIj+gy19tR39abNTqv18m2hZXw==} + + '@modern-js/remark-container@2.31.2': + resolution: {integrity: sha512-NQEz8xPfa2ESPVr5FhcaGizcApQAwFOjX7czIanFlr5F98hRnc8YUHFKKtG6Xir2N+0yUOhJFNHivaV/YuDVFQ==} + engines: {node: '>=14.17.6'} + + '@modern-js/remark-container@2.32.1': + resolution: {integrity: sha512-Ho8X6VPlDY1RSbrhElgTLjNC62XiC1YM0UsNA5GSmSjHqv4gJcbI5G/Pyhzu1+KScmV31BkX/PKL5QQmd8sBJQ==} + engines: {node: '>=14.17.6'} + + '@modern-js/runtime-utils@2.60.6': + resolution: {integrity: sha512-mEFDWbaNlOijlVrgr5T3K4hfOmr4QggVtF8A2NdcgRgQ9AP9faCjmMd6utbRL6ZRQruvKxGV8JN73W+WdBy2Ig==} + peerDependencies: + react: '>=17.0.0' + react-dom: '>=17.0.0' + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@modern-js/runtime@2.60.6': + resolution: {integrity: sha512-O8DLSHSNWoc1HS+giaOTTPSzn8y9hkq0AUmQJYwa4cw3ShuX22J4S8ppzYFgagGCdm+sLOfNYmVCkhQnV3lCEA==} + engines: {node: '>=14.17.6'} + peerDependencies: + react: '>=17' + react-dom: '>=17' + + '@modern-js/server-core@2.31.2': + resolution: {integrity: sha512-QNm1xn1mMnJXLut7Tn2k6Y1tRU5a2NCFvPmuZF6DN4KT44iHBdQ/x840c5MTBBPs4QyYGoMz8UwuJiSsXiFGqA==} + + '@modern-js/server-core@2.32.1': + resolution: {integrity: sha512-f47mCXWjhuihKlFUUH0RuKq21/jmSGD2M7wjGPj37sd6rUiSotE7rCdgXwFnESscAPrB6dmCRdL+oQmyfgKubw==} + + '@modern-js/server-utils@2.31.2': + resolution: {integrity: sha512-d5jdSvNcv99GH7awbtaZJi9J9SsrabI1raeY6G96Fi64aFbFz8vHrEqEBoKPx7+qFe+nIQdBg/VpGcsh+yk76g==} + + '@modern-js/server-utils@2.32.1': + resolution: {integrity: sha512-ak1JI/t+E+VkUvkH2fS2trGL283qYRecHi509vkdNFQWtVUSIWb6ozWbBcLzlw6TbZB40BUrkQ+D9mD5hvcH6g==} + + '@modern-js/server@2.31.2': + resolution: {integrity: sha512-1bklwmQ7kFroTWNsyCKnsObjHQQNACITCjLsyEqdnnixSFzLoG3QfxijZDX8GzXy6r7+Uv5SlJi/kjhPRuFgSg==} + peerDependencies: + devcert: ^1.0.0 + ts-node: ^10.1.0 + tsconfig-paths: '>= 3.0.0 || >= 4.0.0' + peerDependenciesMeta: + devcert: + optional: true + ts-node: + optional: true + tsconfig-paths: + optional: true + + '@modern-js/server@2.32.1': + resolution: {integrity: sha512-1k1bz47K/qYdV6OdcD5TisoUhG5CQL08/YJK+GFQCyTLr8EHC+RtpBVaNJznbUHmiPEHXMP1d4ZlHw3qVmzH1w==} + peerDependencies: + devcert: ^1.0.0 + ts-node: ^10.1.0 + tsconfig-paths: '>= 3.0.0 || >= 4.0.0' + peerDependenciesMeta: + devcert: + optional: true + ts-node: + optional: true + tsconfig-paths: + optional: true + + '@modern-js/swc-plugins-darwin-arm64@0.6.11': + resolution: {integrity: sha512-UMH0bo20vcD10//F7KaINLfuHawQBVcWCCyJvkYOiBt7e1tUjeybKu+y6eNq1USyFVElEMul8ytnYdwAS9sY+w==} + engines: {node: '>=14.12'} + cpu: [arm64] + os: [darwin] + + '@modern-js/swc-plugins-darwin-x64@0.6.11': + resolution: {integrity: sha512-qLcXAnM/IGcZX7B0MvxSdZjvgGofhOtHaEdj8CFkt75CzriBMu7lrGsRP4+paXbFAgM4vp7ZV7julaFrrDCoZw==} + engines: {node: '>=14.12'} + cpu: [x64] + os: [darwin] + + '@modern-js/swc-plugins-linux-arm64-gnu@0.6.11': + resolution: {integrity: sha512-3WcTpQqJp7RM/i8lLe+GjOCx17ljKdPbxlIY4LkJe+SQXATd3YducTtNqsEAdBA8Au907rI1ImuhN0kxvR97jQ==} + engines: {node: '>=14.12'} + cpu: [arm64] + os: [linux] + + '@modern-js/swc-plugins-linux-arm64-musl@0.6.11': + resolution: {integrity: sha512-RFE3xJWbABM8ZzPMVqlr3qovgnwamgpGjGN15rJ4tVqieO2FORQ14xSQE1ROBun6kIADUD+TxnepTlGb7EJg0w==} + engines: {node: '>=14.12'} + cpu: [arm64] + os: [linux] + + '@modern-js/swc-plugins-linux-x64-gnu@0.6.11': + resolution: {integrity: sha512-vSDF5aznEtnS0kHFm7UXHHaFzEZEyTV+CTQOVEp84hU5+HW1fMR+MFmbeCJnqXpB+R8Kg93SL4KWePGzm2ZNWw==} + engines: {node: '>=14.12'} + cpu: [x64] + os: [linux] + + '@modern-js/swc-plugins-linux-x64-musl@0.6.11': + resolution: {integrity: sha512-jfwQeuSmHbgvw9fjFRi5ZkLWejF8WZkYew0MGHqkSyLYZU+p7RgGo+tSpT4CK+b6p9qzh8LxoFpYjx6YycCY/w==} + engines: {node: '>=14.12'} + cpu: [x64] + os: [linux] + + '@modern-js/swc-plugins-win32-arm64-msvc@0.6.11': + resolution: {integrity: sha512-MWbuMTdGZ81Xce+OmnM3xsKKQIHmp9Eq0FlueRIPQdSLCO6IogIjALsMum4Vd1tRnEosKXj0xcuD4IsAWgtW6w==} + engines: {node: '>=14.12'} + cpu: [arm64] + os: [win32] + + '@modern-js/swc-plugins-win32-x64-msvc@0.6.11': + resolution: {integrity: sha512-UH4BeAjfs7Z6sZQOaFjgOB9h99qAPRtRFbmkQ+77FDlwNdjii0xPJvdNPCxAJITnqHjHSqrbz9rFDSrWnI9eKg==} + engines: {node: '>=14.12'} + cpu: [x64] + os: [win32] + + '@modern-js/swc-plugins@0.6.11': + resolution: {integrity: sha512-bXwjeFa5mg1hD6zzSHzw94FMNFb9SV458g76zWYfXRw7wMjp97NYl6n3dOTOixdngC0JqZctSbP4mJwSZ0p3Gw==} + engines: {node: '>=14.17.6'} + peerDependencies: + '@swc/helpers': '>=0.5.3' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@modern-js/types@2.31.2': + resolution: {integrity: sha512-soxjc0F/UokDXU2s7Lu/RESw30iaF2dcADg9Cv0282jx1V1siNkebk98VTPA0mPHTD6r773neKRU/7RzsOvzYQ==} + + '@modern-js/types@2.32.1': + resolution: {integrity: sha512-qmWjebnWYIP9TiZ8ZB2azCTzjkm/liDjGWkAOwLcs+VXERUn7uHilH8S6JZLjuuplSm3ltvnRYsEjU9R+pCrEg==} + + '@modern-js/types@2.60.6': + resolution: {integrity: sha512-Tjh03D6lW34BmbKm5CV7SgtjSnOIjFQhRh+pExCMpSQUgJOWSooboEVsZQ2f8zdyxijI1MSSGEIt4ak30Vsvng==} + + '@modern-js/utils@2.31.2': + resolution: {integrity: sha512-gqINZJxkep0+CPeiXnVxDJeFNNN6PiuRkj6GXAXUc89pmwvjkpULG+8Dm4Qwa/g9g9316y5CRJ1/m1BDs0GVIg==} + peerDependencies: + react: '>=17.0.0' + react-dom: '>=17.0.0' + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@modern-js/utils@2.32.1': + resolution: {integrity: sha512-vUzPMMebXkulCmw1Vd7sbyZswrsA6nBQ7woGul2M4DHzPa0wawANNsfLVK/iyeiu+KIe0yrmwjyYm9KZe8UzEw==} + peerDependencies: + react: '>=17.0.0' + react-dom: '>=17.0.0' + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@modern-js/utils@2.60.6': + resolution: {integrity: sha512-rAeqAHiUUnStwBTkP1tdQSz29o/Qtoc2OUfz6TEAtEPoAxcFSc44+hwux7mQkSxXSzBjkbev5RMkwVwuM2FWtw==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@pixi/accessibility@7.4.2': + resolution: {integrity: sha512-R6VEolm8uyy1FB1F2qaLKxVbzXAFTZCF2ka8fl9lsz7We6ZfO4QpXv9ur7DvzratjCQUQVCKo0/V7xL5q1EV/g==} + peerDependencies: + '@pixi/core': 7.4.2 + '@pixi/display': 7.4.2 + '@pixi/events': 7.4.2 + + '@pixi/app@7.4.2': + resolution: {integrity: sha512-ugkH3kOgjT8P1mTMY29yCOgEh+KuVMAn8uBxeY0aMqaUgIMysfpnFv+Aepp2CtvI9ygr22NC+OiKl+u+eEaQHw==} + peerDependencies: + '@pixi/core': 7.4.2 + '@pixi/display': 7.4.2 + + '@pixi/assets@7.4.2': + resolution: {integrity: sha512-anxho59H9egZwoaEdM5aLvYyxoz6NCy3CaQIvNHD1bbGg8L16Ih0e26QSBR5fu53jl8OjT6M7s+p6n7uu4+fGA==} + peerDependencies: + '@pixi/core': 7.4.2 + + '@pixi/canvas-display@7.4.2': + resolution: {integrity: sha512-cKplWdhy+ReYRQK9ideLlKoBdTI9cB10382jWkLDiBeguM9cWSIOrmY5Bd84V0/5FOTLc/AFl4LL1wws27MVKg==} + peerDependencies: + '@pixi/display': 7.4.2 + + '@pixi/canvas-extract@7.4.2': + resolution: {integrity: sha512-4rbH4sLPcPEz+OjehFUluFHN8mup9zwzedJLYc7KtqScg/npYKtVmDSaI/0cZBr9vmael+ZuCg/hjaDYTJhubg==} + peerDependencies: + '@pixi/canvas-renderer': 7.4.2 + '@pixi/core': 7.4.2 + '@pixi/display': 7.4.2 + '@pixi/extract': 7.4.2 + + '@pixi/canvas-graphics@7.4.2': + resolution: {integrity: sha512-1ANBcV5IietfQuABT2PUxTs4TsQP4kmpwUnkRLpZgvM5NL0UBMUZCqBhcBnbfAyV7zvpPm3i+eWhIwn6Xz/2Tg==} + peerDependencies: + '@pixi/canvas-display': 7.4.2 + '@pixi/canvas-renderer': 7.4.2 + '@pixi/core': 7.4.2 + '@pixi/graphics': 7.4.2 + + '@pixi/canvas-mesh@7.4.2': + resolution: {integrity: sha512-CdxlV6a6H3wULwwFtURIycQT7oCtvFGDMotz3glyAj625EEx+mwSLo1mAVzs8Hl9pmetFmNKj4Z1gy890VSemw==} + peerDependencies: + '@pixi/canvas-display': 7.4.2 + '@pixi/canvas-renderer': 7.4.2 + '@pixi/core': 7.4.2 + '@pixi/mesh': 7.4.2 + '@pixi/mesh-extras': 7.4.2 + + '@pixi/canvas-particle-container@7.4.2': + resolution: {integrity: sha512-775rF/d7atlZTq5oODr6K3qDZ+awWkDe0QQ4BvGqPAXaWXB5doGs3j5KpTEoFD/JnbX7Q7o8ZTVGla6qsBnT6A==} + peerDependencies: + '@pixi/particle-container': 7.4.2 + + '@pixi/canvas-prepare@7.4.2': + resolution: {integrity: sha512-BB50HZb8ttPMkef+9BXfzeT1HS/AUkXRS0uwhwpq4L75D7XwIlIfwS0lCv2bw2KflavA8wT0qWuwlQTgHSalcA==} + peerDependencies: + '@pixi/canvas-renderer': 7.4.2 + '@pixi/core': 7.4.2 + '@pixi/prepare': 7.4.2 + + '@pixi/canvas-renderer@7.4.2': + resolution: {integrity: sha512-5qBrr4hJ3hQYMJwxIkKCnvMxL9m7aL26h4zbacK0KH7SQ0i+RCcZS2NzvPa451FtnhquIUjwuuWQyjPFdM5R7g==} + peerDependencies: + '@pixi/core': 7.4.2 + + '@pixi/canvas-sprite-tiling@7.4.2': + resolution: {integrity: sha512-3/YEohGAiiVHnkOkL1wyjGBJlndXsLPG4XFn3Lpc84Cm5kbR/C6RvNvDcRckQod+jWmqQ8n4x4SjhoFBjdP+dQ==} + peerDependencies: + '@pixi/canvas-renderer': 7.4.2 + '@pixi/canvas-sprite': 7.4.2 + '@pixi/core': 7.4.2 + '@pixi/sprite-tiling': 7.4.2 + + '@pixi/canvas-sprite@7.4.2': + resolution: {integrity: sha512-XM6O6liAm2okHlSpUd0+muQAqLzY6EdQtfuqVP628FjHQkLJ/nb6Rg7qqtt3a3T4eyxzMBkqkzqBNBXomgf1SA==} + peerDependencies: + '@pixi/canvas-display': 7.4.2 + '@pixi/canvas-renderer': 7.4.2 + '@pixi/core': 7.4.2 + '@pixi/sprite': 7.4.2 + + '@pixi/canvas-text@7.4.2': + resolution: {integrity: sha512-EOzYNaNcD4QWwL7LQ3v2WM4LQNXeS0aJbNOwJ1+9xiNjY53iF0w5XgSGcfGef4itym6nrwTBft1QwKyTE23zhQ==} + peerDependencies: + '@pixi/canvas-sprite': 7.4.2 + '@pixi/sprite': 7.4.2 + '@pixi/text': 7.4.2 + + '@pixi/color@7.4.2': + resolution: {integrity: sha512-av1LOvhHsiaW8+T4n/FgnOKHby55/w7VcA1HzPIHRBtEcsmxvSCDanT1HU2LslNhrxLPzyVx18nlmalOyt5OBg==} + + '@pixi/colord@2.9.6': + resolution: {integrity: sha512-nezytU2pw587fQstUu1AsJZDVEynjskwOL+kibwcdxsMBFqPsFFNA7xl0ii/gXuDi6M0xj3mfRJj8pBSc2jCfA==} + + '@pixi/compressed-textures@7.4.2': + resolution: {integrity: sha512-VJrt7el6O4ZJSWkeOGXwrhJaiLg1UBhHB3fj42VR4YloYkAxpfd9K6s6IcbcVz7n9L48APKBMgHyaB2pX2Ck/A==} + peerDependencies: + '@pixi/assets': 7.4.2 + '@pixi/core': 7.4.2 + + '@pixi/constants@7.4.2': + resolution: {integrity: sha512-N9vn6Wpz5WIQg7ugUg2+SdqD2u2+NM0QthE8YzLJ4tLH2Iz+/TrnPKUJzeyIqbg3sxJG5ZpGGPiacqIBpy1KyA==} + + '@pixi/core@7.4.2': + resolution: {integrity: sha512-UbMtgSEnyCOFPzbE6ThB9qopXxbZ5GCof2ArB4FXOC5Xi/83MOIIYg5kf5M8689C5HJMhg2SrJu3xLKppF+CMg==} + + '@pixi/display@7.4.2': + resolution: {integrity: sha512-DaD0J7gIlNlzO0Fdlby/0OH+tB5LtCY6rgFeCBKVDnzmn8wKW3zYZRenWBSFJ0Psx6vLqXYkSIM/rcokaKviIw==} + peerDependencies: + '@pixi/core': 7.4.2 + + '@pixi/events@7.4.2': + resolution: {integrity: sha512-Jw/w57heZjzZShIXL0bxOvKB+XgGIevyezhGtfF2ZSzQoSBWo+Fj1uE0QwKd0RIaXegZw/DhSmiMJSbNmcjifA==} + peerDependencies: + '@pixi/core': 7.4.2 + '@pixi/display': 7.4.2 + + '@pixi/extensions@7.4.2': + resolution: {integrity: sha512-Hmx2+O0yZ8XIvgomHM9GZEGcy9S9Dd8flmtOK5Aa3fXs/8v7xD08+ANQpN9ZqWU2Xs+C6UBlpqlt2BWALvKKKA==} + + '@pixi/extract@7.4.2': + resolution: {integrity: sha512-JOX27TRWjVEjauGBbF8PU7/g6LYXnivehdgqS5QlVDv1CNHTOrz/j3MdKcVWOhyZPbH5c9sh7lxyRxvd9AIuTQ==} + peerDependencies: + '@pixi/core': 7.4.2 + + '@pixi/filter-alpha@7.4.2': + resolution: {integrity: sha512-9OsKJ+yvY2wIcQXwswj5HQBiwNGymwmqdxfp7mo+nZSBoDmxUqvMZzE9UNJ3eUlswuNvNRO8zNOsQvwdz7WFww==} + peerDependencies: + '@pixi/core': 7.4.2 + + '@pixi/filter-blur@7.4.2': + resolution: {integrity: sha512-gOXBbIUx6CRZP1fmsis2wLzzSsofrqmIHhbf1gIkZMIQaLsc9T7brj+PaLTTiOiyJgnvGN5j20RZnkERWWKV0Q==} + peerDependencies: + '@pixi/core': 7.4.2 + + '@pixi/filter-color-matrix@7.4.2': + resolution: {integrity: sha512-ykZiR59Gvj80UKs9qm7jeUTKvn+wWk6HBVJOmJbK9jFK5juakDWp7BbH26U78Q61EWj97kI1FdfcbMkuQ7rqkA==} + peerDependencies: + '@pixi/core': 7.4.2 + + '@pixi/filter-displacement@7.4.2': + resolution: {integrity: sha512-QS/eWp/ivsxef3xapNeGwpPX7vrqQQeo99Fux4k5zsvplnNEsf91t6QYJLG776AbZEu/qh8VYRBA5raIVY/REw==} + peerDependencies: + '@pixi/core': 7.4.2 + + '@pixi/filter-fxaa@7.4.2': + resolution: {integrity: sha512-U/ptJgDsfs/r8y2a6gCaiPfDu2IFAxpQ4wtfmBpz6vRhqeE4kI8yNIUx5dZbui57zlsJaW0BNacOQxHU0vLkyQ==} + peerDependencies: + '@pixi/core': 7.4.2 + + '@pixi/filter-noise@7.4.2': + resolution: {integrity: sha512-Vy9ViBFhZEGh6xKkd3kFWErolZTwv1Y5Qb1bV7qPIYbvBECYsqzlR4uCrrjBV6KKm0PufpG/+NKC5vICZaqKzg==} + peerDependencies: + '@pixi/core': 7.4.2 + + '@pixi/graphics@7.4.2': + resolution: {integrity: sha512-jH4/Tum2RqWzHGzvlwEr7HIVduoLO57Ze705N2zQPkUD57TInn5911aGUeoua7f/wK8cTLGzgB9BzSo2kTdcHw==} + peerDependencies: + '@pixi/core': 7.4.2 + '@pixi/display': 7.4.2 + '@pixi/sprite': 7.4.2 + + '@pixi/math@7.4.2': + resolution: {integrity: sha512-7jHmCQoYk6e0rfSKjdNFOPl0wCcdgoraxgteXJTTHv3r0bMNx2pHD9FJ0VvocEUG7XHfj55O3+u7yItOAx0JaQ==} + + '@pixi/mesh-extras@7.4.2': + resolution: {integrity: sha512-vNR/7wjxjs7sv9fGoKkHyU91ZAD+7EnMHBS5F3CVISlOIFxLi96NNZCB81oUIdky/90pHw40johd/4izR5zTyw==} + peerDependencies: + '@pixi/core': 7.4.2 + '@pixi/mesh': 7.4.2 + + '@pixi/mesh@7.4.2': + resolution: {integrity: sha512-mEkKyQvvMrYXC3pahvH5WBIKtrtB63WixRr91ANFI7zXD+ESG6Ap6XtxMCJmXDQPwBDNk7SWVMiCflYuchG7kA==} + peerDependencies: + '@pixi/core': 7.4.2 + '@pixi/display': 7.4.2 + + '@pixi/mixin-cache-as-bitmap@7.4.2': + resolution: {integrity: sha512-6dgthi2ruUT/lervSrFDQ7vXkEsHo6CxdgV7W/wNdW1dqgQlKfDvO6FhjXzyIMRLSooUf5FoeluVtfsjkUIYrw==} + peerDependencies: + '@pixi/core': 7.4.2 + '@pixi/display': 7.4.2 + '@pixi/sprite': 7.4.2 + + '@pixi/mixin-get-child-by-name@7.4.2': + resolution: {integrity: sha512-0Cfw8JpQhsixprxiYph4Lj+B5n83Kk4ftNMXgM5xtZz+tVLz5s91qR0MqcdzwTGTJ7utVygiGmS4/3EfR/duRQ==} + peerDependencies: + '@pixi/display': 7.4.2 + + '@pixi/mixin-get-global-position@7.4.2': + resolution: {integrity: sha512-LcsahbVdX4DFS2IcGfNp4KaXuu7SjAwUp/flZSGIfstyKOKb5FWFgihtqcc9ZT4coyri3gs2JbILZub/zPZj1w==} + peerDependencies: + '@pixi/core': 7.4.2 + '@pixi/display': 7.4.2 + + '@pixi/particle-container@7.4.2': + resolution: {integrity: sha512-B78Qq86kt0lEa5WtB2YFIm3+PjhKfw9La9R++GBSgABl+g13s2UaZ6BIPxvY3JxWMdxPm4iPrQPFX1QWRN68mw==} + peerDependencies: + '@pixi/core': 7.4.2 + '@pixi/display': 7.4.2 + '@pixi/sprite': 7.4.2 + + '@pixi/prepare@7.4.2': + resolution: {integrity: sha512-PugyMzReCHXUzc3so9PPJj2OdHwibpUNWyqG4mWY2UUkb6c8NAGK1AnAPiscOvLilJcv/XQSFoNhX+N1jrvJEg==} + peerDependencies: + '@pixi/core': 7.4.2 + '@pixi/display': 7.4.2 + '@pixi/graphics': 7.4.2 + '@pixi/text': 7.4.2 + + '@pixi/runner@7.4.2': + resolution: {integrity: sha512-LPBpwym4vdyyDY5ucF4INQccaGyxztERyLTY1YN6aqJyyMmnc7iqXlIKt+a0euMBtNoLoxy6MWMvIuZj0JfFPA==} + + '@pixi/settings@7.4.2': + resolution: {integrity: sha512-pMN+L6aWgvUbwhFIL/BTHKe2ShYGPZ8h9wlVBnFHMtUcJcFLMF1B3lzuvCayZRepOphs6RY0TqvnDvVb585JhQ==} + + '@pixi/sprite-animated@7.4.2': + resolution: {integrity: sha512-QPT6yxCUGOBN+98H3pyIZ1ZO6Y7BN1o0Q2IMZEsD1rNfZJrTYS3Q8VlCG5t2YlFlcB8j5iBo24bZb6FUxLOmsQ==} + peerDependencies: + '@pixi/core': 7.4.2 + '@pixi/sprite': 7.4.2 + + '@pixi/sprite-tiling@7.4.2': + resolution: {integrity: sha512-Z8PP6ewy3nuDYL+NeEdltHAhuucVgia33uzAitvH3OqqRSx6a6YRBFbNLUM9Sx+fBO2Lk3PpV1g6QZX+NE5LOg==} + peerDependencies: + '@pixi/core': 7.4.2 + '@pixi/display': 7.4.2 + '@pixi/sprite': 7.4.2 + + '@pixi/sprite@7.4.2': + resolution: {integrity: sha512-Ccf/OVQsB+HQV0Fyf5lwD+jk1jeU7uSIqEjbxenNNssmEdB7S5qlkTBV2EJTHT83+T6Z9OMOHsreJZerydpjeg==} + peerDependencies: + '@pixi/core': 7.4.2 + '@pixi/display': 7.4.2 + + '@pixi/spritesheet@7.4.2': + resolution: {integrity: sha512-YIvHdpXW+AYp8vD0NkjJmrdnVHTZKidCnx6k8ATSuuvCT6O5Tuh2N/Ul2oDj4/QaePy0lVhyhAbZpJW00Jr7mQ==} + peerDependencies: + '@pixi/assets': 7.4.2 + '@pixi/core': 7.4.2 + + '@pixi/text-bitmap@7.4.2': + resolution: {integrity: sha512-lPBMJ83JnpFVL+6ckQ8KO8QmwdPm0z9Zs/M0NgFKH2F+BcjelRNnk80NI3O0qBDYSEDQIE+cFbKoZ213kf7zwA==} + peerDependencies: + '@pixi/assets': 7.4.2 + '@pixi/core': 7.4.2 + '@pixi/display': 7.4.2 + '@pixi/mesh': 7.4.2 + '@pixi/text': 7.4.2 + + '@pixi/text-html@7.4.2': + resolution: {integrity: sha512-duOu8oDYeDNuyPozj2DAsQ5VZBbRiwIXy78Gn7H2pCiEAefw/Uv5jJYwdgneKME0e1tOxz1eOUGKPcI6IJnZjw==} + peerDependencies: + '@pixi/core': 7.4.2 + '@pixi/display': 7.4.2 + '@pixi/sprite': 7.4.2 + '@pixi/text': 7.4.2 + + '@pixi/text@7.4.2': + resolution: {integrity: sha512-rZZWpJNsIQ8WoCWrcVg8Gi6L/PDakB941clo6dO3XjoII2ucoOUcnpe5HIkudxi2xPvS/8Bfq990gFEx50TP5A==} + peerDependencies: + '@pixi/core': 7.4.2 + '@pixi/sprite': 7.4.2 + + '@pixi/ticker@7.4.2': + resolution: {integrity: sha512-cAvxCh/KI6IW4m3tp2b+GQIf+DoSj9NNmPJmsOeEJ7LzvruG8Ps7SKI6CdjQob5WbceL1apBTDbqZ/f77hFDiQ==} + + '@pixi/unsafe-eval@7.4.2': + resolution: {integrity: sha512-45LM2mpqziNTeIORjgJl042CyssfZ17gfHHWcPZIZIGtiXSBPBy+mKvtHh5PraG0wBxAk/Bcr+nCYtAl8yuwgw==} + peerDependencies: + '@pixi/core': 7.4.2 + + '@pixi/utils@7.4.2': + resolution: {integrity: sha512-aU/itcyMC4TxFbmdngmak6ey4kC5c16Y5ntIYob9QnjNAfD/7GTsYIBnP6FqEAyO1eq0MjkAALxdONuay1BG3g==} + + '@pmmmwh/react-refresh-webpack-plugin@0.5.10': + resolution: {integrity: sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA==} + engines: {node: '>= 10.13'} + peerDependencies: + '@types/webpack': 4.x || 5.x + react-refresh: '>=0.10.0 <1.0.0' + sockjs-client: ^1.4.0 + type-fest: '>=0.17.0 <4.0.0' + webpack: '>=4.43.0 <6.0.0' + webpack-dev-server: 3.x || 4.x + webpack-hot-middleware: 2.x + webpack-plugin-serve: 0.x || 1.x + peerDependenciesMeta: + '@types/webpack': + optional: true + sockjs-client: + optional: true + type-fest: + optional: true + webpack-dev-server: + optional: true + webpack-hot-middleware: + optional: true + webpack-plugin-serve: + optional: true + + '@polka/url@0.5.0': + resolution: {integrity: sha512-oZLYFEAzUKyi3SKnXvj32ZCEGH6RDnao7COuCVhDydMS9NrCSVXhM79VaKyP5+Zc33m0QXEd2DN3UkU7OsHcfw==} + + '@polka/url@1.0.0-next.28': + resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} + + '@rc-component/async-validator@5.0.4': + resolution: {integrity: sha512-qgGdcVIF604M9EqjNF0hbUTz42bz/RDtxWdWuU5EQe3hi7M8ob54B6B35rOsvX5eSvIHIzT9iH1R3n+hk3CGfg==} + engines: {node: '>=14.x'} + + '@rc-component/color-picker@2.0.1': + resolution: {integrity: sha512-WcZYwAThV/b2GISQ8F+7650r5ZZJ043E57aVBFkQ+kSY4C6wdofXgB0hBx+GPGpIU0Z81eETNoDUJMr7oy/P8Q==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/context@1.4.0': + resolution: {integrity: sha512-kFcNxg9oLRMoL3qki0OMxK+7g5mypjgaaJp/pkOis/6rVxma9nJBF/8kCIuTYHUQNr0ii7MxqE33wirPZLJQ2w==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/mini-decimal@1.1.0': + resolution: {integrity: sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==} + engines: {node: '>=8.x'} + + '@rc-component/mutate-observer@1.1.0': + resolution: {integrity: sha512-QjrOsDXQusNwGZPf4/qRQasg7UFEj06XiCJ8iuiq/Io7CrHrgVi6Uuetw60WAMG1799v+aM8kyc+1L/GBbHSlw==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/portal@1.1.2': + resolution: {integrity: sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/qrcode@1.0.0': + resolution: {integrity: sha512-L+rZ4HXP2sJ1gHMGHjsg9jlYBX/SLN2D6OxP9Zn3qgtpMWtO2vUfxVFwiogHpAIqs54FnALxraUy/BCO1yRIgg==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/tour@1.15.1': + resolution: {integrity: sha512-Tr2t7J1DKZUpfJuDZWHxyxWpfmj8EZrqSgyMZ+BCdvKZ6r1UDsfU46M/iWAAFBy961Ssfom2kv5f3UcjIL2CmQ==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/trigger@2.2.6': + resolution: {integrity: sha512-/9zuTnWwhQ3S3WT1T8BubuFTT46kvnXgaERR9f4BTKyn61/wpf/BvbImzYBubzJibU707FxwbKszLlHjcLiv1Q==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@redux-devtools/extension@3.3.0': + resolution: {integrity: sha512-X34S/rC8S/M1BIrkYD1mJ5f8vlH0BDqxXrs96cvxSBo4FhMdbhU+GUGsmNYov1xjSyLMHgo8NYrUG8bNX7525g==} + peerDependencies: + redux: ^3.1.0 || ^4.0.0 || ^5.0.0 + + '@remix-run/router@1.20.0': + resolution: {integrity: sha512-mUnk8rPJBI9loFDZ+YzPGdeniYK+FTmRD1TMCz7ev2SNIozyKKpnGgsxO34u6Z4z/t0ITuu7voi/AshfsGsgFg==} + engines: {node: '>=14.0.0'} + + '@remix-run/router@1.22.0': + resolution: {integrity: sha512-MBOl8MeOzpK0HQQQshKB7pABXbmyHizdTpqnrIseTbsv0nAepwC2ENZa1aaBExNQcpLoXmWthhak8SABLzvGPw==} + engines: {node: '>=14.0.0'} + + '@remix-run/router@1.6.1': + resolution: {integrity: sha512-YUkWj+xs0oOzBe74OgErsuR3wVn+efrFhXBWrit50kOiED+pvQe2r6MWY0iJMQU/mSVKxvNzL4ZaYvjdX+G7ZA==} + engines: {node: '>=14'} + + '@rollup/pluginutils@4.1.1': + resolution: {integrity: sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ==} + engines: {node: '>= 8.0.0'} + + '@rspack/binding-darwin-arm64@0.2.12': + resolution: {integrity: sha512-TTiizzXNYGILAwwUhf49AqeNRJ7NXnzObhmqaDJ76lwDph+yLf8HYhNWAzrhYljaWQGYjwTYUdXVrGflYb2pHA==} + cpu: [arm64] + os: [darwin] + + '@rspack/binding-darwin-x64@0.2.12': + resolution: {integrity: sha512-zq32runVEEXoJQjo5xfKxoDsxPVQu3KHplZR3Yxp5fxnx7b9eiM5BPf1FQ6ml7b6FC4ZXyQNYwtoDsLSTYRnfg==} + cpu: [x64] + os: [darwin] + + '@rspack/binding-linux-arm64-gnu@0.2.12': + resolution: {integrity: sha512-C5LR+/na47/ZlQXvrQP96GfzRnh34fa4cT3wD7C+BOwPrPrCdhf8Z3GNzv2J6Rs/ACBZjpD2DE+ARrWsBAv33w==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rspack/binding-linux-arm64-musl@0.2.12': + resolution: {integrity: sha512-UbLGMUOSPaivO6TbGVt1JKeOXTfj1DFjIBTy2CKxIF5+B6xvg+ns9BhZobtZmjDlJ9GvkkHFoawFyl6UG+XLpg==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rspack/binding-linux-x64-gnu@0.2.12': + resolution: {integrity: sha512-I5W6WaD9llJjFR+Z1aJj0Ml/cheyHDH4eyTfEZXiOCEeTFJlA5NhMn97fDWoFKVYh5wq6uwCrxnaOSehYlsbYw==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rspack/binding-linux-x64-musl@0.2.12': + resolution: {integrity: sha512-JuJKw502u/1FroIfR5iwoZ9pfx/iPpFEQmA6TseIKnu8eHM1jPKlPWAY4geBvzgiz04EdTs4uJ8o1ItoQLsddg==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rspack/binding-win32-arm64-msvc@0.2.12': + resolution: {integrity: sha512-f5npfQkXP8uHDSwiT1cXAhrdPwr7hrCz3EVKfwsB5Y1ny17YAH4ztm5Pk7oBB8H8SjQfn2Af8C3YEz1SUyk5/g==} + cpu: [arm64] + os: [win32] + + '@rspack/binding-win32-ia32-msvc@0.2.12': + resolution: {integrity: sha512-pw8a1gCK+TK8suZdEZwXzdEzC+ZGtYsv75BhwHNRrcKUbmRjn7FTtvSO0beZlRMNcfc3A2SD1ZmozZM1czbang==} + cpu: [ia32] + os: [win32] + + '@rspack/binding-win32-x64-msvc@0.2.12': + resolution: {integrity: sha512-6UGQKJ0CG5g/v7vSeDr5wI1AuAaWR4P6xoRcyWMeeW5Vw3sOxqK/MfEOtwVseX47IcF+NhrmHhVX7MN4EiO0ZA==} + cpu: [x64] + os: [win32] + + '@rspack/binding@0.2.12': + resolution: {integrity: sha512-Pi/Zi6NgOXiHPA08lk1yFTJwlTozLx6cLI87astcMQz56LSOQb8wBV9uiRvWufnWWijh7+jznNxpv7psWqXRoA==} + + '@rspack/core@0.2.12': + resolution: {integrity: sha512-SekS+6bdTSx16nWQD7rGdnLK6fr0PewV2KKDt6w3jwHkJxDQygdUqL+st3c/JBGm/dpIVVpWkAcoLpK3EjFUcA==} + + '@rspack/dev-client@0.2.12': + resolution: {integrity: sha512-EeovUu3iItItbSKcZH3eNoGvvFiqUfFEHg22jJQTGeV3I5sZWvgfQA7+JQq44HI50Rq1EI8R9rB5X1rXwrhv/w==} + peerDependencies: + react-refresh: '>=0.10.0 <1.0.0' + peerDependenciesMeta: + react-refresh: + optional: true + + '@rspack/plugin-html@0.2.12': + resolution: {integrity: sha512-zCpsFaTTq0isAghGZpvkaKuNZHKoxzf90X2G71mHQ4T8HUN7+yy4p7lJ8vy/YGEj7zpYGT1k/8kCNivzUljgDQ==} + deprecated: deprecated + peerDependencies: + '@rspack/core': 0.2.12 + peerDependenciesMeta: + '@rspack/core': + optional: true + + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + + '@selderee/plugin-htmlparser2@0.11.0': + resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} + + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + + '@svgr/babel-plugin-add-jsx-attribute@8.0.0': + resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0': + resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0': + resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0': + resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-svg-dynamic-title@8.0.0': + resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-svg-em-dimensions@8.0.0': + resolution: {integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-transform-react-native-svg@8.0.0': + resolution: {integrity: sha512-UKrY3860AQICgH7g+6h2zkoxeVEPLYwX/uAjmqo4PIq2FIHppwhIqZstIyTz0ZtlwreKR41O3W3BzsBBiJV2Aw==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-transform-svg-component@8.0.0': + resolution: {integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==} + engines: {node: '>=12'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-preset@8.0.0': + resolution: {integrity: sha512-KLcjiZychInVrhs86OvcYPLTFu9L5XV2vj0XAaE1HwE3J3jLmIzRY8ttdeAg/iFyp8nhavJpafpDZTt+1LIpkQ==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/core@8.0.0': + resolution: {integrity: sha512-aJKtc+Pie/rFYsVH/unSkDaZGvEeylNv/s2cP+ta9/rYWxRVvoV/S4Qw65Kmrtah4CBK5PM6ISH9qUH7IJQCng==} + engines: {node: '>=14'} + + '@svgr/hast-util-to-babel-ast@8.0.0': + resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==} + engines: {node: '>=14'} + + '@svgr/plugin-jsx@8.0.1': + resolution: {integrity: sha512-bfCFb+4ZsM3UuKP2t7KmDwn6YV8qVn9HIQJmau6xeQb/iV65Rpi7NBNBWA2hcCd4GKoCqG8hpaaDk5FDR0eH+g==} + engines: {node: '>=14'} + peerDependencies: + '@svgr/core': '*' + + '@svgr/plugin-svgo@8.0.1': + resolution: {integrity: sha512-29OJ1QmJgnohQHDAgAuY2h21xWD6TZiXji+hnx+W635RiXTAlHTbjrZDktfqzkN0bOeQEtNe+xgq73/XeWFfSg==} + engines: {node: '>=14'} + peerDependencies: + '@svgr/core': '*' + + '@svgr/webpack@8.0.1': + resolution: {integrity: sha512-zSoeKcbCmfMXjA11uDuCJb+1LWNb3vy6Qw/VHj0Nfcl3UuqwuoZWknHsBIhCWvi4wU9vPui3aq054qjVyZqY4A==} + engines: {node: '>=14'} + + '@swc/helpers@0.5.1': + resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==} + + '@swc/helpers@0.5.13': + resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} + + '@tanstack/react-virtual@3.13.0': + resolution: {integrity: sha512-CchF0NlLIowiM2GxtsoKBkXA4uqSnY2KvnXo+kyUFD4a4ll6+J0qzoRsUPMwXV/H26lRsxgJIr/YmjYum2oEjg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + '@tanstack/virtual-core@3.13.0': + resolution: {integrity: sha512-NBKJP3OIdmZY3COJdWkSonr50FMVIi+aj5ZJ7hI/DTpEKg2RMfo/KvP8A3B/zOSpMgIe52B5E2yn7rryULzA6g==} + + '@tokenizer/token@0.3.0': + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + + '@tootallnate/once@2.0.0': + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + + '@trysound/sax@0.2.0': + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + + '@types/acorn@4.0.6': + resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/body-parser@1.19.5': + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + + '@types/chrome@0.0.279': + resolution: {integrity: sha512-wl0IxQ2OQiMazPZM5LimHQ7Jwd72/O8UvvzyptplXT2S4eUqXH5C0n8S+v8PtKhyX89p0igCPpNy3Bwksyk57g==} + + '@types/clean-css@4.2.11': + resolution: {integrity: sha512-Y8n81lQVTAfP2TOdtJJEsCoYl1AnOkqDqMvXb9/7pfgZZ7r8YrEyurrAvAoAjHOGXKRybay+5CsExqIH6liccw==} + + '@types/compression@1.7.5': + resolution: {integrity: sha512-AAQvK5pxMpaT+nDvhHrsBhLSYG5yQdtkaJE1WYieSNY2mVFKAgmU4ks65rkZD5oqnGCFLyQpUr1CqI4DmUMyDg==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/css-font-loading-module@0.0.12': + resolution: {integrity: sha512-x2tZZYkSxXqWvTDgveSynfjq/T2HyiZHXb00j/+gy19yp70PHCizM48XFdjBCWH7eHBD0R5i/pw9yMBP/BH5uA==} + + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + + '@types/earcut@2.1.4': + resolution: {integrity: sha512-qp3m9PPz4gULB9MhjGID7wpo3gJ4bTGXm7ltNDsmOvsPduTeHp8wSW9YckBj3mljeOh4F0m2z/0JKAALRKbmLQ==} + + '@types/eslint-scope@3.7.7': + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + + '@types/estree-jsx@1.0.5': + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/express-serve-static-core@5.0.6': + resolution: {integrity: sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==} + + '@types/express@5.0.0': + resolution: {integrity: sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==} + + '@types/extend@3.0.4': + resolution: {integrity: sha512-ArMouDUTJEz1SQRpFsT2rIw7DeqICFv5aaVzLSIYMYQSLcwcGOfT3VyglQs/p7K3F7fT4zxr0NWxYZIdifD6dA==} + + '@types/filesystem@0.0.36': + resolution: {integrity: sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA==} + + '@types/filewriter@0.0.33': + resolution: {integrity: sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==} + + '@types/gradient-parser@0.1.5': + resolution: {integrity: sha512-r7K3NkJz3A95WkVVmjs0NcchhHstC2C/VIYNX4JC6tieviUNo774FFeOHjThr3Vw/WCeMP9kAT77MKbIRlO/4w==} + + '@types/har-format@1.2.16': + resolution: {integrity: sha512-fluxdy7ryD3MV6h8pTfTYpy/xQzCFC7m89nOH9y94cNqJ1mDIDPut7MnRHI3F6qRmh/cT2fUjG1MLdCNb4hE9A==} + + '@types/hast@2.3.10': + resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} + + '@types/hoist-non-react-statics@3.3.6': + resolution: {integrity: sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==} + + '@types/html-minifier-terser@7.0.0': + resolution: {integrity: sha512-hw3bhStrg5e3FQT8qZKCJTrzt/UbEaunU1xRWJ+aNOTmeBMvE3S4Ml2HiiNnZgL8izu0LFVkHUoPFXL1s5QNpQ==} + + '@types/http-errors@2.0.4': + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + + '@types/http-proxy@1.17.16': + resolution: {integrity: sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/loadable__component@5.13.9': + resolution: {integrity: sha512-QWOtIkwZqHNdQj3nixQ8oyihQiTMKZLk/DNuvNxMSbTfxf47w+kqcbnxlUeBgAxdOtW0Dh48dTAIp83iJKtnrQ==} + + '@types/mdast@3.0.15': + resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} + + '@types/mdx@2.0.13': + resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + + '@types/mime@1.3.5': + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + + '@types/mute-stream@0.0.4': + resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} + + '@types/node-fetch@2.6.12': + resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@16.9.1': + resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==} + + '@types/node@18.19.76': + resolution: {integrity: sha512-yvR7Q9LdPz2vGpmpJX5LolrgRdWvB67MJKDPSgIIzpFbaf9a1j/f5DnLp5VDyHGMR0QZHlTr1afsD87QCXFHKw==} + + '@types/node@22.13.4': + resolution: {integrity: sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg==} + + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + + '@types/parse-json@4.0.2': + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + + '@types/parse5@6.0.3': + resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} + + '@types/polka@0.5.7': + resolution: {integrity: sha512-TH8CDXM8zoskPCNmWabtK7ziGv9Q21s4hMZLVYK5HFEfqmGXBqq/Wgi7jNELWXftZK/1J/9CezYa06x1RKeQ+g==} + + '@types/prop-types@15.7.14': + resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} + + '@types/qs@6.9.18': + resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} + + '@types/range-parser@1.2.7': + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + + '@types/react-dom@18.3.0': + resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} + + '@types/react-helmet@6.1.11': + resolution: {integrity: sha512-0QcdGLddTERotCXo3VFlUSWO3ztraw8nZ6e3zJSgG7apwV5xt+pJUS8ewPBqT4NYB1optGLprNQzFleIY84u/g==} + + '@types/react@18.3.3': + resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} + + '@types/send@0.17.4': + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + + '@types/serve-static@1.15.7': + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} + + '@types/styled-components@5.1.34': + resolution: {integrity: sha512-mmiVvwpYklFIv9E8qfxuPyIt/OuyIrn6gMOAMOFUO3WJfSrSE+sGUoa4PiZj77Ut7bKZpaa6o1fBKS/4TOEvnA==} + + '@types/supports-color@8.1.3': + resolution: {integrity: sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==} + + '@types/trouter@3.1.4': + resolution: {integrity: sha512-4YIL/2AvvZqKBWenjvEpxpblT2KGO6793ipr5QS7/6DpQ3O3SwZGgNGWezxf3pzeYZc24a2pJIrR/+Jxh/wYNQ==} + + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + + '@types/wrap-ansi@3.0.0': + resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} + + '@vue/compiler-core@3.5.13': + resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} + + '@vue/compiler-dom@3.5.13': + resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} + + '@vue/compiler-sfc@3.5.13': + resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} + + '@vue/compiler-ssr@3.5.13': + resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} + + '@vue/shared@3.5.13': + resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} + + '@webassemblyjs/ast@1.14.1': + resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} + + '@webassemblyjs/floating-point-hex-parser@1.13.2': + resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} + + '@webassemblyjs/helper-api-error@1.13.2': + resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} + + '@webassemblyjs/helper-buffer@1.14.1': + resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} + + '@webassemblyjs/helper-numbers@1.13.2': + resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': + resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} + + '@webassemblyjs/helper-wasm-section@1.14.1': + resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} + + '@webassemblyjs/ieee754@1.13.2': + resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} + + '@webassemblyjs/leb128@1.13.2': + resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} + + '@webassemblyjs/utf8@1.13.2': + resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} + + '@webassemblyjs/wasm-edit@1.14.1': + resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} + + '@webassemblyjs/wasm-gen@1.14.1': + resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} + + '@webassemblyjs/wasm-opt@1.14.1': + resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} + + '@webassemblyjs/wasm-parser@1.14.1': + resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} + + '@webassemblyjs/wast-printer@1.14.1': + resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + + '@webgpu/types@0.1.53': + resolution: {integrity: sha512-x+BLw/opaz9LiVyrMsP75nO1Rg0QfrACUYIbVSfGwY/w0DiWIPYYrpte6us//KZXinxFAOJl0+C17L1Vi2vmDw==} + + '@xmldom/xmldom@0.8.10': + resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} + engines: {node: '>=10.0.0'} + + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + + abab@2.0.6: + resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + deprecated: Use your platform's native atob() and btoa() methods instead + + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + acorn-globals@7.0.1: + resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-node@1.8.2: + resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} + + acorn-walk@7.2.0: + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} + + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + engines: {node: '>= 14'} + + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-keywords@3.5.2: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + + ajv-keywords@5.1.0: + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-html-community@0.0.8: + resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} + engines: {'0': node >= 0.8.0} + hasBin: true + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + antd@5.21.6: + resolution: {integrity: sha512-EviOde/VEu+OsIKH5t6YXTMmmNeg9R85m0W5zXAo+Np8Latg9q10691JvAqOTMpnrRmbdeKUQL1Krp69Bzbe/g==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + any-base@1.1.0: + resolution: {integrity: sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + arr-union@3.1.0: + resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} + engines: {node: '>=0.10.0'} + + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + array-tree-filter@2.1.0: + resolution: {integrity: sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + asn1.js@4.10.1: + resolution: {integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==} + + assert@2.0.0: + resolution: {integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==} + + astring@1.9.0: + resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} + hasBin: true + + async@2.6.4: + resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + autoprefixer@10.4.13: + resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axios@1.7.9: + resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} + + babel-plugin-polyfill-corejs2@0.4.12: + resolution: {integrity: sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.10.6: + resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.11.1: + resolution: {integrity: sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.6.3: + resolution: {integrity: sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-styled-components@2.1.4: + resolution: {integrity: sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==} + peerDependencies: + styled-components: '>= 2' + + babel-plugin-transform-typescript-metadata@0.3.2: + resolution: {integrity: sha512-mWEvCQTgXQf48yDqgN7CH50waTyYBeP2Lpqx4nNWab9sxEpdXVeKgfj1qYI2/TgUPQtNFZ85i3PemRtnXVYYJg==} + peerDependencies: + '@babel/core': ^7 + '@babel/traverse': ^7 + peerDependenciesMeta: + '@babel/traverse': + optional: true + + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + basic-auth@2.0.1: + resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} + engines: {node: '>= 0.8'} + + better-path-resolve@1.0.0: + resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} + engines: {node: '>=4'} + + big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + bmp-js@0.1.0: + resolution: {integrity: sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==} + + bn.js@4.12.1: + resolution: {integrity: sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==} + + bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + body-scroll-lock@4.0.0-beta.0: + resolution: {integrity: sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + + browserify-aes@1.2.0: + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + + browserify-cipher@1.0.1: + resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} + + browserify-des@1.0.2: + resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} + + browserify-rsa@4.1.1: + resolution: {integrity: sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==} + engines: {node: '>= 0.10'} + + browserify-sign@4.2.3: + resolution: {integrity: sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==} + engines: {node: '>= 0.12'} + + browserify-zlib@0.2.0: + resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} + + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + + buffer-equal@0.0.1: + resolution: {integrity: sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==} + engines: {node: '>=0.4.0'} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer-xor@1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + builtin-status-codes@3.0.0: + resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.3: + resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + camelize@1.0.1: + resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} + + caniuse-api@3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + + caniuse-lite@1.0.30001700: + resolution: {integrity: sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + centra@2.7.0: + resolution: {integrity: sha512-PbFMgMSrmgx6uxCdm57RUos9Tc3fclMvhLSATYN39XsDV29B89zZ3KA89jmY0vwSGazyU+uerqwa6t+KaodPcg==} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@1.1.4: + resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@1.2.4: + resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + character-reference-invalid@1.1.4: + resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} + + character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + cipher-base@1.0.6: + resolution: {integrity: sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==} + engines: {node: '>= 0.10'} + + classnames@2.5.1: + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} + + clean-css@5.2.0: + resolution: {integrity: sha512-2639sWGa43EMmG7fn8mdVuBSs6HuWaSor+ZPoFWzenBc6oN+td8YhTfghWXZ25G1NiiSvz8bOFBS7PdSbTiqEA==} + engines: {node: '>= 10.0'} + + clean-css@5.3.3: + resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} + engines: {node: '>= 10.0'} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone-deep@0.2.4: + resolution: {integrity: sha512-we+NuQo2DHhSl+DP6jlUiAhyAjBQrYnpOk15rN6c6JSPScjiCLh8IbSU+VTcph6YS3o7mASE8a0+gbZ7ChLpgg==} + engines: {node: '>=0.10.0'} + + clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + comma-separated-tokens@1.0.8: + resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} + + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + commander@6.2.1: + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} + + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + + common-path-prefix@3.0.0: + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + + commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + + compare-versions@6.0.0-rc.1: + resolution: {integrity: sha512-cFhkjbGY1jLFWIV7KegECbfuyYPxSGvgGkdkfM+ibboQDoPwg2FRHm5BSNTOApiauRBzJIQH7qvOJs2sW5ueKQ==} + + compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + + compression@1.8.0: + resolution: {integrity: sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==} + engines: {node: '>= 0.8.0'} + + compute-scroll-into-view@3.1.1: + resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + connect-history-api-fallback@2.0.0: + resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} + engines: {node: '>=0.8'} + + console-browserify@1.2.0: + resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} + + constants-browserify@1.0.0: + resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + convert-source-map@1.8.0: + resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie@0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} + + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + engines: {node: '>= 0.6'} + + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + + copy-to-clipboard@3.3.3: + resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} + + core-js-compat@3.40.0: + resolution: {integrity: sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==} + + core-js-pure@3.40.0: + resolution: {integrity: sha512-AtDzVIgRrmRKQai62yuSIN5vNiQjcJakJb4fbhVw3ehxx7Lohphvw9SGNWKhLFqSxC4ilD0g/L1huAYFQU3Q6A==} + + core-js@3.30.2: + resolution: {integrity: sha512-uBJiDmwqsbJCWHAwjrx3cvjbMXP7xD72Dmsn5LOJpiRmE3WbBbN5rCqQ2Qh6Ek6/eOrjlWngEynBWo4VxerQhg==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + + corser@2.0.1: + resolution: {integrity: sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==} + engines: {node: '>= 0.4.0'} + + cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + + cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + create-ecdh@4.0.4: + resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} + + create-hash@1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + + create-hmac@1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + + cross-spawn@5.1.0: + resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + crypto-browserify@3.12.1: + resolution: {integrity: sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==} + engines: {node: '>= 0.10'} + + css-color-keywords@1.0.0: + resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} + engines: {node: '>=4'} + + css-declaration-sorter@7.2.0: + resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.0.9 + + css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + + css-to-react-native@3.2.0: + resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} + + css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + cssnano-preset-default@6.1.2: + resolution: {integrity: sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + cssnano-utils@4.0.2: + resolution: {integrity: sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + cssnano@6.0.1: + resolution: {integrity: sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + + csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + cssom@0.3.8: + resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} + + cssom@0.5.0: + resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} + + cssstyle@2.3.0: + resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} + engines: {node: '>=8'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + + data-urls@3.0.2: + resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} + engines: {node: '>=12'} + + dayjs@1.11.11: + resolution: {integrity: sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==} + + de-indent@1.0.2: + resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decimal.js@10.5.0: + resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==} + + decode-named-character-reference@1.0.2: + resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + + decode-uri-component@0.4.1: + resolution: {integrity: sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==} + engines: {node: '>=14.16'} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + defined@1.0.1: + resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + des.js@1.1.0: + resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + + detective@5.2.1: + resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} + engines: {node: '>=0.8.0'} + hasBin: true + + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + + diffie-hellman@5.0.3: + resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + dirty-json@0.9.2: + resolution: {integrity: sha512-7SCDfnQtBObcngVXNPZcnxGxqqPTK4UqeXeKAch+RGH5qpqadWbV9FmN71x9Bb4tTs0TNFb4FT/4Kz4P4Cjqcw==} + engines: {node: '>=6.0.0'} + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + doctrine-temporary-fork@2.1.0: + resolution: {integrity: sha512-nliqOv5NkE4zMON4UA6AMJE6As35afs8aYXATpU4pTUdIKiARZwrJVEP1boA3Rx1ZXHVkwxkhcq4VkqvsuRLsA==} + engines: {node: '>=0.10.0'} + + documentation@14.0.3: + resolution: {integrity: sha512-B7cAviVKN9Rw7Ofd+9grhVuxiHwly6Ieh+d/ceMw8UdBOv/irkuwnDEJP8tq0wgdLJDUVuIkovV+AX9mTrZFxg==} + engines: {node: '>=14'} + hasBin: true + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + dom-walk@0.1.2: + resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} + + domain-browser@4.19.0: + resolution: {integrity: sha512-fRA+BaAWOR/yr/t7T9E9GJztHPeFjj8U35ajyAjCDtAAnTn1Rc1f6W6VGPJrO1tkQv9zWu+JRof7z6oQtiYVFQ==} + engines: {node: '>=10'} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domexception@4.0.0: + resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} + engines: {node: '>=12'} + deprecated: Use your platform's native DOMException instead + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + earcut@2.2.4: + resolution: {integrity: sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + electron-to-chromium@1.5.102: + resolution: {integrity: sha512-eHhqaja8tE/FNpIiBrvBjFV/SSKpyWHLvxuR9dPTdo+3V9ppdLmFB7ZZQ98qNovcngPLYIz0oOBF9P0FfZef5Q==} + + elliptic@6.6.1: + resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + enhanced-resolve@5.12.0: + resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} + engines: {node: '>=10.13.0'} + + enhanced-resolve@5.18.1: + resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} + engines: {node: '>=10.13.0'} + + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + error-stack-parser@2.1.4: + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es6-object-assign@1.1.0: + resolution: {integrity: sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==} + + esbuild@0.17.19: + resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.19.2: + resolution: {integrity: sha512-G6hPax8UbFakEj3hWO0Vs52LQ8k3lnBhxZWomUJDxfz3rZTLqF5k/FCzuNdLx2RbpBiQQF9H9onlDDH1lZsnjg==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.23.1: + resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-util-attach-comments@2.1.1: + resolution: {integrity: sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==} + + estree-util-build-jsx@2.2.2: + resolution: {integrity: sha512-m56vOXcOBuaF+Igpb9OPAy7f9w9OIkb5yhjsZuaPm7HoGi4oTOQi0h2+yZ+AtKklYFZ+rPC4n0wYCJCEU1ONqg==} + + estree-util-is-identifier-name@2.1.0: + resolution: {integrity: sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==} + + estree-util-to-js@1.2.0: + resolution: {integrity: sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==} + + estree-util-visit@1.2.1: + resolution: {integrity: sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + evp_bytestokey@1.0.3: + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + + execa@9.3.0: + resolution: {integrity: sha512-l6JFbqnHEadBoVAVpN5dl2yCyfX28WoBAGaoQcNmLLSedOxTxcn2Qa83s8I/PA5i56vWru2OHOtrwF7Om2vqlg==} + engines: {node: ^18.19.0 || >=20.5.0} + + exif-parser@0.1.12: + resolution: {integrity: sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==} + + express@4.21.1: + resolution: {integrity: sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==} + engines: {node: '>= 0.10.0'} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + extendable-error@0.1.7: + resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-uri@3.0.6: + resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + + fastq@1.19.0: + resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} + + fault@1.0.4: + resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} + + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} + + file-type@16.5.4: + resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==} + engines: {node: '>=10'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + filter-obj@2.0.2: + resolution: {integrity: sha512-lO3ttPjHZRfjMcxWKb1j1eDhTFsu4meeR3lnMcnBFhk6RuLhvEiuALu2TlfL310ph4lCYYwgF/ElIjdP739tdg==} + engines: {node: '>=8'} + + filter-obj@5.1.0: + resolution: {integrity: sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==} + engines: {node: '>=14.16'} + + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + engines: {node: '>= 0.8'} + + find-cache-dir@2.1.0: + resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} + engines: {node: '>=6'} + + find-up@3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + find-up@6.3.0: + resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + flexsearch@0.6.32: + resolution: {integrity: sha512-EF1BWkhwoeLtbIlDbY/vDSLBen/E5l/f1Vg7iX5CDymQCamcx1vhlc3tIZxIDplPjgi0jhG37c67idFbjg+v+Q==} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + for-in@0.1.8: + resolution: {integrity: sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==} + engines: {node: '>=0.10.0'} + + for-in@1.0.2: + resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} + engines: {node: '>=0.10.0'} + + for-own@0.1.5: + resolution: {integrity: sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==} + engines: {node: '>=0.10.0'} + + fork-ts-checker-webpack-plugin@8.0.0: + resolution: {integrity: sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==} + engines: {node: '>=12.13.0', yarn: '>=1.0.0'} + peerDependencies: + typescript: '>3.6.0' + webpack: ^5.11.0 + + form-data-encoder@1.7.2: + resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} + + form-data@4.0.2: + resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} + engines: {node: '>= 6'} + + format@0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} + + formdata-node@4.4.1: + resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} + engines: {node: '>= 12.20'} + + formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-extra@11.3.0: + resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} + engines: {node: '>=14.14'} + + fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + + fs-monkey@1.0.6: + resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + generic-names@4.0.0: + resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.2.7: + resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} + + get-tsconfig@4.10.0: + resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} + + gifwrap@0.10.1: + resolution: {integrity: sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw==} + + git-up@7.0.0: + resolution: {integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==} + + git-url-parse@13.1.1: + resolution: {integrity: sha512-PCFJyeSSdtnbfhSNRw9Wk96dDCNx+sogTe4YNXeXSJxt7xz5hvXekuRn9JX7m+Mf4OscCu8h+mtAl3+h5Fo8lQ==} + + github-slugger@1.4.0: + resolution: {integrity: sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==} + + github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@7.1.6: + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + deprecated: Glob versions prior to v9 are no longer supported + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported + + global@4.4.0: + resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} + + globals-docs@2.4.1: + resolution: {integrity: sha512-qpPnUKkWnz8NESjrCvnlGklsgiQzlq+rcCxoG5uNQ+dNA7cFMCmn231slLAwS2N/PlkzZ3COL8CcS10jXmLHqg==} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hash-base@3.0.5: + resolution: {integrity: sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==} + engines: {node: '>= 0.10'} + + hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hast-util-from-html@1.0.2: + resolution: {integrity: sha512-LhrTA2gfCbLOGJq2u/asp4kwuG0y6NhWTXiPKP+n0qNukKy7hc10whqqCFfyvIA1Q5U5d0sp9HhNim9gglEH4A==} + + hast-util-from-parse5@7.1.2: + resolution: {integrity: sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==} + + hast-util-has-property@2.0.1: + resolution: {integrity: sha512-X2+RwZIMTMKpXUzlotatPzWj8bspCymtXH3cfG3iQKV+wPF53Vgaqxi/eLqGck0wKq1kS9nvoB1wchbCPEL8sg==} + + hast-util-heading-rank@2.1.1: + resolution: {integrity: sha512-iAuRp+ESgJoRFJbSyaqsfvJDY6zzmFoEnL1gtz1+U8gKtGGj1p0CVlysuUAUjq95qlZESHINLThwJzNGmgGZxA==} + + hast-util-is-element@2.1.3: + resolution: {integrity: sha512-O1bKah6mhgEq2WtVMk+Ta5K7pPMqsBBlmzysLdcwKVrqzZQ0CHqUPiIVspNhAG1rvxpvJjtGee17XfauZYKqVA==} + + hast-util-parse-selector@2.2.5: + resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} + + hast-util-parse-selector@3.1.1: + resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} + + hast-util-raw@7.2.3: + resolution: {integrity: sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==} + + hast-util-sanitize@4.1.0: + resolution: {integrity: sha512-Hd9tU0ltknMGRDv+d6Ro/4XKzBqQnP/EZrpiTbpFYfXv/uOhWeKc+2uajcbEvAEH98VZd7eII2PiXm13RihnLw==} + + hast-util-to-estree@2.3.3: + resolution: {integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==} + + hast-util-to-html@8.0.4: + resolution: {integrity: sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA==} + + hast-util-to-parse5@7.1.0: + resolution: {integrity: sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==} + + hast-util-to-string@2.0.0: + resolution: {integrity: sha512-02AQ3vLhuH3FisaMM+i/9sm4OXGSq1UhOOCpTLLQtHdL3tZt7qil69r8M8iDkZYyC0HCFylcYoP+8IO7ddta1A==} + + hast-util-whitespace@2.0.1: + resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} + + hast@1.0.0: + resolution: {integrity: sha512-vFUqlRV5C+xqP76Wwq2SrM0kipnmpxJm7OfvVXpB35Fp+Fn4MV+ozr+JZr5qFvyR1q/U+Foim2x+3P+x9S1PLA==} + deprecated: Renamed to rehype + + hastscript@6.0.0: + resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} + + hastscript@7.2.0: + resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + highlight.js@10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + + highlight.js@11.11.1: + resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} + engines: {node: '>=12.0.0'} + + highlightjs-vue@1.0.0: + resolution: {integrity: sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==} + + hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + + hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + + hosted-git-info@4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} + + html-encoding-sniffer@3.0.0: + resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} + engines: {node: '>=12'} + + html-entities@2.5.2: + resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==} + + html-minifier-terser@7.0.0: + resolution: {integrity: sha512-Adqk0b/pWKIQiGvEAuzPKpBKNHiwblr3QSGS7TTr6v+xXKV9AI2k4vWW+6Oytt6Z5SeBnfvYypKOnz8r75pz3Q==} + engines: {node: ^14.13.1 || >=16.0.0} + hasBin: true + + html-to-text@9.0.5: + resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==} + engines: {node: '>=14'} + + html-void-elements@2.0.1: + resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==} + + htmlparser2@8.0.2: + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + + htmlparser2@9.0.0: + resolution: {integrity: sha512-uxbSI98wmFT/G4P2zXx4OVx04qWUmyFPrD2/CNepa2Zo3GPNaCaaxElDgwUrwYWkK1nr9fft0Ya8dws8coDLLQ==} + + http-compression@1.0.6: + resolution: {integrity: sha512-Yy9VFT/0fJhbpSHmqA34CJKZDXLnHoQUP2wbFXY7duOx3nc9Qf8MVJezaXTP7IirvJ9DmUv/vm7qFNu/RntdWw==} + engines: {node: '>= 4'} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + http-proxy-agent@5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + http-proxy-middleware@2.0.7: + resolution: {integrity: sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/express': ^4.17.13 + peerDependenciesMeta: + '@types/express': + optional: true + + http-proxy@1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + + http-server@14.1.1: + resolution: {integrity: sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==} + engines: {node: '>=12'} + hasBin: true + + https-browserify@1.0.0: + resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + human-id@4.1.1: + resolution: {integrity: sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg==} + hasBin: true + + human-signals@7.0.0: + resolution: {integrity: sha512-74kytxOUSvNbjrT9KisAbaTZ/eJwD/LrbM/kh5j0IhPuJzwuA19dWvniFGwBzN9rVjg+O/e+F310PjObDXS+9Q==} + engines: {node: '>=18.18.0'} + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + icss-replace-symbols@1.1.0: + resolution: {integrity: sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==} + + icss-utils@5.1.0: + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore-by-default@1.0.1: + resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} + + ignore-styles@5.0.1: + resolution: {integrity: sha512-gQQmIznCETPLEzfg1UH4Cs2oRq+HBPl8quroEUNXT8oybEG7/0lqI3dGgDSRry6B9HcCXw3PVkFFS0FF3CMddg==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + image-q@4.0.0: + resolution: {integrity: sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==} + + immer@9.0.21: + resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} + + immutable@4.3.7: + resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@3.0.1: + resolution: {integrity: sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + inline-style-parser@0.1.1: + resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} + + inquirer@10.1.5: + resolution: {integrity: sha512-ksPK04lcs0GcgkvfmZ5Sjxdm74Nf3Ksy37NTQDrdMZlB0IJgH6TB8cTCJpvGAvt6edsgHa07flRcvXwkr+tPqQ==} + engines: {node: '>=18'} + + invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + + ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + is-absolute-url@4.0.1: + resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-absolute@1.0.0: + resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} + engines: {node: '>=0.10.0'} + + is-alphabetical@1.0.4: + resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} + + is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + + is-alphanumerical@1.0.4: + resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} + + is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + + is-arguments@1.2.0: + resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-buffer@1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + + is-buffer@2.0.5: + resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} + engines: {node: '>=4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-decimal@1.0.4: + resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} + + is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-function@1.0.2: + resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} + + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-hexadecimal@1.0.4: + resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} + + is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-nan@1.3.2: + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + + is-reference@3.0.3: + resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-relative@1.0.0: + resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} + engines: {node: '>=0.10.0'} + + is-ssh@1.4.1: + resolution: {integrity: sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==} + + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + + is-subdir@1.2.0: + resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} + engines: {node: '>=4'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-unc-path@1.0.0: + resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} + engines: {node: '>=0.10.0'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isbot@3.7.1: + resolution: {integrity: sha512-JfqOaY3O1lcWt2nc+D6Mq231CNpwZrBboLa59Go0J8hjGH+gY/Sy0CA/YLUSIScINmAVwTdJZIsOTk4PfBtRuw==} + engines: {node: '>=12'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + ismobilejs@1.1.1: + resolution: {integrity: sha512-VaFW53yt8QO61k2WJui0dHf4SlL8lxBofUuUmwBo0ljPk0Drz2TiuDW4jo3wDcv41qy/SxrJ+VAzJ/qYqsmzRw==} + + isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + + isomorphic-fetch@3.0.0: + resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + + jimp@0.22.12: + resolution: {integrity: sha512-R5jZaYDnfkxKJy1dwLpj/7cvyjxiclxU3F4TrI/J4j2rS0niq6YDUMoPn5hs8GDpO+OZGo7Ky057CRtWesyhfg==} + + jpeg-js@0.4.4: + resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + + jsdom@20.0.3: + resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} + engines: {node: '>=14'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json2mq@0.2.0: + resolution: {integrity: sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsonwebtoken@9.0.2: + resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + engines: {node: '>=12', npm: '>=6'} + + jwa@1.4.1: + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + + jwa@2.0.0: + resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} + + jws@3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + + jws@4.0.0: + resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} + + kind-of@2.0.1: + resolution: {integrity: sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==} + engines: {node: '>=0.10.0'} + + kind-of@3.2.2: + resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} + engines: {node: '>=0.10.0'} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + + konan@2.1.1: + resolution: {integrity: sha512-7ZhYV84UzJ0PR/RJnnsMZcAbn+kLasJhVNWsu8ZyVEJYRpGA5XESQ9d/7zOa08U0Ou4cmB++hMNY/3OSV9KIbg==} + + lazy-cache@0.2.7: + resolution: {integrity: sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==} + engines: {node: '>=0.10.0'} + + lazy-cache@1.0.4: + resolution: {integrity: sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==} + engines: {node: '>=0.10.0'} + + leac@0.6.0: + resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==} + + levdist@1.0.0: + resolution: {integrity: sha512-YguwC2spb0pqpJM3a5OsBhih/GG2ZHoaSHnmBqhEI7997a36buhqcRTegEjozHxyxByIwLpZHZTVYMThq+Zd3g==} + + lex@1.7.9: + resolution: {integrity: sha512-vzaalVBmFLnMaedq0QAsBAaXsWahzRpvnIBdBjj7y+7EKTS6lnziU2y/PsU2c6rV5qYj2B5IDw0uNJ9peXD0vw==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + line-diff@2.1.1: + resolution: {integrity: sha512-vswdynAI5AMPJacOo2o+JJ4caDJbnY2NEqms4MhMW0NJbjh3skP/brpVTAgBxrg55NRZ2Vtw88ef18hnagIpYQ==} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + load-bmfont@1.4.2: + resolution: {integrity: sha512-qElWkmjW9Oq1F9EI5Gt7aD9zcdHb9spJCW1L/dmPf7KzCCEJxq8nhHz5eCgI9aMf7vrG/wyaCqdsI+Iy9ZTlog==} + + loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + + loader-utils@2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} + + loader-utils@3.3.1: + resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} + engines: {node: '>= 12.13.0'} + + locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + + lodash._reinterpolate@3.0.0: + resolution: {integrity: sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + + lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + + lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + + lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + + lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + + lodash.template@4.5.0: + resolution: {integrity: sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==} + deprecated: This package is deprecated. Use https://socket.dev/npm/package/eta instead. + + lodash.templatesettings@4.2.0: + resolution: {integrity: sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==} + + lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + lowlight@1.20.0: + resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==} + + lru-cache@4.1.5: + resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + magic-string@0.30.12: + resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} + + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + + make-dir@2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + + map-cache@0.2.2: + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} + + markdown-extensions@1.1.1: + resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} + engines: {node: '>=0.10.0'} + + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + + matchit@1.1.0: + resolution: {integrity: sha512-+nGYoOlfHmxe5BW5tE0EMJppXEwdSf8uBA1GTZC7Q77kbT35+VKLYJMzVNWCHSsga1ps1tPYFtFyvxvKzWVmMA==} + engines: {node: '>=6'} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + md5.js@1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + + mdast-util-definitions@5.1.2: + resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} + + mdast-util-find-and-replace@2.2.2: + resolution: {integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==} + + mdast-util-from-markdown@1.3.1: + resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} + + mdast-util-gfm-autolink-literal@1.0.3: + resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==} + + mdast-util-gfm-footnote@1.0.2: + resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==} + + mdast-util-gfm-strikethrough@1.0.3: + resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==} + + mdast-util-gfm-table@1.0.7: + resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==} + + mdast-util-gfm-task-list-item@1.0.2: + resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==} + + mdast-util-gfm@2.0.2: + resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==} + + mdast-util-inject@1.1.0: + resolution: {integrity: sha512-CcJ0mHa36QYumDKiZ2OIR+ClhfOM7zIzN+Wfy8tRZ1hpH9DKLCS+Mh4DyK5bCxzE9uxMWcbIpeNFWsg1zrj/2g==} + + mdast-util-mdx-expression@1.3.2: + resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==} + + mdast-util-mdx-jsx@2.1.4: + resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==} + + mdast-util-mdx@2.0.1: + resolution: {integrity: sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==} + + mdast-util-mdxjs-esm@1.3.1: + resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==} + + mdast-util-phrasing@3.0.1: + resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} + + mdast-util-to-hast@12.3.0: + resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} + + mdast-util-to-markdown@1.5.0: + resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} + + mdast-util-to-string@1.1.0: + resolution: {integrity: sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==} + + mdast-util-to-string@3.2.0: + resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} + + mdast-util-toc@6.1.1: + resolution: {integrity: sha512-Er21728Kow8hehecK2GZtb7Ny3omcoPUVrmObiSUwmoRYVZaXLR751QROEFjR8W/vAQdHMLj49Lz20J55XaNpw==} + + mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + + mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + medium-zoom@1.0.8: + resolution: {integrity: sha512-CjFVuFq/IfrdqesAXfg+hzlDKu6A2n80ZIq0Kl9kWjoHh9j1N9Uvk5X0/MmN0hOfm5F9YBswlClhcwnmtwz7gA==} + + memfs@3.5.3: + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} + engines: {node: '>= 4.0.0'} + + merge-deep@3.0.3: + resolution: {integrity: sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==} + engines: {node: '>=0.10.0'} + + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + micromark-core-commonmark@1.1.0: + resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} + + micromark-extension-gfm-autolink-literal@1.0.5: + resolution: {integrity: sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==} + + micromark-extension-gfm-footnote@1.1.2: + resolution: {integrity: sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==} + + micromark-extension-gfm-strikethrough@1.0.7: + resolution: {integrity: sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==} + + micromark-extension-gfm-table@1.0.7: + resolution: {integrity: sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==} + + micromark-extension-gfm-tagfilter@1.0.2: + resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==} + + micromark-extension-gfm-task-list-item@1.0.5: + resolution: {integrity: sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==} + + micromark-extension-gfm@2.0.3: + resolution: {integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==} + + micromark-extension-mdx-expression@1.0.8: + resolution: {integrity: sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==} + + micromark-extension-mdx-jsx@1.0.5: + resolution: {integrity: sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==} + + micromark-extension-mdx-md@1.0.1: + resolution: {integrity: sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==} + + micromark-extension-mdxjs-esm@1.0.5: + resolution: {integrity: sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==} + + micromark-extension-mdxjs@1.0.1: + resolution: {integrity: sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==} + + micromark-factory-destination@1.1.0: + resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} + + micromark-factory-label@1.1.0: + resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} + + micromark-factory-mdx-expression@1.0.9: + resolution: {integrity: sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==} + + micromark-factory-space@1.1.0: + resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} + + micromark-factory-title@1.1.0: + resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} + + micromark-factory-whitespace@1.1.0: + resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} + + micromark-util-character@1.2.0: + resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} + + micromark-util-chunked@1.1.0: + resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} + + micromark-util-classify-character@1.1.0: + resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} + + micromark-util-combine-extensions@1.1.0: + resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} + + micromark-util-decode-numeric-character-reference@1.1.0: + resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} + + micromark-util-decode-string@1.1.0: + resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} + + micromark-util-encode@1.1.0: + resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} + + micromark-util-events-to-acorn@1.2.3: + resolution: {integrity: sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==} + + micromark-util-html-tag-name@1.2.0: + resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} + + micromark-util-normalize-identifier@1.1.0: + resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} + + micromark-util-resolve-all@1.1.0: + resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} + + micromark-util-sanitize-uri@1.2.0: + resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} + + micromark-util-subtokenize@1.1.0: + resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} + + micromark-util-symbol@1.1.0: + resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} + + micromark-util-types@1.1.0: + resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} + + micromark@3.2.0: + resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + miller-rabin@4.0.1: + resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} + hasBin: true + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-db@1.53.0: + resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + min-document@2.19.0: + resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} + + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mixin-object@2.0.1: + resolution: {integrity: sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==} + engines: {node: '>=0.10.0'} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-abort-controller@3.1.1: + resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-fetch@3.3.0: + resolution: {integrity: sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + node-html-parser@6.1.13: + resolution: {integrity: sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==} + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + nodemon@3.1.9: + resolution: {integrity: sha512-hdr1oIb2p6ZSxu3PB2JWWYS7ZQ0qvaZsc3hK8DR8f02kRzc8rjYmxAIvdz+aYC+8F2IjNaB7HMcSDg8nQpJxyg==} + engines: {node: '>=10'} + hasBin: true + + normalize-package-data@3.0.3: + resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} + engines: {node: '>=10'} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + npm-watch@0.13.0: + resolution: {integrity: sha512-MYcgocqCzYA44feZhFoYj69FfSaO0EeRE1gcRcmPaXIpNhUMAhNJ1pwic2C4Hn0OPOQmZKSl90CPgmwvOsVhTg==} + hasBin: true + + nprogress@0.2.0: + resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + nwsapi@2.2.16: + resolution: {integrity: sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + omggif@1.0.10: + resolution: {integrity: sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + + openai@4.57.1: + resolution: {integrity: sha512-7q+4U9A/klaAT40bqL6sPFhIKb4jsUJ8udddCzaf8mdwICYeBG7grps/zDcrOUfkwCxCzR6fxfDDah3WqHoVUA==} + hasBin: true + peerDependencies: + zod: ^3.23.8 + peerDependenciesMeta: + zod: + optional: true + + opener@1.5.2: + resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} + hasBin: true + + optional@0.1.4: + resolution: {integrity: sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw==} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + os-browserify@0.3.0: + resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + outdent@0.5.0: + resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + + p-filter@2.1.0: + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} + engines: {node: '>=8'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-locate@3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-manager-detector@0.2.9: + resolution: {integrity: sha512-+vYvA/Y31l8Zk8dwxHhL3JfTuHPm6tlxM2A3GeQyl7ovYnSp1+mzAxClxaOr0qO1TtPxbQxetI7v5XqKLJZk7Q==} + + pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + + param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-asn1@5.1.7: + resolution: {integrity: sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==} + engines: {node: '>= 0.10'} + + parse-bmfont-ascii@1.0.6: + resolution: {integrity: sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==} + + parse-bmfont-binary@1.0.6: + resolution: {integrity: sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==} + + parse-bmfont-xml@1.1.6: + resolution: {integrity: sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==} + + parse-entities@2.0.0: + resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} + + parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + + parse-filepath@1.0.2: + resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==} + engines: {node: '>=0.8'} + + parse-headers@2.0.5: + resolution: {integrity: sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + + parse-path@7.0.1: + resolution: {integrity: sha512-6ReLMptznuuOEzLoGEa+I1oWRSj2Zna5jLWC+l6zlfAI4dbbSaIES29ThzuPkbhNahT65dWzfoZEO6cfJw2Ksg==} + + parse-svg-path@0.1.2: + resolution: {integrity: sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ==} + + parse-url@8.1.0: + resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==} + + parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + + parse5@7.1.1: + resolution: {integrity: sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==} + + parse5@7.2.1: + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + + parseley@0.12.1: + resolution: {integrity: sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-root-regex@0.1.2: + resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==} + engines: {node: '>=0.10.0'} + + path-root@0.1.1: + resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==} + engines: {node: '>=0.10.0'} + + path-to-regexp@0.1.10: + resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} + + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pbkdf2@3.1.2: + resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} + engines: {node: '>=0.12'} + + peberminta@0.9.0: + resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} + + peek-readable@4.1.0: + resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==} + engines: {node: '>=8'} + + periscopic@3.1.0: + resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} + + phin@3.7.1: + resolution: {integrity: sha512-GEazpTWwTZaEQ9RhL7Nyz0WwqilbqgLahDM3D0hxWwmVDI52nXEybHqiN6/elwpkJBhcuj+WbBu+QfT0uhPGfQ==} + engines: {node: '>= 8'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + + pify@6.1.0: + resolution: {integrity: sha512-KocF8ve28eFjjuBKKGvzOBGzG8ew2OqOOSxTTZhirkzH7h3BI1vyzqlR0qbfcDBve1Yzo3FVlWUAtCRrbVN8Fw==} + engines: {node: '>=14.16'} + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + pixelmatch@4.0.2: + resolution: {integrity: sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==} + hasBin: true + + pixi-filters@6.0.5: + resolution: {integrity: sha512-M7F+Xu4Ysp2iy7bNZxt6U4hxO+X8c3msVKOQAq/tf3sLt99XOiY54iH2Ixj5VRIesmjdLWA5CaUQ+TUfyBVe2g==} + peerDependencies: + pixi.js: '>=8.0.0-0' + + pixi.js-legacy@7.4.2: + resolution: {integrity: sha512-azGsuJvLHk/VJwt45AjlathtTNdUjLDSoaGt8JBNjzG/05cxVswFLL7GsSe83eNSe0eEuIrxiNIt3vBRNyU3AA==} + + pixi.js@7.4.2: + resolution: {integrity: sha512-TifqgHGNofO7UCEbdZJOpUu7dUnpu4YZ0o76kfCqxDa4RS8ITc9zjECCbtalmuNXkVhSEZmBKQvE7qhHMqw/xg==} + + pixi.js@8.1.1: + resolution: {integrity: sha512-/4D1HokubR2TlA/3JdeAb/EsGlkSRt5SmmMiPnsw9QB1PHDdzR7Td1m401fGIjTRq5edl5Zrz29hYXPuVwzdIw==} + + pkg-dir@3.0.0: + resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} + engines: {node: '>=6'} + + pkg-up@3.1.0: + resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} + engines: {node: '>=8'} + + playwright-core@1.50.1: + resolution: {integrity: sha512-ra9fsNWayuYumt+NiM069M6OkcRb1FZSK8bgi66AtpFoWkg2+y0bJSNmkFrWhMbEBbVKC/EruAHH3g0zmtwGmQ==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.50.1: + resolution: {integrity: sha512-G8rwsOQJ63XG6BbKj2w5rHeavFjy5zynBA9zsJMMtBoe/Uf757oG12NXz6e6OirF7RCrTVAKFXbLmn1RbL7Qaw==} + engines: {node: '>=18'} + hasBin: true + + pngjs@3.4.0: + resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==} + engines: {node: '>=4.0.0'} + + pngjs@6.0.0: + resolution: {integrity: sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==} + engines: {node: '>=12.13.0'} + + polka@0.5.2: + resolution: {integrity: sha512-FVg3vDmCqP80tOrs+OeNlgXYmFppTXdjD5E7I4ET1NjvtNmQrb1/mJibybKkb/d4NA7YWAr1ojxuhpL3FHqdlw==} + + portfinder@1.0.32: + resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} + engines: {node: '>= 0.12.0'} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + postcss-calc@9.0.1: + resolution: {integrity: sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.2 + + postcss-colormin@6.1.0: + resolution: {integrity: sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-convert-values@6.1.0: + resolution: {integrity: sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-discard-comments@6.0.2: + resolution: {integrity: sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-discard-duplicates@6.0.3: + resolution: {integrity: sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-discard-empty@6.0.3: + resolution: {integrity: sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-discard-overridden@6.0.2: + resolution: {integrity: sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-import@14.1.0: + resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} + engines: {node: '>=10.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@3.1.4: + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-merge-longhand@6.0.5: + resolution: {integrity: sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-merge-rules@6.1.1: + resolution: {integrity: sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-minify-font-values@6.1.0: + resolution: {integrity: sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-minify-gradients@6.0.3: + resolution: {integrity: sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-minify-params@6.1.0: + resolution: {integrity: sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-minify-selectors@6.0.4: + resolution: {integrity: sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-modules-extract-imports@3.1.0: + resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-local-by-default@4.2.0: + resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-scope@3.2.1: + resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-values@4.0.0: + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules@4.3.1: + resolution: {integrity: sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==} + peerDependencies: + postcss: ^8.0.0 + + postcss-nested@6.0.0: + resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-normalize-charset@6.0.2: + resolution: {integrity: sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-display-values@6.0.2: + resolution: {integrity: sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-positions@6.0.2: + resolution: {integrity: sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-repeat-style@6.0.2: + resolution: {integrity: sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-string@6.0.2: + resolution: {integrity: sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-timing-functions@6.0.2: + resolution: {integrity: sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-unicode@6.1.0: + resolution: {integrity: sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-url@6.0.2: + resolution: {integrity: sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-whitespace@6.0.2: + resolution: {integrity: sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-ordered-values@6.0.2: + resolution: {integrity: sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-reduce-initial@6.1.0: + resolution: {integrity: sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-reduce-transforms@6.0.2: + resolution: {integrity: sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-selector-parser@7.1.0: + resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} + engines: {node: '>=4'} + + postcss-svgo@6.0.3: + resolution: {integrity: sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==} + engines: {node: ^14 || ^16 || >= 18} + peerDependencies: + postcss: ^8.4.31 + + postcss-unique-selectors@6.0.4: + resolution: {integrity: sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.27: + resolution: {integrity: sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.5.2: + resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} + engines: {node: ^10 || ^12 || >=14} + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + pretty-ms@9.2.0: + resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} + engines: {node: '>=18'} + + prismjs@1.27.0: + resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} + engines: {node: '>=6'} + + prismjs@1.29.0: + resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} + engines: {node: '>=6'} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + property-information@5.6.0: + resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==} + + property-information@6.5.0: + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + + protocols@2.0.2: + resolution: {integrity: sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + pseudomap@1.0.2: + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + + psl@1.15.0: + resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} + + pstree.remy@1.1.8: + resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} + + public-encrypt@4.0.3: + resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} + + punycode@1.4.1: + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} + + punycode@2.1.1: + resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} + engines: {node: '>=6'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + qrcode.react@3.2.0: + resolution: {integrity: sha512-YietHHltOHA4+l5na1srdaMx4sVSOjV9tamHs+mwiLWAMr6QVACRUw1Neax5CptFILcNoITctJY0Ipyn5enQ8g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + + qs@6.14.0: + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + engines: {node: '>=0.6'} + + query-string@9.1.1: + resolution: {integrity: sha512-MWkCOVIcJP9QSKU52Ngow6bsAWAPlPK2MludXvcrS2bGZSl+T1qX9MZvRIkqUIkGLJquMJHWfsT6eRqUpp4aWg==} + engines: {node: '>=18'} + + querystring-es3@0.2.1: + resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} + engines: {node: '>=0.4.x'} + + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + randomfill@1.0.4: + resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + rc-cascader@3.28.2: + resolution: {integrity: sha512-8f+JgM83iLTvjgdkgU7GfI4qY8icXOBP0cGZjOdx2iJAkEe8ucobxDQAVE69UD/c3ehCxZlcgEHeD5hFmypbUw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-checkbox@3.3.0: + resolution: {integrity: sha512-Ih3ZaAcoAiFKJjifzwsGiT/f/quIkxJoklW4yKGho14Olulwn8gN7hOBve0/WGDg5o/l/5mL0w7ff7/YGvefVw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-collapse@3.8.0: + resolution: {integrity: sha512-YVBkssrKPBG09TGfcWWGj8zJBYD9G3XuTy89t5iUmSXrIXEAnO1M+qjUxRW6b4Qi0+wNWG6MHJF/+US+nmIlzA==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-dialog@9.6.0: + resolution: {integrity: sha512-ApoVi9Z8PaCQg6FsUzS8yvBEQy0ZL2PkuvAgrmohPkN3okps5WZ5WQWPc1RNuiOKaAYv8B97ACdsFU5LizzCqg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-drawer@7.2.0: + resolution: {integrity: sha512-9lOQ7kBekEJRdEpScHvtmEtXnAsy+NGDXiRWc2ZVC7QXAazNVbeT4EraQKYwCME8BJLa8Bxqxvs5swwyOepRwg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-dropdown@4.2.1: + resolution: {integrity: sha512-YDAlXsPv3I1n42dv1JpdM7wJ+gSUBfeyPK59ZpBD9jQhK9jVuxpjj3NmWQHOBceA1zEPVX84T2wbdb2SD0UjmA==} + peerDependencies: + react: '>=16.11.0' + react-dom: '>=16.11.0' + + rc-field-form@2.4.0: + resolution: {integrity: sha512-XZ/lF9iqf9HXApIHQHqzJK5v2w4mkUMsVqAzOyWVzoiwwXEavY6Tpuw7HavgzIoD+huVff4JghSGcgEfX6eycg==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-image@7.11.0: + resolution: {integrity: sha512-aZkTEZXqeqfPZtnSdNUnKQA0N/3MbgR7nUnZ+/4MfSFWPFHZau4p5r5ShaI0KPEMnNjv4kijSCFq/9wtJpwykw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-input-number@9.2.0: + resolution: {integrity: sha512-5XZFhBCV5f9UQ62AZ2hFbEY8iZT/dm23Q1kAg0H8EvOgD3UDbYYJAayoVIkM3lQaCqYAW5gV0yV3vjw1XtzWHg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-input@1.6.4: + resolution: {integrity: sha512-lBZhfRD4NSAUW0zOKLUeI6GJuXkxeZYi0hr8VcJgJpyTNOvHw1ysrKWAHcEOAAHj7guxgmWYSi6xWrEdfrSAsA==} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' + + rc-mentions@2.16.1: + resolution: {integrity: sha512-GnhSTGP9Mtv6pqFFGQze44LlrtWOjHNrUUAcsdo9DnNAhN4pwVPEWy4z+2jpjkiGlJ3VoXdvMHcNDQdfI9fEaw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-menu@9.15.1: + resolution: {integrity: sha512-UKporqU6LPfHnpPmtP6hdEK4iO5Q+b7BRv/uRpxdIyDGplZy9jwUjsnpev5bs3PQKB0H0n34WAPDfjAfn3kAPA==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-motion@2.9.5: + resolution: {integrity: sha512-w+XTUrfh7ArbYEd2582uDrEhmBHwK1ZENJiSJVb7uRxdE7qJSYjbO2eksRXmndqyKqKoYPc9ClpPh5242mV1vA==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-notification@5.6.3: + resolution: {integrity: sha512-42szwnn8VYQoT6GnjO00i1iwqV9D1TTMvxObWsuLwgl0TsOokzhkYiufdtQBsJMFjJravS1hfDKVMHLKLcPE4g==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-overflow@1.4.1: + resolution: {integrity: sha512-3MoPQQPV1uKyOMVNd6SZfONi+f3st0r8PksexIdBTeIYbMX0Jr+k7pHEDvsXtR4BpCv90/Pv2MovVNhktKrwvw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-pagination@4.3.0: + resolution: {integrity: sha512-UubEWA0ShnroQ1tDa291Fzw6kj0iOeF26IsUObxYTpimgj4/qPCWVFl18RLZE+0Up1IZg0IK4pMn6nB3mjvB7g==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-picker@4.6.15: + resolution: {integrity: sha512-OWZ1yrMie+KN2uEUfYCfS4b2Vu6RC1FWwNI0s+qypsc3wRt7g+peuZKVIzXCTaJwyyZruo80+akPg2+GmyiJjw==} + engines: {node: '>=8.x'} + peerDependencies: + date-fns: '>= 2.x' + dayjs: '>= 1.x' + luxon: '>= 3.x' + moment: '>= 2.x' + react: '>=16.9.0' + react-dom: '>=16.9.0' + peerDependenciesMeta: + date-fns: + optional: true + dayjs: + optional: true + luxon: + optional: true + moment: + optional: true + + rc-progress@4.0.0: + resolution: {integrity: sha512-oofVMMafOCokIUIBnZLNcOZFsABaUw8PPrf1/y0ZBvKZNpOiu5h4AO9vv11Sw0p4Hb3D0yGWuEattcQGtNJ/aw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-rate@2.13.1: + resolution: {integrity: sha512-QUhQ9ivQ8Gy7mtMZPAjLbxBt5y9GRp65VcUyGUMF3N3fhiftivPHdpuDIaWIMOTEprAjZPC08bls1dQB+I1F2Q==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-resize-observer@1.4.3: + resolution: {integrity: sha512-YZLjUbyIWox8E9i9C3Tm7ia+W7euPItNWSPX5sCcQTYbnwDb5uNpnLHQCG1f22oZWUhLw4Mv2tFmeWe68CDQRQ==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-segmented@2.5.0: + resolution: {integrity: sha512-B28Fe3J9iUFOhFJET3RoXAPFJ2u47QvLSYcZWC4tFYNGPEjug5LAxEasZlA/PpAxhdOPqGWsGbSj7ftneukJnw==} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' + + rc-select@14.15.2: + resolution: {integrity: sha512-oNoXlaFmpqXYcQDzcPVLrEqS2J9c+/+oJuGrlXeVVX/gVgrbHa5YcyiRUXRydFjyuA7GP3elRuLF7Y3Tfwltlw==} + engines: {node: '>=8.x'} + peerDependencies: + react: '*' + react-dom: '*' + + rc-slider@11.1.8: + resolution: {integrity: sha512-2gg/72YFSpKP+Ja5AjC5DPL1YnV8DEITDQrcc1eASrUYjl0esptaBVJBh5nLTXCCp15eD8EuGjwezVGSHhs9tQ==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-steps@6.0.1: + resolution: {integrity: sha512-lKHL+Sny0SeHkQKKDJlAjV5oZ8DwCdS2hFhAkIjuQt1/pB81M0cA0ErVFdHq9+jmPmFw1vJB2F5NBzFXLJxV+g==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-switch@4.1.0: + resolution: {integrity: sha512-TI8ufP2Az9oEbvyCeVE4+90PDSljGyuwix3fV58p7HV2o4wBnVToEyomJRVyTaZeqNPAp+vqeo4Wnj5u0ZZQBg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-table@7.47.5: + resolution: {integrity: sha512-fzq+V9j/atbPIcvs3emuclaEoXulwQpIiJA6/7ey52j8+9cJ4P8DGmp4YzfUVDrb3qhgedcVeD6eRgUrokwVEQ==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-tabs@15.3.0: + resolution: {integrity: sha512-lzE18r+zppT/jZWOAWS6ntdkDUKHOLJzqMi5UAij1LeKwOaQaupupAoI9Srn73GRzVpmGznkECMRrzkRusC40A==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-textarea@1.8.2: + resolution: {integrity: sha512-UFAezAqltyR00a8Lf0IPAyTd29Jj9ee8wt8DqXyDMal7r/Cg/nDt3e1OOv3Th4W6mKaZijjgwuPXhAfVNTN8sw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-tooltip@6.2.1: + resolution: {integrity: sha512-rws0duD/3sHHsD905Nex7FvoUGy2UBQRhTkKxeEvr2FB+r21HsOxcDJI0TzyO8NHhnAA8ILr8pfbSBg5Jj5KBg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-tree-select@5.23.0: + resolution: {integrity: sha512-aQGi2tFSRw1WbXv0UVXPzHm09E0cSvUVZMLxQtMv3rnZZpNmdRXWrnd9QkLNlVH31F+X5rgghmdSFF3yZW0N9A==} + peerDependencies: + react: '*' + react-dom: '*' + + rc-tree@5.9.0: + resolution: {integrity: sha512-CPrgOvm9d/9E+izTONKSngNzQdIEjMox2PBufWjS1wf7vxtvmCWzK1SlpHbRY6IaBfJIeZ+88RkcIevf729cRg==} + engines: {node: '>=10.x'} + peerDependencies: + react: '*' + react-dom: '*' + + rc-upload@4.8.1: + resolution: {integrity: sha512-toEAhwl4hjLAI1u8/CgKWt30BR06ulPa4iGQSMvSXoHzO88gPCslxqV/mnn4gJU7PDoltGIC9Eh+wkeudqgHyw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-util@5.44.4: + resolution: {integrity: sha512-resueRJzmHG9Q6rI/DfK6Kdv9/Lfls05vzMs1Sk3M2P+3cJa+MakaZyWY8IPfehVuhPJFKrIY1IK4GqbiaiY5w==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-virtual-list@3.18.2: + resolution: {integrity: sha512-SkPabqstOQgJ2Q2Ob3eDPIHsNrDzQZFl8mzHiXuNablyYwddVU33Ws6oxoA7Fi/6pZeEYonrLEUiJGr/6aBVaw==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + react-docgen-typescript@2.2.2: + resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} + peerDependencies: + typescript: '>= 4.3.x' + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + + react-fast-compare@3.2.2: + resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} + + react-helmet-async@1.3.0: + resolution: {integrity: sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==} + peerDependencies: + react: ^16.6.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 + + react-helmet@6.1.0: + resolution: {integrity: sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==} + peerDependencies: + react: '>=16.3.0' + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + react-lazy-with-preload@2.2.1: + resolution: {integrity: sha512-ONSb8gizLE5jFpdHAclZ6EAAKuFX2JydnFXPPPjoUImZlLjGtKzyBS8SJgJq7CpLgsGKh9QCZdugJyEEOVC16Q==} + + react-markdown@8.0.7: + resolution: {integrity: sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==} + peerDependencies: + '@types/react': '>=16' + react: '>=16' + + react-refresh@0.14.0: + resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} + engines: {node: '>=0.10.0'} + + react-resizable-panels@2.0.22: + resolution: {integrity: sha512-G8x8o7wjQxCG+iF4x4ngKVBpe0CY+DAZ/SaiDoqBEt0yuKJe9OE/VVYMBMMugQ3GyQ65NnSJt23tujlaZZe75A==} + peerDependencies: + react: ^16.14.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.14.0 || ^17.0.0 || ^18.0.0 + + react-router-dom@6.11.1: + resolution: {integrity: sha512-dPC2MhoPeTQ1YUOt5uIK376SMNWbwUxYRWk2ZmTT4fZfwlOvabF8uduRKKJIyfkCZvMgiF0GSCQckmkGGijIrg==} + engines: {node: '>=14'} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + + react-router-dom@6.27.0: + resolution: {integrity: sha512-+bvtFWMC0DgAFrfKXKG9Fc+BcXWRUO1aJIihbB79xaeq0v5UzfvnM5houGUm1Y461WVRcgAQ+Clh5rdb1eCx4g==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + + react-router-dom@6.29.0: + resolution: {integrity: sha512-pkEbJPATRJ2iotK+wUwHfy0xs2T59YPEN8BQxVCPeBZvK7kfPESRc/nyxzdcxR17hXgUPYx2whMwl+eo9cUdnQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + + react-router@6.11.1: + resolution: {integrity: sha512-OZINSdjJ2WgvAi7hgNLazrEV8SGn6xrKA+MkJe9wVDMZ3zQ6fdJocUjpCUCI0cNrelWjcvon0S/QK/j0NzL3KA==} + engines: {node: '>=14'} + peerDependencies: + react: '>=16.8' + + react-router@6.27.0: + resolution: {integrity: sha512-YA+HGZXz4jaAkVoYBE98VQl+nVzI+cVI2Oj/06F5ZM+0u3TgedN9Y9kmMRo2mnkSK2nCpNQn0DVob4HCsY/WLw==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + + react-router@6.29.0: + resolution: {integrity: sha512-DXZJoE0q+KyeVw75Ck6GkPxFak63C4fGqZGNijnWgzB/HzSP1ZfTlBj5COaGWwhrMQ/R8bXiq5Ooy4KG+ReyjQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + + react-side-effect@2.1.2: + resolution: {integrity: sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==} + peerDependencies: + react: ^16.3.0 || ^17.0.0 || ^18.0.0 + + react-syntax-highlighter@15.6.1: + resolution: {integrity: sha512-OqJ2/vL7lEeV5zTJyG7kmARppUjiB9h9udl4qHQjjgEos66z00Ia0OckwYfRxCSFrW8RJIBnsBwQsHZbVPspqg==} + peerDependencies: + react: '>= 0.14.0' + + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + read-pkg-up@9.1.0: + resolution: {integrity: sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + read-pkg@7.1.0: + resolution: {integrity: sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==} + engines: {node: '>=12.20'} + + read-yaml-file@1.1.0: + resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} + engines: {node: '>=6'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readable-stream@4.7.0: + resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + readable-web-to-node-stream@3.0.4: + resolution: {integrity: sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw==} + engines: {node: '>=8'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + redux-promise-middleware@6.2.0: + resolution: {integrity: sha512-TEzfMeLX63gju2WqkdFQlQMvUGYzFvJNePIJJsBlbPHs3Txsbc/5Rjhmtha1XdMU6lkeiIlp1Qx7AR3Zo9he9g==} + peerDependencies: + redux: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + + redux@4.2.1: + resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==} + + refractor@3.6.0: + resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==} + + regenerate-unicode-properties@10.2.0: + resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} + engines: {node: '>=4'} + + regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + + regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + + regexpu-core@6.2.0: + resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} + engines: {node: '>=4'} + + regjsgen@0.8.0: + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + + regjsparser@0.12.0: + resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} + hasBin: true + + rehype-autolink-headings@6.1.1: + resolution: {integrity: sha512-NMYzZIsHM3sA14nC5rAFuUPIOfg+DFmf9EY1YMhaNlB7+3kK/ZlE6kqPfuxr1tsJ1XWkTrMtMoyHosU70d35mA==} + + rehype-external-links@2.1.0: + resolution: {integrity: sha512-2YMJZVM1hxZnwl9IPkbN5Pjn78kXkAX7lq9VEtlaGA29qIls25vZN+ucNIJdbQUe+9NNFck17BiOhGmsD6oLIg==} + + rehype-slug@5.1.0: + resolution: {integrity: sha512-Gf91dJoXneiorNEnn+Phx97CO7oRMrpi+6r155tTxzGuLtm+QrI4cTwCa9e1rtePdL4i9tSO58PeSS6HWfgsiw==} + + rehype-stringify@9.0.4: + resolution: {integrity: sha512-Uk5xu1YKdqobe5XpSskwPvo1XeHUUucWEQSl8hTrXt5selvca1e8K1EZ37E6YoZ4BT8BCqCdVfQW7OfHfthtVQ==} + + relateurl@0.2.7: + resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} + engines: {node: '>= 0.10'} + + remark-gfm@3.0.1: + resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==} + + remark-html@15.0.2: + resolution: {integrity: sha512-/CIOI7wzHJzsh48AiuIyIe1clxVkUtreul73zcCXLub0FmnevQE0UMFDQm7NUx8/3rl/4zCshlMfqBdWScQthw==} + + remark-mdx@2.3.0: + resolution: {integrity: sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==} + + remark-parse@10.0.2: + resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} + + remark-reference-links@6.0.1: + resolution: {integrity: sha512-34wY2C6HXSuKVTRtyJJwefkUD8zBOZOSHFZ4aSTnU2F656gr9WeuQ2dL6IJDK3NPd2F6xKF2t4XXcQY9MygAXg==} + + remark-rehype@10.1.0: + resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} + + remark-stringify@10.0.3: + resolution: {integrity: sha512-koyOzCMYoUHudypbj4XpnAKFbkddRMYZHwghnxd7ue5210WzGw6kOBwauJTRUMq16jsovXx8dYNvSSWP89kZ3A==} + + remark-toc@8.0.1: + resolution: {integrity: sha512-7he2VOm/cy13zilnOTZcyAoyoolV26ULlon6XyCFU+vG54Z/LWJnwphj/xKIDLOt66QmJUgTyUvLVHi2aAElyg==} + + remark@14.0.3: + resolution: {integrity: sha512-bfmJW1dmR2LvaMJuAnE88pZP9DktIFYXazkTfOIKZzi3Knk9lT0roItIA24ydOucI3bV/g/tXBA6hzqq3FV9Ew==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + reselect@4.1.8: + resolution: {integrity: sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==} + + resize-observer-polyfill@1.5.1: + resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + ripemd160@2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + + rslog@1.2.3: + resolution: {integrity: sha512-antALPJaKBRPBU1X2q9t085K4htWDOOv/K1qhTUk7h0l1ePU/KbDqKJn19eKP0dk7PqMioeA0+fu3gyPXCsXxQ==} + engines: {node: '>=14.17.6'} + + rspack-manifest-plugin@5.0.0-alpha0: + resolution: {integrity: sha512-a84H6P/lK0x3kb0I8Qdiwxrnjt1oNW0j+7kwPMWcODJu8eYFBrTXa1t+14n18Jvg9RKIR6llCH16mYxf2d0s8A==} + engines: {node: '>=14'} + peerDependencies: + webpack: ^5.75.0 + + rspack-plugin-virtual-module@0.1.7: + resolution: {integrity: sha512-8LFxQ+YI0KeveA5Vl7SWMB9LRq8pBnrtmzF6klOU3pNfWFWsaRf+D8OnDRHHlrYUq6l+1Q8yTlZB/HgqksRD9Q==} + + run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-identifier@0.4.2: + resolution: {integrity: sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + + schema-utils@4.3.0: + resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==} + engines: {node: '>= 10.13.0'} + + scroll-into-view-if-needed@3.1.0: + resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} + + secure-compare@3.0.1: + resolution: {integrity: sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==} + + selderee@0.11.0: + resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + + shallow-clone@0.1.2: + resolution: {integrity: sha512-J1zdXCky5GmNnuauESROVu31MQSnLoYvlyEn6j2Ztk6Q5EHFIhxkMhYcv6vuDzl2XEzoRr856QwzMgWM/TmZgw==} + engines: {node: '>=0.10.0'} + + shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + + shallowequal@1.1.0: + resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} + + shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-update-notifier@2.0.0: + resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} + engines: {node: '>=10'} + + sirv@2.0.4: + resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} + engines: {node: '>= 10'} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + + snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + + socks-proxy-agent@8.0.4: + resolution: {integrity: sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==} + engines: {node: '>= 14'} + + socks@2.8.4: + resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + + source-list-map@2.0.1: + resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + + space-separated-tokens@1.1.5: + resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + spawndamnit@2.0.0: + resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} + + spawndamnit@3.0.1: + resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.21: + resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} + + split-on-first@3.0.0: + resolution: {integrity: sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA==} + engines: {node: '>=12'} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + + stackframe@1.3.4: + resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + stoppable@1.1.0: + resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==} + engines: {node: '>=4', npm: '>=6'} + + stream-browserify@3.0.0: + resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} + + stream-http@3.2.0: + resolution: {integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==} + + string-convert@0.2.1: + resolution: {integrity: sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==} + + string-hash@1.1.3: + resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} + + string-replace-loader@3.1.0: + resolution: {integrity: sha512-5AOMUZeX5HE/ylKDnEa/KKBqvlnFmRZudSOjVJHxhoJg9QYTwl1rECx7SLR8BBH7tfxb4Rp7EM2XVfQFxIhsbQ==} + peerDependencies: + webpack: ^5 + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string.fromcodepoint@0.2.1: + resolution: {integrity: sha512-n69H31OnxSGSZyZbgBlvYIXlrMhJQ0dQAX1js1QDhpaUH6zmU3QYlj07bCwCNlPOu3oRXIubGPl2gDGnHsiCqg==} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + + strip-json-comments@5.0.1: + resolution: {integrity: sha512-0fk9zBqO67Nq5M/m45qHCJxylV/DhBlIOVExqgOMiCCrzrhU6tCibRXNqE3jwJLftzE9SNuZtYbpzcO+i9FiKw==} + engines: {node: '>=14.16'} + + strtok3@6.3.0: + resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} + engines: {node: '>=10'} + + style-inject@0.3.0: + resolution: {integrity: sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==} + + style-loader@3.3.3: + resolution: {integrity: sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + + style-to-object@0.4.4: + resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} + + styled-components@5.3.11: + resolution: {integrity: sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==} + engines: {node: '>=10'} + peerDependencies: + react: '>= 16.8.0' + react-dom: '>= 16.8.0' + react-is: '>= 16.8.0' + + stylehacks@6.1.1: + resolution: {integrity: sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + stylis@4.3.6: + resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} + + sucrase@3.29.0: + resolution: {integrity: sha512-bZPAuGA5SdFHuzqIhTAqt9fvNEo9rESqXIG3oiKdF8K4UmkQxC4KlNL3lVyAErXp+mPvUqZ5l13qx6TrDIGf3A==} + engines: {node: '>=8'} + hasBin: true + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-color@9.4.0: + resolution: {integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==} + engines: {node: '>=12'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + svg-parser@2.0.4: + resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} + + svgo@3.3.2: + resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==} + engines: {node: '>=14.0.0'} + hasBin: true + + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + + tailwindcss@3.2.7: + resolution: {integrity: sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==} + engines: {node: '>=12.13.0'} + hasBin: true + peerDependencies: + postcss: ^8.0.9 + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + term-size@2.2.1: + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} + engines: {node: '>=8'} + + terser-webpack-plugin@5.3.11: + resolution: {integrity: sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + + terser@5.39.0: + resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==} + engines: {node: '>=10'} + hasBin: true + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + throttle-debounce@5.0.2: + resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==} + engines: {node: '>=12.22'} + + through2@4.0.2: + resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + + timers-browserify@2.0.12: + resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} + engines: {node: '>=0.6.0'} + + timm@1.7.1: + resolution: {integrity: sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==} + + tinycolor2@1.6.0: + resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toggle-selection@1.0.6: + resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + token-types@4.2.1: + resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} + engines: {node: '>=10'} + + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + + touch@3.1.1: + resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==} + hasBin: true + + tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tr46@3.0.0: + resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} + engines: {node: '>=12'} + + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + + trouter@2.0.1: + resolution: {integrity: sha512-kr8SKKw94OI+xTGOkfsvwZQ8mWoikZDd2n8XZHjJVZUARZT+4/VV6cacRS6CLsH9bNm+HFIPU1Zx4CnNnb4qlQ==} + engines: {node: '>=6'} + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + tsconfig-paths-webpack-plugin@4.1.0: + resolution: {integrity: sha512-xWFISjviPydmtmgeUAuXp4N1fky+VCtfhOkDUFIv5ea7p4wuTomI4QTrXvFBX2S4jZsmyTSrStQl+E+4w+RzxA==} + engines: {node: '>=10.13.0'} + + tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsx@4.19.2: + resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} + engines: {node: '>=18.0.0'} + hasBin: true + + tty-browserify@0.0.1: + resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + typescript@5.0.4: + resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} + engines: {node: '>=12.20'} + hasBin: true + + unc-path-regex@0.1.2: + resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} + engines: {node: '>=0.10.0'} + + undefsafe@2.0.5: + resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + + unescape-js@1.1.4: + resolution: {integrity: sha512-42SD8NOQEhdYntEiUQdYq/1V/YHwr1HLwlHuTJB5InVVdOSbgI6xu8jK5q65yIzuFCfczzyDF/7hbGzVbyCw0g==} + + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} + engines: {node: '>=4'} + + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.2.0: + resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} + engines: {node: '>=4'} + + unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + + unified@10.1.2: + resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + + union@0.5.0: + resolution: {integrity: sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==} + engines: {node: '>= 0.8.0'} + + unist-builder@3.0.1: + resolution: {integrity: sha512-gnpOw7DIpCA0vpr6NqdPvTWnlPTApCTRzr+38E6hCWx3rz/cjo83SsKIlS1Z+L5ttScQ2AwutNnb8+tAvpb6qQ==} + + unist-util-generated@2.0.1: + resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==} + + unist-util-is@5.2.1: + resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + + unist-util-position-from-estree@1.1.2: + resolution: {integrity: sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==} + + unist-util-position@4.0.4: + resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==} + + unist-util-remove-position@4.0.2: + resolution: {integrity: sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==} + + unist-util-stringify-position@3.0.3: + resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} + + unist-util-visit-children@2.0.2: + resolution: {integrity: sha512-+LWpMFqyUwLGpsQxpumsQ9o9DG2VGLFrpz+rpVXYIEdPy57GSy5HioC0g3bg/8WP9oCLlapQtklOzQ8uLS496Q==} + + unist-util-visit-parents@5.1.3: + resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + + unist-util-visit@4.1.2: + resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + update-browserslist-db@1.1.2: + resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + url-join@4.0.1: + resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} + + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + + url@0.11.4: + resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} + engines: {node: '>= 0.4'} + + use-sync-external-store@1.2.0: + resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + + utf8@3.0.0: + resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} + + utif2@4.1.0: + resolution: {integrity: sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + uvu@0.5.6: + resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} + engines: {node: '>=8'} + hasBin: true + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vfile-location@4.1.0: + resolution: {integrity: sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==} + + vfile-message@3.1.4: + resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} + + vfile-reporter@7.0.5: + resolution: {integrity: sha512-NdWWXkv6gcd7AZMvDomlQbK3MqFWL1RlGzMn++/O2TI+68+nqxCPTvLugdOtfSzXmjh+xUyhp07HhlrbJjT+mw==} + + vfile-sort@3.0.1: + resolution: {integrity: sha512-1os1733XY6y0D5x0ugqSeaVJm9lYgj0j5qdcZQFyxlZOSy1jYarL77lLyb5gK4Wqr1d5OxmuyflSO3zKyFnTFw==} + + vfile-statistics@2.0.1: + resolution: {integrity: sha512-W6dkECZmP32EG/l+dp2jCLdYzmnDBIw6jwiLZSER81oR5AHRcVqL+k3Z+pfH1R73le6ayDkJRMk0sutj1bMVeg==} + + vfile@5.3.7: + resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} + + vm-browserify@1.1.2: + resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} + + vue-template-compiler@2.7.16: + resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==} + + w3c-xmlserializer@4.0.0: + resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} + engines: {node: '>=14'} + + watchpack@2.4.2: + resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} + engines: {node: '>=10.13.0'} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + + web-streams-polyfill@4.0.0-beta.3: + resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} + engines: {node: '>= 14'} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + + webpack-sources@2.3.1: + resolution: {integrity: sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==} + engines: {node: '>=10.13.0'} + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack@5.98.0: + resolution: {integrity: sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + + whatwg-encoding@2.0.0: + resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} + engines: {node: '>=12'} + + whatwg-fetch@3.6.20: + resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} + + whatwg-mimetype@3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} + + whatwg-url@11.0.0: + resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} + engines: {node: '>=12'} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-typed-array@1.1.18: + resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} + engines: {node: '>= 0.4'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xhr@2.6.0: + resolution: {integrity: sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==} + + xml-name-validator@4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + + xml-parse-from-string@1.0.1: + resolution: {integrity: sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==} + + xml2js@0.5.0: + resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} + engines: {node: '>=4.0.0'} + + xmlbuilder@11.0.1: + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} + engines: {node: '>=4.0'} + + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@2.1.2: + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml-front-matter@4.1.1: + resolution: {integrity: sha512-ULGbghCLsN8Hs8vfExlqrJIe8Hl2TUjD7/zsIGMP8U+dgRXEsDXk4yydxeZJgdGiimP1XB7zhmhOB4/HyfqOyQ==} + hasBin: true + + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yocto-queue@1.1.1: + resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} + engines: {node: '>=12.20'} + + yoctocolors-cjs@2.1.2: + resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + engines: {node: '>=18'} + + yoctocolors@2.1.1: + resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} + engines: {node: '>=18'} + + zod-validation-error@1.2.0: + resolution: {integrity: sha512-laJkD/ugwEh8CpuH+xXv5L9Z+RLz3lH8alNxolfaHZJck611OJj97R4Rb+ZqA7WNly2kNtTo4QwjdjXw9scpiw==} + engines: {node: ^14.17 || >=16.0.0} + peerDependencies: + zod: ^3.18.0 + + zod@3.24.2: + resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} + + zustand@4.5.2: + resolution: {integrity: sha512-2cN1tPkDVkwCy5ickKrI7vijSjPksFRfqS6237NzT0vqSsztTNnQdHw9mmN7uBdk3gceVXU0a+21jFzFzAc9+g==} + engines: {node: '>=12.7.0'} + peerDependencies: + '@types/react': '>=16.8' + immer: '>=9.0.6' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@ant-design/colors@7.2.0': + dependencies: + '@ant-design/fast-color': 2.0.6 + + '@ant-design/cssinjs-utils@1.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@ant-design/cssinjs': 1.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@babel/runtime': 7.26.9 + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@ant-design/cssinjs@1.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.26.9 + '@emotion/hash': 0.8.0 + '@emotion/unitless': 0.7.5 + classnames: 2.5.1 + csstype: 3.1.3 + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + stylis: 4.3.6 + + '@ant-design/fast-color@2.0.6': + dependencies: + '@babel/runtime': 7.26.9 + + '@ant-design/icons-svg@4.4.2': {} + + '@ant-design/icons@5.3.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@ant-design/colors': 7.2.0 + '@ant-design/icons-svg': 4.4.2 + '@babel/runtime': 7.26.9 + classnames: 2.5.1 + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@ant-design/icons@5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@ant-design/colors': 7.2.0 + '@ant-design/icons-svg': 4.4.2 + '@babel/runtime': 7.26.9 + classnames: 2.5.1 + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@ant-design/react-slick@1.1.2(react@18.3.1)': + dependencies: + '@babel/runtime': 7.26.9 + classnames: 2.5.1 + json2mq: 0.2.0 + react: 18.3.1 + resize-observer-polyfill: 1.5.1 + throttle-debounce: 5.0.2 + + '@anthropic-ai/sdk@0.33.1': + dependencies: + '@types/node': 18.19.76 + '@types/node-fetch': 2.6.12 + abort-controller: 3.0.0 + agentkeepalive: 4.6.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + '@arr/every@1.0.1': {} + + '@ast-grep/napi-darwin-arm64@0.16.0': + optional: true + + '@ast-grep/napi-darwin-x64@0.16.0': + optional: true + + '@ast-grep/napi-linux-arm64-gnu@0.16.0': + optional: true + + '@ast-grep/napi-linux-x64-gnu@0.16.0': + optional: true + + '@ast-grep/napi-win32-arm64-msvc@0.16.0': + optional: true + + '@ast-grep/napi-win32-ia32-msvc@0.16.0': + optional: true + + '@ast-grep/napi-win32-x64-msvc@0.16.0': + optional: true + + '@ast-grep/napi@0.16.0': + optionalDependencies: + '@ast-grep/napi-darwin-arm64': 0.16.0 + '@ast-grep/napi-darwin-x64': 0.16.0 + '@ast-grep/napi-linux-arm64-gnu': 0.16.0 + '@ast-grep/napi-linux-x64-gnu': 0.16.0 + '@ast-grep/napi-win32-arm64-msvc': 0.16.0 + '@ast-grep/napi-win32-ia32-msvc': 0.16.0 + '@ast-grep/napi-win32-x64-msvc': 0.16.0 + + '@azure/abort-controller@2.1.2': + dependencies: + tslib: 2.8.1 + + '@azure/core-auth@1.9.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-util': 1.11.0 + tslib: 2.8.1 + + '@azure/core-client@1.9.2': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.9.0 + '@azure/core-rest-pipeline': 1.19.0 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.11.0 + '@azure/logger': 1.1.4 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-rest-pipeline@1.19.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.9.0 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.11.0 + '@azure/logger': 1.1.4 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-tracing@1.2.0': + dependencies: + tslib: 2.8.1 + + '@azure/core-util@1.11.0': + dependencies: + '@azure/abort-controller': 2.1.2 + tslib: 2.8.1 + + '@azure/identity@4.5.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.9.0 + '@azure/core-client': 1.9.2 + '@azure/core-rest-pipeline': 1.19.0 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.11.0 + '@azure/logger': 1.1.4 + '@azure/msal-browser': 3.28.1 + '@azure/msal-node': 2.16.2 + events: 3.3.0 + jws: 4.0.0 + open: 8.4.2 + stoppable: 1.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/logger@1.1.4': + dependencies: + tslib: 2.8.1 + + '@azure/msal-browser@3.28.1': + dependencies: + '@azure/msal-common': 14.16.0 + + '@azure/msal-common@14.16.0': {} + + '@azure/msal-node@2.16.2': + dependencies: + '@azure/msal-common': 14.16.0 + jsonwebtoken: 9.0.2 + uuid: 8.3.2 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.8': {} + + '@babel/core@7.26.9': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.9 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9) + '@babel/helpers': 7.26.9 + '@babel/parser': 7.26.9 + '@babel/template': 7.26.9 + '@babel/traverse': 7.26.9(supports-color@5.5.0) + '@babel/types': 7.26.9 + convert-source-map: 2.0.0 + debug: 4.4.0(supports-color@5.5.0) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.9': + dependencies: + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.25.9': + dependencies: + '@babel/types': 7.26.9 + + '@babel/helper-compilation-targets@7.26.5': + dependencies: + '@babel/compat-data': 7.26.8 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.26.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.9) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/traverse': 7.26.9(supports-color@5.5.0) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-regexp-features-plugin@7.26.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-annotate-as-pure': 7.25.9 + regexpu-core: 6.2.0 + semver: 6.3.1 + + '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + debug: 4.4.0(supports-color@5.5.0) + lodash.debounce: 4.0.8 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color + + '@babel/helper-member-expression-to-functions@7.25.9': + dependencies: + '@babel/traverse': 7.26.9(supports-color@5.5.0) + '@babel/types': 7.26.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.25.9(supports-color@5.5.0)': + dependencies: + '@babel/traverse': 7.26.9(supports-color@5.5.0) + '@babel/types': 7.26.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.9(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.25.9': + dependencies: + '@babel/types': 7.26.9 + + '@babel/helper-plugin-utils@7.26.5': {} + + '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-wrap-function': 7.25.9 + '@babel/traverse': 7.26.9(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/traverse': 7.26.9(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + dependencies: + '@babel/traverse': 7.26.9(supports-color@5.5.0) + '@babel/types': 7.26.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helper-wrap-function@7.25.9': + dependencies: + '@babel/template': 7.26.9 + '@babel/traverse': 7.26.9(supports-color@5.5.0) + '@babel/types': 7.26.9 + transitivePeerDependencies: + - supports-color + + '@babel/helpers@7.26.9': + dependencies: + '@babel/template': 7.26.9 + '@babel/types': 7.26.9 + + '@babel/parser@7.26.9': + dependencies: + '@babel/types': 7.26.9 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.26.9(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.9) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.26.9(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-decorators@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.26.9) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + + '@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-async-generator-functions@7.26.8(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.9) + '@babel/traverse': 7.26.9(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.9) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.9) + '@babel/traverse': 7.26.9(supports-color@5.5.0) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/template': 7.26.9 + + '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-for-of@7.26.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.26.9(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.9(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.9) + + '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.9) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-react-constant-elements@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.9) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.9) + '@babel/types': 7.26.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + regenerator-transform: 0.15.2 + + '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-runtime@7.26.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-plugin-utils': 7.26.5 + babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.9) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.9) + babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.9) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-template-literals@7.26.8(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-typeof-symbol@7.26.7(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-typescript@7.26.8(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.9) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/preset-env@7.26.9(@babel/core@7.26.9)': + dependencies: + '@babel/compat-data': 7.26.8 + '@babel/core': 7.26.9 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.9) + '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.9) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.9) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.9) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.26.9) + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.26.9) + '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.9) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.26.9) + '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-for-of': 7.26.9(@babel/core@7.26.9) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.9) + '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.26.9) + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.26.9) + '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-template-literals': 7.26.8(@babel/core@7.26.9) + '@babel/plugin-transform-typeof-symbol': 7.26.7(@babel/core@7.26.9) + '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.9) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.9) + babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.9) + babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.9) + babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.9) + core-js-compat: 3.40.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/types': 7.26.9 + esutils: 2.0.3 + + '@babel/preset-react@7.26.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-react-jsx-development': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-react-pure-annotations': 7.25.9(@babel/core@7.26.9) + transitivePeerDependencies: + - supports-color + + '@babel/preset-typescript@7.26.0(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.9) + '@babel/plugin-transform-typescript': 7.26.8(@babel/core@7.26.9) + transitivePeerDependencies: + - supports-color + + '@babel/register@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + clone-deep: 4.0.1 + find-cache-dir: 2.1.0 + make-dir: 2.1.0 + pirates: 4.0.6 + source-map-support: 0.5.21 + + '@babel/runtime@7.26.9': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.26.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + + '@babel/traverse@7.26.9(supports-color@5.5.0)': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.9 + '@babel/parser': 7.26.9 + '@babel/template': 7.26.9 + '@babel/types': 7.26.9 + debug: 4.4.0(supports-color@5.5.0) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.9': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@changesets/apply-release-plan@7.0.9': + dependencies: + '@changesets/config': 3.1.0 + '@changesets/get-version-range-type': 0.4.0 + '@changesets/git': 3.0.2 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + detect-indent: 6.1.0 + fs-extra: 7.0.1 + lodash.startcase: 4.4.0 + outdent: 0.5.0 + prettier: 2.8.8 + resolve-from: 5.0.0 + semver: 7.7.1 + + '@changesets/assemble-release-plan@6.0.6': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.3 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + semver: 7.7.1 + + '@changesets/changelog-git@0.2.1': + dependencies: + '@changesets/types': 6.1.0 + + '@changesets/cli@2.28.0': + dependencies: + '@changesets/apply-release-plan': 7.0.9 + '@changesets/assemble-release-plan': 6.0.6 + '@changesets/changelog-git': 0.2.1 + '@changesets/config': 3.1.0 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.3 + '@changesets/get-release-plan': 4.0.7 + '@changesets/git': 3.0.2 + '@changesets/logger': 0.1.1 + '@changesets/pre': 2.0.2 + '@changesets/read': 0.6.3 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@changesets/write': 0.4.0 + '@manypkg/get-packages': 1.1.3 + ansi-colors: 4.1.3 + ci-info: 3.9.0 + enquirer: 2.4.1 + external-editor: 3.1.0 + fs-extra: 7.0.1 + mri: 1.2.0 + p-limit: 2.3.0 + package-manager-detector: 0.2.9 + picocolors: 1.1.1 + resolve-from: 5.0.0 + semver: 7.7.1 + spawndamnit: 3.0.1 + term-size: 2.2.1 + + '@changesets/config@3.1.0': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.3 + '@changesets/logger': 0.1.1 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + micromatch: 4.0.8 + + '@changesets/errors@0.1.4': + dependencies: + extendable-error: 0.1.7 + + '@changesets/errors@0.2.0': + dependencies: + extendable-error: 0.1.7 + + '@changesets/get-dependents-graph@2.1.3': + dependencies: + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + picocolors: 1.1.1 + semver: 7.7.1 + + '@changesets/get-release-plan@4.0.7': + dependencies: + '@changesets/assemble-release-plan': 6.0.6 + '@changesets/config': 3.1.0 + '@changesets/pre': 2.0.2 + '@changesets/read': 0.6.3 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + + '@changesets/get-version-range-type@0.4.0': {} + + '@changesets/git@2.0.0': + dependencies: + '@babel/runtime': 7.26.9 + '@changesets/errors': 0.1.4 + '@changesets/types': 5.2.1 + '@manypkg/get-packages': 1.1.3 + is-subdir: 1.2.0 + micromatch: 4.0.8 + spawndamnit: 2.0.0 + + '@changesets/git@3.0.2': + dependencies: + '@changesets/errors': 0.2.0 + '@manypkg/get-packages': 1.1.3 + is-subdir: 1.2.0 + micromatch: 4.0.8 + spawndamnit: 3.0.1 + + '@changesets/logger@0.0.5': + dependencies: + chalk: 2.4.2 + + '@changesets/logger@0.1.1': + dependencies: + picocolors: 1.1.1 + + '@changesets/parse@0.3.16': + dependencies: + '@changesets/types': 5.2.1 + js-yaml: 3.14.1 + + '@changesets/parse@0.4.1': + dependencies: + '@changesets/types': 6.1.0 + js-yaml: 3.14.1 + + '@changesets/pre@2.0.2': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + + '@changesets/read@0.5.9': + dependencies: + '@babel/runtime': 7.26.9 + '@changesets/git': 2.0.0 + '@changesets/logger': 0.0.5 + '@changesets/parse': 0.3.16 + '@changesets/types': 5.2.1 + chalk: 2.4.2 + fs-extra: 7.0.1 + p-filter: 2.1.0 + + '@changesets/read@0.6.3': + dependencies: + '@changesets/git': 3.0.2 + '@changesets/logger': 0.1.1 + '@changesets/parse': 0.4.1 + '@changesets/types': 6.1.0 + fs-extra: 7.0.1 + p-filter: 2.1.0 + picocolors: 1.1.1 + + '@changesets/should-skip-package@0.1.2': + dependencies: + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + + '@changesets/types@4.1.0': {} + + '@changesets/types@5.2.1': {} + + '@changesets/types@6.1.0': {} + + '@changesets/write@0.4.0': + dependencies: + '@changesets/types': 6.1.0 + fs-extra: 7.0.1 + human-id: 4.1.1 + prettier: 2.8.8 + + '@ctrl/tinycolor@3.6.1': {} + + '@emotion/hash@0.8.0': {} + + '@emotion/is-prop-valid@1.3.1': + dependencies: + '@emotion/memoize': 0.9.0 + + '@emotion/memoize@0.9.0': {} + + '@emotion/stylis@0.8.5': {} + + '@emotion/unitless@0.7.5': {} + + '@esbuild/aix-ppc64@0.23.1': + optional: true + + '@esbuild/android-arm64@0.17.19': + optional: true + + '@esbuild/android-arm64@0.19.2': + optional: true + + '@esbuild/android-arm64@0.23.1': + optional: true + + '@esbuild/android-arm@0.17.19': + optional: true + + '@esbuild/android-arm@0.19.2': + optional: true + + '@esbuild/android-arm@0.23.1': + optional: true + + '@esbuild/android-x64@0.17.19': + optional: true + + '@esbuild/android-x64@0.19.2': + optional: true + + '@esbuild/android-x64@0.23.1': + optional: true + + '@esbuild/darwin-arm64@0.17.19': + optional: true + + '@esbuild/darwin-arm64@0.19.2': + optional: true + + '@esbuild/darwin-arm64@0.23.1': + optional: true + + '@esbuild/darwin-x64@0.17.19': + optional: true + + '@esbuild/darwin-x64@0.19.2': + optional: true + + '@esbuild/darwin-x64@0.23.1': + optional: true + + '@esbuild/freebsd-arm64@0.17.19': + optional: true + + '@esbuild/freebsd-arm64@0.19.2': + optional: true + + '@esbuild/freebsd-arm64@0.23.1': + optional: true + + '@esbuild/freebsd-x64@0.17.19': + optional: true + + '@esbuild/freebsd-x64@0.19.2': + optional: true + + '@esbuild/freebsd-x64@0.23.1': + optional: true + + '@esbuild/linux-arm64@0.17.19': + optional: true + + '@esbuild/linux-arm64@0.19.2': + optional: true + + '@esbuild/linux-arm64@0.23.1': + optional: true + + '@esbuild/linux-arm@0.17.19': + optional: true + + '@esbuild/linux-arm@0.19.2': + optional: true + + '@esbuild/linux-arm@0.23.1': + optional: true + + '@esbuild/linux-ia32@0.17.19': + optional: true + + '@esbuild/linux-ia32@0.19.2': + optional: true + + '@esbuild/linux-ia32@0.23.1': + optional: true + + '@esbuild/linux-loong64@0.17.19': + optional: true + + '@esbuild/linux-loong64@0.19.2': + optional: true + + '@esbuild/linux-loong64@0.23.1': + optional: true + + '@esbuild/linux-mips64el@0.17.19': + optional: true + + '@esbuild/linux-mips64el@0.19.2': + optional: true + + '@esbuild/linux-mips64el@0.23.1': + optional: true + + '@esbuild/linux-ppc64@0.17.19': + optional: true + + '@esbuild/linux-ppc64@0.19.2': + optional: true + + '@esbuild/linux-ppc64@0.23.1': + optional: true + + '@esbuild/linux-riscv64@0.17.19': + optional: true + + '@esbuild/linux-riscv64@0.19.2': + optional: true + + '@esbuild/linux-riscv64@0.23.1': + optional: true + + '@esbuild/linux-s390x@0.17.19': + optional: true + + '@esbuild/linux-s390x@0.19.2': + optional: true + + '@esbuild/linux-s390x@0.23.1': + optional: true + + '@esbuild/linux-x64@0.17.19': + optional: true + + '@esbuild/linux-x64@0.19.2': + optional: true + + '@esbuild/linux-x64@0.23.1': + optional: true + + '@esbuild/netbsd-x64@0.17.19': + optional: true + + '@esbuild/netbsd-x64@0.19.2': + optional: true + + '@esbuild/netbsd-x64@0.23.1': + optional: true + + '@esbuild/openbsd-arm64@0.23.1': + optional: true + + '@esbuild/openbsd-x64@0.17.19': + optional: true + + '@esbuild/openbsd-x64@0.19.2': + optional: true + + '@esbuild/openbsd-x64@0.23.1': + optional: true + + '@esbuild/sunos-x64@0.17.19': + optional: true + + '@esbuild/sunos-x64@0.19.2': + optional: true + + '@esbuild/sunos-x64@0.23.1': + optional: true + + '@esbuild/win32-arm64@0.17.19': + optional: true + + '@esbuild/win32-arm64@0.19.2': + optional: true + + '@esbuild/win32-arm64@0.23.1': + optional: true + + '@esbuild/win32-ia32@0.17.19': + optional: true + + '@esbuild/win32-ia32@0.19.2': + optional: true + + '@esbuild/win32-ia32@0.23.1': + optional: true + + '@esbuild/win32-x64@0.17.19': + optional: true + + '@esbuild/win32-x64@0.19.2': + optional: true + + '@esbuild/win32-x64@0.23.1': + optional: true + + '@headlessui/react@1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@tanstack/react-virtual': 3.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + client-only: 0.0.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@inquirer/checkbox@2.5.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/figures': 1.0.10 + '@inquirer/type': 1.5.5 + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + + '@inquirer/confirm@3.2.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + + '@inquirer/core@9.2.1': + dependencies: + '@inquirer/figures': 1.0.10 + '@inquirer/type': 2.0.0 + '@types/mute-stream': 0.0.4 + '@types/node': 22.13.4 + '@types/wrap-ansi': 3.0.0 + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 1.0.0 + signal-exit: 4.1.0 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + + '@inquirer/editor@2.2.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + external-editor: 3.1.0 + + '@inquirer/expand@2.3.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + yoctocolors-cjs: 2.1.2 + + '@inquirer/figures@1.0.10': {} + + '@inquirer/input@2.3.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + + '@inquirer/number@1.1.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + + '@inquirer/password@2.2.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + ansi-escapes: 4.3.2 + + '@inquirer/prompts@5.5.0': + dependencies: + '@inquirer/checkbox': 2.5.0 + '@inquirer/confirm': 3.2.0 + '@inquirer/editor': 2.2.0 + '@inquirer/expand': 2.3.0 + '@inquirer/input': 2.3.0 + '@inquirer/number': 1.1.0 + '@inquirer/password': 2.2.0 + '@inquirer/rawlist': 2.3.0 + '@inquirer/search': 1.1.0 + '@inquirer/select': 2.5.0 + + '@inquirer/rawlist@2.3.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + yoctocolors-cjs: 2.1.2 + + '@inquirer/search@1.1.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/figures': 1.0.10 + '@inquirer/type': 1.5.5 + yoctocolors-cjs: 2.1.2 + + '@inquirer/select@2.5.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/figures': 1.0.10 + '@inquirer/type': 1.5.5 + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + + '@inquirer/type@1.5.5': + dependencies: + mute-stream: 1.0.0 + + '@inquirer/type@2.0.0': + dependencies: + mute-stream: 1.0.0 + + '@jimp/bmp@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + bmp-js: 0.1.0 + + '@jimp/core@0.22.12': + dependencies: + '@jimp/utils': 0.22.12 + any-base: 1.1.0 + buffer: 5.7.1 + exif-parser: 0.1.12 + file-type: 16.5.4 + isomorphic-fetch: 3.0.0 + pixelmatch: 4.0.2 + tinycolor2: 1.6.0 + transitivePeerDependencies: + - encoding + + '@jimp/custom@0.22.12': + dependencies: + '@jimp/core': 0.22.12 + transitivePeerDependencies: + - encoding + + '@jimp/gif@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + gifwrap: 0.10.1 + omggif: 1.0.10 + + '@jimp/jpeg@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + jpeg-js: 0.4.4 + + '@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + + '@jimp/plugin-blur@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + + '@jimp/plugin-circle@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + + '@jimp/plugin-color@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + tinycolor2: 1.6.0 + + '@jimp/plugin-contain@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12)))': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/plugin-blit': 0.22.12(@jimp/custom@0.22.12) + '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12) + '@jimp/plugin-scale': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12)) + '@jimp/utils': 0.22.12 + + '@jimp/plugin-cover@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12)))': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/plugin-crop': 0.22.12(@jimp/custom@0.22.12) + '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12) + '@jimp/plugin-scale': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12)) + '@jimp/utils': 0.22.12 + + '@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + + '@jimp/plugin-displace@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + + '@jimp/plugin-dither@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + + '@jimp/plugin-fisheye@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + + '@jimp/plugin-flip@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-rotate@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12)))': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/plugin-rotate': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12)) + '@jimp/utils': 0.22.12 + + '@jimp/plugin-gaussian@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + + '@jimp/plugin-invert@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + + '@jimp/plugin-mask@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + + '@jimp/plugin-normalize@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + + '@jimp/plugin-print@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12))': dependencies: '@jimp/custom': 0.22.12 '@jimp/plugin-blit': 0.22.12(@jimp/custom@0.22.12) @@ -2891,124 +8930,80 @@ packages: load-bmfont: 1.4.2 transitivePeerDependencies: - debug - dev: true - /@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12): - resolution: {integrity: sha512-3NyTPlPbTnGKDIbaBgQ3HbE6wXbAlFfxHVERmrbqAi8R3r6fQPxpCauA8UVDnieg5eo04D0T8nnnNIX//i/sXg==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12)': dependencies: '@jimp/custom': 0.22.12 '@jimp/utils': 0.22.12 - dev: true - /@jimp/plugin-rotate@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12)(@jimp/plugin-crop@0.22.12)(@jimp/plugin-resize@0.22.12): - resolution: {integrity: sha512-9YNEt7BPAFfTls2FGfKBVgwwLUuKqy+E8bDGGEsOqHtbuhbshVGxN2WMZaD4gh5IDWvR+emmmPPWGgaYNYt1gA==} - peerDependencies: - '@jimp/custom': '>=0.3.5' - '@jimp/plugin-blit': '>=0.3.5' - '@jimp/plugin-crop': '>=0.3.5' - '@jimp/plugin-resize': '>=0.3.5' + '@jimp/plugin-rotate@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12))': dependencies: '@jimp/custom': 0.22.12 '@jimp/plugin-blit': 0.22.12(@jimp/custom@0.22.12) '@jimp/plugin-crop': 0.22.12(@jimp/custom@0.22.12) '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12) '@jimp/utils': 0.22.12 - dev: true - /@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-resize@0.22.12): - resolution: {integrity: sha512-dghs92qM6MhHj0HrV2qAwKPMklQtjNpoYgAB94ysYpsXslhRTiPisueSIELRwZGEr0J0VUxpUY7HgJwlSIgGZw==} - peerDependencies: - '@jimp/custom': '>=0.3.5' - '@jimp/plugin-resize': '>=0.3.5' + '@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12))': dependencies: '@jimp/custom': 0.22.12 '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12) '@jimp/utils': 0.22.12 - dev: true - /@jimp/plugin-shadow@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blur@0.22.12)(@jimp/plugin-resize@0.22.12): - resolution: {integrity: sha512-FX8mTJuCt7/3zXVoeD/qHlm4YH2bVqBuWQHXSuBK054e7wFRnRnbSLPUqAwSeYP3lWqpuQzJtgiiBxV3+WWwTg==} - peerDependencies: - '@jimp/custom': '>=0.3.5' - '@jimp/plugin-blur': '>=0.3.5' - '@jimp/plugin-resize': '>=0.3.5' + '@jimp/plugin-shadow@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blur@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12))': dependencies: '@jimp/custom': 0.22.12 '@jimp/plugin-blur': 0.22.12(@jimp/custom@0.22.12) '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12) '@jimp/utils': 0.22.12 - dev: true - /@jimp/plugin-threshold@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-color@0.22.12)(@jimp/plugin-resize@0.22.12): - resolution: {integrity: sha512-4x5GrQr1a/9L0paBC/MZZJjjgjxLYrqSmWd+e+QfAEPvmRxdRoQ5uKEuNgXnm9/weHQBTnQBQsOY2iFja+XGAw==} - peerDependencies: - '@jimp/custom': '>=0.3.5' - '@jimp/plugin-color': '>=0.8.0' - '@jimp/plugin-resize': '>=0.8.0' + '@jimp/plugin-threshold@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-color@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12))': dependencies: '@jimp/custom': 0.22.12 '@jimp/plugin-color': 0.22.12(@jimp/custom@0.22.12) '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12) '@jimp/utils': 0.22.12 - dev: true - /@jimp/plugins@0.22.12(@jimp/custom@0.22.12): - resolution: {integrity: sha512-yBJ8vQrDkBbTgQZLty9k4+KtUQdRjsIDJSPjuI21YdVeqZxYywifHl4/XWILoTZsjTUASQcGoH0TuC0N7xm3ww==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugins@0.22.12(@jimp/custom@0.22.12)': dependencies: '@jimp/custom': 0.22.12 '@jimp/plugin-blit': 0.22.12(@jimp/custom@0.22.12) '@jimp/plugin-blur': 0.22.12(@jimp/custom@0.22.12) '@jimp/plugin-circle': 0.22.12(@jimp/custom@0.22.12) '@jimp/plugin-color': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-contain': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12)(@jimp/plugin-resize@0.22.12)(@jimp/plugin-scale@0.22.12) - '@jimp/plugin-cover': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-crop@0.22.12)(@jimp/plugin-resize@0.22.12)(@jimp/plugin-scale@0.22.12) + '@jimp/plugin-contain': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12))) + '@jimp/plugin-cover': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12))) '@jimp/plugin-crop': 0.22.12(@jimp/custom@0.22.12) '@jimp/plugin-displace': 0.22.12(@jimp/custom@0.22.12) '@jimp/plugin-dither': 0.22.12(@jimp/custom@0.22.12) '@jimp/plugin-fisheye': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-flip': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-rotate@0.22.12) + '@jimp/plugin-flip': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-rotate@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12))) '@jimp/plugin-gaussian': 0.22.12(@jimp/custom@0.22.12) '@jimp/plugin-invert': 0.22.12(@jimp/custom@0.22.12) '@jimp/plugin-mask': 0.22.12(@jimp/custom@0.22.12) '@jimp/plugin-normalize': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-print': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12) + '@jimp/plugin-print': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12)) '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12) - '@jimp/plugin-rotate': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12)(@jimp/plugin-crop@0.22.12)(@jimp/plugin-resize@0.22.12) - '@jimp/plugin-scale': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-resize@0.22.12) - '@jimp/plugin-shadow': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blur@0.22.12)(@jimp/plugin-resize@0.22.12) - '@jimp/plugin-threshold': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-color@0.22.12)(@jimp/plugin-resize@0.22.12) + '@jimp/plugin-rotate': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12)) + '@jimp/plugin-scale': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12)) + '@jimp/plugin-shadow': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blur@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12)) + '@jimp/plugin-threshold': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-color@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12)) timm: 1.7.1 transitivePeerDependencies: - debug - dev: true - /@jimp/png@0.22.12(@jimp/custom@0.22.12): - resolution: {integrity: sha512-Mrp6dr3UTn+aLK8ty/dSKELz+Otdz1v4aAXzV5q53UDD2rbB5joKVJ/ChY310B+eRzNxIovbUF1KVrUsYdE8Hg==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/png@0.22.12(@jimp/custom@0.22.12)': dependencies: '@jimp/custom': 0.22.12 '@jimp/utils': 0.22.12 pngjs: 6.0.0 - dev: true - /@jimp/tiff@0.22.12(@jimp/custom@0.22.12): - resolution: {integrity: sha512-E1LtMh4RyJsoCAfAkBRVSYyZDTtLq9p9LUiiYP0vPtXyxX4BiYBUYihTLSBlCQg5nF2e4OpQg7SPrLdJ66u7jg==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/tiff@0.22.12(@jimp/custom@0.22.12)': dependencies: '@jimp/custom': 0.22.12 utif2: 4.1.0 - dev: true - /@jimp/types@0.22.12(@jimp/custom@0.22.12): - resolution: {integrity: sha512-wwKYzRdElE1MBXFREvCto5s699izFHNVvALUv79GXNbsOVqlwlOxlWJ8DuyOGIXoLP4JW/m30YyuTtfUJgMRMA==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/types@0.22.12(@jimp/custom@0.22.12)': dependencies: '@jimp/bmp': 0.22.12(@jimp/custom@0.22.12) '@jimp/custom': 0.22.12 @@ -3017,131 +9012,83 @@ packages: '@jimp/png': 0.22.12(@jimp/custom@0.22.12) '@jimp/tiff': 0.22.12(@jimp/custom@0.22.12) timm: 1.7.1 - dev: true - /@jimp/utils@0.22.12: - resolution: {integrity: sha512-yJ5cWUknGnilBq97ZXOyOS0HhsHOyAyjHwYfHxGbSyMTohgQI6sVyE8KPgDwH8HHW/nMKXk8TrSwAE71zt716Q==} + '@jimp/utils@0.22.12': dependencies: regenerator-runtime: 0.13.11 - dev: true - /@jridgewell/gen-mapping@0.3.8: - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 - dev: true - /@jridgewell/resolve-uri@3.1.2: - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - dev: true + '@jridgewell/resolve-uri@3.1.2': {} - /@jridgewell/set-array@1.2.1: - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - dev: true + '@jridgewell/set-array@1.2.1': {} - /@jridgewell/source-map@0.3.6: - resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + '@jridgewell/source-map@0.3.6': dependencies: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - dev: true - /@jridgewell/sourcemap-codec@1.5.0: - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - dev: true + '@jridgewell/sourcemap-codec@1.5.0': {} - /@jridgewell/trace-mapping@0.3.25: - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - dev: true - /@loadable/babel-plugin@5.15.3(@babel/core@7.26.8): - resolution: {integrity: sha512-kwEsPxCk8vnwbTfbA4lHqT5t0u0czCQTnCcmOaTjxT5lCn7yZCBTBa9D7lHs+MLM2WyPsZlee3Qh0TTkMMi5jg==} - engines: {node: '>=8'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@loadable/babel-plugin@5.15.3(@babel/core@7.26.9)': dependencies: - '@babel/core': 7.26.8 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.26.8) - dev: true + '@babel/core': 7.26.9 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.26.9) - /@loadable/component@5.15.2(react@18.3.1): - resolution: {integrity: sha512-ryFAZOX5P2vFkUdzaAtTG88IGnr9qxSdvLRvJySXcUA4B4xVWurUNADu3AnKPksxOZajljqTrDEDcYjeL4lvLw==} - engines: {node: '>=8'} - peerDependencies: - react: '>=16.3.0' + '@loadable/component@5.15.2(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 hoist-non-react-statics: 3.3.2 react: 18.3.1 react-is: 16.13.1 - dev: true - /@loadable/component@5.15.3(react@18.3.1): - resolution: {integrity: sha512-VOgYgCABn6+/7aGIpg7m0Ruj34tGetaJzt4bQ345FwEovDQZ+dua+NWLmuJKv8rWZyxOUSfoJkmGnzyDXH2BAQ==} - engines: {node: '>=8'} - peerDependencies: - react: ^16.3.0 || ^17.0.0 || ^18.0.0 + '@loadable/component@5.15.3(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 hoist-non-react-statics: 3.3.2 react: 18.3.1 react-is: 16.13.1 - dev: true - /@loadable/server@5.15.3(@loadable/component@5.15.3)(react@18.3.1): - resolution: {integrity: sha512-Bm/BGe+RlChuHDKNNXpQOi4AJ0cKVuSLI+J8U0Q06zTIfT0S1RLoy85qs5RXm3cLIfefygL8+9bcYFgeWcoM8A==} - engines: {node: '>=8'} - peerDependencies: - '@loadable/component': ^5.0.1 - react: ^16.3.0 || ^17.0.0 || ^18.0.0 + '@loadable/server@5.15.3(@loadable/component@5.15.3(react@18.3.1))(react@18.3.1)': dependencies: '@loadable/component': 5.15.3(react@18.3.1) lodash: 4.17.21 react: 18.3.1 - dev: true - /@manypkg/find-root@1.1.0: - resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + '@manypkg/find-root@1.1.0': dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 - dev: true - /@manypkg/get-packages@1.1.3: - resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + '@manypkg/get-packages@1.1.3': dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 globby: 11.1.0 read-yaml-file: 1.1.0 - dev: true - /@mdx-js/loader@2.2.1(webpack@5.97.1): - resolution: {integrity: sha512-J4E8A5H+xtk4otZiEZ5AXl61Tj04Avm5MqLQazITdI3+puVXVnTTuZUKM1oNHTtfDIfOl0uMt+o/Ij+x6Fvf+g==} - peerDependencies: - webpack: '>=4' + '@mdx-js/loader@2.2.1(webpack@5.98.0)': dependencies: '@mdx-js/mdx': 2.2.1 source-map: 0.7.4 - webpack: 5.97.1 + webpack: 5.98.0 transitivePeerDependencies: - supports-color - dev: true - /@mdx-js/mdx@2.2.1: - resolution: {integrity: sha512-hZ3ex7exYLJn6FfReq8yTvA6TE53uW9UHJQM9IlSauOuS55J9y8RtA7W+dzp6Yrzr00/U1sd7q+Wf61q6SfiTQ==} + '@mdx-js/mdx@2.2.1': dependencies: '@types/estree-jsx': 1.0.5 '@types/mdx': 2.0.13 @@ -3162,130 +9109,77 @@ packages: vfile: 5.3.7 transitivePeerDependencies: - supports-color - dev: true - /@mdx-js/react@2.2.1(react@18.3.1): - resolution: {integrity: sha512-YdXcMcEnqZhzql98RNrqYo9cEhTTesBiCclEtoiQUbJwx87q9453GTapYU6kJ8ZZ2ek1Vp25SiAXEFy5O/eAPw==} - peerDependencies: - react: '>=16' + '@mdx-js/react@2.2.1(react@18.3.1)': dependencies: '@types/mdx': 2.0.13 '@types/react': 18.3.3 react: 18.3.1 - dev: true - /@midscene/core@0.8.13(zod@3.24.1): - resolution: {integrity: sha512-NuzfEuc4rLYqCph1LtcBJxINcqMZj8NrvvEq5IcF/HL6hg/D1p6uYroaU5Fd79LaJKIxq+ZzeSXRCKs2is7wrA==} - engines: {node: '>=18.0.0'} + '@midscene/core@0.8.13(zod@3.24.2)': dependencies: optional: 0.1.4 '@anthropic-ai/sdk': 0.33.1 '@azure/identity': 4.5.0 '@midscene/shared': 0.8.13 dirty-json: 0.9.2 - openai: 4.57.1(zod@3.24.1) + openai: 4.57.1(zod@3.24.2) socks-proxy-agent: 8.0.4 transitivePeerDependencies: - debug - encoding - supports-color - zod - dev: true - /@midscene/shared@0.8.13: - resolution: {integrity: sha512-HxaQmhR4eslOWbuLT0So+FS1DJvKXNB68R1KLaeu5dmKqW0nicl+f0J6Lv4NbrY7Fpvr3P5GI7FVhXGsSthVrg==} + '@midscene/shared@0.8.13': dependencies: jimp: 0.22.12 transitivePeerDependencies: - debug - encoding - dev: true - /@midscene/web@0.8.13(playwright@1.50.1)(zod@3.24.1): - resolution: {integrity: sha512-bR0Jytwfo4asYyYXcyVkyzdNzP0eyQytqR+FMnOPR/gV9MJFhAtxcZ/TAc09UJKxtD9Ri86i0HfxCApf1hR9Dw==} - engines: {node: '>=18.0.0'} - hasBin: true - peerDependencies: - '@playwright/test': ^1.44.1 - playwright: ^1.44.1 - puppeteer: '>=20.0.0' - webdriverio: '>=9.0.6' - peerDependenciesMeta: - '@playwright/test': - optional: true - puppeteer: - optional: true - webdriverio: - optional: true + '@midscene/web@0.8.13(playwright@1.50.1)(zod@3.24.2)': dependencies: - '@midscene/core': 0.8.13(zod@3.24.1) + '@midscene/core': 0.8.13(zod@3.24.2) '@midscene/shared': 0.8.13 '@xmldom/xmldom': 0.8.10 cors: 2.8.5 express: 4.21.1 inquirer: 10.1.5 - openai: 4.57.1(zod@3.24.1) + openai: 4.57.1(zod@3.24.2) playwright: 1.50.1 transitivePeerDependencies: - debug - encoding - supports-color - zod - dev: true - /@modern-js-reduck/plugin-auto-actions@1.1.11(@modern-js-reduck/store@1.1.11): - resolution: {integrity: sha512-Xn13uPuFh+UnV3BC6tO4N1sC5+aITX2zj5QDwU0wJgc/5zBz9fcElfQ8B+kvQe0/0VlY0ENArmFIl2h1N5TIkQ==} - peerDependencies: - '@modern-js-reduck/store': ^1.1.11 + '@modern-js-reduck/plugin-auto-actions@1.1.11(@modern-js-reduck/store@1.1.11)': dependencies: '@modern-js-reduck/store': 1.1.11 '@swc/helpers': 0.5.1 - dev: true - /@modern-js-reduck/plugin-devtools@1.1.11(@modern-js-reduck/store@1.1.11): - resolution: {integrity: sha512-PEyJ1/K2wKtXV/JtaFGBC2fUGeY6hjnK/ZXt6p9O2HG3WOub3l76uYpR6B8QCu00+cIWph4MspgO9lHMAuQA8Q==} - peerDependencies: - '@modern-js-reduck/store': ^1.1.11 + '@modern-js-reduck/plugin-devtools@1.1.11(@modern-js-reduck/store@1.1.11)': dependencies: '@modern-js-reduck/store': 1.1.11 '@redux-devtools/extension': 3.3.0(redux@4.2.1) '@swc/helpers': 0.5.1 redux: 4.2.1 - dev: true - /@modern-js-reduck/plugin-effects@1.1.11(@modern-js-reduck/store@1.1.11): - resolution: {integrity: sha512-koc8ObEWakI9um6qARbMtMOwith/lc+D2uKKhOAvMfWjKC0gER/SpTScWstweAzcvQCtwftynEOpeQyJC2FARA==} - peerDependencies: - '@modern-js-reduck/store': ^1.1.11 + '@modern-js-reduck/plugin-effects@1.1.11(@modern-js-reduck/store@1.1.11)': dependencies: '@modern-js-reduck/store': 1.1.11 '@swc/helpers': 0.5.1 redux: 4.2.1 redux-promise-middleware: 6.2.0(redux@4.2.1) - dev: true - /@modern-js-reduck/plugin-immutable@1.1.11(@modern-js-reduck/store@1.1.11): - resolution: {integrity: sha512-52gdosxffpmq+FhSKjJqNtnW/wtX6iy/Zq2pn28eyvGCARREVT3E28qZX0kCUH4L5ij2N7QJoQOSovYuXwOlRw==} - peerDependencies: - '@modern-js-reduck/store': ^1.1.11 + '@modern-js-reduck/plugin-immutable@1.1.11(@modern-js-reduck/store@1.1.11)': dependencies: '@modern-js-reduck/store': 1.1.11 '@swc/helpers': 0.5.1 immer: 9.0.21 - dev: true - /@modern-js-reduck/react@1.1.11(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-6ViI1wyrkSIAkwpKfK6bC8dnzmyfp2FTWL2AAI2PrIYNAhd+jMuTM4ik6xDHncQmTny3+rAH2B8FfsUIVm7fxQ==} - peerDependencies: - '@types/react': ^16.8 || ^17.0 || ^18.0 - '@types/react-dom': ^16.8 || ^17.0 || ^18.0 - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@modern-js-reduck/react@1.1.11(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@modern-js-reduck/plugin-auto-actions': 1.1.11(@modern-js-reduck/store@1.1.11) '@modern-js-reduck/plugin-devtools': 1.1.11(@modern-js-reduck/store@1.1.11) @@ -3293,80 +9187,69 @@ packages: '@modern-js-reduck/plugin-immutable': 1.1.11(@modern-js-reduck/store@1.1.11) '@modern-js-reduck/store': 1.1.11 '@swc/helpers': 0.5.1 - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 hoist-non-react-statics: 3.3.2 invariant: 2.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - /@modern-js-reduck/store@1.1.11: - resolution: {integrity: sha512-fvUeswe1pvF9IjC39/KgtQGV4FbwjOmVs2Fk4uxrxXEa7209qRJlDfqIGr5KsnXVporXg0oiDqwcg1xsEljw/A==} + '@modern-js-reduck/store@1.1.11': dependencies: '@swc/helpers': 0.5.1 redux: 4.2.1 - dev: true - /@modern-js/babel-compiler@2.31.2(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-4taDHDF3AqLQZo8kBYXILe3lAcRB0aBmJiYxESBvl9nU7t6FQUf0JeCpBicEvmhY+5y0PXNgg4u8tR+bortjog==} + '@modern-js/babel-compiler@2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/core': 7.26.8 - '@modern-js/utils': 2.31.2(react-dom@18.3.1)(react@18.3.1) + '@babel/core': 7.26.9 + '@modern-js/utils': 2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.1 transitivePeerDependencies: - react - react-dom - supports-color - dev: true - /@modern-js/babel-compiler@2.32.1(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-Ql4S51OYZiiY2EpiZitzaeptlydzeIMCA307NAbBxM+gqWq1lc7a9NAZjdZBb4agFOPJTkvEHNnt2DboikNNNQ==} + '@modern-js/babel-compiler@2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/core': 7.26.8 - '@modern-js/utils': 2.32.1(react-dom@18.3.1)(react@18.3.1) + '@babel/core': 7.26.9 + '@modern-js/utils': 2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.1 transitivePeerDependencies: - react - react-dom - supports-color - dev: true - /@modern-js/babel-plugin-module-resolver@2.31.2: - resolution: {integrity: sha512-V8Ob1i8V8SLTSJ+M6vghiMHK8Jb6INIe2mP/JCqv1K07Jt8Es+UaYW1dZMogxG3mPWpx0jlTg/6nZg/8BdnqSQ==} + '@modern-js/babel-plugin-module-resolver@2.31.2': dependencies: '@swc/helpers': 0.5.1 glob: 8.1.0 pkg-up: 3.1.0 reselect: 4.1.8 resolve: 1.22.10 - dev: true - /@modern-js/babel-plugin-module-resolver@2.32.1: - resolution: {integrity: sha512-Rz6qMy1TN+MqO13dbICw3Sga0+Fz+/GO5d7gpOcewKIlypLaH+Ani++8KLOhqMUOyUVFjQj6DdAdxfyPFnq2lQ==} + '@modern-js/babel-plugin-module-resolver@2.32.1': dependencies: '@swc/helpers': 0.5.1 glob: 8.1.0 pkg-up: 3.1.0 reselect: 4.1.8 resolve: 1.22.10 - dev: true - /@modern-js/babel-preset-base@2.31.2(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-/GdSCL1c51Fn/Ja4+4EidGYCBI1igEEXPZqdMzSmOgMlhXEFfUogZm4AgASwr+0vK8yHiwOsN/B9vj5MU+jHqw==} - dependencies: - '@babel/core': 7.26.8 - '@babel/parser': 7.26.8 - '@babel/plugin-transform-runtime': 7.26.8(@babel/core@7.26.8) - '@babel/plugin-transform-typescript': 7.26.8(@babel/core@7.26.8) - '@babel/preset-env': 7.26.8(@babel/core@7.26.8) - '@babel/preset-react': 7.26.3(@babel/core@7.26.8) - '@babel/preset-typescript': 7.26.0(@babel/core@7.26.8) - '@babel/runtime': 7.26.7 - '@babel/template': 7.26.8 - '@babel/traverse': 7.26.8(supports-color@5.5.0) - '@babel/types': 7.26.8 - '@modern-js/utils': 2.31.2(react-dom@18.3.1)(react@18.3.1) + '@modern-js/babel-preset-base@2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/core': 7.26.9 + '@babel/parser': 7.26.9 + '@babel/plugin-transform-runtime': 7.26.9(@babel/core@7.26.9) + '@babel/plugin-transform-typescript': 7.26.8(@babel/core@7.26.9) + '@babel/preset-env': 7.26.9(@babel/core@7.26.9) + '@babel/preset-react': 7.26.3(@babel/core@7.26.9) + '@babel/preset-typescript': 7.26.0(@babel/core@7.26.9) + '@babel/runtime': 7.26.9 + '@babel/template': 7.26.9 + '@babel/traverse': 7.26.9(supports-color@5.5.0) + '@babel/types': 7.26.9 + '@modern-js/utils': 2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.1 '@types/babel__core': 7.20.5 lodash: 4.17.21 @@ -3374,23 +9257,21 @@ packages: - react - react-dom - supports-color - dev: true - /@modern-js/babel-preset-base@2.32.1(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-2gbOs/DHYoi6IUTwsgLaxM8oNyPeMOapyRj9hIAvtNIOrQshkhXHORFQ4wBRF+Co+NWNvHjLnbL0aZXVKs5ILw==} - dependencies: - '@babel/core': 7.26.8 - '@babel/parser': 7.26.8 - '@babel/plugin-transform-runtime': 7.26.8(@babel/core@7.26.8) - '@babel/plugin-transform-typescript': 7.26.8(@babel/core@7.26.8) - '@babel/preset-env': 7.26.8(@babel/core@7.26.8) - '@babel/preset-react': 7.26.3(@babel/core@7.26.8) - '@babel/preset-typescript': 7.26.0(@babel/core@7.26.8) - '@babel/runtime': 7.26.7 - '@babel/template': 7.26.8 - '@babel/traverse': 7.26.8(supports-color@5.5.0) - '@babel/types': 7.26.8 - '@modern-js/utils': 2.32.1(react-dom@18.3.1)(react@18.3.1) + '@modern-js/babel-preset-base@2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/core': 7.26.9 + '@babel/parser': 7.26.9 + '@babel/plugin-transform-runtime': 7.26.9(@babel/core@7.26.9) + '@babel/plugin-transform-typescript': 7.26.8(@babel/core@7.26.9) + '@babel/preset-env': 7.26.9(@babel/core@7.26.9) + '@babel/preset-react': 7.26.3(@babel/core@7.26.9) + '@babel/preset-typescript': 7.26.0(@babel/core@7.26.9) + '@babel/runtime': 7.26.9 + '@babel/template': 7.26.9 + '@babel/traverse': 7.26.9(supports-color@5.5.0) + '@babel/types': 7.26.9 + '@modern-js/utils': 2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.1 '@types/babel__core': 7.20.5 lodash: 4.17.21 @@ -3398,29 +9279,26 @@ packages: - react - react-dom - supports-color - dev: true - /@modern-js/builder-rspack-provider@2.31.2(react-dom@18.3.1)(react@18.3.1)(typescript@5.0.4): - resolution: {integrity: sha512-DbnV7Nk/NC3OFxAozn6B+muLOi1yE7iKlDvNHU+gLuaRlOLvx/gyzmE2YbFssaZ7iNnbga0XqLXfUkoZ9AK3jw==} - engines: {node: '>=14.0.0'} + '@modern-js/builder-rspack-provider@2.31.2(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)': dependencies: - '@babel/core': 7.26.8 - '@babel/preset-typescript': 7.26.0(@babel/core@7.26.8) - '@modern-js/builder-shared': 2.31.2(react-dom@18.3.1)(react@18.3.1)(typescript@5.0.4) - '@modern-js/server': 2.31.2(react-dom@18.3.1)(react@18.3.1) + '@babel/core': 7.26.9 + '@babel/preset-typescript': 7.26.0(@babel/core@7.26.9) + '@modern-js/builder-shared': 2.31.2(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(typescript@5.0.4) + '@modern-js/server': 2.31.2(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0) '@modern-js/types': 2.31.2 - '@modern-js/utils': 2.31.2(react-dom@18.3.1)(react@18.3.1) - '@rspack/core': 0.2.12(webpack@5.97.1) - '@rspack/dev-client': 0.2.12(react-refresh@0.14.0)(webpack@5.97.1) - '@rspack/plugin-html': 0.2.12(@rspack/core@0.2.12) + '@modern-js/utils': 2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rspack/core': 0.2.12(type-fest@2.19.0)(webpack@5.98.0) + '@rspack/dev-client': 0.2.12(react-refresh@0.14.0)(type-fest@2.19.0)(webpack@5.98.0) + '@rspack/plugin-html': 0.2.12(@rspack/core@0.2.12(type-fest@2.19.0)(webpack@5.98.0)) '@swc/helpers': 0.5.1 - caniuse-lite: 1.0.30001699 + caniuse-lite: 1.0.30001700 core-js: 3.30.2 react-refresh: 0.14.0 - rspack-manifest-plugin: 5.0.0-alpha0(webpack@5.97.1) + rspack-manifest-plugin: 5.0.0-alpha0(webpack@5.98.0) rspack-plugin-virtual-module: 0.1.7 - style-loader: 3.3.3(webpack@5.97.1) - webpack: 5.97.1 + style-loader: 3.3.3(webpack@5.98.0) + webpack: 5.98.0 transitivePeerDependencies: - '@babel/traverse' - '@swc/core' @@ -3444,29 +9322,26 @@ packages: - webpack-dev-server - webpack-hot-middleware - webpack-plugin-serve - dev: true - /@modern-js/builder-rspack-provider@2.32.1(react-dom@18.3.1)(react@18.3.1)(typescript@5.0.4): - resolution: {integrity: sha512-3av1MRavBSuskgbK7Tr1aSmjZOOwSf56bheu1Elmn8AWK3h4O+m0LhveFZ1cRrE14egU4lM04NH0CDqDVFCu4Q==} - engines: {node: '>=14.0.0'} + '@modern-js/builder-rspack-provider@2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)': dependencies: - '@babel/core': 7.26.8 - '@babel/preset-typescript': 7.26.0(@babel/core@7.26.8) - '@modern-js/builder-shared': 2.32.1(react-dom@18.3.1)(react@18.3.1)(typescript@5.0.4) - '@modern-js/server': 2.32.1(react-dom@18.3.1)(react@18.3.1) + '@babel/core': 7.26.9 + '@babel/preset-typescript': 7.26.0(@babel/core@7.26.9) + '@modern-js/builder-shared': 2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(typescript@5.0.4) + '@modern-js/server': 2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0) '@modern-js/types': 2.32.1 - '@modern-js/utils': 2.32.1(react-dom@18.3.1)(react@18.3.1) - '@rspack/core': 0.2.12(webpack@5.97.1) - '@rspack/dev-client': 0.2.12(react-refresh@0.14.0)(webpack@5.97.1) - '@rspack/plugin-html': 0.2.12(@rspack/core@0.2.12) + '@modern-js/utils': 2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rspack/core': 0.2.12(type-fest@2.19.0)(webpack@5.98.0) + '@rspack/dev-client': 0.2.12(react-refresh@0.14.0)(type-fest@2.19.0)(webpack@5.98.0) + '@rspack/plugin-html': 0.2.12(@rspack/core@0.2.12(type-fest@2.19.0)(webpack@5.98.0)) '@swc/helpers': 0.5.1 - caniuse-lite: 1.0.30001699 + caniuse-lite: 1.0.30001700 core-js: 3.30.2 react-refresh: 0.14.0 - rspack-manifest-plugin: 5.0.0-alpha0(webpack@5.97.1) + rspack-manifest-plugin: 5.0.0-alpha0(webpack@5.98.0) rspack-plugin-virtual-module: 0.1.7 - style-loader: 3.3.3(webpack@5.97.1) - webpack: 5.97.1 + style-loader: 3.3.3(webpack@5.98.0) + webpack: 5.98.0 transitivePeerDependencies: - '@babel/traverse' - '@swc/core' @@ -3490,32 +9365,29 @@ packages: - webpack-dev-server - webpack-hot-middleware - webpack-plugin-serve - dev: true - /@modern-js/builder-shared@2.31.2(react-dom@18.3.1)(react@18.3.1)(typescript@5.0.4): - resolution: {integrity: sha512-55S0YMU1Ux/mVkb7xcSSUVdZj2+ty+VV6CGUbQGUlpWq7zWVvHDz0SnjzuXPN9gk6uDtZQ6/YFFELaUkVhX31g==} - engines: {node: '>=14.0.0'} + '@modern-js/builder-shared@2.31.2(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(typescript@5.0.4)': dependencies: - '@babel/core': 7.26.8 - '@babel/parser': 7.26.8 - '@babel/types': 7.26.8 - '@modern-js/prod-server': 2.31.2(react-dom@18.3.1)(react@18.3.1) - '@modern-js/server': 2.31.2(react-dom@18.3.1)(react@18.3.1) + '@babel/core': 7.26.9 + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + '@modern-js/prod-server': 2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/server': 2.31.2(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0) '@modern-js/types': 2.31.2 - '@modern-js/utils': 2.31.2(react-dom@18.3.1)(react@18.3.1) + '@modern-js/utils': 2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.1 acorn: 8.14.0 - caniuse-lite: 1.0.30001699 + caniuse-lite: 1.0.30001700 cssnano: 6.0.1(postcss@8.4.27) - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.0.4)(webpack@5.97.1) + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.0.4)(webpack@5.98.0) htmlparser2: 9.0.0 line-diff: 2.1.1 postcss: 8.4.27 source-map: 0.7.4 - webpack: 5.97.1 + webpack: 5.98.0 webpack-sources: 3.2.3 - zod: 3.24.1 - zod-validation-error: 1.2.0(zod@3.24.1) + zod: 3.24.2 + zod-validation-error: 1.2.0(zod@3.24.2) transitivePeerDependencies: - '@babel/traverse' - '@swc/core' @@ -3533,32 +9405,29 @@ packages: - uglify-js - utf-8-validate - webpack-cli - dev: true - /@modern-js/builder-shared@2.32.1(react-dom@18.3.1)(react@18.3.1)(typescript@5.0.4): - resolution: {integrity: sha512-ql7YOoaqAJC8WUcUv623M3nmZBM8tC9eEesXl0JzY8AQMfiATVNxf8TGZGtjBnmfNt6Zs+jF/zdzuzj3xor3Zg==} - engines: {node: '>=14.0.0'} + '@modern-js/builder-shared@2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(typescript@5.0.4)': dependencies: - '@babel/core': 7.26.8 - '@babel/parser': 7.26.8 - '@babel/types': 7.26.8 - '@modern-js/prod-server': 2.32.1(react-dom@18.3.1)(react@18.3.1) - '@modern-js/server': 2.32.1(react-dom@18.3.1)(react@18.3.1) + '@babel/core': 7.26.9 + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + '@modern-js/prod-server': 2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/server': 2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0) '@modern-js/types': 2.32.1 - '@modern-js/utils': 2.32.1(react-dom@18.3.1)(react@18.3.1) + '@modern-js/utils': 2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.1 acorn: 8.14.0 - caniuse-lite: 1.0.30001699 + caniuse-lite: 1.0.30001700 cssnano: 6.0.1(postcss@8.4.27) - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.0.4)(webpack@5.97.1) + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.0.4)(webpack@5.98.0) htmlparser2: 9.0.0 line-diff: 2.1.1 postcss: 8.4.27 source-map: 0.7.4 - webpack: 5.97.1 + webpack: 5.98.0 webpack-sources: 3.2.3 - zod: 3.24.1 - zod-validation-error: 1.2.0(zod@3.24.1) + zod: 3.24.2 + zod-validation-error: 1.2.0(zod@3.24.2) transitivePeerDependencies: - '@babel/traverse' - '@swc/core' @@ -3576,15 +9445,12 @@ packages: - uglify-js - utf-8-validate - webpack-cli - dev: true - /@modern-js/builder@2.31.2(react-dom@18.3.1)(react@18.3.1)(typescript@5.0.4): - resolution: {integrity: sha512-CCKcQXFWZvLa1gEt4XDzvoUddTxOQuaDfShD4C3n6PB233x17rDR0Lk32zk+lp/ArmQjWR1CCrsjq/4dnOPSqw==} - engines: {node: '>=14.0.0'} + '@modern-js/builder@2.31.2(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(typescript@5.0.4)': dependencies: - '@modern-js/builder-shared': 2.31.2(react-dom@18.3.1)(react@18.3.1)(typescript@5.0.4) - '@modern-js/monorepo-utils': 2.31.2(react-dom@18.3.1)(react@18.3.1) - '@modern-js/utils': 2.31.2(react-dom@18.3.1)(react@18.3.1) + '@modern-js/builder-shared': 2.31.2(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(typescript@5.0.4) + '@modern-js/monorepo-utils': 2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/utils': 2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@svgr/webpack': 8.0.1(typescript@5.0.4) '@swc/helpers': 0.5.1 transitivePeerDependencies: @@ -3604,15 +9470,12 @@ packages: - uglify-js - utf-8-validate - webpack-cli - dev: true - /@modern-js/builder@2.32.1(react-dom@18.3.1)(react@18.3.1)(typescript@5.0.4): - resolution: {integrity: sha512-eCK3Xc18eipmiZpy/xQNiCTSxWaY/JuKQIPM/XqNgupBQAkMVf6UThvia1hatDD+nqHvIQp322hKFIRGhf6oPA==} - engines: {node: '>=14.0.0'} + '@modern-js/builder@2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(typescript@5.0.4)': dependencies: - '@modern-js/builder-shared': 2.32.1(react-dom@18.3.1)(react@18.3.1)(typescript@5.0.4) - '@modern-js/monorepo-utils': 2.32.1(react-dom@18.3.1)(react@18.3.1) - '@modern-js/utils': 2.32.1(react-dom@18.3.1)(react@18.3.1) + '@modern-js/builder-shared': 2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(typescript@5.0.4) + '@modern-js/monorepo-utils': 2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/utils': 2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@svgr/webpack': 8.0.1(typescript@5.0.4) '@swc/helpers': 0.5.1 transitivePeerDependencies: @@ -3632,57 +9495,38 @@ packages: - uglify-js - utf-8-validate - webpack-cli - dev: true - /@modern-js/core@2.32.1(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-/9UHYiotFL5NkAZgncj1q1XsBV1LKXjKOJcWjkh6cwikynQ7WZtgN5oQWKkWfW2bOFcaZhTeWvrdXNu+/9qJLA==} + '@modern-js/core@2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@modern-js/node-bundle-require': 2.32.1(react-dom@18.3.1)(react@18.3.1) - '@modern-js/plugin': 2.32.1(react-dom@18.3.1)(react@18.3.1) - '@modern-js/utils': 2.32.1(react-dom@18.3.1)(react@18.3.1) + '@modern-js/node-bundle-require': 2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/plugin': 2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/utils': 2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.1 transitivePeerDependencies: - react - react-dom - dev: true - /@modern-js/core@2.60.6: - resolution: {integrity: sha512-zfhOkB8uoOH6Mj06E9/sD8k+efC2b+cG1X/fDzRGyMI91k25Pqpq0yGl5lWn0Zz0/WnH2bLkHlIRlAcOmGgI8g==} + '@modern-js/core@2.60.6': dependencies: '@modern-js/node-bundle-require': 2.60.6 '@modern-js/plugin': 2.60.6 '@modern-js/utils': 2.60.6 '@swc/helpers': 0.5.13 - dev: true - /@modern-js/core@2.64.1: - resolution: {integrity: sha512-gUuN2nW2kqcJ0E3Cf8IHd1xYwq9vFYMCCCjfC6BK3H72tPp+RTVY0YHXIkAJFX0hdo8z2lBSKOi5yhDU91e+gw==} - dependencies: - '@modern-js/node-bundle-require': 2.64.1 - '@modern-js/plugin': 2.64.1 - '@modern-js/utils': 2.64.1 - '@swc/helpers': 0.5.13 - dev: true - - /@modern-js/doc-core@2.31.2(@modern-js/core@2.64.1)(@modern-js/doc-tools@2.32.1)(react@18.3.1)(typescript@5.0.4)(webpack@5.97.1): - resolution: {integrity: sha512-W2o/3jWQLzXTEkFQT1GrJOi5oQIUiuluJfIEKZpt+OfZ66+Wyf4YY/hlRpDmm6oaeeYMWI7RTh4D4Izi63QUxg==} - engines: {node: '>=14.17.6'} - peerDependencies: - '@modern-js/core': ^2.31.2 - react: '>=17' + '@modern-js/doc-core@2.31.2(@babel/traverse@7.26.9)(@modern-js/core@2.60.6)(@modern-js/doc-tools@2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0)': dependencies: - '@headlessui/react': 1.7.19(react-dom@18.3.1)(react@18.3.1) + '@headlessui/react': 1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@loadable/component': 5.15.2(react@18.3.1) - '@mdx-js/loader': 2.2.1(webpack@5.97.1) + '@mdx-js/loader': 2.2.1(webpack@5.98.0) '@mdx-js/mdx': 2.2.1 '@mdx-js/react': 2.2.1(react@18.3.1) - '@modern-js/builder': 2.31.2(react-dom@18.3.1)(react@18.3.1)(typescript@5.0.4) - '@modern-js/builder-rspack-provider': 2.31.2(react-dom@18.3.1)(react@18.3.1)(typescript@5.0.4) - '@modern-js/core': 2.64.1 - '@modern-js/doc-plugin-medium-zoom': 2.31.2(@modern-js/doc-tools@2.32.1)(react-dom@18.3.1)(react@18.3.1) + '@modern-js/builder': 2.31.2(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(typescript@5.0.4) + '@modern-js/builder-rspack-provider': 2.31.2(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4) + '@modern-js/core': 2.60.6 + '@modern-js/doc-plugin-medium-zoom': 2.31.2(@modern-js/doc-tools@2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/mdx-rs-binding': 0.2.4 '@modern-js/remark-container': 2.31.2 - '@modern-js/utils': 2.31.2(react-dom@18.3.1)(react@18.3.1) + '@modern-js/utils': 2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/compression': 1.7.5 '@types/polka': 0.5.7 acorn: 8.14.0 @@ -3708,9 +9552,9 @@ packages: postcss: 8.4.27 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-helmet-async: 1.3.0(react-dom@18.3.1)(react@18.3.1) + react-helmet-async: 1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-lazy-with-preload: 2.2.1 - react-router-dom: 6.29.0(react-dom@18.3.1)(react@18.3.1) + react-router-dom: 6.29.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-syntax-highlighter: 15.6.1(react@18.3.1) rehype-autolink-headings: 6.1.1 rehype-external-links: 2.1.0 @@ -3723,7 +9567,7 @@ packages: remark-rehype: 10.1.0 sirv: 2.0.4 source-map: 0.7.4 - string-replace-loader: 3.1.0(webpack@5.97.1) + string-replace-loader: 3.1.0(webpack@5.98.0) tailwindcss: 3.2.7(postcss@8.4.27) unified: 10.1.2 unist-util-visit: 4.1.2 @@ -3753,27 +9597,21 @@ packages: - webpack-dev-server - webpack-hot-middleware - webpack-plugin-serve - dev: true - /@modern-js/doc-core@2.32.1(@modern-js/core@2.32.1)(@modern-js/doc-tools@2.32.1)(react@18.3.1)(typescript@5.0.4)(webpack@5.97.1): - resolution: {integrity: sha512-mJJSgm+4jnoWNNy2uBqoglOB3CE/sqSAunjzZF+mKrf/aSUqJ0hk+Nh0CRhLVrIRZlL8+Sf1pN/Ss7YcWnbXYA==} - engines: {node: '>=14.17.6'} - peerDependencies: - '@modern-js/core': ^2.32.1 - react: '>=17' + '@modern-js/doc-core@2.32.1(@babel/traverse@7.26.9)(@modern-js/core@2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@modern-js/doc-tools@2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0)': dependencies: - '@headlessui/react': 1.7.19(react-dom@18.3.1)(react@18.3.1) + '@headlessui/react': 1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@loadable/component': 5.15.2(react@18.3.1) - '@mdx-js/loader': 2.2.1(webpack@5.97.1) + '@mdx-js/loader': 2.2.1(webpack@5.98.0) '@mdx-js/mdx': 2.2.1 '@mdx-js/react': 2.2.1(react@18.3.1) - '@modern-js/builder': 2.32.1(react-dom@18.3.1)(react@18.3.1)(typescript@5.0.4) - '@modern-js/builder-rspack-provider': 2.32.1(react-dom@18.3.1)(react@18.3.1)(typescript@5.0.4) - '@modern-js/core': 2.32.1(react-dom@18.3.1)(react@18.3.1) - '@modern-js/doc-plugin-medium-zoom': 2.32.1(@modern-js/doc-tools@2.32.1)(react-dom@18.3.1)(react@18.3.1) + '@modern-js/builder': 2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(typescript@5.0.4) + '@modern-js/builder-rspack-provider': 2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4) + '@modern-js/core': 2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/doc-plugin-medium-zoom': 2.32.1(@modern-js/doc-tools@2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/mdx-rs-binding': 0.2.4 '@modern-js/remark-container': 2.32.1 - '@modern-js/utils': 2.32.1(react-dom@18.3.1)(react@18.3.1) + '@modern-js/utils': 2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/compression': 1.7.5 '@types/polka': 0.5.7 acorn: 8.14.0 @@ -3799,9 +9637,9 @@ packages: postcss: 8.4.27 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-helmet-async: 1.3.0(react-dom@18.3.1)(react@18.3.1) + react-helmet-async: 1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-lazy-with-preload: 2.2.1 - react-router-dom: 6.29.0(react-dom@18.3.1)(react@18.3.1) + react-router-dom: 6.29.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-syntax-highlighter: 15.6.1(react@18.3.1) rehype-autolink-headings: 6.1.1 rehype-external-links: 2.1.0 @@ -3814,7 +9652,7 @@ packages: remark-rehype: 10.1.0 sirv: 2.0.4 source-map: 0.7.4 - string-replace-loader: 3.1.0(webpack@5.97.1) + string-replace-loader: 3.1.0(webpack@5.98.0) tailwindcss: 3.2.7(postcss@8.4.27) unified: 10.1.2 unist-util-visit: 4.1.2 @@ -3844,22 +9682,16 @@ packages: - webpack-dev-server - webpack-hot-middleware - webpack-plugin-serve - dev: true - /@modern-js/doc-plugin-api-docgen@2.31.2(@modern-js/core@2.64.1)(@modern-js/doc-tools@2.32.1)(@types/react@18.3.3)(react-dom@18.3.1)(react-router-dom@6.29.0)(react@18.3.1)(typescript@5.0.4)(webpack@5.97.1): - resolution: {integrity: sha512-zNhoNC9l0yOpyiodo9fcBuJ44TWB06U8LgthwDeEO2i2dsdm+eepynkiij/LCQs4qrKDp3IpaFncmvOE4K2J4g==} - engines: {node: '>=14.17.6'} - peerDependencies: - react: '>=17' - react-router-dom: ^6.8.1 + '@modern-js/doc-plugin-api-docgen@2.31.2(@babel/traverse@7.26.9)(@modern-js/core@2.60.6)(@modern-js/doc-tools@2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react-router-dom@6.29.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0)': dependencies: - '@modern-js/doc-core': 2.31.2(@modern-js/core@2.64.1)(@modern-js/doc-tools@2.32.1)(react@18.3.1)(typescript@5.0.4)(webpack@5.97.1) - '@modern-js/utils': 2.31.2(react-dom@18.3.1)(react@18.3.1) + '@modern-js/doc-core': 2.31.2(@babel/traverse@7.26.9)(@modern-js/core@2.60.6)(@modern-js/doc-tools@2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0) + '@modern-js/utils': 2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) documentation: 14.0.3 react: 18.3.1 react-docgen-typescript: 2.2.2(typescript@5.0.4) react-markdown: 8.0.7(@types/react@18.3.3)(react@18.3.1) - react-router-dom: 6.29.0(react-dom@18.3.1)(react@18.3.1) + react-router-dom: 6.29.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) remark-gfm: 3.0.1 transitivePeerDependencies: - '@babel/traverse' @@ -3888,51 +9720,33 @@ packages: - webpack-dev-server - webpack-hot-middleware - webpack-plugin-serve - dev: true - /@modern-js/doc-plugin-medium-zoom@2.31.2(@modern-js/doc-tools@2.32.1)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-mqmk/dDwJ0Lq/Gatsh8tVol6h+F+uwrzCT6am+rW3/sh6b+7GQHWKe39nWO50WdBXOWJWBbp0yGhu2jcUT42pw==} - engines: {node: '>=14.17.6'} - peerDependencies: - '@modern-js/doc-tools': ^2.31.2 - react: '>=17' + '@modern-js/doc-plugin-medium-zoom@2.31.2(@modern-js/doc-tools@2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@modern-js/doc-tools': 2.32.1(react-dom@18.3.1)(react@18.3.1)(typescript@5.0.4)(webpack@5.97.1) - '@modern-js/utils': 2.31.2(react-dom@18.3.1)(react@18.3.1) + '@modern-js/doc-tools': 2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0) + '@modern-js/utils': 2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) medium-zoom: 1.0.8 react: 18.3.1 transitivePeerDependencies: - react-dom - dev: true - /@modern-js/doc-plugin-medium-zoom@2.32.1(@modern-js/doc-tools@2.32.1)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-/iHSHyOOzkVvgvNQ/44Ep+TYQnsjHXwaxwZy7p5Can8DMYJdHVI7/U9JVxojqDhcPQqgXWObbkekSdKCte4vYQ==} - engines: {node: '>=14.17.6'} - peerDependencies: - '@modern-js/doc-tools': ^2.32.1 - react: '>=17' + '@modern-js/doc-plugin-medium-zoom@2.32.1(@modern-js/doc-tools@2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@modern-js/doc-tools': 2.32.1(react-dom@18.3.1)(react@18.3.1)(typescript@5.0.4)(webpack@5.97.1) - '@modern-js/utils': 2.32.1(react-dom@18.3.1)(react@18.3.1) + '@modern-js/doc-tools': 2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0) + '@modern-js/utils': 2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) medium-zoom: 1.0.8 react: 18.3.1 transitivePeerDependencies: - react-dom - dev: true - /@modern-js/doc-plugin-preview@2.31.2(@modern-js/core@2.64.1)(@modern-js/doc-tools@2.32.1)(react-dom@18.3.1)(react-router-dom@6.29.0)(react@18.3.1)(typescript@5.0.4)(webpack@5.97.1): - resolution: {integrity: sha512-f7AAS9rc/OQIIRrTxEaAjvP0LcBZkiQbbOI/d5BVQWMEoTAN4dgKq15IKoi2T73CmRhmvCk2Rf0nnf6F3quOFA==} - engines: {node: '>=14.17.6'} - peerDependencies: - react: '>=17' - react-router-dom: ^6.8.1 + '@modern-js/doc-plugin-preview@2.31.2(@babel/traverse@7.26.9)(@modern-js/core@2.60.6)(@modern-js/doc-tools@2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0))(react-dom@18.3.1(react@18.3.1))(react-router-dom@6.29.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0)': dependencies: '@mdx-js/mdx': 2.2.1 - '@modern-js/doc-core': 2.31.2(@modern-js/core@2.64.1)(@modern-js/doc-tools@2.32.1)(react@18.3.1)(typescript@5.0.4)(webpack@5.97.1) - '@modern-js/utils': 2.31.2(react-dom@18.3.1)(react@18.3.1) + '@modern-js/doc-core': 2.31.2(@babel/traverse@7.26.9)(@modern-js/core@2.60.6)(@modern-js/doc-tools@2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0) + '@modern-js/utils': 2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) qrcode.react: 3.2.0(react@18.3.1) react: 18.3.1 - react-router-dom: 6.29.0(react-dom@18.3.1)(react@18.3.1) + react-router-dom: 6.29.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) remark-gfm: 3.0.1 transitivePeerDependencies: - '@babel/traverse' @@ -3960,18 +9774,12 @@ packages: - webpack-dev-server - webpack-hot-middleware - webpack-plugin-serve - dev: true - /@modern-js/doc-tools@2.32.1(react-dom@18.3.1)(react@18.3.1)(typescript@5.0.4)(webpack@5.97.1): - resolution: {integrity: sha512-DOxLh/o7tzxyjBgANSF6OSP//3buN/LMwT7oD0bfs8z2Ku13KYiovio0I+/HY3cm2FErTFucVNG18LAlzIGQRA==} - engines: {node: '>=14.17.6'} - hasBin: true - peerDependencies: - react: '>=17' + '@modern-js/doc-tools@2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0)': dependencies: - '@modern-js/core': 2.32.1(react-dom@18.3.1)(react@18.3.1) - '@modern-js/doc-core': 2.32.1(@modern-js/core@2.32.1)(@modern-js/doc-tools@2.32.1)(react@18.3.1)(typescript@5.0.4)(webpack@5.97.1) - '@modern-js/utils': 2.32.1(react-dom@18.3.1)(react@18.3.1) + '@modern-js/core': 2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/doc-core': 2.32.1(@babel/traverse@7.26.9)(@modern-js/core@2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@modern-js/doc-tools@2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0) + '@modern-js/utils': 2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 transitivePeerDependencies: - '@babel/traverse' @@ -3997,92 +9805,35 @@ packages: - webpack-dev-server - webpack-hot-middleware - webpack-plugin-serve - dev: true - /@modern-js/mdx-rs-binding-darwin-arm64@0.2.4: - resolution: {integrity: sha512-HQXNiDV4HUkt3Coe7wiiihttkexJ9Ghd2O0ximIY+CVlS4jT+BPct44tbMKRH7gAlKWFw6YZAtBbRBVkHg3kTQ==} - engines: {node: '>=14.12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true + '@modern-js/mdx-rs-binding-darwin-arm64@0.2.4': optional: true - /@modern-js/mdx-rs-binding-darwin-x64@0.2.4: - resolution: {integrity: sha512-6t7eiuk6J5XcBNd6ovXFM6cOllKkntpJTxcSF+QVGm6eq6ScJbwzqSIGrrOpFjEspx8K5UAzVgqBchYSon6PCw==} - engines: {node: '>=14.12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true + '@modern-js/mdx-rs-binding-darwin-x64@0.2.4': optional: true - /@modern-js/mdx-rs-binding-linux-arm-gnueabihf@0.2.4: - resolution: {integrity: sha512-JHXfaoi9WQZ+lTZjMFOvM0sJAdGAwG+F0NggIjkGu90h2TVmyU1pfvCLSJyFjk3un92ZDoL+fAVDIMKI10PcHw==} - engines: {node: '>=14.12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true + '@modern-js/mdx-rs-binding-linux-arm-gnueabihf@0.2.4': optional: true - /@modern-js/mdx-rs-binding-linux-arm64-gnu@0.2.4: - resolution: {integrity: sha512-1se6fjDuLT4Kj8PX3l7aI3E0/vLaAZH82EnKydSNS8Fbc2SYdk/x5X1Qc/niMi9hw2TLcx5VZOzj2NN4R2Dv6Q==} - engines: {node: '>=14.12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + '@modern-js/mdx-rs-binding-linux-arm64-gnu@0.2.4': optional: true - /@modern-js/mdx-rs-binding-linux-arm64-musl@0.2.4: - resolution: {integrity: sha512-fHueN1I2dHRmqa3C0UFP+F9ePAnZK8FsVmTDkeQMFZ3gIrooz+bt0G8PyJIzf0pgX6srhPw48gnGVeGngOMHcQ==} - engines: {node: '>=14.12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + '@modern-js/mdx-rs-binding-linux-arm64-musl@0.2.4': optional: true - /@modern-js/mdx-rs-binding-linux-x64-gnu@0.2.4: - resolution: {integrity: sha512-AgxPTIcGtuInyYJpkMoVu9nXBVT2Ib96Bc7VEN/NfgLwAadG+XVpMdcjJTk7wiBtlF/5v0gFogwe/fWNW0UQmA==} - engines: {node: '>=14.12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + '@modern-js/mdx-rs-binding-linux-x64-gnu@0.2.4': optional: true - /@modern-js/mdx-rs-binding-linux-x64-musl@0.2.4: - resolution: {integrity: sha512-jwPAOmIVwAk1sVKESP+T/n+218LraT81l2bKBaZTDaikCAhIV4vWfbi4IbefWWh0BtXVkldchmBl/XyS4J1HBA==} - engines: {node: '>=14.12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + '@modern-js/mdx-rs-binding-linux-x64-musl@0.2.4': optional: true - /@modern-js/mdx-rs-binding-win32-arm64-msvc@0.2.4: - resolution: {integrity: sha512-bjgRrZOPf7ahOk5r2/WCznVJD5DhIcQW6NONjHPxv5MGttZm6FdKXXAMFBXO/MtnasN9Ooroch7uh5S+ijc50Q==} - engines: {node: '>=14.12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true + '@modern-js/mdx-rs-binding-win32-arm64-msvc@0.2.4': optional: true - - /@modern-js/mdx-rs-binding-win32-x64-msvc@0.2.4: - resolution: {integrity: sha512-3V37CIN2jMF/AkL3ZMwOCsF/2ukHzgJbbeRfIG8JZURNIkQQ3rU/mDFIs3hB7laZir6OtBuKNTYXVRfeDcDpaA==} - engines: {node: '>=14.12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true + + '@modern-js/mdx-rs-binding-win32-x64-msvc@0.2.4': optional: true - /@modern-js/mdx-rs-binding@0.2.4: - resolution: {integrity: sha512-3kS3R64ZtoZW4IfTa6GpFfUSsi7L+S5Hrl97wiv2by3WUDiTWE8HuqY0a1wcZHbTcYBgU5YIghvHmqwY8UxgMQ==} - engines: {node: '>= 10'} + '@modern-js/mdx-rs-binding@0.2.4': optionalDependencies: '@modern-js/mdx-rs-binding-darwin-arm64': 0.2.4 '@modern-js/mdx-rs-binding-darwin-x64': 0.2.4 @@ -4093,22 +9844,13 @@ packages: '@modern-js/mdx-rs-binding-linux-x64-musl': 0.2.4 '@modern-js/mdx-rs-binding-win32-arm64-msvc': 0.2.4 '@modern-js/mdx-rs-binding-win32-x64-msvc': 0.2.4 - dev: true - /@modern-js/module-tools@2.60.6(typescript@5.0.4): - resolution: {integrity: sha512-zixrEPOfsLn3NtcUEdQf4Km5O4id/PkFbhrOKubBebXowMQx8RbWRQPvy+2qOy3x8Bg/n+U+yhrMqKW5GmWB/Q==} - engines: {node: '>=16.0.0'} - hasBin: true - peerDependencies: - typescript: ^4 || ^5 - peerDependenciesMeta: - typescript: - optional: true + '@modern-js/module-tools@2.60.6(typescript@5.0.4)': dependencies: '@ampproject/remapping': 2.3.0 '@ast-grep/napi': 0.16.0 - '@babel/core': 7.26.8 - '@babel/types': 7.26.8 + '@babel/core': 7.26.9 + '@babel/types': 7.26.9 '@modern-js/core': 2.60.6 '@modern-js/plugin': 2.60.6 '@modern-js/plugin-changeset': 2.60.6 @@ -4129,67 +9871,50 @@ packages: style-inject: 0.3.0 sucrase: 3.29.0 tapable: 2.2.1 - terser: 5.38.1 + terser: 5.39.0 tsconfig-paths-webpack-plugin: 4.1.0 + optionalDependencies: typescript: 5.0.4 transitivePeerDependencies: - debug - supports-color - dev: true - /@modern-js/monorepo-utils@2.31.2(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-CIayMqHzTj+zBfBxMtf6AV2QIOBcic9ZJcV7/a8Sk6SqY31TBCfvlNISeNqu3CDO8Cv7bE98srernEcYYUISdA==} + '@modern-js/monorepo-utils@2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@modern-js/utils': 2.31.2(react-dom@18.3.1)(react@18.3.1) + '@modern-js/utils': 2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.1 p-map: 4.0.0 transitivePeerDependencies: - react - react-dom - dev: true - /@modern-js/monorepo-utils@2.32.1(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-YriKUGx2n7sO9KeLzAvhJYsTQqg3HIk+9hsWSJtKYxfv1oV9zZkkbAHolOrBc9aE9IC84bKDmU43cisdJUzLAQ==} + '@modern-js/monorepo-utils@2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@modern-js/utils': 2.32.1(react-dom@18.3.1)(react@18.3.1) + '@modern-js/utils': 2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.1 p-map: 4.0.0 transitivePeerDependencies: - react - react-dom - dev: true - /@modern-js/node-bundle-require@2.32.1(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-N8MCaLqYg/SV6ul15JZRAV9r/nvXZfjVssxvOg8tHcxuA4XLRopvcL2uy/ULa9s9b8XY4yvpSEysUSbVvo6Xbg==} + '@modern-js/node-bundle-require@2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@modern-js/utils': 2.32.1(react-dom@18.3.1)(react@18.3.1) + '@modern-js/utils': 2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.1 esbuild: 0.17.19 transitivePeerDependencies: - react - react-dom - dev: true - /@modern-js/node-bundle-require@2.60.6: - resolution: {integrity: sha512-xrchg6yAg9dNPB9aAd94/ftpcIG21LXD//0EVxpdcFsMaHYbtXKG8hcA/9MgxlEA1ELJwxedRQov4N3/wFfvNQ==} + '@modern-js/node-bundle-require@2.60.6': dependencies: '@modern-js/utils': 2.60.6 '@swc/helpers': 0.5.13 esbuild: 0.17.19 - dev: true - /@modern-js/node-bundle-require@2.64.1: - resolution: {integrity: sha512-h2iJ8yeDf5ScUEm9UQ4za/6XPSiFwVf4U7lKYxGPic9z6+U9fxmgeYNR1QwF2QhvwXCl6CYP3zfeVPLhh34x0A==} + '@modern-js/plugin-changeset@2.60.6': dependencies: - '@modern-js/utils': 2.64.1 - '@swc/helpers': 0.5.13 - esbuild: 0.17.19 - dev: true - - /@modern-js/plugin-changeset@2.60.6: - resolution: {integrity: sha512-cQyFVxoWibC/Am2fw18eEpZPRaIzT6sNu7UXd0J7/E6xdlUVEVndZiOfpCEYSgo8EgTHG4JVxPDWsIJwvbfrrQ==} - dependencies: - '@changesets/cli': 2.27.12 + '@changesets/cli': 2.28.0 '@changesets/git': 2.0.0 '@changesets/read': 0.5.9 '@modern-js/plugin-i18n': 2.60.6 @@ -4199,16 +9924,11 @@ packages: resolve-from: 5.0.0 transitivePeerDependencies: - debug - dev: true - /@modern-js/plugin-data-loader@2.60.6(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-Clc8Rgr2GhThf1HUJPX4Pp9qZJIfZ+tSvr0paWOWRPO56uadNT3yHS7dt4vhOTbK6/WkVVMarbkXWeVd68OVVQ==} - engines: {node: '>=16.2.0'} - peerDependencies: - react: '>=17.0.0' + '@modern-js/plugin-data-loader@2.60.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/core': 7.26.8 - '@modern-js/runtime-utils': 2.60.6(react-dom@18.3.1)(react@18.3.1) + '@babel/core': 7.26.9 + '@modern-js/runtime-utils': 2.60.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/utils': 2.60.6 '@swc/helpers': 0.5.13 path-to-regexp: 6.3.0 @@ -4216,25 +9936,17 @@ packages: transitivePeerDependencies: - react-dom - supports-color - dev: true - /@modern-js/plugin-i18n@2.60.6: - resolution: {integrity: sha512-0yVbRH/bkXEs7oh75GcPaK9CqV+j+UPNVGOIvMliH3ZmHnesGDbK9huzYscBfoDb9zNLmArI9lNsDmS/074mAQ==} + '@modern-js/plugin-i18n@2.60.6': dependencies: '@modern-js/utils': 2.60.6 '@swc/helpers': 0.5.13 - dev: true - /@modern-js/plugin-module-doc@2.33.1(@modern-js/core@2.64.1)(@modern-js/doc-tools@2.32.1)(@modern-js/module-tools@2.60.6)(@types/react@18.3.3)(react-dom@18.3.1)(react-router-dom@6.29.0)(react@18.3.1)(typescript@5.0.4)(webpack@5.97.1): - resolution: {integrity: sha512-f1K4055a6pxXdzg5oh6YeOhEWJwpXhTBYUrWGnZaZTAmyZq5cPt5cmaPsy+M4yaaSSWJPuadwjtFeRoetxSS2g==} - peerDependencies: - '@modern-js/module-tools': ^2.33.1 - react: ^18.2.0 - react-dom: ^18.2.0 + '@modern-js/plugin-module-doc@2.33.1(@babel/traverse@7.26.9)(@modern-js/core@2.60.6)(@modern-js/doc-tools@2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0))(@modern-js/module-tools@2.60.6(typescript@5.0.4))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react-router-dom@6.29.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0)': dependencies: - '@modern-js/doc-core': 2.31.2(@modern-js/core@2.64.1)(@modern-js/doc-tools@2.32.1)(react@18.3.1)(typescript@5.0.4)(webpack@5.97.1) - '@modern-js/doc-plugin-api-docgen': 2.31.2(@modern-js/core@2.64.1)(@modern-js/doc-tools@2.32.1)(@types/react@18.3.3)(react-dom@18.3.1)(react-router-dom@6.29.0)(react@18.3.1)(typescript@5.0.4)(webpack@5.97.1) - '@modern-js/doc-plugin-preview': 2.31.2(@modern-js/core@2.64.1)(@modern-js/doc-tools@2.32.1)(react-dom@18.3.1)(react-router-dom@6.29.0)(react@18.3.1)(typescript@5.0.4)(webpack@5.97.1) + '@modern-js/doc-core': 2.31.2(@babel/traverse@7.26.9)(@modern-js/core@2.60.6)(@modern-js/doc-tools@2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0) + '@modern-js/doc-plugin-api-docgen': 2.31.2(@babel/traverse@7.26.9)(@modern-js/core@2.60.6)(@modern-js/doc-tools@2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react-router-dom@6.29.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0) + '@modern-js/doc-plugin-preview': 2.31.2(@babel/traverse@7.26.9)(@modern-js/core@2.60.6)(@modern-js/doc-tools@2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0))(react-dom@18.3.1(react@18.3.1))(react-router-dom@6.29.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.0.4)(webpack@5.98.0) '@modern-js/module-tools': 2.60.6(typescript@5.0.4) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -4265,17 +9977,9 @@ packages: - webpack-dev-server - webpack-hot-middleware - webpack-plugin-serve - dev: true - /@modern-js/plugin-module-node-polyfill@2.60.6(@modern-js/module-tools@2.60.6): - resolution: {integrity: sha512-3xqE2YcVixNssd9sZeht4DTZk/8mbyimQpDXp/4CNZo7eTmha4muuEV/x+nuJrbBxzXACd9sH4B8rrevLLSefA==} - peerDependencies: - '@modern-js/module-tools': ^2.60.6 - peerDependenciesMeta: - '@modern-js/module-tools': - optional: true + '@modern-js/plugin-module-node-polyfill@2.60.6(@modern-js/module-tools@2.60.6(typescript@5.0.4))': dependencies: - '@modern-js/module-tools': 2.60.6(typescript@5.0.4) '@swc/helpers': 0.5.13 assert: 2.0.0 browserify-zlib: 0.2.0 @@ -4301,48 +10005,35 @@ packages: url: 0.11.4 util: 0.12.5 vm-browserify: 1.1.2 - dev: true + optionalDependencies: + '@modern-js/module-tools': 2.60.6(typescript@5.0.4) - /@modern-js/plugin@2.31.2(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-Gd9wj0uwIBfRme93s7vAcnRhQKdTzPPqmk+J+oqoew3E3c4NPCViD54xmK9/neW5ELPvmri5tKGvZUpmnklNWw==} + '@modern-js/plugin@2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@modern-js/utils': 2.31.2(react-dom@18.3.1)(react@18.3.1) + '@modern-js/utils': 2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.1 transitivePeerDependencies: - react - react-dom - dev: true - /@modern-js/plugin@2.32.1(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-CaUlKO6LAT4q0+qJ7aucdAAxIKMs/7gzdAYO3MGAjWR4/dPJsD/pWEQTvzxdmbxUHhZxRyUlcw/q8GpPU1Nqqg==} + '@modern-js/plugin@2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@modern-js/utils': 2.32.1(react-dom@18.3.1)(react@18.3.1) + '@modern-js/utils': 2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.1 transitivePeerDependencies: - react - react-dom - dev: true - /@modern-js/plugin@2.60.6: - resolution: {integrity: sha512-27CPUvnKEerq3kY7uPTYLO9PvP6LB2fV3Xo1RDPTNFgx3WhDUgiPtbqDi2yfzMIgPsaPn9AEdoJMGtD9EuXqfA==} + '@modern-js/plugin@2.60.6': dependencies: '@modern-js/utils': 2.60.6 '@swc/helpers': 0.5.13 - dev: true - - /@modern-js/plugin@2.64.1: - resolution: {integrity: sha512-c7sIlUIe7TrmSMFPBja1xcKZYK24Bfkt3ftfhVebB980UWWM94YkpJ5uvbTXMW2/WCm+/HBYVQHf41Aug40F+Q==} - dependencies: - '@modern-js/utils': 2.64.1 - '@swc/helpers': 0.5.13 - dev: true - /@modern-js/prod-server@2.31.2(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-xUgmC+P4FMDOsTRKZAQ4HZ86OsmIJdky2mpS7k5bPydtqZL5usmhWXRyX02u+MgyPKLHy1x3FGVDI9ZkqqdWEw==} + '@modern-js/prod-server@2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@modern-js/plugin': 2.31.2(react-dom@18.3.1)(react@18.3.1) - '@modern-js/server-core': 2.31.2(react-dom@18.3.1)(react@18.3.1) - '@modern-js/utils': 2.31.2(react-dom@18.3.1)(react@18.3.1) + '@modern-js/plugin': 2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/server-core': 2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/utils': 2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.1 cookie: 0.4.2 etag: 1.8.1 @@ -4359,14 +10050,12 @@ packages: - react - react-dom - supports-color - dev: true - /@modern-js/prod-server@2.32.1(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-tQGurvUyv4+zTEVoSirDZdhYmwneiQmUfdHn/g86xOkkap8ms6fwYbYIovUGWIj+gy19tR39abNTqv18m2hZXw==} + '@modern-js/prod-server@2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@modern-js/plugin': 2.32.1(react-dom@18.3.1)(react@18.3.1) - '@modern-js/server-core': 2.32.1(react-dom@18.3.1)(react@18.3.1) - '@modern-js/utils': 2.32.1(react-dom@18.3.1)(react@18.3.1) + '@modern-js/plugin': 2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/server-core': 2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/utils': 2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.1 cookie: 0.4.2 etag: 1.8.1 @@ -4384,60 +10073,39 @@ packages: - react - react-dom - supports-color - dev: true - /@modern-js/remark-container@2.31.2: - resolution: {integrity: sha512-NQEz8xPfa2ESPVr5FhcaGizcApQAwFOjX7czIanFlr5F98hRnc8YUHFKKtG6Xir2N+0yUOhJFNHivaV/YuDVFQ==} - engines: {node: '>=14.17.6'} - dev: true + '@modern-js/remark-container@2.31.2': {} - /@modern-js/remark-container@2.32.1: - resolution: {integrity: sha512-Ho8X6VPlDY1RSbrhElgTLjNC62XiC1YM0UsNA5GSmSjHqv4gJcbI5G/Pyhzu1+KScmV31BkX/PKL5QQmd8sBJQ==} - engines: {node: '>=14.17.6'} - dev: true + '@modern-js/remark-container@2.32.1': {} - /@modern-js/runtime-utils@2.60.6(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-mEFDWbaNlOijlVrgr5T3K4hfOmr4QggVtF8A2NdcgRgQ9AP9faCjmMd6utbRL6ZRQruvKxGV8JN73W+WdBy2Ig==} - peerDependencies: - react: '>=17.0.0' - react-dom: '>=17.0.0' - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true + '@modern-js/runtime-utils@2.60.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@modern-js/utils': 2.60.6 '@remix-run/router': 1.20.0 '@swc/helpers': 0.5.13 lru-cache: 6.0.0 + react-router-dom: 6.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + serialize-javascript: 6.0.2 + optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-router-dom: 6.27.0(react-dom@18.3.1)(react@18.3.1) - serialize-javascript: 6.0.2 - dev: true - /@modern-js/runtime@2.60.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-O8DLSHSNWoc1HS+giaOTTPSzn8y9hkq0AUmQJYwa4cw3ShuX22J4S8ppzYFgagGCdm+sLOfNYmVCkhQnV3lCEA==} - engines: {node: '>=14.17.6'} - peerDependencies: - react: '>=17' - react-dom: '>=17' + '@modern-js/runtime@2.60.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/core': 7.26.8 - '@babel/types': 7.26.8 - '@loadable/babel-plugin': 5.15.3(@babel/core@7.26.8) + '@babel/core': 7.26.9 + '@babel/types': 7.26.9 + '@loadable/babel-plugin': 5.15.3(@babel/core@7.26.9) '@loadable/component': 5.15.3(react@18.3.1) - '@loadable/server': 5.15.3(@loadable/component@5.15.3)(react@18.3.1) + '@loadable/server': 5.15.3(@loadable/component@5.15.3(react@18.3.1))(react@18.3.1) '@modern-js-reduck/plugin-auto-actions': 1.1.11(@modern-js-reduck/store@1.1.11) '@modern-js-reduck/plugin-devtools': 1.1.11(@modern-js-reduck/store@1.1.11) '@modern-js-reduck/plugin-effects': 1.1.11(@modern-js-reduck/store@1.1.11) '@modern-js-reduck/plugin-immutable': 1.1.11(@modern-js-reduck/store@1.1.11) - '@modern-js-reduck/react': 1.1.11(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@modern-js-reduck/react': 1.1.11(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js-reduck/store': 1.1.11 '@modern-js/plugin': 2.60.6 - '@modern-js/plugin-data-loader': 2.60.6(react-dom@18.3.1)(react@18.3.1) - '@modern-js/runtime-utils': 2.60.6(react-dom@18.3.1)(react@18.3.1) + '@modern-js/plugin-data-loader': 2.60.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/runtime-utils': 2.60.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/types': 2.60.6 '@modern-js/utils': 2.60.6 '@swc/helpers': 0.5.13 @@ -4454,97 +10122,76 @@ packages: react-helmet: 6.1.0(react@18.3.1) react-is: 18.3.1 react-side-effect: 2.1.2(react@18.3.1) - styled-components: 5.3.11(@babel/core@7.26.8)(react-dom@18.3.1)(react-is@18.3.1)(react@18.3.1) + styled-components: 5.3.11(@babel/core@7.26.9)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1) transitivePeerDependencies: - '@types/react' - '@types/react-dom' - supports-color - dev: true - /@modern-js/server-core@2.31.2(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-QNm1xn1mMnJXLut7Tn2k6Y1tRU5a2NCFvPmuZF6DN4KT44iHBdQ/x840c5MTBBPs4QyYGoMz8UwuJiSsXiFGqA==} + '@modern-js/server-core@2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@modern-js/plugin': 2.31.2(react-dom@18.3.1)(react@18.3.1) - '@modern-js/utils': 2.31.2(react-dom@18.3.1)(react@18.3.1) + '@modern-js/plugin': 2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/utils': 2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.1 transitivePeerDependencies: - react - react-dom - dev: true - /@modern-js/server-core@2.32.1(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-f47mCXWjhuihKlFUUH0RuKq21/jmSGD2M7wjGPj37sd6rUiSotE7rCdgXwFnESscAPrB6dmCRdL+oQmyfgKubw==} + '@modern-js/server-core@2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@modern-js/plugin': 2.32.1(react-dom@18.3.1)(react@18.3.1) - '@modern-js/utils': 2.32.1(react-dom@18.3.1)(react@18.3.1) + '@modern-js/plugin': 2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/utils': 2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.1 transitivePeerDependencies: - react - react-dom - dev: true - /@modern-js/server-utils@2.31.2(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-d5jdSvNcv99GH7awbtaZJi9J9SsrabI1raeY6G96Fi64aFbFz8vHrEqEBoKPx7+qFe+nIQdBg/VpGcsh+yk76g==} + '@modern-js/server-utils@2.31.2(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/core': 7.26.8 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.26.8) - '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.8) - '@babel/preset-env': 7.26.8(@babel/core@7.26.8) - '@babel/preset-typescript': 7.26.0(@babel/core@7.26.8) - '@modern-js/babel-compiler': 2.31.2(react-dom@18.3.1)(react@18.3.1) + '@babel/core': 7.26.9 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.26.9) + '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.9) + '@babel/preset-env': 7.26.9(@babel/core@7.26.9) + '@babel/preset-typescript': 7.26.0(@babel/core@7.26.9) + '@modern-js/babel-compiler': 2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/babel-plugin-module-resolver': 2.31.2 - '@modern-js/babel-preset-base': 2.31.2(react-dom@18.3.1)(react@18.3.1) - '@modern-js/utils': 2.31.2(react-dom@18.3.1)(react@18.3.1) + '@modern-js/babel-preset-base': 2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/utils': 2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.1 - babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.26.8) + babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.26.9)(@babel/traverse@7.26.9) transitivePeerDependencies: - '@babel/traverse' - react - react-dom - supports-color - dev: true - /@modern-js/server-utils@2.32.1(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-ak1JI/t+E+VkUvkH2fS2trGL283qYRecHi509vkdNFQWtVUSIWb6ozWbBcLzlw6TbZB40BUrkQ+D9mD5hvcH6g==} + '@modern-js/server-utils@2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/core': 7.26.8 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.26.8) - '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.8) - '@babel/preset-env': 7.26.8(@babel/core@7.26.8) - '@babel/preset-typescript': 7.26.0(@babel/core@7.26.8) - '@modern-js/babel-compiler': 2.32.1(react-dom@18.3.1)(react@18.3.1) + '@babel/core': 7.26.9 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.26.9) + '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.9) + '@babel/preset-env': 7.26.9(@babel/core@7.26.9) + '@babel/preset-typescript': 7.26.0(@babel/core@7.26.9) + '@modern-js/babel-compiler': 2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/babel-plugin-module-resolver': 2.32.1 - '@modern-js/babel-preset-base': 2.32.1(react-dom@18.3.1)(react@18.3.1) - '@modern-js/utils': 2.32.1(react-dom@18.3.1)(react@18.3.1) + '@modern-js/babel-preset-base': 2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/utils': 2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.1 - babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.26.8) + babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.26.9)(@babel/traverse@7.26.9) transitivePeerDependencies: - '@babel/traverse' - react - react-dom - supports-color - dev: true - /@modern-js/server@2.31.2(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-1bklwmQ7kFroTWNsyCKnsObjHQQNACITCjLsyEqdnnixSFzLoG3QfxijZDX8GzXy6r7+Uv5SlJi/kjhPRuFgSg==} - peerDependencies: - devcert: ^1.0.0 - ts-node: ^10.1.0 - tsconfig-paths: '>= 3.0.0 || >= 4.0.0' - peerDependenciesMeta: - devcert: - optional: true - ts-node: - optional: true - tsconfig-paths: - optional: true + '@modern-js/server@2.31.2(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)': dependencies: - '@babel/core': 7.26.8 - '@babel/register': 7.25.9(@babel/core@7.26.8) - '@modern-js/prod-server': 2.31.2(react-dom@18.3.1)(react@18.3.1) - '@modern-js/server-utils': 2.31.2(react-dom@18.3.1)(react@18.3.1) + '@babel/core': 7.26.9 + '@babel/register': 7.25.9(@babel/core@7.26.9) + '@modern-js/prod-server': 2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/server-utils': 2.31.2(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/types': 2.31.2 - '@modern-js/utils': 2.31.2(react-dom@18.3.1)(react@18.3.1) + '@modern-js/utils': 2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.1 axios: 1.7.9 connect-history-api-fallback: 2.0.0 @@ -4552,6 +10199,8 @@ packages: minimatch: 3.1.2 path-to-regexp: 6.3.0 ws: 8.18.0 + optionalDependencies: + tsconfig-paths: 4.2.0 transitivePeerDependencies: - '@babel/traverse' - '@types/express' @@ -4561,28 +10210,15 @@ packages: - react-dom - supports-color - utf-8-validate - dev: true - /@modern-js/server@2.32.1(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-1k1bz47K/qYdV6OdcD5TisoUhG5CQL08/YJK+GFQCyTLr8EHC+RtpBVaNJznbUHmiPEHXMP1d4ZlHw3qVmzH1w==} - peerDependencies: - devcert: ^1.0.0 - ts-node: ^10.1.0 - tsconfig-paths: '>= 3.0.0 || >= 4.0.0' - peerDependenciesMeta: - devcert: - optional: true - ts-node: - optional: true - tsconfig-paths: - optional: true + '@modern-js/server@2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tsconfig-paths@4.2.0)': dependencies: - '@babel/core': 7.26.8 - '@babel/register': 7.25.9(@babel/core@7.26.8) - '@modern-js/prod-server': 2.32.1(react-dom@18.3.1)(react@18.3.1) - '@modern-js/server-utils': 2.32.1(react-dom@18.3.1)(react@18.3.1) + '@babel/core': 7.26.9 + '@babel/register': 7.25.9(@babel/core@7.26.9) + '@modern-js/prod-server': 2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/server-utils': 2.32.1(@babel/traverse@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/types': 2.32.1 - '@modern-js/utils': 2.32.1(react-dom@18.3.1)(react@18.3.1) + '@modern-js/utils': 2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.1 axios: 1.7.9 connect-history-api-fallback: 2.0.0 @@ -4590,6 +10226,8 @@ packages: minimatch: 3.1.2 path-to-regexp: 6.3.0 ws: 8.18.0 + optionalDependencies: + tsconfig-paths: 4.2.0 transitivePeerDependencies: - '@babel/traverse' - '@types/express' @@ -4599,90 +10237,32 @@ packages: - react-dom - supports-color - utf-8-validate - dev: true - /@modern-js/swc-plugins-darwin-arm64@0.6.11: - resolution: {integrity: sha512-UMH0bo20vcD10//F7KaINLfuHawQBVcWCCyJvkYOiBt7e1tUjeybKu+y6eNq1USyFVElEMul8ytnYdwAS9sY+w==} - engines: {node: '>=14.12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true + '@modern-js/swc-plugins-darwin-arm64@0.6.11': optional: true - /@modern-js/swc-plugins-darwin-x64@0.6.11: - resolution: {integrity: sha512-qLcXAnM/IGcZX7B0MvxSdZjvgGofhOtHaEdj8CFkt75CzriBMu7lrGsRP4+paXbFAgM4vp7ZV7julaFrrDCoZw==} - engines: {node: '>=14.12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true + '@modern-js/swc-plugins-darwin-x64@0.6.11': optional: true - /@modern-js/swc-plugins-linux-arm64-gnu@0.6.11: - resolution: {integrity: sha512-3WcTpQqJp7RM/i8lLe+GjOCx17ljKdPbxlIY4LkJe+SQXATd3YducTtNqsEAdBA8Au907rI1ImuhN0kxvR97jQ==} - engines: {node: '>=14.12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + '@modern-js/swc-plugins-linux-arm64-gnu@0.6.11': optional: true - /@modern-js/swc-plugins-linux-arm64-musl@0.6.11: - resolution: {integrity: sha512-RFE3xJWbABM8ZzPMVqlr3qovgnwamgpGjGN15rJ4tVqieO2FORQ14xSQE1ROBun6kIADUD+TxnepTlGb7EJg0w==} - engines: {node: '>=14.12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + '@modern-js/swc-plugins-linux-arm64-musl@0.6.11': optional: true - /@modern-js/swc-plugins-linux-x64-gnu@0.6.11: - resolution: {integrity: sha512-vSDF5aznEtnS0kHFm7UXHHaFzEZEyTV+CTQOVEp84hU5+HW1fMR+MFmbeCJnqXpB+R8Kg93SL4KWePGzm2ZNWw==} - engines: {node: '>=14.12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + '@modern-js/swc-plugins-linux-x64-gnu@0.6.11': optional: true - /@modern-js/swc-plugins-linux-x64-musl@0.6.11: - resolution: {integrity: sha512-jfwQeuSmHbgvw9fjFRi5ZkLWejF8WZkYew0MGHqkSyLYZU+p7RgGo+tSpT4CK+b6p9qzh8LxoFpYjx6YycCY/w==} - engines: {node: '>=14.12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + '@modern-js/swc-plugins-linux-x64-musl@0.6.11': optional: true - /@modern-js/swc-plugins-win32-arm64-msvc@0.6.11: - resolution: {integrity: sha512-MWbuMTdGZ81Xce+OmnM3xsKKQIHmp9Eq0FlueRIPQdSLCO6IogIjALsMum4Vd1tRnEosKXj0xcuD4IsAWgtW6w==} - engines: {node: '>=14.12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true + '@modern-js/swc-plugins-win32-arm64-msvc@0.6.11': optional: true - /@modern-js/swc-plugins-win32-x64-msvc@0.6.11: - resolution: {integrity: sha512-UH4BeAjfs7Z6sZQOaFjgOB9h99qAPRtRFbmkQ+77FDlwNdjii0xPJvdNPCxAJITnqHjHSqrbz9rFDSrWnI9eKg==} - engines: {node: '>=14.12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true + '@modern-js/swc-plugins-win32-x64-msvc@0.6.11': optional: true - /@modern-js/swc-plugins@0.6.11(@swc/helpers@0.5.13): - resolution: {integrity: sha512-bXwjeFa5mg1hD6zzSHzw94FMNFb9SV458g76zWYfXRw7wMjp97NYl6n3dOTOixdngC0JqZctSbP4mJwSZ0p3Gw==} - engines: {node: '>=14.17.6'} - peerDependencies: - '@swc/helpers': '>=0.5.3' - peerDependenciesMeta: - '@swc/helpers': - optional: true - dependencies: - '@swc/helpers': 0.5.13 + '@modern-js/swc-plugins@0.6.11(@swc/helpers@0.5.13)': optionalDependencies: '@modern-js/swc-plugins-darwin-arm64': 0.6.11 '@modern-js/swc-plugins-darwin-x64': 0.6.11 @@ -4692,278 +10272,147 @@ packages: '@modern-js/swc-plugins-linux-x64-musl': 0.6.11 '@modern-js/swc-plugins-win32-arm64-msvc': 0.6.11 '@modern-js/swc-plugins-win32-x64-msvc': 0.6.11 - dev: true + '@swc/helpers': 0.5.13 - /@modern-js/types@2.31.2: - resolution: {integrity: sha512-soxjc0F/UokDXU2s7Lu/RESw30iaF2dcADg9Cv0282jx1V1siNkebk98VTPA0mPHTD6r773neKRU/7RzsOvzYQ==} - dev: true + '@modern-js/types@2.31.2': {} - /@modern-js/types@2.32.1: - resolution: {integrity: sha512-qmWjebnWYIP9TiZ8ZB2azCTzjkm/liDjGWkAOwLcs+VXERUn7uHilH8S6JZLjuuplSm3ltvnRYsEjU9R+pCrEg==} - dev: true + '@modern-js/types@2.32.1': {} - /@modern-js/types@2.60.6: - resolution: {integrity: sha512-Tjh03D6lW34BmbKm5CV7SgtjSnOIjFQhRh+pExCMpSQUgJOWSooboEVsZQ2f8zdyxijI1MSSGEIt4ak30Vsvng==} - dev: true + '@modern-js/types@2.60.6': {} - /@modern-js/utils@2.31.2(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-gqINZJxkep0+CPeiXnVxDJeFNNN6PiuRkj6GXAXUc89pmwvjkpULG+8Dm4Qwa/g9g9316y5CRJ1/m1BDs0GVIg==} - peerDependencies: - react: '>=17.0.0' - react-dom: '>=17.0.0' - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true + '@modern-js/utils@2.31.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@remix-run/router': 1.6.1 '@swc/helpers': 0.5.1 - caniuse-lite: 1.0.30001699 + caniuse-lite: 1.0.30001700 lodash: 4.17.21 + react-router-dom: 6.11.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + serialize-javascript: 6.0.2 + optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-router-dom: 6.11.1(react-dom@18.3.1)(react@18.3.1) - serialize-javascript: 6.0.2 - dev: true - /@modern-js/utils@2.32.1(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-vUzPMMebXkulCmw1Vd7sbyZswrsA6nBQ7woGul2M4DHzPa0wawANNsfLVK/iyeiu+KIe0yrmwjyYm9KZe8UzEw==} - peerDependencies: - react: '>=17.0.0' - react-dom: '>=17.0.0' - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true + '@modern-js/utils@2.32.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@remix-run/router': 1.6.1 '@swc/helpers': 0.5.1 - caniuse-lite: 1.0.30001699 + caniuse-lite: 1.0.30001700 lodash: 4.17.21 + react-router-dom: 6.11.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + serialize-javascript: 6.0.2 + optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-router-dom: 6.11.1(react-dom@18.3.1)(react@18.3.1) - serialize-javascript: 6.0.2 - dev: true - - /@modern-js/utils@2.60.6: - resolution: {integrity: sha512-rAeqAHiUUnStwBTkP1tdQSz29o/Qtoc2OUfz6TEAtEPoAxcFSc44+hwux7mQkSxXSzBjkbev5RMkwVwuM2FWtw==} - dependencies: - '@swc/helpers': 0.5.13 - caniuse-lite: 1.0.30001699 - lodash: 4.17.21 - rslog: 1.2.3 - dev: true - /@modern-js/utils@2.64.1: - resolution: {integrity: sha512-8ynko2ZF1cSqqNG5j/+1/m4h0wCn3yIsfS5t6FO3bOLwF7KS2T1VWOsL01b/cItkMbcHnL5yis8bOKVfjYIdNw==} + '@modern-js/utils@2.60.6': dependencies: '@swc/helpers': 0.5.13 - caniuse-lite: 1.0.30001699 + caniuse-lite: 1.0.30001700 lodash: 4.17.21 rslog: 1.2.3 - dev: true - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - dev: true - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: true + '@nodelib/fs.stat@2.0.5': {} - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.0 - dev: true - /@pixi/accessibility@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2)(@pixi/events@7.4.2): - resolution: {integrity: sha512-R6VEolm8uyy1FB1F2qaLKxVbzXAFTZCF2ka8fl9lsz7We6ZfO4QpXv9ur7DvzratjCQUQVCKo0/V7xL5q1EV/g==} - peerDependencies: - '@pixi/core': 7.4.2 - '@pixi/display': 7.4.2 - '@pixi/events': 7.4.2 + '@pixi/accessibility@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/events@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)))': dependencies: '@pixi/core': 7.4.2 '@pixi/display': 7.4.2(@pixi/core@7.4.2) - '@pixi/events': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2) - dev: true + '@pixi/events': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)) - /@pixi/app@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2): - resolution: {integrity: sha512-ugkH3kOgjT8P1mTMY29yCOgEh+KuVMAn8uBxeY0aMqaUgIMysfpnFv+Aepp2CtvI9ygr22NC+OiKl+u+eEaQHw==} - peerDependencies: - '@pixi/core': 7.4.2 - '@pixi/display': 7.4.2 + '@pixi/app@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))': dependencies: '@pixi/core': 7.4.2 '@pixi/display': 7.4.2(@pixi/core@7.4.2) - dev: true - /@pixi/assets@7.4.2(@pixi/core@7.4.2): - resolution: {integrity: sha512-anxho59H9egZwoaEdM5aLvYyxoz6NCy3CaQIvNHD1bbGg8L16Ih0e26QSBR5fu53jl8OjT6M7s+p6n7uu4+fGA==} - peerDependencies: - '@pixi/core': 7.4.2 + '@pixi/assets@7.4.2(@pixi/core@7.4.2)': dependencies: '@pixi/core': 7.4.2 '@types/css-font-loading-module': 0.0.12 - dev: true - /@pixi/canvas-display@7.4.2(@pixi/display@7.4.2): - resolution: {integrity: sha512-cKplWdhy+ReYRQK9ideLlKoBdTI9cB10382jWkLDiBeguM9cWSIOrmY5Bd84V0/5FOTLc/AFl4LL1wws27MVKg==} - peerDependencies: - '@pixi/display': 7.4.2 + '@pixi/canvas-display@7.4.2(@pixi/display@7.4.2(@pixi/core@7.4.2))': dependencies: '@pixi/display': 7.4.2(@pixi/core@7.4.2) - dev: true - /@pixi/canvas-extract@7.4.2(@pixi/canvas-renderer@7.4.2)(@pixi/core@7.4.2)(@pixi/display@7.4.2)(@pixi/extract@7.4.2): - resolution: {integrity: sha512-4rbH4sLPcPEz+OjehFUluFHN8mup9zwzedJLYc7KtqScg/npYKtVmDSaI/0cZBr9vmael+ZuCg/hjaDYTJhubg==} - peerDependencies: - '@pixi/canvas-renderer': 7.4.2 - '@pixi/core': 7.4.2 - '@pixi/display': 7.4.2 - '@pixi/extract': 7.4.2 + '@pixi/canvas-extract@7.4.2(@pixi/canvas-renderer@7.4.2(@pixi/core@7.4.2))(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/extract@7.4.2(@pixi/core@7.4.2))': dependencies: '@pixi/canvas-renderer': 7.4.2(@pixi/core@7.4.2) '@pixi/core': 7.4.2 '@pixi/display': 7.4.2(@pixi/core@7.4.2) '@pixi/extract': 7.4.2(@pixi/core@7.4.2) - dev: true - /@pixi/canvas-graphics@7.4.2(@pixi/canvas-display@7.4.2)(@pixi/canvas-renderer@7.4.2)(@pixi/core@7.4.2)(@pixi/graphics@7.4.2): - resolution: {integrity: sha512-1ANBcV5IietfQuABT2PUxTs4TsQP4kmpwUnkRLpZgvM5NL0UBMUZCqBhcBnbfAyV7zvpPm3i+eWhIwn6Xz/2Tg==} - peerDependencies: - '@pixi/canvas-display': 7.4.2 - '@pixi/canvas-renderer': 7.4.2 - '@pixi/core': 7.4.2 - '@pixi/graphics': 7.4.2 + '@pixi/canvas-graphics@7.4.2(@pixi/canvas-display@7.4.2(@pixi/display@7.4.2(@pixi/core@7.4.2)))(@pixi/canvas-renderer@7.4.2(@pixi/core@7.4.2))(@pixi/core@7.4.2)(@pixi/graphics@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))))': dependencies: - '@pixi/canvas-display': 7.4.2(@pixi/display@7.4.2) + '@pixi/canvas-display': 7.4.2(@pixi/display@7.4.2(@pixi/core@7.4.2)) '@pixi/canvas-renderer': 7.4.2(@pixi/core@7.4.2) '@pixi/core': 7.4.2 - '@pixi/graphics': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2)(@pixi/sprite@7.4.2) - dev: true + '@pixi/graphics': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))) - /@pixi/canvas-mesh@7.4.2(@pixi/canvas-display@7.4.2)(@pixi/canvas-renderer@7.4.2)(@pixi/core@7.4.2)(@pixi/mesh-extras@7.4.2)(@pixi/mesh@7.4.2): - resolution: {integrity: sha512-CdxlV6a6H3wULwwFtURIycQT7oCtvFGDMotz3glyAj625EEx+mwSLo1mAVzs8Hl9pmetFmNKj4Z1gy890VSemw==} - peerDependencies: - '@pixi/canvas-display': 7.4.2 - '@pixi/canvas-renderer': 7.4.2 - '@pixi/core': 7.4.2 - '@pixi/mesh': 7.4.2 - '@pixi/mesh-extras': 7.4.2 + '@pixi/canvas-mesh@7.4.2(@pixi/canvas-display@7.4.2(@pixi/display@7.4.2(@pixi/core@7.4.2)))(@pixi/canvas-renderer@7.4.2(@pixi/core@7.4.2))(@pixi/core@7.4.2)(@pixi/mesh-extras@7.4.2(@pixi/core@7.4.2)(@pixi/mesh@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))))(@pixi/mesh@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)))': dependencies: - '@pixi/canvas-display': 7.4.2(@pixi/display@7.4.2) + '@pixi/canvas-display': 7.4.2(@pixi/display@7.4.2(@pixi/core@7.4.2)) '@pixi/canvas-renderer': 7.4.2(@pixi/core@7.4.2) '@pixi/core': 7.4.2 - '@pixi/mesh': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2) - '@pixi/mesh-extras': 7.4.2(@pixi/core@7.4.2)(@pixi/mesh@7.4.2) - dev: true + '@pixi/mesh': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)) + '@pixi/mesh-extras': 7.4.2(@pixi/core@7.4.2)(@pixi/mesh@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))) - /@pixi/canvas-particle-container@7.4.2(@pixi/particle-container@7.4.2): - resolution: {integrity: sha512-775rF/d7atlZTq5oODr6K3qDZ+awWkDe0QQ4BvGqPAXaWXB5doGs3j5KpTEoFD/JnbX7Q7o8ZTVGla6qsBnT6A==} - peerDependencies: - '@pixi/particle-container': 7.4.2 + '@pixi/canvas-particle-container@7.4.2(@pixi/particle-container@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))))': dependencies: - '@pixi/particle-container': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2)(@pixi/sprite@7.4.2) - dev: true + '@pixi/particle-container': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))) - /@pixi/canvas-prepare@7.4.2(@pixi/canvas-renderer@7.4.2)(@pixi/core@7.4.2)(@pixi/prepare@7.4.2): - resolution: {integrity: sha512-BB50HZb8ttPMkef+9BXfzeT1HS/AUkXRS0uwhwpq4L75D7XwIlIfwS0lCv2bw2KflavA8wT0qWuwlQTgHSalcA==} - peerDependencies: - '@pixi/canvas-renderer': 7.4.2 - '@pixi/core': 7.4.2 - '@pixi/prepare': 7.4.2 + '@pixi/canvas-prepare@7.4.2(@pixi/canvas-renderer@7.4.2(@pixi/core@7.4.2))(@pixi/core@7.4.2)(@pixi/prepare@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/graphics@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))))(@pixi/text@7.4.2(@pixi/core@7.4.2)(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)))))': dependencies: '@pixi/canvas-renderer': 7.4.2(@pixi/core@7.4.2) '@pixi/core': 7.4.2 - '@pixi/prepare': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2)(@pixi/graphics@7.4.2)(@pixi/text@7.4.2) - dev: true + '@pixi/prepare': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/graphics@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))))(@pixi/text@7.4.2(@pixi/core@7.4.2)(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)))) - /@pixi/canvas-renderer@7.4.2(@pixi/core@7.4.2): - resolution: {integrity: sha512-5qBrr4hJ3hQYMJwxIkKCnvMxL9m7aL26h4zbacK0KH7SQ0i+RCcZS2NzvPa451FtnhquIUjwuuWQyjPFdM5R7g==} - peerDependencies: - '@pixi/core': 7.4.2 + '@pixi/canvas-renderer@7.4.2(@pixi/core@7.4.2)': dependencies: '@pixi/core': 7.4.2 - dev: true - /@pixi/canvas-sprite-tiling@7.4.2(@pixi/canvas-renderer@7.4.2)(@pixi/canvas-sprite@7.4.2)(@pixi/core@7.4.2)(@pixi/sprite-tiling@7.4.2): - resolution: {integrity: sha512-3/YEohGAiiVHnkOkL1wyjGBJlndXsLPG4XFn3Lpc84Cm5kbR/C6RvNvDcRckQod+jWmqQ8n4x4SjhoFBjdP+dQ==} - peerDependencies: - '@pixi/canvas-renderer': 7.4.2 - '@pixi/canvas-sprite': 7.4.2 - '@pixi/core': 7.4.2 - '@pixi/sprite-tiling': 7.4.2 + '@pixi/canvas-sprite-tiling@7.4.2(@pixi/canvas-renderer@7.4.2(@pixi/core@7.4.2))(@pixi/canvas-sprite@7.4.2(@pixi/canvas-display@7.4.2(@pixi/display@7.4.2(@pixi/core@7.4.2)))(@pixi/canvas-renderer@7.4.2(@pixi/core@7.4.2))(@pixi/core@7.4.2)(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))))(@pixi/core@7.4.2)(@pixi/sprite-tiling@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))))': dependencies: '@pixi/canvas-renderer': 7.4.2(@pixi/core@7.4.2) - '@pixi/canvas-sprite': 7.4.2(@pixi/canvas-display@7.4.2)(@pixi/canvas-renderer@7.4.2)(@pixi/core@7.4.2)(@pixi/sprite@7.4.2) + '@pixi/canvas-sprite': 7.4.2(@pixi/canvas-display@7.4.2(@pixi/display@7.4.2(@pixi/core@7.4.2)))(@pixi/canvas-renderer@7.4.2(@pixi/core@7.4.2))(@pixi/core@7.4.2)(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))) '@pixi/core': 7.4.2 - '@pixi/sprite-tiling': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2)(@pixi/sprite@7.4.2) - dev: true + '@pixi/sprite-tiling': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))) - /@pixi/canvas-sprite@7.4.2(@pixi/canvas-display@7.4.2)(@pixi/canvas-renderer@7.4.2)(@pixi/core@7.4.2)(@pixi/sprite@7.4.2): - resolution: {integrity: sha512-XM6O6liAm2okHlSpUd0+muQAqLzY6EdQtfuqVP628FjHQkLJ/nb6Rg7qqtt3a3T4eyxzMBkqkzqBNBXomgf1SA==} - peerDependencies: - '@pixi/canvas-display': 7.4.2 - '@pixi/canvas-renderer': 7.4.2 - '@pixi/core': 7.4.2 - '@pixi/sprite': 7.4.2 + '@pixi/canvas-sprite@7.4.2(@pixi/canvas-display@7.4.2(@pixi/display@7.4.2(@pixi/core@7.4.2)))(@pixi/canvas-renderer@7.4.2(@pixi/core@7.4.2))(@pixi/core@7.4.2)(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)))': dependencies: - '@pixi/canvas-display': 7.4.2(@pixi/display@7.4.2) + '@pixi/canvas-display': 7.4.2(@pixi/display@7.4.2(@pixi/core@7.4.2)) '@pixi/canvas-renderer': 7.4.2(@pixi/core@7.4.2) '@pixi/core': 7.4.2 - '@pixi/sprite': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2) - dev: true + '@pixi/sprite': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)) - /@pixi/canvas-text@7.4.2(@pixi/canvas-sprite@7.4.2)(@pixi/sprite@7.4.2)(@pixi/text@7.4.2): - resolution: {integrity: sha512-EOzYNaNcD4QWwL7LQ3v2WM4LQNXeS0aJbNOwJ1+9xiNjY53iF0w5XgSGcfGef4itym6nrwTBft1QwKyTE23zhQ==} - peerDependencies: - '@pixi/canvas-sprite': 7.4.2 - '@pixi/sprite': 7.4.2 - '@pixi/text': 7.4.2 + '@pixi/canvas-text@7.4.2(@pixi/canvas-sprite@7.4.2(@pixi/canvas-display@7.4.2(@pixi/display@7.4.2(@pixi/core@7.4.2)))(@pixi/canvas-renderer@7.4.2(@pixi/core@7.4.2))(@pixi/core@7.4.2)(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))))(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)))(@pixi/text@7.4.2(@pixi/core@7.4.2)(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))))': dependencies: - '@pixi/canvas-sprite': 7.4.2(@pixi/canvas-display@7.4.2)(@pixi/canvas-renderer@7.4.2)(@pixi/core@7.4.2)(@pixi/sprite@7.4.2) - '@pixi/sprite': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2) - '@pixi/text': 7.4.2(@pixi/core@7.4.2)(@pixi/sprite@7.4.2) - dev: true + '@pixi/canvas-sprite': 7.4.2(@pixi/canvas-display@7.4.2(@pixi/display@7.4.2(@pixi/core@7.4.2)))(@pixi/canvas-renderer@7.4.2(@pixi/core@7.4.2))(@pixi/core@7.4.2)(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))) + '@pixi/sprite': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)) + '@pixi/text': 7.4.2(@pixi/core@7.4.2)(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))) - /@pixi/color@7.4.2: - resolution: {integrity: sha512-av1LOvhHsiaW8+T4n/FgnOKHby55/w7VcA1HzPIHRBtEcsmxvSCDanT1HU2LslNhrxLPzyVx18nlmalOyt5OBg==} + '@pixi/color@7.4.2': dependencies: '@pixi/colord': 2.9.6 - dev: true - /@pixi/colord@2.9.6: - resolution: {integrity: sha512-nezytU2pw587fQstUu1AsJZDVEynjskwOL+kibwcdxsMBFqPsFFNA7xl0ii/gXuDi6M0xj3mfRJj8pBSc2jCfA==} - dev: true + '@pixi/colord@2.9.6': {} - /@pixi/compressed-textures@7.4.2(@pixi/assets@7.4.2)(@pixi/core@7.4.2): - resolution: {integrity: sha512-VJrt7el6O4ZJSWkeOGXwrhJaiLg1UBhHB3fj42VR4YloYkAxpfd9K6s6IcbcVz7n9L48APKBMgHyaB2pX2Ck/A==} - peerDependencies: - '@pixi/assets': 7.4.2 - '@pixi/core': 7.4.2 + '@pixi/compressed-textures@7.4.2(@pixi/assets@7.4.2(@pixi/core@7.4.2))(@pixi/core@7.4.2)': dependencies: '@pixi/assets': 7.4.2(@pixi/core@7.4.2) '@pixi/core': 7.4.2 - dev: true - /@pixi/constants@7.4.2: - resolution: {integrity: sha512-N9vn6Wpz5WIQg7ugUg2+SdqD2u2+NM0QthE8YzLJ4tLH2Iz+/TrnPKUJzeyIqbg3sxJG5ZpGGPiacqIBpy1KyA==} - dev: true + '@pixi/constants@7.4.2': {} - /@pixi/core@7.4.2: - resolution: {integrity: sha512-UbMtgSEnyCOFPzbE6ThB9qopXxbZ5GCof2ArB4FXOC5Xi/83MOIIYg5kf5M8689C5HJMhg2SrJu3xLKppF+CMg==} + '@pixi/core@7.4.2': dependencies: '@pixi/color': 7.4.2 '@pixi/constants': 7.4.2 @@ -4973,290 +10422,152 @@ packages: '@pixi/settings': 7.4.2 '@pixi/ticker': 7.4.2 '@pixi/utils': 7.4.2 - dev: true - - /@pixi/display@7.4.2(@pixi/core@7.4.2): - resolution: {integrity: sha512-DaD0J7gIlNlzO0Fdlby/0OH+tB5LtCY6rgFeCBKVDnzmn8wKW3zYZRenWBSFJ0Psx6vLqXYkSIM/rcokaKviIw==} - peerDependencies: - '@pixi/core': 7.4.2 + + '@pixi/display@7.4.2(@pixi/core@7.4.2)': dependencies: '@pixi/core': 7.4.2 - dev: true - /@pixi/events@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2): - resolution: {integrity: sha512-Jw/w57heZjzZShIXL0bxOvKB+XgGIevyezhGtfF2ZSzQoSBWo+Fj1uE0QwKd0RIaXegZw/DhSmiMJSbNmcjifA==} - peerDependencies: - '@pixi/core': 7.4.2 - '@pixi/display': 7.4.2 + '@pixi/events@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))': dependencies: '@pixi/core': 7.4.2 '@pixi/display': 7.4.2(@pixi/core@7.4.2) - dev: true - /@pixi/extensions@7.4.2: - resolution: {integrity: sha512-Hmx2+O0yZ8XIvgomHM9GZEGcy9S9Dd8flmtOK5Aa3fXs/8v7xD08+ANQpN9ZqWU2Xs+C6UBlpqlt2BWALvKKKA==} - dev: true + '@pixi/extensions@7.4.2': {} - /@pixi/extract@7.4.2(@pixi/core@7.4.2): - resolution: {integrity: sha512-JOX27TRWjVEjauGBbF8PU7/g6LYXnivehdgqS5QlVDv1CNHTOrz/j3MdKcVWOhyZPbH5c9sh7lxyRxvd9AIuTQ==} - peerDependencies: - '@pixi/core': 7.4.2 + '@pixi/extract@7.4.2(@pixi/core@7.4.2)': dependencies: '@pixi/core': 7.4.2 - dev: true - /@pixi/filter-alpha@7.4.2(@pixi/core@7.4.2): - resolution: {integrity: sha512-9OsKJ+yvY2wIcQXwswj5HQBiwNGymwmqdxfp7mo+nZSBoDmxUqvMZzE9UNJ3eUlswuNvNRO8zNOsQvwdz7WFww==} - peerDependencies: - '@pixi/core': 7.4.2 + '@pixi/filter-alpha@7.4.2(@pixi/core@7.4.2)': dependencies: '@pixi/core': 7.4.2 - dev: true - /@pixi/filter-blur@7.4.2(@pixi/core@7.4.2): - resolution: {integrity: sha512-gOXBbIUx6CRZP1fmsis2wLzzSsofrqmIHhbf1gIkZMIQaLsc9T7brj+PaLTTiOiyJgnvGN5j20RZnkERWWKV0Q==} - peerDependencies: - '@pixi/core': 7.4.2 + '@pixi/filter-blur@7.4.2(@pixi/core@7.4.2)': dependencies: '@pixi/core': 7.4.2 - dev: true - /@pixi/filter-color-matrix@7.4.2(@pixi/core@7.4.2): - resolution: {integrity: sha512-ykZiR59Gvj80UKs9qm7jeUTKvn+wWk6HBVJOmJbK9jFK5juakDWp7BbH26U78Q61EWj97kI1FdfcbMkuQ7rqkA==} - peerDependencies: - '@pixi/core': 7.4.2 + '@pixi/filter-color-matrix@7.4.2(@pixi/core@7.4.2)': dependencies: '@pixi/core': 7.4.2 - dev: true - /@pixi/filter-displacement@7.4.2(@pixi/core@7.4.2): - resolution: {integrity: sha512-QS/eWp/ivsxef3xapNeGwpPX7vrqQQeo99Fux4k5zsvplnNEsf91t6QYJLG776AbZEu/qh8VYRBA5raIVY/REw==} - peerDependencies: - '@pixi/core': 7.4.2 + '@pixi/filter-displacement@7.4.2(@pixi/core@7.4.2)': dependencies: '@pixi/core': 7.4.2 - dev: true - /@pixi/filter-fxaa@7.4.2(@pixi/core@7.4.2): - resolution: {integrity: sha512-U/ptJgDsfs/r8y2a6gCaiPfDu2IFAxpQ4wtfmBpz6vRhqeE4kI8yNIUx5dZbui57zlsJaW0BNacOQxHU0vLkyQ==} - peerDependencies: - '@pixi/core': 7.4.2 + '@pixi/filter-fxaa@7.4.2(@pixi/core@7.4.2)': dependencies: '@pixi/core': 7.4.2 - dev: true - /@pixi/filter-noise@7.4.2(@pixi/core@7.4.2): - resolution: {integrity: sha512-Vy9ViBFhZEGh6xKkd3kFWErolZTwv1Y5Qb1bV7qPIYbvBECYsqzlR4uCrrjBV6KKm0PufpG/+NKC5vICZaqKzg==} - peerDependencies: - '@pixi/core': 7.4.2 + '@pixi/filter-noise@7.4.2(@pixi/core@7.4.2)': dependencies: '@pixi/core': 7.4.2 - dev: true - /@pixi/graphics@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2)(@pixi/sprite@7.4.2): - resolution: {integrity: sha512-jH4/Tum2RqWzHGzvlwEr7HIVduoLO57Ze705N2zQPkUD57TInn5911aGUeoua7f/wK8cTLGzgB9BzSo2kTdcHw==} - peerDependencies: - '@pixi/core': 7.4.2 - '@pixi/display': 7.4.2 - '@pixi/sprite': 7.4.2 + '@pixi/graphics@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)))': dependencies: '@pixi/core': 7.4.2 '@pixi/display': 7.4.2(@pixi/core@7.4.2) - '@pixi/sprite': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2) - dev: true + '@pixi/sprite': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)) - /@pixi/math@7.4.2: - resolution: {integrity: sha512-7jHmCQoYk6e0rfSKjdNFOPl0wCcdgoraxgteXJTTHv3r0bMNx2pHD9FJ0VvocEUG7XHfj55O3+u7yItOAx0JaQ==} - dev: true + '@pixi/math@7.4.2': {} - /@pixi/mesh-extras@7.4.2(@pixi/core@7.4.2)(@pixi/mesh@7.4.2): - resolution: {integrity: sha512-vNR/7wjxjs7sv9fGoKkHyU91ZAD+7EnMHBS5F3CVISlOIFxLi96NNZCB81oUIdky/90pHw40johd/4izR5zTyw==} - peerDependencies: - '@pixi/core': 7.4.2 - '@pixi/mesh': 7.4.2 + '@pixi/mesh-extras@7.4.2(@pixi/core@7.4.2)(@pixi/mesh@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)))': dependencies: '@pixi/core': 7.4.2 - '@pixi/mesh': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2) - dev: true + '@pixi/mesh': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)) - /@pixi/mesh@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2): - resolution: {integrity: sha512-mEkKyQvvMrYXC3pahvH5WBIKtrtB63WixRr91ANFI7zXD+ESG6Ap6XtxMCJmXDQPwBDNk7SWVMiCflYuchG7kA==} - peerDependencies: - '@pixi/core': 7.4.2 - '@pixi/display': 7.4.2 + '@pixi/mesh@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))': dependencies: '@pixi/core': 7.4.2 '@pixi/display': 7.4.2(@pixi/core@7.4.2) - dev: true - /@pixi/mixin-cache-as-bitmap@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2)(@pixi/sprite@7.4.2): - resolution: {integrity: sha512-6dgthi2ruUT/lervSrFDQ7vXkEsHo6CxdgV7W/wNdW1dqgQlKfDvO6FhjXzyIMRLSooUf5FoeluVtfsjkUIYrw==} - peerDependencies: - '@pixi/core': 7.4.2 - '@pixi/display': 7.4.2 - '@pixi/sprite': 7.4.2 + '@pixi/mixin-cache-as-bitmap@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)))': dependencies: '@pixi/core': 7.4.2 '@pixi/display': 7.4.2(@pixi/core@7.4.2) - '@pixi/sprite': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2) - dev: true + '@pixi/sprite': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)) - /@pixi/mixin-get-child-by-name@7.4.2(@pixi/display@7.4.2): - resolution: {integrity: sha512-0Cfw8JpQhsixprxiYph4Lj+B5n83Kk4ftNMXgM5xtZz+tVLz5s91qR0MqcdzwTGTJ7utVygiGmS4/3EfR/duRQ==} - peerDependencies: - '@pixi/display': 7.4.2 + '@pixi/mixin-get-child-by-name@7.4.2(@pixi/display@7.4.2(@pixi/core@7.4.2))': dependencies: '@pixi/display': 7.4.2(@pixi/core@7.4.2) - dev: true - /@pixi/mixin-get-global-position@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2): - resolution: {integrity: sha512-LcsahbVdX4DFS2IcGfNp4KaXuu7SjAwUp/flZSGIfstyKOKb5FWFgihtqcc9ZT4coyri3gs2JbILZub/zPZj1w==} - peerDependencies: - '@pixi/core': 7.4.2 - '@pixi/display': 7.4.2 + '@pixi/mixin-get-global-position@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))': dependencies: '@pixi/core': 7.4.2 '@pixi/display': 7.4.2(@pixi/core@7.4.2) - dev: true - /@pixi/particle-container@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2)(@pixi/sprite@7.4.2): - resolution: {integrity: sha512-B78Qq86kt0lEa5WtB2YFIm3+PjhKfw9La9R++GBSgABl+g13s2UaZ6BIPxvY3JxWMdxPm4iPrQPFX1QWRN68mw==} - peerDependencies: - '@pixi/core': 7.4.2 - '@pixi/display': 7.4.2 - '@pixi/sprite': 7.4.2 + '@pixi/particle-container@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)))': dependencies: '@pixi/core': 7.4.2 '@pixi/display': 7.4.2(@pixi/core@7.4.2) - '@pixi/sprite': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2) - dev: true + '@pixi/sprite': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)) - /@pixi/prepare@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2)(@pixi/graphics@7.4.2)(@pixi/text@7.4.2): - resolution: {integrity: sha512-PugyMzReCHXUzc3so9PPJj2OdHwibpUNWyqG4mWY2UUkb6c8NAGK1AnAPiscOvLilJcv/XQSFoNhX+N1jrvJEg==} - peerDependencies: - '@pixi/core': 7.4.2 - '@pixi/display': 7.4.2 - '@pixi/graphics': 7.4.2 - '@pixi/text': 7.4.2 + '@pixi/prepare@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/graphics@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))))(@pixi/text@7.4.2(@pixi/core@7.4.2)(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))))': dependencies: '@pixi/core': 7.4.2 '@pixi/display': 7.4.2(@pixi/core@7.4.2) - '@pixi/graphics': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2)(@pixi/sprite@7.4.2) - '@pixi/text': 7.4.2(@pixi/core@7.4.2)(@pixi/sprite@7.4.2) - dev: true + '@pixi/graphics': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))) + '@pixi/text': 7.4.2(@pixi/core@7.4.2)(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))) - /@pixi/runner@7.4.2: - resolution: {integrity: sha512-LPBpwym4vdyyDY5ucF4INQccaGyxztERyLTY1YN6aqJyyMmnc7iqXlIKt+a0euMBtNoLoxy6MWMvIuZj0JfFPA==} - dev: true + '@pixi/runner@7.4.2': {} - /@pixi/settings@7.4.2: - resolution: {integrity: sha512-pMN+L6aWgvUbwhFIL/BTHKe2ShYGPZ8h9wlVBnFHMtUcJcFLMF1B3lzuvCayZRepOphs6RY0TqvnDvVb585JhQ==} + '@pixi/settings@7.4.2': dependencies: '@pixi/constants': 7.4.2 '@types/css-font-loading-module': 0.0.12 ismobilejs: 1.1.1 - dev: true - /@pixi/sprite-animated@7.4.2(@pixi/core@7.4.2)(@pixi/sprite@7.4.2): - resolution: {integrity: sha512-QPT6yxCUGOBN+98H3pyIZ1ZO6Y7BN1o0Q2IMZEsD1rNfZJrTYS3Q8VlCG5t2YlFlcB8j5iBo24bZb6FUxLOmsQ==} - peerDependencies: - '@pixi/core': 7.4.2 - '@pixi/sprite': 7.4.2 + '@pixi/sprite-animated@7.4.2(@pixi/core@7.4.2)(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)))': dependencies: '@pixi/core': 7.4.2 - '@pixi/sprite': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2) - dev: true + '@pixi/sprite': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)) - /@pixi/sprite-tiling@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2)(@pixi/sprite@7.4.2): - resolution: {integrity: sha512-Z8PP6ewy3nuDYL+NeEdltHAhuucVgia33uzAitvH3OqqRSx6a6YRBFbNLUM9Sx+fBO2Lk3PpV1g6QZX+NE5LOg==} - peerDependencies: - '@pixi/core': 7.4.2 - '@pixi/display': 7.4.2 - '@pixi/sprite': 7.4.2 + '@pixi/sprite-tiling@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)))': dependencies: '@pixi/core': 7.4.2 '@pixi/display': 7.4.2(@pixi/core@7.4.2) - '@pixi/sprite': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2) - dev: true + '@pixi/sprite': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)) - /@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2): - resolution: {integrity: sha512-Ccf/OVQsB+HQV0Fyf5lwD+jk1jeU7uSIqEjbxenNNssmEdB7S5qlkTBV2EJTHT83+T6Z9OMOHsreJZerydpjeg==} - peerDependencies: - '@pixi/core': 7.4.2 - '@pixi/display': 7.4.2 + '@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))': dependencies: '@pixi/core': 7.4.2 '@pixi/display': 7.4.2(@pixi/core@7.4.2) - dev: true - /@pixi/spritesheet@7.4.2(@pixi/assets@7.4.2)(@pixi/core@7.4.2): - resolution: {integrity: sha512-YIvHdpXW+AYp8vD0NkjJmrdnVHTZKidCnx6k8ATSuuvCT6O5Tuh2N/Ul2oDj4/QaePy0lVhyhAbZpJW00Jr7mQ==} - peerDependencies: - '@pixi/assets': 7.4.2 - '@pixi/core': 7.4.2 + '@pixi/spritesheet@7.4.2(@pixi/assets@7.4.2(@pixi/core@7.4.2))(@pixi/core@7.4.2)': dependencies: '@pixi/assets': 7.4.2(@pixi/core@7.4.2) '@pixi/core': 7.4.2 - dev: true - /@pixi/text-bitmap@7.4.2(@pixi/assets@7.4.2)(@pixi/core@7.4.2)(@pixi/display@7.4.2)(@pixi/mesh@7.4.2)(@pixi/text@7.4.2): - resolution: {integrity: sha512-lPBMJ83JnpFVL+6ckQ8KO8QmwdPm0z9Zs/M0NgFKH2F+BcjelRNnk80NI3O0qBDYSEDQIE+cFbKoZ213kf7zwA==} - peerDependencies: - '@pixi/assets': 7.4.2 - '@pixi/core': 7.4.2 - '@pixi/display': 7.4.2 - '@pixi/mesh': 7.4.2 - '@pixi/text': 7.4.2 + '@pixi/text-bitmap@7.4.2(@pixi/assets@7.4.2(@pixi/core@7.4.2))(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/mesh@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)))(@pixi/text@7.4.2(@pixi/core@7.4.2)(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))))': dependencies: '@pixi/assets': 7.4.2(@pixi/core@7.4.2) '@pixi/core': 7.4.2 '@pixi/display': 7.4.2(@pixi/core@7.4.2) - '@pixi/mesh': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2) - '@pixi/text': 7.4.2(@pixi/core@7.4.2)(@pixi/sprite@7.4.2) - dev: true + '@pixi/mesh': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)) + '@pixi/text': 7.4.2(@pixi/core@7.4.2)(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))) - /@pixi/text-html@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2)(@pixi/sprite@7.4.2)(@pixi/text@7.4.2): - resolution: {integrity: sha512-duOu8oDYeDNuyPozj2DAsQ5VZBbRiwIXy78Gn7H2pCiEAefw/Uv5jJYwdgneKME0e1tOxz1eOUGKPcI6IJnZjw==} - peerDependencies: - '@pixi/core': 7.4.2 - '@pixi/display': 7.4.2 - '@pixi/sprite': 7.4.2 - '@pixi/text': 7.4.2 + '@pixi/text-html@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)))(@pixi/text@7.4.2(@pixi/core@7.4.2)(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))))': dependencies: '@pixi/core': 7.4.2 '@pixi/display': 7.4.2(@pixi/core@7.4.2) - '@pixi/sprite': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2) - '@pixi/text': 7.4.2(@pixi/core@7.4.2)(@pixi/sprite@7.4.2) - dev: true + '@pixi/sprite': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)) + '@pixi/text': 7.4.2(@pixi/core@7.4.2)(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))) - /@pixi/text@7.4.2(@pixi/core@7.4.2)(@pixi/sprite@7.4.2): - resolution: {integrity: sha512-rZZWpJNsIQ8WoCWrcVg8Gi6L/PDakB941clo6dO3XjoII2ucoOUcnpe5HIkudxi2xPvS/8Bfq990gFEx50TP5A==} - peerDependencies: - '@pixi/core': 7.4.2 - '@pixi/sprite': 7.4.2 + '@pixi/text@7.4.2(@pixi/core@7.4.2)(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)))': dependencies: '@pixi/core': 7.4.2 - '@pixi/sprite': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2) - dev: true + '@pixi/sprite': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)) - /@pixi/ticker@7.4.2: - resolution: {integrity: sha512-cAvxCh/KI6IW4m3tp2b+GQIf+DoSj9NNmPJmsOeEJ7LzvruG8Ps7SKI6CdjQob5WbceL1apBTDbqZ/f77hFDiQ==} + '@pixi/ticker@7.4.2': dependencies: '@pixi/extensions': 7.4.2 '@pixi/settings': 7.4.2 '@pixi/utils': 7.4.2 - dev: true - /@pixi/unsafe-eval@7.4.2(@pixi/core@7.4.2): - resolution: {integrity: sha512-45LM2mpqziNTeIORjgJl042CyssfZ17gfHHWcPZIZIGtiXSBPBy+mKvtHh5PraG0wBxAk/Bcr+nCYtAl8yuwgw==} - peerDependencies: - '@pixi/core': 7.4.2 + '@pixi/unsafe-eval@7.4.2(@pixi/core@7.4.2)': dependencies: '@pixi/core': 7.4.2 - dev: true - /@pixi/utils@7.4.2: - resolution: {integrity: sha512-aU/itcyMC4TxFbmdngmak6ey4kC5c16Y5ntIYob9QnjNAfD/7GTsYIBnP6FqEAyO1eq0MjkAALxdONuay1BG3g==} + '@pixi/utils@7.4.2': dependencies: '@pixi/color': 7.4.2 '@pixi/constants': 7.4.2 @@ -5265,33 +10576,8 @@ packages: earcut: 2.2.4 eventemitter3: 4.0.7 url: 0.11.4 - dev: true - /@pmmmwh/react-refresh-webpack-plugin@0.5.10(react-refresh@0.14.0)(webpack@5.97.1): - resolution: {integrity: sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA==} - engines: {node: '>= 10.13'} - peerDependencies: - '@types/webpack': 4.x || 5.x - react-refresh: '>=0.10.0 <1.0.0' - sockjs-client: ^1.4.0 - type-fest: '>=0.17.0 <4.0.0' - webpack: '>=4.43.0 <6.0.0' - webpack-dev-server: 3.x || 4.x - webpack-hot-middleware: 2.x - webpack-plugin-serve: 0.x || 1.x - peerDependenciesMeta: - '@types/webpack': - optional: true - sockjs-client: - optional: true - type-fest: - optional: true - webpack-dev-server: - optional: true - webpack-hot-middleware: - optional: true - webpack-plugin-serve: - optional: true + '@pmmmwh/react-refresh-webpack-plugin@0.5.10(react-refresh@0.14.0)(type-fest@2.19.0)(webpack@5.98.0)': dependencies: ansi-html-community: 0.0.8 common-path-prefix: 3.0.0 @@ -5303,239 +10589,128 @@ packages: react-refresh: 0.14.0 schema-utils: 3.3.0 source-map: 0.7.4 - webpack: 5.97.1 - dev: true + webpack: 5.98.0 + optionalDependencies: + type-fest: 2.19.0 - /@polka/url@0.5.0: - resolution: {integrity: sha512-oZLYFEAzUKyi3SKnXvj32ZCEGH6RDnao7COuCVhDydMS9NrCSVXhM79VaKyP5+Zc33m0QXEd2DN3UkU7OsHcfw==} - dev: true + '@polka/url@0.5.0': {} - /@polka/url@1.0.0-next.28: - resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} - dev: true + '@polka/url@1.0.0-next.28': {} - /@rc-component/async-validator@5.0.4: - resolution: {integrity: sha512-qgGdcVIF604M9EqjNF0hbUTz42bz/RDtxWdWuU5EQe3hi7M8ob54B6B35rOsvX5eSvIHIzT9iH1R3n+hk3CGfg==} - engines: {node: '>=14.x'} + '@rc-component/async-validator@5.0.4': dependencies: - '@babel/runtime': 7.26.7 - dev: true + '@babel/runtime': 7.26.9 - /@rc-component/color-picker@2.0.1(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-WcZYwAThV/b2GISQ8F+7650r5ZZJ043E57aVBFkQ+kSY4C6wdofXgB0hBx+GPGpIU0Z81eETNoDUJMr7oy/P8Q==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + '@rc-component/color-picker@2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@ant-design/fast-color': 2.0.6 - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 classnames: 2.5.1 - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /@rc-component/context@1.4.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-kFcNxg9oLRMoL3qki0OMxK+7g5mypjgaaJp/pkOis/6rVxma9nJBF/8kCIuTYHUQNr0ii7MxqE33wirPZLJQ2w==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + '@rc-component/context@1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.7 - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + '@babel/runtime': 7.26.9 + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /@rc-component/mini-decimal@1.1.0: - resolution: {integrity: sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==} - engines: {node: '>=8.x'} + '@rc-component/mini-decimal@1.1.0': dependencies: - '@babel/runtime': 7.26.7 - dev: true + '@babel/runtime': 7.26.9 - /@rc-component/mutate-observer@1.1.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-QjrOsDXQusNwGZPf4/qRQasg7UFEj06XiCJ8iuiq/Io7CrHrgVi6Uuetw60WAMG1799v+aM8kyc+1L/GBbHSlw==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + '@rc-component/mutate-observer@1.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 classnames: 2.5.1 - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /@rc-component/portal@1.1.2(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + '@rc-component/portal@1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 classnames: 2.5.1 - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /@rc-component/qrcode@1.0.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-L+rZ4HXP2sJ1gHMGHjsg9jlYBX/SLN2D6OxP9Zn3qgtpMWtO2vUfxVFwiogHpAIqs54FnALxraUy/BCO1yRIgg==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + '@rc-component/qrcode@1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 classnames: 2.5.1 - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /@rc-component/tour@1.15.1(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-Tr2t7J1DKZUpfJuDZWHxyxWpfmj8EZrqSgyMZ+BCdvKZ6r1UDsfU46M/iWAAFBy961Ssfom2kv5f3UcjIL2CmQ==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + '@rc-component/tour@1.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.7 - '@rc-component/portal': 1.1.2(react-dom@18.3.1)(react@18.3.1) - '@rc-component/trigger': 2.2.6(react-dom@18.3.1)(react@18.3.1) + '@babel/runtime': 7.26.9 + '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/trigger': 2.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) classnames: 2.5.1 - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /@rc-component/trigger@2.2.6(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-/9zuTnWwhQ3S3WT1T8BubuFTT46kvnXgaERR9f4BTKyn61/wpf/BvbImzYBubzJibU707FxwbKszLlHjcLiv1Q==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + '@rc-component/trigger@2.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.7 - '@rc-component/portal': 1.1.2(react-dom@18.3.1)(react@18.3.1) + '@babel/runtime': 7.26.9 + '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) classnames: 2.5.1 - rc-motion: 2.9.5(react-dom@18.3.1)(react@18.3.1) - rc-resize-observer: 1.4.3(react-dom@18.3.1)(react@18.3.1) - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-resize-observer: 1.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /@redux-devtools/extension@3.3.0(redux@4.2.1): - resolution: {integrity: sha512-X34S/rC8S/M1BIrkYD1mJ5f8vlH0BDqxXrs96cvxSBo4FhMdbhU+GUGsmNYov1xjSyLMHgo8NYrUG8bNX7525g==} - peerDependencies: - redux: ^3.1.0 || ^4.0.0 || ^5.0.0 + '@redux-devtools/extension@3.3.0(redux@4.2.1)': dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 immutable: 4.3.7 redux: 4.2.1 - dev: true - /@remix-run/router@1.20.0: - resolution: {integrity: sha512-mUnk8rPJBI9loFDZ+YzPGdeniYK+FTmRD1TMCz7ev2SNIozyKKpnGgsxO34u6Z4z/t0ITuu7voi/AshfsGsgFg==} - engines: {node: '>=14.0.0'} - dev: true + '@remix-run/router@1.20.0': {} - /@remix-run/router@1.22.0: - resolution: {integrity: sha512-MBOl8MeOzpK0HQQQshKB7pABXbmyHizdTpqnrIseTbsv0nAepwC2ENZa1aaBExNQcpLoXmWthhak8SABLzvGPw==} - engines: {node: '>=14.0.0'} - dev: true + '@remix-run/router@1.22.0': {} - /@remix-run/router@1.6.1: - resolution: {integrity: sha512-YUkWj+xs0oOzBe74OgErsuR3wVn+efrFhXBWrit50kOiED+pvQe2r6MWY0iJMQU/mSVKxvNzL4ZaYvjdX+G7ZA==} - engines: {node: '>=14'} - dev: true + '@remix-run/router@1.6.1': {} - /@rollup/pluginutils@4.1.1: - resolution: {integrity: sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ==} - engines: {node: '>= 8.0.0'} + '@rollup/pluginutils@4.1.1': dependencies: estree-walker: 2.0.2 picomatch: 2.3.1 - dev: true - /@rspack/binding-darwin-arm64@0.2.12: - resolution: {integrity: sha512-TTiizzXNYGILAwwUhf49AqeNRJ7NXnzObhmqaDJ76lwDph+yLf8HYhNWAzrhYljaWQGYjwTYUdXVrGflYb2pHA==} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true + '@rspack/binding-darwin-arm64@0.2.12': optional: true - /@rspack/binding-darwin-x64@0.2.12: - resolution: {integrity: sha512-zq32runVEEXoJQjo5xfKxoDsxPVQu3KHplZR3Yxp5fxnx7b9eiM5BPf1FQ6ml7b6FC4ZXyQNYwtoDsLSTYRnfg==} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true + '@rspack/binding-darwin-x64@0.2.12': optional: true - /@rspack/binding-linux-arm64-gnu@0.2.12: - resolution: {integrity: sha512-C5LR+/na47/ZlQXvrQP96GfzRnh34fa4cT3wD7C+BOwPrPrCdhf8Z3GNzv2J6Rs/ACBZjpD2DE+ARrWsBAv33w==} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + '@rspack/binding-linux-arm64-gnu@0.2.12': optional: true - /@rspack/binding-linux-arm64-musl@0.2.12: - resolution: {integrity: sha512-UbLGMUOSPaivO6TbGVt1JKeOXTfj1DFjIBTy2CKxIF5+B6xvg+ns9BhZobtZmjDlJ9GvkkHFoawFyl6UG+XLpg==} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + '@rspack/binding-linux-arm64-musl@0.2.12': optional: true - /@rspack/binding-linux-x64-gnu@0.2.12: - resolution: {integrity: sha512-I5W6WaD9llJjFR+Z1aJj0Ml/cheyHDH4eyTfEZXiOCEeTFJlA5NhMn97fDWoFKVYh5wq6uwCrxnaOSehYlsbYw==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + '@rspack/binding-linux-x64-gnu@0.2.12': optional: true - /@rspack/binding-linux-x64-musl@0.2.12: - resolution: {integrity: sha512-JuJKw502u/1FroIfR5iwoZ9pfx/iPpFEQmA6TseIKnu8eHM1jPKlPWAY4geBvzgiz04EdTs4uJ8o1ItoQLsddg==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + '@rspack/binding-linux-x64-musl@0.2.12': optional: true - /@rspack/binding-win32-arm64-msvc@0.2.12: - resolution: {integrity: sha512-f5npfQkXP8uHDSwiT1cXAhrdPwr7hrCz3EVKfwsB5Y1ny17YAH4ztm5Pk7oBB8H8SjQfn2Af8C3YEz1SUyk5/g==} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true + '@rspack/binding-win32-arm64-msvc@0.2.12': optional: true - /@rspack/binding-win32-ia32-msvc@0.2.12: - resolution: {integrity: sha512-pw8a1gCK+TK8suZdEZwXzdEzC+ZGtYsv75BhwHNRrcKUbmRjn7FTtvSO0beZlRMNcfc3A2SD1ZmozZM1czbang==} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true + '@rspack/binding-win32-ia32-msvc@0.2.12': optional: true - /@rspack/binding-win32-x64-msvc@0.2.12: - resolution: {integrity: sha512-6UGQKJ0CG5g/v7vSeDr5wI1AuAaWR4P6xoRcyWMeeW5Vw3sOxqK/MfEOtwVseX47IcF+NhrmHhVX7MN4EiO0ZA==} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true + '@rspack/binding-win32-x64-msvc@0.2.12': optional: true - /@rspack/binding@0.2.12: - resolution: {integrity: sha512-Pi/Zi6NgOXiHPA08lk1yFTJwlTozLx6cLI87astcMQz56LSOQb8wBV9uiRvWufnWWijh7+jznNxpv7psWqXRoA==} + '@rspack/binding@0.2.12': optionalDependencies: '@rspack/binding-darwin-arm64': 0.2.12 '@rspack/binding-darwin-x64': 0.2.12 @@ -5546,13 +10721,11 @@ packages: '@rspack/binding-win32-arm64-msvc': 0.2.12 '@rspack/binding-win32-ia32-msvc': 0.2.12 '@rspack/binding-win32-x64-msvc': 0.2.12 - dev: true - /@rspack/core@0.2.12(webpack@5.97.1): - resolution: {integrity: sha512-SekS+6bdTSx16nWQD7rGdnLK6fr0PewV2KKDt6w3jwHkJxDQygdUqL+st3c/JBGm/dpIVVpWkAcoLpK3EjFUcA==} + '@rspack/core@0.2.12(type-fest@2.19.0)(webpack@5.98.0)': dependencies: '@rspack/binding': 0.2.12 - '@rspack/dev-client': 0.2.12(react-refresh@0.14.0)(webpack@5.97.1) + '@rspack/dev-client': 0.2.12(react-refresh@0.14.0)(type-fest@2.19.0)(webpack@5.98.0) '@swc/helpers': 0.5.1 browserslist: 4.24.4 compare-versions: 6.0.0-rc.1 @@ -5565,8 +10738,8 @@ packages: util: 0.12.5 watchpack: 2.4.2 webpack-sources: 3.2.3 - zod: 3.24.1 - zod-validation-error: 1.2.0(zod@3.24.1) + zod: 3.24.2 + zod-validation-error: 1.2.0(zod@3.24.2) transitivePeerDependencies: - '@types/webpack' - sockjs-client @@ -5575,17 +10748,11 @@ packages: - webpack-dev-server - webpack-hot-middleware - webpack-plugin-serve - dev: true - /@rspack/dev-client@0.2.12(react-refresh@0.14.0)(webpack@5.97.1): - resolution: {integrity: sha512-EeovUu3iItItbSKcZH3eNoGvvFiqUfFEHg22jJQTGeV3I5sZWvgfQA7+JQq44HI50Rq1EI8R9rB5X1rXwrhv/w==} - peerDependencies: - react-refresh: '>=0.10.0 <1.0.0' - peerDependenciesMeta: - react-refresh: - optional: true + '@rspack/dev-client@0.2.12(react-refresh@0.14.0)(type-fest@2.19.0)(webpack@5.98.0)': dependencies: - '@pmmmwh/react-refresh-webpack-plugin': 0.5.10(react-refresh@0.14.0)(webpack@5.97.1) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.10(react-refresh@0.14.0)(type-fest@2.19.0)(webpack@5.98.0) + optionalDependencies: react-refresh: 0.14.0 transitivePeerDependencies: - '@types/webpack' @@ -5595,172 +10762,97 @@ packages: - webpack-dev-server - webpack-hot-middleware - webpack-plugin-serve - dev: true - /@rspack/plugin-html@0.2.12(@rspack/core@0.2.12): - resolution: {integrity: sha512-zCpsFaTTq0isAghGZpvkaKuNZHKoxzf90X2G71mHQ4T8HUN7+yy4p7lJ8vy/YGEj7zpYGT1k/8kCNivzUljgDQ==} - deprecated: deprecated - peerDependencies: - '@rspack/core': 0.2.12 - peerDependenciesMeta: - '@rspack/core': - optional: true + '@rspack/plugin-html@0.2.12(@rspack/core@0.2.12(type-fest@2.19.0)(webpack@5.98.0))': dependencies: - '@rspack/core': 0.2.12(webpack@5.97.1) '@types/html-minifier-terser': 7.0.0 html-minifier-terser: 7.0.0 lodash.template: 4.5.0 parse5: 7.1.1 tapable: 2.2.1 - dev: true + optionalDependencies: + '@rspack/core': 0.2.12(type-fest@2.19.0)(webpack@5.98.0) - /@sec-ant/readable-stream@0.4.1: - resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} - dev: true + '@sec-ant/readable-stream@0.4.1': {} - /@selderee/plugin-htmlparser2@0.11.0: - resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} + '@selderee/plugin-htmlparser2@0.11.0': dependencies: domhandler: 5.0.3 selderee: 0.11.0 - dev: true - - /@sindresorhus/merge-streams@4.0.0: - resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} - engines: {node: '>=18'} - dev: true - /@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.26.8): - resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.8 - dev: true + '@sindresorhus/merge-streams@4.0.0': {} - /@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.26.8): - resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.26.9)': dependencies: - '@babel/core': 7.26.8 - dev: true + '@babel/core': 7.26.9 - /@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.26.8): - resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.26.9)': dependencies: - '@babel/core': 7.26.8 - dev: true + '@babel/core': 7.26.9 - /@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.26.8): - resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.26.9)': dependencies: - '@babel/core': 7.26.8 - dev: true + '@babel/core': 7.26.9 - /@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.26.8): - resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.26.9)': dependencies: - '@babel/core': 7.26.8 - dev: true - - /@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.26.8): - resolution: {integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': 7.26.9 + + '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.26.9)': dependencies: - '@babel/core': 7.26.8 - dev: true + '@babel/core': 7.26.9 - /@svgr/babel-plugin-transform-react-native-svg@8.0.0(@babel/core@7.26.8): - resolution: {integrity: sha512-UKrY3860AQICgH7g+6h2zkoxeVEPLYwX/uAjmqo4PIq2FIHppwhIqZstIyTz0ZtlwreKR41O3W3BzsBBiJV2Aw==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.26.9)': dependencies: - '@babel/core': 7.26.8 - dev: true + '@babel/core': 7.26.9 - /@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.26.8): - resolution: {integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==} - engines: {node: '>=12'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@svgr/babel-plugin-transform-react-native-svg@8.0.0(@babel/core@7.26.9)': dependencies: - '@babel/core': 7.26.8 - dev: true + '@babel/core': 7.26.9 - /@svgr/babel-preset@8.0.0(@babel/core@7.26.8): - resolution: {integrity: sha512-KLcjiZychInVrhs86OvcYPLTFu9L5XV2vj0XAaE1HwE3J3jLmIzRY8ttdeAg/iFyp8nhavJpafpDZTt+1LIpkQ==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.26.9)': dependencies: - '@babel/core': 7.26.8 - '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.26.8) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.26.8) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.26.8) - '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.26.8) - '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.26.8) - '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.26.8) - '@svgr/babel-plugin-transform-react-native-svg': 8.0.0(@babel/core@7.26.8) - '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.26.8) - dev: true - - /@svgr/core@8.0.0(typescript@5.0.4): - resolution: {integrity: sha512-aJKtc+Pie/rFYsVH/unSkDaZGvEeylNv/s2cP+ta9/rYWxRVvoV/S4Qw65Kmrtah4CBK5PM6ISH9qUH7IJQCng==} - engines: {node: '>=14'} + '@babel/core': 7.26.9 + + '@svgr/babel-preset@8.0.0(@babel/core@7.26.9)': dependencies: - '@babel/core': 7.26.8 - '@svgr/babel-preset': 8.0.0(@babel/core@7.26.8) + '@babel/core': 7.26.9 + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.26.9) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.26.9) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.26.9) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.26.9) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.26.9) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.26.9) + '@svgr/babel-plugin-transform-react-native-svg': 8.0.0(@babel/core@7.26.9) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.26.9) + + '@svgr/core@8.0.0(typescript@5.0.4)': + dependencies: + '@babel/core': 7.26.9 + '@svgr/babel-preset': 8.0.0(@babel/core@7.26.9) camelcase: 6.3.0 cosmiconfig: 8.3.6(typescript@5.0.4) snake-case: 3.0.4 transitivePeerDependencies: - supports-color - typescript - dev: true - /@svgr/hast-util-to-babel-ast@8.0.0: - resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==} - engines: {node: '>=14'} + '@svgr/hast-util-to-babel-ast@8.0.0': dependencies: - '@babel/types': 7.26.8 + '@babel/types': 7.26.9 entities: 4.5.0 - dev: true - /@svgr/plugin-jsx@8.0.1(@svgr/core@8.0.0): - resolution: {integrity: sha512-bfCFb+4ZsM3UuKP2t7KmDwn6YV8qVn9HIQJmau6xeQb/iV65Rpi7NBNBWA2hcCd4GKoCqG8hpaaDk5FDR0eH+g==} - engines: {node: '>=14'} - peerDependencies: - '@svgr/core': '*' + '@svgr/plugin-jsx@8.0.1(@svgr/core@8.0.0(typescript@5.0.4))': dependencies: - '@babel/core': 7.26.8 - '@svgr/babel-preset': 8.0.0(@babel/core@7.26.8) + '@babel/core': 7.26.9 + '@svgr/babel-preset': 8.0.0(@babel/core@7.26.9) '@svgr/core': 8.0.0(typescript@5.0.4) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 transitivePeerDependencies: - supports-color - dev: true - /@svgr/plugin-svgo@8.0.1(@svgr/core@8.0.0)(typescript@5.0.4): - resolution: {integrity: sha512-29OJ1QmJgnohQHDAgAuY2h21xWD6TZiXji+hnx+W635RiXTAlHTbjrZDktfqzkN0bOeQEtNe+xgq73/XeWFfSg==} - engines: {node: '>=14'} - peerDependencies: - '@svgr/core': '*' + '@svgr/plugin-svgo@8.0.1(@svgr/core@8.0.0(typescript@5.0.4))(typescript@5.0.4)': dependencies: '@svgr/core': 8.0.0(typescript@5.0.4) cosmiconfig: 8.3.6(typescript@5.0.4) @@ -5768,414 +10860,270 @@ packages: svgo: 3.3.2 transitivePeerDependencies: - typescript - dev: true - /@svgr/webpack@8.0.1(typescript@5.0.4): - resolution: {integrity: sha512-zSoeKcbCmfMXjA11uDuCJb+1LWNb3vy6Qw/VHj0Nfcl3UuqwuoZWknHsBIhCWvi4wU9vPui3aq054qjVyZqY4A==} - engines: {node: '>=14'} + '@svgr/webpack@8.0.1(typescript@5.0.4)': dependencies: - '@babel/core': 7.26.8 - '@babel/plugin-transform-react-constant-elements': 7.25.9(@babel/core@7.26.8) - '@babel/preset-env': 7.26.8(@babel/core@7.26.8) - '@babel/preset-react': 7.26.3(@babel/core@7.26.8) - '@babel/preset-typescript': 7.26.0(@babel/core@7.26.8) + '@babel/core': 7.26.9 + '@babel/plugin-transform-react-constant-elements': 7.25.9(@babel/core@7.26.9) + '@babel/preset-env': 7.26.9(@babel/core@7.26.9) + '@babel/preset-react': 7.26.3(@babel/core@7.26.9) + '@babel/preset-typescript': 7.26.0(@babel/core@7.26.9) '@svgr/core': 8.0.0(typescript@5.0.4) - '@svgr/plugin-jsx': 8.0.1(@svgr/core@8.0.0) - '@svgr/plugin-svgo': 8.0.1(@svgr/core@8.0.0)(typescript@5.0.4) + '@svgr/plugin-jsx': 8.0.1(@svgr/core@8.0.0(typescript@5.0.4)) + '@svgr/plugin-svgo': 8.0.1(@svgr/core@8.0.0(typescript@5.0.4))(typescript@5.0.4) transitivePeerDependencies: - supports-color - typescript - dev: true - /@swc/helpers@0.5.1: - resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==} + '@swc/helpers@0.5.1': dependencies: tslib: 2.8.1 - dev: true - /@swc/helpers@0.5.13: - resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} + '@swc/helpers@0.5.13': dependencies: tslib: 2.8.1 - dev: true - /@tanstack/react-virtual@3.13.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-CchF0NlLIowiM2GxtsoKBkXA4uqSnY2KvnXo+kyUFD4a4ll6+J0qzoRsUPMwXV/H26lRsxgJIr/YmjYum2oEjg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + '@tanstack/react-virtual@3.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@tanstack/virtual-core': 3.13.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /@tanstack/virtual-core@3.13.0: - resolution: {integrity: sha512-NBKJP3OIdmZY3COJdWkSonr50FMVIi+aj5ZJ7hI/DTpEKg2RMfo/KvP8A3B/zOSpMgIe52B5E2yn7rryULzA6g==} - dev: true + '@tanstack/virtual-core@3.13.0': {} - /@tokenizer/token@0.3.0: - resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} - dev: true + '@tokenizer/token@0.3.0': {} - /@tootallnate/once@2.0.0: - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - dev: true + '@tootallnate/once@2.0.0': {} - /@trysound/sax@0.2.0: - resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} - engines: {node: '>=10.13.0'} - dev: true + '@trysound/sax@0.2.0': {} - /@types/acorn@4.0.6: - resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} + '@types/acorn@4.0.6': dependencies: '@types/estree': 1.0.6 - dev: true - /@types/babel__core@7.20.5: - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.26.8 - '@babel/types': 7.26.8 + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 - dev: true - /@types/babel__generator@7.6.8: - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.26.8 - dev: true + '@babel/types': 7.26.9 - /@types/babel__template@7.4.4: - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.26.8 - '@babel/types': 7.26.8 - dev: true + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 - /@types/babel__traverse@7.20.6: - resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.26.8 - dev: true + '@babel/types': 7.26.9 - /@types/body-parser@1.19.5: - resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 18.19.75 - dev: true + '@types/node': 18.19.76 - /@types/chrome@0.0.279: - resolution: {integrity: sha512-wl0IxQ2OQiMazPZM5LimHQ7Jwd72/O8UvvzyptplXT2S4eUqXH5C0n8S+v8PtKhyX89p0igCPpNy3Bwksyk57g==} + '@types/chrome@0.0.279': dependencies: '@types/filesystem': 0.0.36 '@types/har-format': 1.2.16 - dev: true - /@types/compression@1.7.5: - resolution: {integrity: sha512-AAQvK5pxMpaT+nDvhHrsBhLSYG5yQdtkaJE1WYieSNY2mVFKAgmU4ks65rkZD5oqnGCFLyQpUr1CqI4DmUMyDg==} + '@types/clean-css@4.2.11': + dependencies: + '@types/node': 18.19.76 + source-map: 0.6.1 + + '@types/compression@1.7.5': dependencies: '@types/express': 5.0.0 - dev: true - /@types/connect@3.4.38: - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + '@types/connect@3.4.38': dependencies: - '@types/node': 18.19.75 - dev: true + '@types/node': 18.19.76 - /@types/css-font-loading-module@0.0.12: - resolution: {integrity: sha512-x2tZZYkSxXqWvTDgveSynfjq/T2HyiZHXb00j/+gy19yp70PHCizM48XFdjBCWH7eHBD0R5i/pw9yMBP/BH5uA==} - dev: true + '@types/css-font-loading-module@0.0.12': {} - /@types/debug@4.1.12: - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/debug@4.1.12': dependencies: '@types/ms': 2.1.0 - dev: true - /@types/earcut@2.1.4: - resolution: {integrity: sha512-qp3m9PPz4gULB9MhjGID7wpo3gJ4bTGXm7ltNDsmOvsPduTeHp8wSW9YckBj3mljeOh4F0m2z/0JKAALRKbmLQ==} - dev: true + '@types/earcut@2.1.4': {} - /@types/eslint-scope@3.7.7: - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + '@types/eslint-scope@3.7.7': dependencies: '@types/eslint': 9.6.1 '@types/estree': 1.0.6 - dev: true - /@types/eslint@9.6.1: - resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + '@types/eslint@9.6.1': dependencies: '@types/estree': 1.0.6 '@types/json-schema': 7.0.15 - dev: true - /@types/estree-jsx@1.0.5: - resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + '@types/estree-jsx@1.0.5': dependencies: '@types/estree': 1.0.6 - dev: true - /@types/estree@1.0.6: - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - dev: true + '@types/estree@1.0.6': {} - /@types/express-serve-static-core@5.0.6: - resolution: {integrity: sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==} + '@types/express-serve-static-core@5.0.6': dependencies: - '@types/node': 18.19.75 + '@types/node': 18.19.76 '@types/qs': 6.9.18 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 - dev: true - /@types/express@5.0.0: - resolution: {integrity: sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==} + '@types/express@5.0.0': dependencies: '@types/body-parser': 1.19.5 '@types/express-serve-static-core': 5.0.6 '@types/qs': 6.9.18 '@types/serve-static': 1.15.7 - dev: true - /@types/extend@3.0.4: - resolution: {integrity: sha512-ArMouDUTJEz1SQRpFsT2rIw7DeqICFv5aaVzLSIYMYQSLcwcGOfT3VyglQs/p7K3F7fT4zxr0NWxYZIdifD6dA==} - dev: true + '@types/extend@3.0.4': {} - /@types/filesystem@0.0.36: - resolution: {integrity: sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA==} + '@types/filesystem@0.0.36': dependencies: '@types/filewriter': 0.0.33 - dev: true - - /@types/filewriter@0.0.33: - resolution: {integrity: sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==} - dev: true - /@types/gensync@1.0.4: - resolution: {integrity: sha512-C3YYeRQWp2fmq9OryX+FoDy8nXS6scQ7dPptD8LnFDAUNcKWJjXQKDNJD3HVm+kOUsXhTOkpi69vI4EuAr95bA==} - dev: true + '@types/filewriter@0.0.33': {} - /@types/gradient-parser@0.1.5: - resolution: {integrity: sha512-r7K3NkJz3A95WkVVmjs0NcchhHstC2C/VIYNX4JC6tieviUNo774FFeOHjThr3Vw/WCeMP9kAT77MKbIRlO/4w==} - dev: true + '@types/gradient-parser@0.1.5': {} - /@types/har-format@1.2.16: - resolution: {integrity: sha512-fluxdy7ryD3MV6h8pTfTYpy/xQzCFC7m89nOH9y94cNqJ1mDIDPut7MnRHI3F6qRmh/cT2fUjG1MLdCNb4hE9A==} - dev: true + '@types/har-format@1.2.16': {} - /@types/hast@2.3.10: - resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} + '@types/hast@2.3.10': dependencies: '@types/unist': 2.0.11 - dev: true - /@types/hoist-non-react-statics@3.3.6: - resolution: {integrity: sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==} + '@types/hoist-non-react-statics@3.3.6': dependencies: '@types/react': 18.3.3 hoist-non-react-statics: 3.3.2 - dev: true - /@types/html-minifier-terser@7.0.0: - resolution: {integrity: sha512-hw3bhStrg5e3FQT8qZKCJTrzt/UbEaunU1xRWJ+aNOTmeBMvE3S4Ml2HiiNnZgL8izu0LFVkHUoPFXL1s5QNpQ==} - dev: true + '@types/html-minifier-terser@7.0.0': {} - /@types/http-errors@2.0.4: - resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - dev: true + '@types/http-errors@2.0.4': {} - /@types/http-proxy@1.17.16: - resolution: {integrity: sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==} + '@types/http-proxy@1.17.16': dependencies: - '@types/node': 18.19.75 - dev: true + '@types/node': 18.19.76 - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: true + '@types/json-schema@7.0.15': {} - /@types/loadable__component@5.13.9: - resolution: {integrity: sha512-QWOtIkwZqHNdQj3nixQ8oyihQiTMKZLk/DNuvNxMSbTfxf47w+kqcbnxlUeBgAxdOtW0Dh48dTAIp83iJKtnrQ==} + '@types/loadable__component@5.13.9': dependencies: '@types/react': 18.3.3 - dev: true - /@types/mdast@3.0.15: - resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} + '@types/mdast@3.0.15': dependencies: '@types/unist': 2.0.11 - dev: true - /@types/mdx@2.0.13: - resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} - dev: true + '@types/mdx@2.0.13': {} - /@types/mime@1.3.5: - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - dev: true + '@types/mime@1.3.5': {} - /@types/ms@2.1.0: - resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - dev: true + '@types/ms@2.1.0': {} - /@types/mute-stream@0.0.4: - resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} + '@types/mute-stream@0.0.4': dependencies: - '@types/node': 18.19.75 - dev: true + '@types/node': 18.19.76 - /@types/node-fetch@2.6.12: - resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} + '@types/node-fetch@2.6.12': dependencies: - '@types/node': 18.19.75 - form-data: 4.0.1 - dev: true + '@types/node': 18.19.76 + form-data: 4.0.2 - /@types/node@12.20.55: - resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - dev: true + '@types/node@12.20.55': {} - /@types/node@16.9.1: - resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==} - dev: true + '@types/node@16.9.1': {} - /@types/node@18.19.75: - resolution: {integrity: sha512-UIksWtThob6ZVSyxcOqCLOUNg/dyO1Qvx4McgeuhrEtHTLFTf7BBhEazaE4K806FGTPtzd/2sE90qn4fVr7cyw==} + '@types/node@18.19.76': dependencies: undici-types: 5.26.5 - dev: true - /@types/node@22.13.1: - resolution: {integrity: sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==} + '@types/node@22.13.4': dependencies: undici-types: 6.20.0 - dev: true - /@types/normalize-package-data@2.4.4: - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - dev: true + '@types/normalize-package-data@2.4.4': {} - /@types/parse-json@4.0.2: - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - dev: true + '@types/parse-json@4.0.2': {} - /@types/parse5@6.0.3: - resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} - dev: true + '@types/parse5@6.0.3': {} - /@types/polka@0.5.7: - resolution: {integrity: sha512-TH8CDXM8zoskPCNmWabtK7ziGv9Q21s4hMZLVYK5HFEfqmGXBqq/Wgi7jNELWXftZK/1J/9CezYa06x1RKeQ+g==} + '@types/polka@0.5.7': dependencies: '@types/express': 5.0.0 '@types/express-serve-static-core': 5.0.6 - '@types/node': 18.19.75 + '@types/node': 18.19.76 '@types/trouter': 3.1.4 - dev: true - /@types/prop-types@15.7.14: - resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} - dev: true + '@types/prop-types@15.7.14': {} - /@types/qs@6.9.18: - resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} - dev: true + '@types/qs@6.9.18': {} - /@types/range-parser@1.2.7: - resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - dev: true + '@types/range-parser@1.2.7': {} - /@types/react-dom@18.3.0: - resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} + '@types/react-dom@18.3.0': dependencies: '@types/react': 18.3.3 - dev: true - /@types/react-helmet@6.1.11: - resolution: {integrity: sha512-0QcdGLddTERotCXo3VFlUSWO3ztraw8nZ6e3zJSgG7apwV5xt+pJUS8ewPBqT4NYB1optGLprNQzFleIY84u/g==} + '@types/react-helmet@6.1.11': dependencies: '@types/react': 18.3.3 - dev: true - /@types/react@18.3.3: - resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} + '@types/react@18.3.3': dependencies: '@types/prop-types': 15.7.14 csstype: 3.1.3 - dev: true - /@types/send@0.17.4: - resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 18.19.75 - dev: true + '@types/node': 18.19.76 - /@types/serve-static@1.15.7: - resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} + '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 18.19.75 + '@types/node': 18.19.76 '@types/send': 0.17.4 - dev: true - /@types/styled-components@5.1.34: - resolution: {integrity: sha512-mmiVvwpYklFIv9E8qfxuPyIt/OuyIrn6gMOAMOFUO3WJfSrSE+sGUoa4PiZj77Ut7bKZpaa6o1fBKS/4TOEvnA==} + '@types/styled-components@5.1.34': dependencies: '@types/hoist-non-react-statics': 3.3.6 '@types/react': 18.3.3 csstype: 3.1.3 - dev: true - /@types/supports-color@8.1.3: - resolution: {integrity: sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==} - dev: true + '@types/supports-color@8.1.3': {} - /@types/trouter@3.1.4: - resolution: {integrity: sha512-4YIL/2AvvZqKBWenjvEpxpblT2KGO6793ipr5QS7/6DpQ3O3SwZGgNGWezxf3pzeYZc24a2pJIrR/+Jxh/wYNQ==} - dev: true + '@types/trouter@3.1.4': {} - /@types/unist@2.0.11: - resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} - dev: true + '@types/unist@2.0.11': {} - /@types/wrap-ansi@3.0.0: - resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} - dev: true + '@types/wrap-ansi@3.0.0': {} - /@vue/compiler-core@3.5.13: - resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} - requiresBuild: true + '@vue/compiler-core@3.5.13': dependencies: - '@babel/parser': 7.26.8 + '@babel/parser': 7.26.9 '@vue/shared': 3.5.13 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.1 - dev: true optional: true - /@vue/compiler-dom@3.5.13: - resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} - requiresBuild: true + '@vue/compiler-dom@3.5.13': dependencies: '@vue/compiler-core': 3.5.13 '@vue/shared': 3.5.13 - dev: true optional: true - /@vue/compiler-sfc@3.5.13: - resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} - requiresBuild: true + '@vue/compiler-sfc@3.5.13': dependencies: - '@babel/parser': 7.26.8 + '@babel/parser': 7.26.9 '@vue/compiler-core': 3.5.13 '@vue/compiler-dom': 3.5.13 '@vue/compiler-ssr': 3.5.13 @@ -6184,82 +11132,54 @@ packages: magic-string: 0.30.17 postcss: 8.5.2 source-map-js: 1.2.1 - dev: true optional: true - /@vue/compiler-ssr@3.5.13: - resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} - requiresBuild: true + '@vue/compiler-ssr@3.5.13': dependencies: '@vue/compiler-dom': 3.5.13 '@vue/shared': 3.5.13 - dev: true optional: true - /@vue/shared@3.5.13: - resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} - requiresBuild: true - dev: true + '@vue/shared@3.5.13': optional: true - /@webassemblyjs/ast@1.14.1: - resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} + '@webassemblyjs/ast@1.14.1': dependencies: '@webassemblyjs/helper-numbers': 1.13.2 '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - dev: true - /@webassemblyjs/floating-point-hex-parser@1.13.2: - resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} - dev: true + '@webassemblyjs/floating-point-hex-parser@1.13.2': {} - /@webassemblyjs/helper-api-error@1.13.2: - resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} - dev: true + '@webassemblyjs/helper-api-error@1.13.2': {} - /@webassemblyjs/helper-buffer@1.14.1: - resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} - dev: true + '@webassemblyjs/helper-buffer@1.14.1': {} - /@webassemblyjs/helper-numbers@1.13.2: - resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} + '@webassemblyjs/helper-numbers@1.13.2': dependencies: '@webassemblyjs/floating-point-hex-parser': 1.13.2 '@webassemblyjs/helper-api-error': 1.13.2 '@xtuc/long': 4.2.2 - dev: true - /@webassemblyjs/helper-wasm-bytecode@1.13.2: - resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} - dev: true + '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} - /@webassemblyjs/helper-wasm-section@1.14.1: - resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} + '@webassemblyjs/helper-wasm-section@1.14.1': dependencies: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/helper-buffer': 1.14.1 '@webassemblyjs/helper-wasm-bytecode': 1.13.2 '@webassemblyjs/wasm-gen': 1.14.1 - dev: true - /@webassemblyjs/ieee754@1.13.2: - resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} + '@webassemblyjs/ieee754@1.13.2': dependencies: '@xtuc/ieee754': 1.2.0 - dev: true - /@webassemblyjs/leb128@1.13.2: - resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} + '@webassemblyjs/leb128@1.13.2': dependencies: '@xtuc/long': 4.2.2 - dev: true - /@webassemblyjs/utf8@1.13.2: - resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} - dev: true + '@webassemblyjs/utf8@1.13.2': {} - /@webassemblyjs/wasm-edit@1.14.1: - resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} + '@webassemblyjs/wasm-edit@1.14.1': dependencies: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/helper-buffer': 1.14.1 @@ -6269,29 +11189,23 @@ packages: '@webassemblyjs/wasm-opt': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 '@webassemblyjs/wast-printer': 1.14.1 - dev: true - /@webassemblyjs/wasm-gen@1.14.1: - resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} + '@webassemblyjs/wasm-gen@1.14.1': dependencies: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/helper-wasm-bytecode': 1.13.2 '@webassemblyjs/ieee754': 1.13.2 '@webassemblyjs/leb128': 1.13.2 '@webassemblyjs/utf8': 1.13.2 - dev: true - /@webassemblyjs/wasm-opt@1.14.1: - resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} + '@webassemblyjs/wasm-opt@1.14.1': dependencies: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/helper-buffer': 1.14.1 '@webassemblyjs/wasm-gen': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - dev: true - /@webassemblyjs/wasm-parser@1.14.1: - resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} + '@webassemblyjs/wasm-parser@1.14.1': dependencies: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/helper-api-error': 1.13.2 @@ -6299,269 +11213,169 @@ packages: '@webassemblyjs/ieee754': 1.13.2 '@webassemblyjs/leb128': 1.13.2 '@webassemblyjs/utf8': 1.13.2 - dev: true - /@webassemblyjs/wast-printer@1.14.1: - resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + '@webassemblyjs/wast-printer@1.14.1': dependencies: '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 - dev: true - /@webgpu/types@0.1.54: - resolution: {integrity: sha512-81oaalC8LFrXjhsczomEQ0u3jG+TqE6V9QHLA8GNZq/Rnot0KDugu3LhSYSlie8tSdooAN1Hov05asrUUp9qgg==} - dev: true + '@webgpu/types@0.1.53': {} - /@xmldom/xmldom@0.8.10: - resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} - engines: {node: '>=10.0.0'} - dev: true + '@xmldom/xmldom@0.8.10': {} - /@xtuc/ieee754@1.2.0: - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - dev: true + '@xtuc/ieee754@1.2.0': {} - /@xtuc/long@4.2.2: - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - dev: true + '@xtuc/long@4.2.2': {} - /abab@2.0.6: - resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} - deprecated: Use your platform's native atob() and btoa() methods instead - dev: true + abab@2.0.6: {} - /abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} + abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 - dev: true - /accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} + accepts@1.3.8: dependencies: mime-types: 2.1.35 negotiator: 0.6.3 - dev: true - /acorn-globals@7.0.1: - resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} + acorn-globals@7.0.1: dependencies: acorn: 8.14.0 acorn-walk: 8.3.4 - dev: true - /acorn-jsx@5.3.2(acorn@8.14.0): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: acorn: 8.14.0 - dev: true - /acorn-node@1.8.2: - resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} + acorn-node@1.8.2: dependencies: acorn: 7.4.1 acorn-walk: 7.2.0 xtend: 4.0.2 - dev: true - /acorn-walk@7.2.0: - resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} - engines: {node: '>=0.4.0'} - dev: true + acorn-walk@7.2.0: {} - /acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} - engines: {node: '>=0.4.0'} + acorn-walk@8.3.4: dependencies: acorn: 8.14.0 - dev: true - /acorn@7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true + acorn@7.4.1: {} - /acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true + acorn@8.14.0: {} - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} + agent-base@6.0.2: dependencies: debug: 4.4.0(supports-color@5.5.0) transitivePeerDependencies: - supports-color - dev: true - /agent-base@7.1.3: - resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} - engines: {node: '>= 14'} - dev: true + agent-base@7.1.3: {} - /agentkeepalive@4.6.0: - resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} - engines: {node: '>= 8.0.0'} + agentkeepalive@4.6.0: dependencies: humanize-ms: 1.2.1 - dev: true - /aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} + aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 - dev: true - /ajv-formats@2.1.1(ajv@8.17.1): - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - dependencies: + ajv-formats@2.1.1(ajv@8.17.1): + optionalDependencies: ajv: 8.17.1 - dev: true - /ajv-keywords@3.5.2(ajv@6.12.6): - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 + ajv-keywords@3.5.2(ajv@6.12.6): dependencies: ajv: 6.12.6 - dev: true - /ajv-keywords@5.1.0(ajv@8.17.1): - resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} - peerDependencies: - ajv: ^8.8.2 + ajv-keywords@5.1.0(ajv@8.17.1): dependencies: ajv: 8.17.1 fast-deep-equal: 3.1.3 - dev: true - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - dev: true - /ajv@8.17.1: - resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 fast-uri: 3.0.6 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - dev: true - /ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} - dev: true + ansi-colors@4.1.3: {} - /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} + ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 - dev: true - /ansi-html-community@0.0.8: - resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} - engines: {'0': node >= 0.8.0} - hasBin: true - dev: true + ansi-html-community@0.0.8: {} - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true + ansi-regex@5.0.1: {} - /ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} - engines: {node: '>=12'} - dev: true + ansi-regex@6.1.0: {} - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 - dev: true - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - dev: true - /antd@5.21.6(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-EviOde/VEu+OsIKH5t6YXTMmmNeg9R85m0W5zXAo+Np8Latg9q10691JvAqOTMpnrRmbdeKUQL1Krp69Bzbe/g==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + antd@5.21.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@ant-design/colors': 7.2.0 - '@ant-design/cssinjs': 1.23.0(react-dom@18.3.1)(react@18.3.1) - '@ant-design/cssinjs-utils': 1.1.3(react-dom@18.3.1)(react@18.3.1) - '@ant-design/icons': 5.6.1(react-dom@18.3.1)(react@18.3.1) + '@ant-design/cssinjs': 1.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@ant-design/cssinjs-utils': 1.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@ant-design/icons': 5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@ant-design/react-slick': 1.1.2(react@18.3.1) - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 '@ctrl/tinycolor': 3.6.1 - '@rc-component/color-picker': 2.0.1(react-dom@18.3.1)(react@18.3.1) - '@rc-component/mutate-observer': 1.1.0(react-dom@18.3.1)(react@18.3.1) - '@rc-component/qrcode': 1.0.0(react-dom@18.3.1)(react@18.3.1) - '@rc-component/tour': 1.15.1(react-dom@18.3.1)(react@18.3.1) - '@rc-component/trigger': 2.2.6(react-dom@18.3.1)(react@18.3.1) + '@rc-component/color-picker': 2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/mutate-observer': 1.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/qrcode': 1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/tour': 1.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/trigger': 2.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) classnames: 2.5.1 copy-to-clipboard: 3.3.3 dayjs: 1.11.11 - rc-cascader: 3.28.2(react-dom@18.3.1)(react@18.3.1) - rc-checkbox: 3.3.0(react-dom@18.3.1)(react@18.3.1) - rc-collapse: 3.8.0(react-dom@18.3.1)(react@18.3.1) - rc-dialog: 9.6.0(react-dom@18.3.1)(react@18.3.1) - rc-drawer: 7.2.0(react-dom@18.3.1)(react@18.3.1) - rc-dropdown: 4.2.1(react-dom@18.3.1)(react@18.3.1) - rc-field-form: 2.4.0(react-dom@18.3.1)(react@18.3.1) - rc-image: 7.11.0(react-dom@18.3.1)(react@18.3.1) - rc-input: 1.6.4(react-dom@18.3.1)(react@18.3.1) - rc-input-number: 9.2.0(react-dom@18.3.1)(react@18.3.1) - rc-mentions: 2.16.1(react-dom@18.3.1)(react@18.3.1) - rc-menu: 9.15.1(react-dom@18.3.1)(react@18.3.1) - rc-motion: 2.9.5(react-dom@18.3.1)(react@18.3.1) - rc-notification: 5.6.3(react-dom@18.3.1)(react@18.3.1) - rc-pagination: 4.3.0(react-dom@18.3.1)(react@18.3.1) - rc-picker: 4.6.15(dayjs@1.11.11)(react-dom@18.3.1)(react@18.3.1) - rc-progress: 4.0.0(react-dom@18.3.1)(react@18.3.1) - rc-rate: 2.13.1(react-dom@18.3.1)(react@18.3.1) - rc-resize-observer: 1.4.3(react-dom@18.3.1)(react@18.3.1) - rc-segmented: 2.5.0(react-dom@18.3.1)(react@18.3.1) - rc-select: 14.15.2(react-dom@18.3.1)(react@18.3.1) - rc-slider: 11.1.8(react-dom@18.3.1)(react@18.3.1) - rc-steps: 6.0.1(react-dom@18.3.1)(react@18.3.1) - rc-switch: 4.1.0(react-dom@18.3.1)(react@18.3.1) - rc-table: 7.47.5(react-dom@18.3.1)(react@18.3.1) - rc-tabs: 15.3.0(react-dom@18.3.1)(react@18.3.1) - rc-textarea: 1.8.2(react-dom@18.3.1)(react@18.3.1) - rc-tooltip: 6.2.1(react-dom@18.3.1)(react@18.3.1) - rc-tree: 5.9.0(react-dom@18.3.1)(react@18.3.1) - rc-tree-select: 5.23.0(react-dom@18.3.1)(react@18.3.1) - rc-upload: 4.8.1(react-dom@18.3.1)(react@18.3.1) - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-cascader: 3.28.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-checkbox: 3.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-collapse: 3.8.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-dialog: 9.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-drawer: 7.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-dropdown: 4.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-field-form: 2.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-image: 7.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-input: 1.6.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-input-number: 9.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-mentions: 2.16.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-menu: 9.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-notification: 5.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-pagination: 4.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-picker: 4.6.15(dayjs@1.11.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-progress: 4.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-rate: 2.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-resize-observer: 1.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-segmented: 2.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-select: 14.15.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-slider: 11.1.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-steps: 6.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-switch: 4.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-table: 7.47.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-tabs: 15.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-textarea: 1.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-tooltip: 6.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-tree: 5.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-tree-select: 5.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-upload: 4.8.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) scroll-into-view-if-needed: 3.1.0 @@ -6570,256 +11384,157 @@ packages: - date-fns - luxon - moment - dev: true - /any-base@1.1.0: - resolution: {integrity: sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==} - dev: true + any-base@1.1.0: {} - /any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: true + any-promise@1.3.0: {} - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: true - /arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - dev: true + arg@5.0.2: {} - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 - dev: true - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true + argparse@2.0.1: {} - /arr-union@3.1.0: - resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} - engines: {node: '>=0.10.0'} - dev: true + arr-union@3.1.0: {} - /array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - dev: true + array-flatten@1.1.1: {} - /array-tree-filter@2.1.0: - resolution: {integrity: sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==} - dev: true + array-tree-filter@2.1.0: {} - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - dev: true + array-union@2.1.0: {} - /asn1.js@4.10.1: - resolution: {integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==} + asn1.js@4.10.1: dependencies: bn.js: 4.12.1 inherits: 2.0.4 minimalistic-assert: 1.0.1 - dev: true - /assert@2.0.0: - resolution: {integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==} + assert@2.0.0: dependencies: es6-object-assign: 1.1.0 is-nan: 1.3.2 object-is: 1.1.6 util: 0.12.5 - dev: true - /astring@1.9.0: - resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} - hasBin: true - dev: true + astring@1.9.0: {} - /async@2.6.4: - resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} + async@2.6.4: dependencies: lodash: 4.17.21 - dev: true - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: true + asynckit@0.4.0: {} - /autoprefixer@10.4.13(postcss@8.4.27): - resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 + autoprefixer@10.4.13(postcss@8.4.27): dependencies: browserslist: 4.24.4 - caniuse-lite: 1.0.30001699 + caniuse-lite: 1.0.30001700 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 postcss: 8.4.27 postcss-value-parser: 4.2.0 - dev: true - /available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.1.0 - dev: true - /axios@1.7.9: - resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} + axios@1.7.9: dependencies: follow-redirects: 1.15.9 - form-data: 4.0.1 + form-data: 4.0.2 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - dev: true - /babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.26.8): - resolution: {integrity: sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.26.9): dependencies: '@babel/compat-data': 7.26.8 - '@babel/core': 7.26.8 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.8) + '@babel/core': 7.26.9 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.9) semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.26.8): - resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.26.9): dependencies: - '@babel/core': 7.26.8 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.8) + '@babel/core': 7.26.9 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.9) core-js-compat: 3.40.0 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.26.8): - resolution: {integrity: sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.26.9): dependencies: - '@babel/core': 7.26.8 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.8) + '@babel/core': 7.26.9 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.9) core-js-compat: 3.40.0 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.26.8): - resolution: {integrity: sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.26.9): dependencies: - '@babel/core': 7.26.8 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.8) + '@babel/core': 7.26.9 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.9) transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-styled-components@2.1.4(@babel/core@7.26.8)(styled-components@5.3.11)(supports-color@5.5.0): - resolution: {integrity: sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==} - peerDependencies: - styled-components: '>= 2' + babel-plugin-styled-components@2.1.4(@babel/core@7.26.9)(styled-components@5.3.11(@babel/core@7.26.9)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(supports-color@5.5.0): dependencies: '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.8) + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.9) lodash: 4.17.21 picomatch: 2.3.1 - styled-components: 5.3.11(@babel/core@7.26.8)(react-dom@18.3.1)(react-is@18.3.1)(react@18.3.1) + styled-components: 5.3.11(@babel/core@7.26.9)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1) transitivePeerDependencies: - '@babel/core' - supports-color - dev: true - /babel-plugin-transform-typescript-metadata@0.3.2(@babel/core@7.26.8): - resolution: {integrity: sha512-mWEvCQTgXQf48yDqgN7CH50waTyYBeP2Lpqx4nNWab9sxEpdXVeKgfj1qYI2/TgUPQtNFZ85i3PemRtnXVYYJg==} - peerDependencies: - '@babel/core': ^7 - '@babel/traverse': ^7 - peerDependenciesMeta: - '@babel/traverse': - optional: true + babel-plugin-transform-typescript-metadata@0.3.2(@babel/core@7.26.9)(@babel/traverse@7.26.9): dependencies: - '@babel/core': 7.26.8 + '@babel/core': 7.26.9 '@babel/helper-plugin-utils': 7.26.5 - dev: true + optionalDependencies: + '@babel/traverse': 7.26.9(supports-color@5.5.0) - /bail@2.0.2: - resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - dev: true + bail@2.0.2: {} - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true + balanced-match@1.0.2: {} - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true + base64-js@1.5.1: {} - /basic-auth@2.0.1: - resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} - engines: {node: '>= 0.8'} + basic-auth@2.0.1: dependencies: safe-buffer: 5.1.2 - dev: true - /better-path-resolve@1.0.0: - resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} - engines: {node: '>=4'} + better-path-resolve@1.0.0: dependencies: is-windows: 1.0.2 - dev: true - /big.js@5.2.2: - resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} - dev: true + big.js@5.2.2: {} - /binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - dev: true + binary-extensions@2.3.0: {} - /bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + bl@4.1.0: dependencies: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 - dev: true - - /bmp-js@0.1.0: - resolution: {integrity: sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==} - dev: true - /bn.js@4.12.1: - resolution: {integrity: sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==} - dev: true + bmp-js@0.1.0: {} - /bn.js@5.2.1: - resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} - dev: true + bn.js@4.12.1: {} - /body-parser@1.20.3: - resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + bn.js@5.2.1: {} + + body-parser@1.20.3: dependencies: bytes: 3.1.2 content-type: 1.0.5 @@ -6835,42 +11550,27 @@ packages: unpipe: 1.0.0 transitivePeerDependencies: - supports-color - dev: true - /body-scroll-lock@4.0.0-beta.0: - resolution: {integrity: sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ==} - dev: true + body-scroll-lock@4.0.0-beta.0: {} - /boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - dev: true + boolbase@1.0.0: {} - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.1: dependencies: balanced-match: 1.0.2 - dev: true - /braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} + braces@3.0.3: dependencies: fill-range: 7.1.1 - dev: true - /brorand@1.1.0: - resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} - dev: true + brorand@1.1.0: {} - /browserify-aes@1.2.0: - resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + browserify-aes@1.2.0: dependencies: buffer-xor: 1.0.3 cipher-base: 1.0.6 @@ -6878,37 +11578,27 @@ packages: evp_bytestokey: 1.0.3 inherits: 2.0.4 safe-buffer: 5.2.1 - dev: true - /browserify-cipher@1.0.1: - resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} + browserify-cipher@1.0.1: dependencies: browserify-aes: 1.2.0 browserify-des: 1.0.2 evp_bytestokey: 1.0.3 - dev: true - /browserify-des@1.0.2: - resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} + browserify-des@1.0.2: dependencies: cipher-base: 1.0.6 des.js: 1.1.0 inherits: 2.0.4 safe-buffer: 5.2.1 - dev: true - /browserify-rsa@4.1.1: - resolution: {integrity: sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==} - engines: {node: '>= 0.10'} + browserify-rsa@4.1.1: dependencies: bn.js: 5.2.1 randombytes: 2.1.0 safe-buffer: 5.2.1 - dev: true - /browserify-sign@4.2.3: - resolution: {integrity: sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==} - engines: {node: '>= 0.12'} + browserify-sign@4.2.3: dependencies: bn.js: 5.2.1 browserify-rsa: 4.1.1 @@ -6920,199 +11610,117 @@ packages: parse-asn1: 5.1.7 readable-stream: 2.3.8 safe-buffer: 5.2.1 - dev: true - /browserify-zlib@0.2.0: - resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} + browserify-zlib@0.2.0: dependencies: pako: 1.0.11 - dev: true - /browserslist@4.24.4: - resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + browserslist@4.24.4: dependencies: - caniuse-lite: 1.0.30001699 - electron-to-chromium: 1.5.97 + caniuse-lite: 1.0.30001700 + electron-to-chromium: 1.5.102 node-releases: 2.0.19 update-browserslist-db: 1.1.2(browserslist@4.24.4) - dev: true - /buffer-equal-constant-time@1.0.1: - resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} - dev: true + buffer-equal-constant-time@1.0.1: {} - /buffer-equal@0.0.1: - resolution: {integrity: sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==} - engines: {node: '>=0.4.0'} - dev: true + buffer-equal@0.0.1: {} - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true + buffer-from@1.1.2: {} - /buffer-xor@1.0.3: - resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} - dev: true + buffer-xor@1.0.3: {} - /buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + buffer@5.7.1: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: true - /buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + buffer@6.0.3: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: true - /builtin-status-codes@3.0.0: - resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} - dev: true + builtin-status-codes@3.0.0: {} - /bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - dev: true + bytes@3.1.2: {} - /call-bind-apply-helpers@1.0.1: - resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} - engines: {node: '>= 0.4'} + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 - dev: true - /call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} - engines: {node: '>= 0.4'} + call-bind@1.0.8: dependencies: - call-bind-apply-helpers: 1.0.1 + call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 get-intrinsic: 1.2.7 set-function-length: 1.2.2 - dev: true - /call-bound@1.0.3: - resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} - engines: {node: '>= 0.4'} + call-bound@1.0.3: dependencies: - call-bind-apply-helpers: 1.0.1 + call-bind-apply-helpers: 1.0.2 get-intrinsic: 1.2.7 - dev: true - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true + callsites@3.1.0: {} - /camel-case@4.1.2: - resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + camel-case@4.1.2: dependencies: pascal-case: 3.1.2 tslib: 2.8.1 - dev: true - /camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - dev: true + camelcase-css@2.0.1: {} - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - dev: true + camelcase@6.3.0: {} - /camelize@1.0.1: - resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} - dev: true + camelize@1.0.1: {} - /caniuse-api@3.0.0: - resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + caniuse-api@3.0.0: dependencies: browserslist: 4.24.4 - caniuse-lite: 1.0.30001699 + caniuse-lite: 1.0.30001700 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - dev: true - /caniuse-lite@1.0.30001699: - resolution: {integrity: sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w==} - dev: true + caniuse-lite@1.0.30001700: {} - /ccount@2.0.1: - resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - dev: true + ccount@2.0.1: {} - /centra@2.7.0: - resolution: {integrity: sha512-PbFMgMSrmgx6uxCdm57RUos9Tc3fclMvhLSATYN39XsDV29B89zZ3KA89jmY0vwSGazyU+uerqwa6t+KaodPcg==} + centra@2.7.0: dependencies: follow-redirects: 1.15.9 transitivePeerDependencies: - debug - dev: true - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 - dev: true - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true - /chalk@5.4.1: - resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true + chalk@5.4.1: {} - /character-entities-html4@2.1.0: - resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} - dev: true + character-entities-html4@2.1.0: {} - /character-entities-legacy@1.1.4: - resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} - dev: true + character-entities-legacy@1.1.4: {} - /character-entities-legacy@3.0.0: - resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} - dev: true + character-entities-legacy@3.0.0: {} - /character-entities@1.2.4: - resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} - dev: true + character-entities@1.2.4: {} - /character-entities@2.0.2: - resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - dev: true + character-entities@2.0.2: {} - /character-reference-invalid@1.1.4: - resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} - dev: true + character-reference-invalid@1.1.4: {} - /character-reference-invalid@2.0.1: - resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - dev: true + character-reference-invalid@2.0.1: {} - /chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: true + chardet@0.7.0: {} - /chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 braces: 3.0.3 @@ -7123,183 +11731,103 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 - dev: true - /chrome-trace-event@1.0.4: - resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} - engines: {node: '>=6.0'} - dev: true + chrome-trace-event@1.0.4: {} - /ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - dev: true + ci-info@3.9.0: {} - /cipher-base@1.0.6: - resolution: {integrity: sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==} - engines: {node: '>= 0.10'} + cipher-base@1.0.6: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 - dev: true - /classnames@2.5.1: - resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} - dev: true + classnames@2.5.1: {} - /clean-css@5.2.0: - resolution: {integrity: sha512-2639sWGa43EMmG7fn8mdVuBSs6HuWaSor+ZPoFWzenBc6oN+td8YhTfghWXZ25G1NiiSvz8bOFBS7PdSbTiqEA==} - engines: {node: '>= 10.0'} + clean-css@5.2.0: dependencies: source-map: 0.6.1 - dev: true - /clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - dev: true + clean-css@5.3.3: + dependencies: + source-map: 0.6.1 - /cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} + clean-stack@2.2.0: {} + + cli-cursor@3.1.0: dependencies: restore-cursor: 3.1.0 - dev: true - /cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - dev: true + cli-spinners@2.9.2: {} - /cli-width@4.1.0: - resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} - engines: {node: '>= 12'} - dev: true + cli-width@4.1.0: {} - /client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - dev: true + client-only@0.0.1: {} - /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true - /clone-deep@0.2.4: - resolution: {integrity: sha512-we+NuQo2DHhSl+DP6jlUiAhyAjBQrYnpOk15rN6c6JSPScjiCLh8IbSU+VTcph6YS3o7mASE8a0+gbZ7ChLpgg==} - engines: {node: '>=0.10.0'} + clone-deep@0.2.4: dependencies: for-own: 0.1.5 is-plain-object: 2.0.4 kind-of: 3.2.2 lazy-cache: 1.0.4 shallow-clone: 0.1.2 - dev: true - /clone-deep@4.0.1: - resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} - engines: {node: '>=6'} + clone-deep@4.0.1: dependencies: is-plain-object: 2.0.4 kind-of: 6.0.3 shallow-clone: 3.0.1 - dev: true - /clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - dev: true + clone@1.0.4: {} - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@1.9.3: dependencies: color-name: 1.1.3 - dev: true - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - dev: true - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true + color-name@1.1.3: {} - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true + color-name@1.1.4: {} - /colord@2.9.3: - resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} - dev: true + colord@2.9.3: {} - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 - dev: true - /comma-separated-tokens@1.0.8: - resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} - dev: true + comma-separated-tokens@1.0.8: {} - /comma-separated-tokens@2.0.3: - resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - dev: true + comma-separated-tokens@2.0.3: {} - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: true + commander@2.20.3: {} - /commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - dev: true + commander@4.1.1: {} - /commander@6.2.1: - resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} - engines: {node: '>= 6'} - dev: true + commander@6.2.1: {} - /commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} - dev: true + commander@7.2.0: {} - /commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} - dev: true + commander@9.5.0: {} - /common-path-prefix@3.0.0: - resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} - dev: true + common-path-prefix@3.0.0: {} - /commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - dev: true + commondir@1.0.1: {} - /compare-versions@6.0.0-rc.1: - resolution: {integrity: sha512-cFhkjbGY1jLFWIV7KegECbfuyYPxSGvgGkdkfM+ibboQDoPwg2FRHm5BSNTOApiauRBzJIQH7qvOJs2sW5ueKQ==} - dev: true + compare-versions@6.0.0-rc.1: {} - /compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} + compressible@2.0.18: dependencies: mime-db: 1.53.0 - dev: true - /compression@1.8.0: - resolution: {integrity: sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==} - engines: {node: '>= 0.8.0'} + compression@1.8.0: dependencies: bytes: 3.1.2 compressible: 2.0.18 @@ -7310,155 +11838,89 @@ packages: vary: 1.1.2 transitivePeerDependencies: - supports-color - dev: true - /compute-scroll-into-view@3.1.1: - resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==} - dev: true + compute-scroll-into-view@3.1.1: {} - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true + concat-map@0.0.1: {} - /connect-history-api-fallback@2.0.0: - resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} - engines: {node: '>=0.8'} - dev: true + connect-history-api-fallback@2.0.0: {} - /console-browserify@1.2.0: - resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} - dev: true + console-browserify@1.2.0: {} - /constants-browserify@1.0.0: - resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} - dev: true + constants-browserify@1.0.0: {} - /content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} + content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 - dev: true - /content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - dev: true + content-type@1.0.5: {} - /convert-source-map@1.8.0: - resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} + convert-source-map@1.8.0: dependencies: safe-buffer: 5.1.2 - dev: true - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: true + convert-source-map@2.0.0: {} - /cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - dev: true + cookie-signature@1.0.6: {} - /cookie@0.4.2: - resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} - engines: {node: '>= 0.6'} - dev: true + cookie@0.4.2: {} - /cookie@0.7.1: - resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} - engines: {node: '>= 0.6'} - dev: true + cookie@0.7.1: {} - /cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - dev: true + cookie@0.7.2: {} - /copy-to-clipboard@3.3.3: - resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} + copy-to-clipboard@3.3.3: dependencies: toggle-selection: 1.0.6 - dev: true - /core-js-compat@3.40.0: - resolution: {integrity: sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==} + core-js-compat@3.40.0: dependencies: browserslist: 4.24.4 - dev: true - /core-js-pure@3.40.0: - resolution: {integrity: sha512-AtDzVIgRrmRKQai62yuSIN5vNiQjcJakJb4fbhVw3ehxx7Lohphvw9SGNWKhLFqSxC4ilD0g/L1huAYFQU3Q6A==} - requiresBuild: true - dev: true + core-js-pure@3.40.0: {} - /core-js@3.30.2: - resolution: {integrity: sha512-uBJiDmwqsbJCWHAwjrx3cvjbMXP7xD72Dmsn5LOJpiRmE3WbBbN5rCqQ2Qh6Ek6/eOrjlWngEynBWo4VxerQhg==} - requiresBuild: true - dev: true + core-js@3.30.2: {} - /core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: true + core-util-is@1.0.3: {} - /cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} + cors@2.8.5: dependencies: object-assign: 4.1.1 vary: 1.1.2 - dev: true - /corser@2.0.1: - resolution: {integrity: sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==} - engines: {node: '>= 0.4.0'} - dev: true + corser@2.0.1: {} - /cosmiconfig@7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} - engines: {node: '>=10'} + cosmiconfig@7.1.0: dependencies: '@types/parse-json': 4.0.2 import-fresh: 3.3.1 parse-json: 5.2.0 path-type: 4.0.0 yaml: 1.10.2 - dev: true - /cosmiconfig@8.3.6(typescript@5.0.4): - resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true + cosmiconfig@8.3.6(typescript@5.0.4): dependencies: import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 + optionalDependencies: typescript: 5.0.4 - dev: true - /create-ecdh@4.0.4: - resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} + create-ecdh@4.0.4: dependencies: bn.js: 4.12.1 elliptic: 6.6.1 - dev: true - /create-hash@1.2.0: - resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + create-hash@1.2.0: dependencies: cipher-base: 1.0.6 inherits: 2.0.4 md5.js: 1.3.5 ripemd160: 2.0.2 sha.js: 2.4.11 - dev: true - /create-hmac@1.1.7: - resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + create-hmac@1.1.7: dependencies: cipher-base: 1.0.6 create-hash: 1.2.0 @@ -7466,28 +11928,20 @@ packages: ripemd160: 2.0.2 safe-buffer: 5.2.1 sha.js: 2.4.11 - dev: true - /cross-spawn@5.1.0: - resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} + cross-spawn@5.1.0: dependencies: lru-cache: 4.1.5 shebang-command: 1.2.0 which: 1.3.1 - dev: true - /cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - dev: true - /crypto-browserify@3.12.1: - resolution: {integrity: sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==} - engines: {node: '>= 0.10'} + crypto-browserify@3.12.1: dependencies: browserify-cipher: 1.0.1 browserify-sign: 4.2.3 @@ -7501,72 +11955,42 @@ packages: public-encrypt: 4.0.3 randombytes: 2.1.0 randomfill: 1.0.4 - dev: true - /css-color-keywords@1.0.0: - resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} - engines: {node: '>=4'} - dev: true + css-color-keywords@1.0.0: {} - /css-declaration-sorter@7.2.0(postcss@8.4.27): - resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.0.9 + css-declaration-sorter@7.2.0(postcss@8.4.27): dependencies: postcss: 8.4.27 - dev: true - /css-select@5.1.0: - resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + css-select@5.1.0: dependencies: boolbase: 1.0.0 css-what: 6.1.0 domhandler: 5.0.3 domutils: 3.2.2 nth-check: 2.1.1 - dev: true - /css-to-react-native@3.2.0: - resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} + css-to-react-native@3.2.0: dependencies: camelize: 1.0.1 css-color-keywords: 1.0.0 postcss-value-parser: 4.2.0 - dev: true - /css-tree@2.2.1: - resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + css-tree@2.2.1: dependencies: mdn-data: 2.0.28 source-map-js: 1.2.1 - dev: true - /css-tree@2.3.1: - resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + css-tree@2.3.1: dependencies: mdn-data: 2.0.30 source-map-js: 1.2.1 - dev: true - /css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} - engines: {node: '>= 6'} - dev: true + css-what@6.1.0: {} - /cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - dev: true + cssesc@3.0.0: {} - /cssnano-preset-default@6.1.2(postcss@8.4.27): - resolution: {integrity: sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + cssnano-preset-default@6.1.2(postcss@8.4.27): dependencies: browserslist: 4.24.4 css-declaration-sorter: 7.2.0(postcss@8.4.27) @@ -7599,262 +12023,142 @@ packages: postcss-reduce-transforms: 6.0.2(postcss@8.4.27) postcss-svgo: 6.0.3(postcss@8.4.27) postcss-unique-selectors: 6.0.4(postcss@8.4.27) - dev: true - /cssnano-utils@4.0.2(postcss@8.4.27): - resolution: {integrity: sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + cssnano-utils@4.0.2(postcss@8.4.27): dependencies: postcss: 8.4.27 - dev: true - /cssnano@6.0.1(postcss@8.4.27): - resolution: {integrity: sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.2.15 + cssnano@6.0.1(postcss@8.4.27): dependencies: cssnano-preset-default: 6.1.2(postcss@8.4.27) lilconfig: 2.1.0 postcss: 8.4.27 - dev: true - /csso@5.0.5: - resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + csso@5.0.5: dependencies: css-tree: 2.2.1 - dev: true - /cssom@0.3.8: - resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} - dev: true + cssom@0.3.8: {} - /cssom@0.5.0: - resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} - dev: true + cssom@0.5.0: {} - /cssstyle@2.3.0: - resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} - engines: {node: '>=8'} + cssstyle@2.3.0: dependencies: cssom: 0.3.8 - dev: true - /csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - dev: true + csstype@3.1.3: {} - /data-uri-to-buffer@4.0.1: - resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} - engines: {node: '>= 12'} - dev: true + data-uri-to-buffer@4.0.1: {} - /data-urls@3.0.2: - resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} - engines: {node: '>=12'} + data-urls@3.0.2: dependencies: abab: 2.0.6 whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 - dev: true - /dayjs@1.11.11: - resolution: {integrity: sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==} - dev: true + dayjs@1.11.11: {} - /de-indent@1.0.2: - resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} - requiresBuild: true - dev: true + de-indent@1.0.2: optional: true - /debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@2.6.9: dependencies: ms: 2.0.0 - dev: true - /debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@3.2.7: dependencies: ms: 2.1.3 - dev: true - /debug@4.4.0(supports-color@5.5.0): - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.4.0(supports-color@5.5.0): dependencies: ms: 2.1.3 + optionalDependencies: supports-color: 5.5.0 - dev: true - /decimal.js@10.5.0: - resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==} - dev: true + decimal.js@10.5.0: {} - /decode-named-character-reference@1.0.2: - resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + decode-named-character-reference@1.0.2: dependencies: character-entities: 2.0.2 - dev: true - /decode-uri-component@0.4.1: - resolution: {integrity: sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==} - engines: {node: '>=14.16'} - dev: true + decode-uri-component@0.4.1: {} - /deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - dev: true + deepmerge@4.3.1: {} - /defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + defaults@1.0.4: dependencies: clone: 1.0.4 - dev: true - /define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} + define-data-property@1.1.4: dependencies: es-define-property: 1.0.1 es-errors: 1.3.0 gopd: 1.2.0 - dev: true - /define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - dev: true + define-lazy-prop@2.0.0: {} - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + define-properties@1.2.1: dependencies: define-data-property: 1.1.4 has-property-descriptors: 1.0.2 object-keys: 1.1.1 - dev: true - /defined@1.0.1: - resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} - dev: true + defined@1.0.1: {} - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: true + delayed-stream@1.0.0: {} - /depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - dev: true + depd@2.0.0: {} - /dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - dev: true + dequal@2.0.3: {} - /des.js@1.1.0: - resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} + des.js@1.1.0: dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 - dev: true - /destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dev: true + destroy@1.2.0: {} - /detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} - dev: true + detect-indent@6.1.0: {} - /detective@5.2.1: - resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} - engines: {node: '>=0.8.0'} - hasBin: true + detective@5.2.1: dependencies: acorn-node: 1.8.2 defined: 1.0.1 minimist: 1.2.8 - dev: true - /didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - dev: true - - /diff@5.2.0: - resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} - engines: {node: '>=0.3.1'} - dev: true + didyoumean@1.2.2: {} - /diffie-hellman@5.0.3: - resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} + diff@5.2.0: {} + + diffie-hellman@5.0.3: dependencies: bn.js: 4.12.1 miller-rabin: 4.0.1 randombytes: 2.1.0 - dev: true - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 - dev: true - /dirty-json@0.9.2: - resolution: {integrity: sha512-7SCDfnQtBObcngVXNPZcnxGxqqPTK4UqeXeKAch+RGH5qpqadWbV9FmN71x9Bb4tTs0TNFb4FT/4Kz4P4Cjqcw==} - engines: {node: '>=6.0.0'} + dirty-json@0.9.2: dependencies: lex: 1.7.9 unescape-js: 1.1.4 utf8: 3.0.0 - dev: true - /dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dev: true + dlv@1.1.3: {} - /doctrine-temporary-fork@2.1.0: - resolution: {integrity: sha512-nliqOv5NkE4zMON4UA6AMJE6As35afs8aYXATpU4pTUdIKiARZwrJVEP1boA3Rx1ZXHVkwxkhcq4VkqvsuRLsA==} - engines: {node: '>=0.10.0'} + doctrine-temporary-fork@2.1.0: dependencies: esutils: 2.0.3 - dev: true - /documentation@14.0.3: - resolution: {integrity: sha512-B7cAviVKN9Rw7Ofd+9grhVuxiHwly6Ieh+d/ceMw8UdBOv/irkuwnDEJP8tq0wgdLJDUVuIkovV+AX9mTrZFxg==} - engines: {node: '>=14'} - hasBin: true + documentation@14.0.3: dependencies: - '@babel/core': 7.26.8 - '@babel/generator': 7.26.8 - '@babel/parser': 7.26.8 - '@babel/traverse': 7.26.8(supports-color@5.5.0) - '@babel/types': 7.26.8 + '@babel/core': 7.26.9 + '@babel/generator': 7.26.9 + '@babel/parser': 7.26.9 + '@babel/traverse': 7.26.9(supports-color@5.5.0) + '@babel/types': 7.26.9 chalk: 5.4.1 chokidar: 3.6.0 diff: 5.2.0 @@ -7892,92 +12196,57 @@ packages: vue-template-compiler: 2.7.16 transitivePeerDependencies: - supports-color - dev: true - /dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 entities: 4.5.0 - dev: true - /dom-walk@0.1.2: - resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} - dev: true + dom-walk@0.1.2: {} - /domain-browser@4.19.0: - resolution: {integrity: sha512-fRA+BaAWOR/yr/t7T9E9GJztHPeFjj8U35ajyAjCDtAAnTn1Rc1f6W6VGPJrO1tkQv9zWu+JRof7z6oQtiYVFQ==} - engines: {node: '>=10'} - dev: true + domain-browser@4.19.0: {} - /domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - dev: true + domelementtype@2.3.0: {} - /domexception@4.0.0: - resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} - engines: {node: '>=12'} - deprecated: Use your platform's native DOMException instead + domexception@4.0.0: dependencies: webidl-conversions: 7.0.0 - dev: true - /domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} + domhandler@5.0.3: dependencies: domelementtype: 2.3.0 - dev: true - /domutils@3.2.2: - resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + domutils@3.2.2: dependencies: dom-serializer: 2.0.0 domelementtype: 2.3.0 domhandler: 5.0.3 - dev: true - /dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dot-case@3.0.4: dependencies: no-case: 3.0.4 tslib: 2.8.1 - dev: true - /dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} + dunder-proto@1.0.1: dependencies: - call-bind-apply-helpers: 1.0.1 + call-bind-apply-helpers: 1.0.2 es-errors: 1.3.0 gopd: 1.2.0 - dev: true - /earcut@2.2.4: - resolution: {integrity: sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==} - dev: true + earcut@2.2.4: {} - /eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - dev: true + eastasianwidth@0.2.0: {} - /ecdsa-sig-formatter@1.0.11: - resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + ecdsa-sig-formatter@1.0.11: dependencies: safe-buffer: 5.2.1 - dev: true - /ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - dev: true + ee-first@1.1.1: {} - /electron-to-chromium@1.5.97: - resolution: {integrity: sha512-HKLtaH02augM7ZOdYRuO19rWDeY+QSJ1VxnXFa/XDFLf07HvM90pALIJFgrO+UVaajI3+aJMMpojoUTLZyQ7JQ==} - dev: true + electron-to-chromium@1.5.102: {} - /elliptic@6.6.1: - resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} + elliptic@6.6.1: dependencies: bn.js: 4.12.1 brorand: 1.1.0 @@ -7986,102 +12255,62 @@ packages: inherits: 2.0.4 minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 - dev: true - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true + emoji-regex@8.0.0: {} - /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: true + emoji-regex@9.2.2: {} - /emojis-list@3.0.0: - resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} - engines: {node: '>= 4'} - dev: true + emojis-list@3.0.0: {} - /encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - dev: true + encodeurl@1.0.2: {} - /encodeurl@2.0.0: - resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} - engines: {node: '>= 0.8'} - dev: true + encodeurl@2.0.0: {} - /enhanced-resolve@5.12.0: - resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} - engines: {node: '>=10.13.0'} + enhanced-resolve@5.12.0: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 - dev: true - /enhanced-resolve@5.18.1: - resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} - engines: {node: '>=10.13.0'} + enhanced-resolve@5.18.1: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 - dev: true - /enquirer@2.4.1: - resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} - engines: {node: '>=8.6'} + enquirer@2.4.1: dependencies: ansi-colors: 4.1.3 strip-ansi: 6.0.1 - dev: true - /entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - dev: true + entities@4.5.0: {} - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 - dev: true - /error-stack-parser@2.1.4: - resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + error-stack-parser@2.1.4: dependencies: stackframe: 1.3.4 - dev: true - /es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - dev: true + es-define-property@1.0.1: {} - /es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - dev: true + es-errors@1.3.0: {} - /es-module-lexer@1.6.0: - resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} - dev: true + es-module-lexer@1.6.0: {} - /es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 - dev: true - /es6-object-assign@1.1.0: - resolution: {integrity: sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==} - dev: true + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + has-tostringtag: 1.0.2 + hasown: 2.0.2 - /esbuild@0.17.19: - resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true + es6-object-assign@1.1.0: {} + + esbuild@0.17.19: optionalDependencies: '@esbuild/android-arm': 0.17.19 '@esbuild/android-arm64': 0.17.19 @@ -8105,13 +12334,8 @@ packages: '@esbuild/win32-arm64': 0.17.19 '@esbuild/win32-ia32': 0.17.19 '@esbuild/win32-x64': 0.17.19 - dev: true - /esbuild@0.19.2: - resolution: {integrity: sha512-G6hPax8UbFakEj3hWO0Vs52LQ8k3lnBhxZWomUJDxfz3rZTLqF5k/FCzuNdLx2RbpBiQQF9H9onlDDH1lZsnjg==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true + esbuild@0.19.2: optionalDependencies: '@esbuild/android-arm': 0.19.2 '@esbuild/android-arm64': 0.19.2 @@ -8135,13 +12359,8 @@ packages: '@esbuild/win32-arm64': 0.19.2 '@esbuild/win32-ia32': 0.19.2 '@esbuild/win32-x64': 0.19.2 - dev: true - /esbuild@0.23.1: - resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} - engines: {node: '>=18'} - hasBin: true - requiresBuild: true + esbuild@0.23.1: optionalDependencies: '@esbuild/aix-ppc64': 0.23.1 '@esbuild/android-arm': 0.23.1 @@ -8167,151 +12386,85 @@ packages: '@esbuild/win32-arm64': 0.23.1 '@esbuild/win32-ia32': 0.23.1 '@esbuild/win32-x64': 0.23.1 - dev: true - /escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - dev: true + escalade@3.2.0: {} - /escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - dev: true + escape-html@1.0.3: {} - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: true + escape-string-regexp@1.0.5: {} - /escape-string-regexp@5.0.0: - resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} - engines: {node: '>=12'} - dev: true + escape-string-regexp@5.0.0: {} - /escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true + escodegen@2.1.0: dependencies: esprima: 4.0.1 estraverse: 5.3.0 esutils: 2.0.3 optionalDependencies: source-map: 0.6.1 - dev: true - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} + eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - dev: true - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: true + esprima@4.0.1: {} - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 - dev: true - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: true + estraverse@4.3.0: {} - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true + estraverse@5.3.0: {} - /estree-util-attach-comments@2.1.1: - resolution: {integrity: sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==} + estree-util-attach-comments@2.1.1: dependencies: '@types/estree': 1.0.6 - dev: true - /estree-util-build-jsx@2.2.2: - resolution: {integrity: sha512-m56vOXcOBuaF+Igpb9OPAy7f9w9OIkb5yhjsZuaPm7HoGi4oTOQi0h2+yZ+AtKklYFZ+rPC4n0wYCJCEU1ONqg==} + estree-util-build-jsx@2.2.2: dependencies: '@types/estree-jsx': 1.0.5 estree-util-is-identifier-name: 2.1.0 estree-walker: 3.0.3 - dev: true - /estree-util-is-identifier-name@2.1.0: - resolution: {integrity: sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==} - dev: true + estree-util-is-identifier-name@2.1.0: {} - /estree-util-to-js@1.2.0: - resolution: {integrity: sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==} + estree-util-to-js@1.2.0: dependencies: '@types/estree-jsx': 1.0.5 astring: 1.9.0 source-map: 0.7.4 - dev: true - /estree-util-visit@1.2.1: - resolution: {integrity: sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==} + estree-util-visit@1.2.1: dependencies: '@types/estree-jsx': 1.0.5 '@types/unist': 2.0.11 - dev: true - /estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - dev: true + estree-walker@2.0.2: {} - /estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + estree-walker@3.0.3: dependencies: '@types/estree': 1.0.6 - dev: true - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true + esutils@2.0.3: {} - /etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - dev: true + etag@1.8.1: {} - /event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - dev: true + event-target-shim@5.0.1: {} - /eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - dev: true + eventemitter3@4.0.7: {} - /eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - dev: true + eventemitter3@5.0.1: {} - /events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - dev: true + events@3.3.0: {} - /evp_bytestokey@1.0.3: - resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + evp_bytestokey@1.0.3: dependencies: md5.js: 1.3.5 safe-buffer: 5.2.1 - dev: true - /execa@9.3.0: - resolution: {integrity: sha512-l6JFbqnHEadBoVAVpN5dl2yCyfX28WoBAGaoQcNmLLSedOxTxcn2Qa83s8I/PA5i56vWru2OHOtrwF7Om2vqlg==} - engines: {node: ^18.19.0 || >=20.5.0} + execa@9.3.0: dependencies: '@sindresorhus/merge-streams': 4.0.0 cross-spawn: 7.0.6 @@ -8325,15 +12478,10 @@ packages: signal-exit: 4.1.0 strip-final-newline: 4.0.0 yoctocolors: 2.1.1 - dev: true - /exif-parser@0.1.12: - resolution: {integrity: sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==} - dev: true + exif-parser@0.1.12: {} - /express@4.21.1: - resolution: {integrity: sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==} - engines: {node: '>= 0.10.0'} + express@4.21.1: dependencies: accepts: 1.3.8 array-flatten: 1.1.1 @@ -8368,104 +12516,63 @@ packages: vary: 1.1.2 transitivePeerDependencies: - supports-color - dev: true - /extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - dev: true + extend@3.0.2: {} - /extendable-error@0.1.7: - resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} - dev: true + extendable-error@0.1.7: {} - /external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} + external-editor@3.1.0: dependencies: chardet: 0.7.0 iconv-lite: 0.4.24 tmp: 0.0.33 - dev: true - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true + fast-deep-equal@3.1.3: {} - /fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.8 - dev: true - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true + fast-json-stable-stringify@2.1.0: {} - /fast-uri@3.0.6: - resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} - dev: true + fast-uri@3.0.6: {} - /fastq@1.19.0: - resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} + fastq@1.19.0: dependencies: reusify: 1.0.4 - dev: true - /fault@1.0.4: - resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} + fault@1.0.4: dependencies: format: 0.2.2 - dev: true - /fetch-blob@3.2.0: - resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} - engines: {node: ^12.20 || >= 14.13} + fetch-blob@3.2.0: dependencies: node-domexception: 1.0.0 web-streams-polyfill: 3.3.3 - dev: true - /figures@6.1.0: - resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} - engines: {node: '>=18'} + figures@6.1.0: dependencies: is-unicode-supported: 2.1.0 - dev: true - /file-type@16.5.4: - resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==} - engines: {node: '>=10'} + file-type@16.5.4: dependencies: - readable-web-to-node-stream: 3.0.3 + readable-web-to-node-stream: 3.0.4 strtok3: 6.3.0 token-types: 4.2.1 - dev: true - /fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 - dev: true - /filter-obj@2.0.2: - resolution: {integrity: sha512-lO3ttPjHZRfjMcxWKb1j1eDhTFsu4meeR3lnMcnBFhk6RuLhvEiuALu2TlfL310ph4lCYYwgF/ElIjdP739tdg==} - engines: {node: '>=8'} - dev: true + filter-obj@2.0.2: {} - /filter-obj@5.1.0: - resolution: {integrity: sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==} - engines: {node: '>=14.16'} - dev: true + filter-obj@5.1.0: {} - /finalhandler@1.3.1: - resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} - engines: {node: '>= 0.8'} + finalhandler@1.3.1: dependencies: debug: 2.6.9 encodeurl: 2.0.0 @@ -8476,92 +12583,49 @@ packages: unpipe: 1.0.0 transitivePeerDependencies: - supports-color - dev: true - /find-cache-dir@2.1.0: - resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} - engines: {node: '>=6'} + find-cache-dir@2.1.0: dependencies: commondir: 1.0.1 make-dir: 2.1.0 pkg-dir: 3.0.0 - dev: true - /find-up@3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} + find-up@3.0.0: dependencies: locate-path: 3.0.0 - dev: true - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} + find-up@4.1.0: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - dev: true - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true - /find-up@6.3.0: - resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + find-up@6.3.0: dependencies: locate-path: 7.2.0 path-exists: 5.0.0 - dev: true - /flexsearch@0.6.32: - resolution: {integrity: sha512-EF1BWkhwoeLtbIlDbY/vDSLBen/E5l/f1Vg7iX5CDymQCamcx1vhlc3tIZxIDplPjgi0jhG37c67idFbjg+v+Q==} - dev: true + flexsearch@0.6.32: {} - /follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: true + follow-redirects@1.15.9: {} - /for-each@0.3.4: - resolution: {integrity: sha512-kKaIINnFpzW6ffJNDjjyjrk21BkDx38c0xa/klsT8VzLCaMEefv4ZTacrcVR4DmgTeBra++jMDAfS/tS799YDw==} - engines: {node: '>= 0.4'} + for-each@0.3.5: dependencies: is-callable: 1.2.7 - dev: true - /for-in@0.1.8: - resolution: {integrity: sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==} - engines: {node: '>=0.10.0'} - dev: true + for-in@0.1.8: {} - /for-in@1.0.2: - resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} - engines: {node: '>=0.10.0'} - dev: true + for-in@1.0.2: {} - /for-own@0.1.5: - resolution: {integrity: sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==} - engines: {node: '>=0.10.0'} + for-own@0.1.5: dependencies: for-in: 1.0.2 - dev: true - /fork-ts-checker-webpack-plugin@8.0.0(typescript@5.0.4)(webpack@5.97.1): - resolution: {integrity: sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==} - engines: {node: '>=12.13.0', yarn: '>=1.0.0'} - peerDependencies: - typescript: '>3.6.0' - webpack: ^5.11.0 + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.0.4)(webpack@5.98.0): dependencies: '@babel/code-frame': 7.26.2 chalk: 4.1.2 @@ -8576,141 +12640,81 @@ packages: semver: 7.7.1 tapable: 2.2.1 typescript: 5.0.4 - webpack: 5.97.1 - dev: true + webpack: 5.98.0 - /form-data-encoder@1.7.2: - resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} - dev: true + form-data-encoder@1.7.2: {} - /form-data@4.0.1: - resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} - engines: {node: '>= 6'} + form-data@4.0.2: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 mime-types: 2.1.35 - dev: true - /format@0.2.2: - resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} - engines: {node: '>=0.4.x'} - dev: true + format@0.2.2: {} - /formdata-node@4.4.1: - resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} - engines: {node: '>= 12.20'} + formdata-node@4.4.1: dependencies: node-domexception: 1.0.0 web-streams-polyfill: 4.0.0-beta.3 - dev: true - /formdata-polyfill@4.0.10: - resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} - engines: {node: '>=12.20.0'} + formdata-polyfill@4.0.10: dependencies: fetch-blob: 3.2.0 - dev: true - /forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - dev: true + forwarded@0.2.0: {} - /fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - dev: true + fraction.js@4.3.7: {} - /fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - dev: true + fresh@0.5.2: {} - /fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} + fs-extra@10.1.0: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - dev: true - /fs-extra@11.3.0: - resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} - engines: {node: '>=14.14'} + fs-extra@11.3.0: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - dev: true - /fs-extra@7.0.1: - resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} - engines: {node: '>=6 <7 || >=8'} + fs-extra@7.0.1: dependencies: graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 - dev: true - /fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} + fs-extra@8.1.0: dependencies: graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 - dev: true - /fs-monkey@1.0.6: - resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==} - dev: true + fs-monkey@1.0.6: {} - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true + fs.realpath@1.0.0: {} - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true + fsevents@2.3.2: optional: true - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true + fsevents@2.3.3: optional: true - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - dev: true + function-bind@1.1.2: {} - /generic-names@4.0.0: - resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==} + generic-names@4.0.0: dependencies: loader-utils: 3.3.1 - dev: true - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - dev: true + gensync@1.0.0-beta.2: {} - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true + get-caller-file@2.0.5: {} - /get-intrinsic@1.2.7: - resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} - engines: {node: '>= 0.4'} + get-intrinsic@1.2.7: dependencies: - call-bind-apply-helpers: 1.0.1 + call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 es-errors: 1.3.0 es-object-atoms: 1.1.1 @@ -8720,79 +12724,50 @@ packages: has-symbols: 1.1.0 hasown: 2.0.2 math-intrinsics: 1.1.0 - dev: true - /get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} + get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - dev: true - /get-stream@9.0.1: - resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} - engines: {node: '>=18'} + get-stream@9.0.1: dependencies: '@sec-ant/readable-stream': 0.4.1 is-stream: 4.0.1 - dev: true - /get-tsconfig@4.10.0: - resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} + get-tsconfig@4.10.0: dependencies: resolve-pkg-maps: 1.0.0 - dev: true - /gifwrap@0.10.1: - resolution: {integrity: sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw==} + gifwrap@0.10.1: dependencies: image-q: 4.0.0 omggif: 1.0.10 - dev: true - /git-up@7.0.0: - resolution: {integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==} + git-up@7.0.0: dependencies: - is-ssh: 1.4.0 + is-ssh: 1.4.1 parse-url: 8.1.0 - dev: true - /git-url-parse@13.1.1: - resolution: {integrity: sha512-PCFJyeSSdtnbfhSNRw9Wk96dDCNx+sogTe4YNXeXSJxt7xz5hvXekuRn9JX7m+Mf4OscCu8h+mtAl3+h5Fo8lQ==} + git-url-parse@13.1.1: dependencies: git-up: 7.0.0 - dev: true - /github-slugger@1.4.0: - resolution: {integrity: sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==} - dev: true + github-slugger@1.4.0: {} - /github-slugger@2.0.0: - resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} - dev: true + github-slugger@2.0.0: {} - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - dev: true - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - dev: true - /glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - dev: true + glob-to-regexp@0.4.1: {} - /glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - deprecated: Glob versions prior to v9 are no longer supported + glob@7.1.6: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -8800,11 +12775,8 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -8812,39 +12784,25 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true - /glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} - deprecated: Glob versions prior to v9 are no longer supported + glob@8.1.0: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 minimatch: 5.1.6 once: 1.4.0 - dev: true - /global@4.4.0: - resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} + global@4.4.0: dependencies: min-document: 2.19.0 process: 0.11.10 - dev: true - /globals-docs@2.4.1: - resolution: {integrity: sha512-qpPnUKkWnz8NESjrCvnlGklsgiQzlq+rcCxoG5uNQ+dNA7cFMCmn231slLAwS2N/PlkzZ3COL8CcS10jXmLHqg==} - dev: true + globals-docs@2.4.1: {} - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - dev: true + globals@11.12.0: {} - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} + globby@11.1.0: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 @@ -8852,83 +12810,50 @@ packages: ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 - dev: true - /gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - dev: true + gopd@1.2.0: {} - /graceful-fs@4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} - dev: true + graceful-fs@4.2.10: {} - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: true + graceful-fs@4.2.11: {} - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - dev: true + has-flag@3.0.0: {} - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true + has-flag@4.0.0: {} - /has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.1 - dev: true - /has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - dev: true + has-symbols@1.1.0: {} - /has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: dependencies: has-symbols: 1.1.0 - dev: true - /hash-base@3.0.5: - resolution: {integrity: sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==} - engines: {node: '>= 0.10'} + hash-base@3.0.5: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 - dev: true - /hash.js@1.1.7: - resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + hash.js@1.1.7: dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 - dev: true - /hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} + hasown@2.0.2: dependencies: function-bind: 1.1.2 - dev: true - /hast-util-from-html@1.0.2: - resolution: {integrity: sha512-LhrTA2gfCbLOGJq2u/asp4kwuG0y6NhWTXiPKP+n0qNukKy7hc10whqqCFfyvIA1Q5U5d0sp9HhNim9gglEH4A==} + hast-util-from-html@1.0.2: dependencies: '@types/hast': 2.3.10 hast-util-from-parse5: 7.1.2 parse5: 7.2.1 vfile: 5.3.7 vfile-message: 3.1.4 - dev: true - /hast-util-from-parse5@7.1.2: - resolution: {integrity: sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==} + hast-util-from-parse5@7.1.2: dependencies: '@types/hast': 2.3.10 '@types/unist': 2.0.11 @@ -8937,37 +12862,25 @@ packages: vfile: 5.3.7 vfile-location: 4.1.0 web-namespaces: 2.0.1 - dev: true - /hast-util-has-property@2.0.1: - resolution: {integrity: sha512-X2+RwZIMTMKpXUzlotatPzWj8bspCymtXH3cfG3iQKV+wPF53Vgaqxi/eLqGck0wKq1kS9nvoB1wchbCPEL8sg==} - dev: true + hast-util-has-property@2.0.1: {} - /hast-util-heading-rank@2.1.1: - resolution: {integrity: sha512-iAuRp+ESgJoRFJbSyaqsfvJDY6zzmFoEnL1gtz1+U8gKtGGj1p0CVlysuUAUjq95qlZESHINLThwJzNGmgGZxA==} + hast-util-heading-rank@2.1.1: dependencies: '@types/hast': 2.3.10 - dev: true - /hast-util-is-element@2.1.3: - resolution: {integrity: sha512-O1bKah6mhgEq2WtVMk+Ta5K7pPMqsBBlmzysLdcwKVrqzZQ0CHqUPiIVspNhAG1rvxpvJjtGee17XfauZYKqVA==} + hast-util-is-element@2.1.3: dependencies: '@types/hast': 2.3.10 '@types/unist': 2.0.11 - dev: true - /hast-util-parse-selector@2.2.5: - resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} - dev: true + hast-util-parse-selector@2.2.5: {} - /hast-util-parse-selector@3.1.1: - resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} + hast-util-parse-selector@3.1.1: dependencies: '@types/hast': 2.3.10 - dev: true - /hast-util-raw@7.2.3: - resolution: {integrity: sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==} + hast-util-raw@7.2.3: dependencies: '@types/hast': 2.3.10 '@types/parse5': 6.0.3 @@ -8980,16 +12893,12 @@ packages: vfile: 5.3.7 web-namespaces: 2.0.1 zwitch: 2.0.4 - dev: true - /hast-util-sanitize@4.1.0: - resolution: {integrity: sha512-Hd9tU0ltknMGRDv+d6Ro/4XKzBqQnP/EZrpiTbpFYfXv/uOhWeKc+2uajcbEvAEH98VZd7eII2PiXm13RihnLw==} + hast-util-sanitize@4.1.0: dependencies: '@types/hast': 2.3.10 - dev: true - /hast-util-to-estree@2.3.3: - resolution: {integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==} + hast-util-to-estree@2.3.3: dependencies: '@types/estree': 1.0.6 '@types/estree-jsx': 1.0.5 @@ -9008,10 +12917,8 @@ packages: zwitch: 2.0.4 transitivePeerDependencies: - supports-color - dev: true - /hast-util-to-html@8.0.4: - resolution: {integrity: sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA==} + hast-util-to-html@8.0.4: dependencies: '@types/hast': 2.3.10 '@types/unist': 2.0.11 @@ -9024,10 +12931,8 @@ packages: space-separated-tokens: 2.0.2 stringify-entities: 4.0.4 zwitch: 2.0.4 - dev: true - /hast-util-to-parse5@7.1.0: - resolution: {integrity: sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==} + hast-util-to-parse5@7.1.0: dependencies: '@types/hast': 2.3.10 comma-separated-tokens: 2.0.3 @@ -9035,97 +12940,60 @@ packages: space-separated-tokens: 2.0.2 web-namespaces: 2.0.1 zwitch: 2.0.4 - dev: true - /hast-util-to-string@2.0.0: - resolution: {integrity: sha512-02AQ3vLhuH3FisaMM+i/9sm4OXGSq1UhOOCpTLLQtHdL3tZt7qil69r8M8iDkZYyC0HCFylcYoP+8IO7ddta1A==} + hast-util-to-string@2.0.0: dependencies: '@types/hast': 2.3.10 - dev: true - /hast-util-whitespace@2.0.1: - resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} - dev: true + hast-util-whitespace@2.0.1: {} - /hast@1.0.0: - resolution: {integrity: sha512-vFUqlRV5C+xqP76Wwq2SrM0kipnmpxJm7OfvVXpB35Fp+Fn4MV+ozr+JZr5qFvyR1q/U+Foim2x+3P+x9S1PLA==} - deprecated: Renamed to rehype - dev: true + hast@1.0.0: {} - /hastscript@6.0.0: - resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} + hastscript@6.0.0: dependencies: '@types/hast': 2.3.10 comma-separated-tokens: 1.0.8 hast-util-parse-selector: 2.2.5 property-information: 5.6.0 space-separated-tokens: 1.1.5 - dev: true - /hastscript@7.2.0: - resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} + hastscript@7.2.0: dependencies: '@types/hast': 2.3.10 comma-separated-tokens: 2.0.3 hast-util-parse-selector: 3.1.1 property-information: 6.5.0 space-separated-tokens: 2.0.2 - dev: true - /he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - dev: true + he@1.2.0: {} - /highlight.js@10.7.3: - resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} - dev: true + highlight.js@10.7.3: {} - /highlight.js@11.11.1: - resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} - engines: {node: '>=12.0.0'} - dev: true + highlight.js@11.11.1: {} - /highlightjs-vue@1.0.0: - resolution: {integrity: sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==} - dev: true + highlightjs-vue@1.0.0: {} - /hmac-drbg@1.0.1: - resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + hmac-drbg@1.0.1: dependencies: hash.js: 1.1.7 minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 - dev: true - /hoist-non-react-statics@3.3.2: - resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + hoist-non-react-statics@3.3.2: dependencies: react-is: 16.13.1 - dev: true - /hosted-git-info@4.1.0: - resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} - engines: {node: '>=10'} + hosted-git-info@4.1.0: dependencies: lru-cache: 6.0.0 - dev: true - /html-encoding-sniffer@3.0.0: - resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} - engines: {node: '>=12'} + html-encoding-sniffer@3.0.0: dependencies: whatwg-encoding: 2.0.0 - dev: true - /html-entities@2.5.2: - resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==} - dev: true + html-entities@2.5.2: {} - /html-minifier-terser@7.0.0: - resolution: {integrity: sha512-Adqk0b/pWKIQiGvEAuzPKpBKNHiwblr3QSGS7TTr6v+xXKV9AI2k4vWW+6Oytt6Z5SeBnfvYypKOnz8r75pz3Q==} - engines: {node: ^14.13.1 || >=16.0.0} - hasBin: true + html-minifier-terser@7.0.0: dependencies: camel-case: 4.1.2 clean-css: 5.2.0 @@ -9133,87 +13001,58 @@ packages: entities: 4.5.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.38.1 - dev: true + terser: 5.39.0 - /html-to-text@9.0.5: - resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==} - engines: {node: '>=14'} + html-to-text@9.0.5: dependencies: '@selderee/plugin-htmlparser2': 0.11.0 deepmerge: 4.3.1 dom-serializer: 2.0.0 htmlparser2: 8.0.2 selderee: 0.11.0 - dev: true - /html-void-elements@2.0.1: - resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==} - dev: true + html-void-elements@2.0.1: {} - /htmlparser2@8.0.2: - resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + htmlparser2@8.0.2: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 domutils: 3.2.2 entities: 4.5.0 - dev: true - /htmlparser2@9.0.0: - resolution: {integrity: sha512-uxbSI98wmFT/G4P2zXx4OVx04qWUmyFPrD2/CNepa2Zo3GPNaCaaxElDgwUrwYWkK1nr9fft0Ya8dws8coDLLQ==} + htmlparser2@9.0.0: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 domutils: 3.2.2 entities: 4.5.0 - dev: true - /http-compression@1.0.6: - resolution: {integrity: sha512-Yy9VFT/0fJhbpSHmqA34CJKZDXLnHoQUP2wbFXY7duOx3nc9Qf8MVJezaXTP7IirvJ9DmUv/vm7qFNu/RntdWw==} - engines: {node: '>= 4'} - dev: true + http-compression@1.0.6: {} - /http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} + http-errors@2.0.0: dependencies: depd: 2.0.0 inherits: 2.0.4 setprototypeof: 1.2.0 statuses: 2.0.1 toidentifier: 1.0.1 - dev: true - /http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} + http-proxy-agent@5.0.0: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 debug: 4.4.0(supports-color@5.5.0) transitivePeerDependencies: - supports-color - dev: true - /http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} + http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.3 debug: 4.4.0(supports-color@5.5.0) transitivePeerDependencies: - supports-color - dev: true - /http-proxy-middleware@2.0.7: - resolution: {integrity: sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@types/express': ^4.17.13 - peerDependenciesMeta: - '@types/express': - optional: true + http-proxy-middleware@2.0.7: dependencies: '@types/http-proxy': 1.17.16 http-proxy: 1.18.1 @@ -9222,23 +13061,16 @@ packages: micromatch: 4.0.8 transitivePeerDependencies: - debug - dev: true - /http-proxy@1.18.1: - resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} - engines: {node: '>=8.0.0'} + http-proxy@1.18.1: dependencies: eventemitter3: 4.0.7 follow-redirects: 1.15.9 requires-port: 1.0.0 transitivePeerDependencies: - debug - dev: true - /http-server@14.1.1: - resolution: {integrity: sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==} - engines: {node: '>=12'} - hasBin: true + http-server@14.1.1: dependencies: basic-auth: 2.0.1 chalk: 4.1.2 @@ -9256,142 +13088,80 @@ packages: transitivePeerDependencies: - debug - supports-color - dev: true - /https-browserify@1.0.0: - resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} - dev: true + https-browserify@1.0.0: {} - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} + https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 debug: 4.4.0(supports-color@5.5.0) transitivePeerDependencies: - supports-color - dev: true - /https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} + https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.3 debug: 4.4.0(supports-color@5.5.0) transitivePeerDependencies: - supports-color - dev: true - /human-id@1.0.2: - resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} - dev: true + human-id@4.1.1: {} - /human-signals@7.0.0: - resolution: {integrity: sha512-74kytxOUSvNbjrT9KisAbaTZ/eJwD/LrbM/kh5j0IhPuJzwuA19dWvniFGwBzN9rVjg+O/e+F310PjObDXS+9Q==} - engines: {node: '>=18.18.0'} - dev: true + human-signals@7.0.0: {} - /humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + humanize-ms@1.2.1: dependencies: ms: 2.1.3 - dev: true - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 - dev: true - /iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 - dev: true - /icss-replace-symbols@1.1.0: - resolution: {integrity: sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==} - dev: true + icss-replace-symbols@1.1.0: {} - /icss-utils@5.1.0(postcss@8.5.2): - resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 + icss-utils@5.1.0(postcss@8.5.2): dependencies: postcss: 8.5.2 - dev: true - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true + ieee754@1.2.1: {} - /ignore-by-default@1.0.1: - resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} - dev: true + ignore-by-default@1.0.1: {} - /ignore-styles@5.0.1: - resolution: {integrity: sha512-gQQmIznCETPLEzfg1UH4Cs2oRq+HBPl8quroEUNXT8oybEG7/0lqI3dGgDSRry6B9HcCXw3PVkFFS0FF3CMddg==} - dev: true + ignore-styles@5.0.1: {} - /ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - dev: true + ignore@5.3.2: {} - /image-q@4.0.0: - resolution: {integrity: sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==} + image-q@4.0.0: dependencies: '@types/node': 16.9.1 - dev: true - /immer@9.0.21: - resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} - dev: true + immer@9.0.21: {} - /immutable@4.3.7: - resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} - dev: true + immutable@4.3.7: {} - /import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - dev: true - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: true + indent-string@4.0.0: {} - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + inflight@1.0.6: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true + inherits@2.0.4: {} - /ini@3.0.1: - resolution: {integrity: sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dev: true + ini@3.0.1: {} - /inline-style-parser@0.1.1: - resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} - dev: true + inline-style-parser@0.1.1: {} - /inquirer@10.1.5: - resolution: {integrity: sha512-ksPK04lcs0GcgkvfmZ5Sjxdm74Nf3Ksy37NTQDrdMZlB0IJgH6TB8cTCJpvGAvt6edsgHa07flRcvXwkr+tPqQ==} - engines: {node: '>=18'} + inquirer@10.1.5: dependencies: '@inquirer/prompts': 5.5.0 '@inquirer/type': 1.5.5 @@ -9400,318 +13170,175 @@ packages: mute-stream: 1.0.0 run-async: 3.0.0 rxjs: 7.8.1 - dev: true - /invariant@2.2.4: - resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + invariant@2.2.4: dependencies: loose-envify: 1.4.0 - dev: true - /ip-address@9.0.5: - resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} - engines: {node: '>= 12'} + ip-address@9.0.5: dependencies: jsbn: 1.1.0 sprintf-js: 1.1.3 - dev: true - /ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - dev: true + ipaddr.js@1.9.1: {} - /is-absolute-url@4.0.1: - resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + is-absolute-url@4.0.1: {} - /is-absolute@1.0.0: - resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} - engines: {node: '>=0.10.0'} + is-absolute@1.0.0: dependencies: is-relative: 1.0.0 is-windows: 1.0.2 - dev: true - /is-alphabetical@1.0.4: - resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} - dev: true + is-alphabetical@1.0.4: {} - /is-alphabetical@2.0.1: - resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} - dev: true + is-alphabetical@2.0.1: {} - /is-alphanumerical@1.0.4: - resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} + is-alphanumerical@1.0.4: dependencies: is-alphabetical: 1.0.4 is-decimal: 1.0.4 - dev: true - /is-alphanumerical@2.0.1: - resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + is-alphanumerical@2.0.1: dependencies: is-alphabetical: 2.0.1 is-decimal: 2.0.1 - dev: true - /is-arguments@1.2.0: - resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} - engines: {node: '>= 0.4'} + is-arguments@1.2.0: dependencies: call-bound: 1.0.3 has-tostringtag: 1.0.2 - dev: true - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true + is-arrayish@0.2.1: {} - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 - dev: true - /is-buffer@1.1.6: - resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} - dev: true + is-buffer@1.1.6: {} - /is-buffer@2.0.5: - resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} - engines: {node: '>=4'} - dev: true + is-buffer@2.0.5: {} - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true + is-callable@1.2.7: {} - /is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} + is-core-module@2.16.1: dependencies: hasown: 2.0.2 - dev: true - /is-decimal@1.0.4: - resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} - dev: true + is-decimal@1.0.4: {} - /is-decimal@2.0.1: - resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} - dev: true + is-decimal@2.0.1: {} - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - dev: true + is-docker@2.2.1: {} - /is-extendable@0.1.1: - resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} - engines: {node: '>=0.10.0'} - dev: true + is-extendable@0.1.1: {} - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true + is-extglob@2.1.1: {} - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true + is-fullwidth-code-point@3.0.0: {} - /is-function@1.0.2: - resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} - dev: true + is-function@1.0.2: {} - /is-generator-function@1.1.0: - resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} - engines: {node: '>= 0.4'} + is-generator-function@1.1.0: dependencies: call-bound: 1.0.3 get-proto: 1.0.1 has-tostringtag: 1.0.2 safe-regex-test: 1.1.0 - dev: true - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - dev: true - /is-hexadecimal@1.0.4: - resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} - dev: true + is-hexadecimal@1.0.4: {} - /is-hexadecimal@2.0.1: - resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} - dev: true + is-hexadecimal@2.0.1: {} - /is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - dev: true + is-interactive@1.0.0: {} - /is-nan@1.3.2: - resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} - engines: {node: '>= 0.4'} + is-nan@1.3.2: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - dev: true - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true + is-number@7.0.0: {} - /is-plain-obj@3.0.0: - resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} - engines: {node: '>=10'} - dev: true + is-plain-obj@3.0.0: {} - /is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - dev: true + is-plain-obj@4.1.0: {} - /is-plain-object@2.0.4: - resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} - engines: {node: '>=0.10.0'} + is-plain-object@2.0.4: dependencies: isobject: 3.0.1 - dev: true - /is-potential-custom-element-name@1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - dev: true + is-potential-custom-element-name@1.0.1: {} - /is-reference@3.0.3: - resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} + is-reference@3.0.3: dependencies: '@types/estree': 1.0.6 - dev: true - /is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} + is-regex@1.2.1: dependencies: call-bound: 1.0.3 gopd: 1.2.0 has-tostringtag: 1.0.2 hasown: 2.0.2 - dev: true - /is-relative@1.0.0: - resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} - engines: {node: '>=0.10.0'} + is-relative@1.0.0: dependencies: is-unc-path: 1.0.0 - dev: true - /is-ssh@1.4.0: - resolution: {integrity: sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==} + is-ssh@1.4.1: dependencies: - protocols: 2.0.1 - dev: true + protocols: 2.0.2 - /is-stream@4.0.1: - resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} - engines: {node: '>=18'} - dev: true + is-stream@4.0.1: {} - /is-subdir@1.2.0: - resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} - engines: {node: '>=4'} + is-subdir@1.2.0: dependencies: better-path-resolve: 1.0.0 - dev: true - /is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} + is-typed-array@1.1.15: dependencies: which-typed-array: 1.1.18 - dev: true - /is-unc-path@1.0.0: - resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} - engines: {node: '>=0.10.0'} + is-unc-path@1.0.0: dependencies: unc-path-regex: 0.1.2 - dev: true - /is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - dev: true + is-unicode-supported@0.1.0: {} - /is-unicode-supported@2.1.0: - resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} - engines: {node: '>=18'} - dev: true + is-unicode-supported@2.1.0: {} - /is-windows@1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} - dev: true + is-windows@1.0.2: {} - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} + is-wsl@2.2.0: dependencies: is-docker: 2.2.1 - dev: true - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: true + isarray@1.0.0: {} - /isbot@3.7.1: - resolution: {integrity: sha512-JfqOaY3O1lcWt2nc+D6Mq231CNpwZrBboLa59Go0J8hjGH+gY/Sy0CA/YLUSIScINmAVwTdJZIsOTk4PfBtRuw==} - engines: {node: '>=12'} - dev: true + isbot@3.7.1: {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true + isexe@2.0.0: {} - /ismobilejs@1.1.1: - resolution: {integrity: sha512-VaFW53yt8QO61k2WJui0dHf4SlL8lxBofUuUmwBo0ljPk0Drz2TiuDW4jo3wDcv41qy/SxrJ+VAzJ/qYqsmzRw==} - dev: true + ismobilejs@1.1.1: {} - /isobject@3.0.1: - resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} - engines: {node: '>=0.10.0'} - dev: true + isobject@3.0.1: {} - /isomorphic-fetch@3.0.0: - resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==} + isomorphic-fetch@3.0.0: dependencies: node-fetch: 2.7.0 whatwg-fetch: 3.6.20 transitivePeerDependencies: - encoding - dev: true - /jest-worker@27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} + jest-worker@27.5.1: dependencies: - '@types/node': 18.19.75 + '@types/node': 18.19.76 merge-stream: 2.0.0 supports-color: 8.1.1 - dev: true - /jimp@0.22.12: - resolution: {integrity: sha512-R5jZaYDnfkxKJy1dwLpj/7cvyjxiclxU3F4TrI/J4j2rS0niq6YDUMoPn5hs8GDpO+OZGo7Ky057CRtWesyhfg==} + jimp@0.22.12: dependencies: '@jimp/custom': 0.22.12 '@jimp/plugins': 0.22.12(@jimp/custom@0.22.12) @@ -9720,43 +13347,23 @@ packages: transitivePeerDependencies: - debug - encoding - dev: true - /jpeg-js@0.4.4: - resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==} - dev: true + jpeg-js@0.4.4: {} - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: true + js-tokens@4.0.0: {} - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true + js-yaml@3.14.1: dependencies: argparse: 1.0.10 esprima: 4.0.1 - dev: true - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - dev: true - /jsbn@1.1.0: - resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - dev: true + jsbn@1.1.0: {} - /jsdom@20.0.3: - resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} - engines: {node: '>=14'} - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true + jsdom@20.0.3: dependencies: abab: 2.0.6 acorn: 8.14.0 @@ -9767,7 +13374,7 @@ packages: decimal.js: 10.5.0 domexception: 4.0.0 escodegen: 2.1.0 - form-data: 4.0.1 + form-data: 4.0.2 html-encoding-sniffer: 3.0.0 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 @@ -9788,61 +13395,34 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: true - /jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} - engines: {node: '>=6'} - hasBin: true - dev: true + jsesc@3.0.2: {} - /jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} - hasBin: true - dev: true + jsesc@3.1.0: {} - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true + json-parse-even-better-errors@2.3.1: {} - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true + json-schema-traverse@0.4.1: {} - /json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: true + json-schema-traverse@1.0.0: {} - /json2mq@0.2.0: - resolution: {integrity: sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==} + json2mq@0.2.0: dependencies: string-convert: 0.2.1 - dev: true - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - dev: true + json5@2.2.3: {} - /jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 - dev: true - /jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonfile@6.1.0: dependencies: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 - dev: true - /jsonwebtoken@9.0.2: - resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} - engines: {node: '>=12', npm: '>=6'} + jsonwebtoken@9.0.2: dependencies: jws: 3.2.2 lodash.includes: 4.3.0 @@ -9854,111 +13434,67 @@ packages: lodash.once: 4.1.1 ms: 2.1.3 semver: 7.7.1 - dev: true - /jwa@1.4.1: - resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + jwa@1.4.1: dependencies: buffer-equal-constant-time: 1.0.1 ecdsa-sig-formatter: 1.0.11 safe-buffer: 5.2.1 - dev: true - /jwa@2.0.0: - resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} + jwa@2.0.0: dependencies: buffer-equal-constant-time: 1.0.1 ecdsa-sig-formatter: 1.0.11 safe-buffer: 5.2.1 - dev: true - /jws@3.2.2: - resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + jws@3.2.2: dependencies: jwa: 1.4.1 safe-buffer: 5.2.1 - dev: true - /jws@4.0.0: - resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} + jws@4.0.0: dependencies: jwa: 2.0.0 safe-buffer: 5.2.1 - dev: true - /kind-of@2.0.1: - resolution: {integrity: sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==} - engines: {node: '>=0.10.0'} + kind-of@2.0.1: dependencies: is-buffer: 1.1.6 - dev: true - /kind-of@3.2.2: - resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} - engines: {node: '>=0.10.0'} + kind-of@3.2.2: dependencies: is-buffer: 1.1.6 - dev: true - /kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - dev: true + kind-of@6.0.3: {} - /kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} - dev: true + kleur@4.1.5: {} - /konan@2.1.1: - resolution: {integrity: sha512-7ZhYV84UzJ0PR/RJnnsMZcAbn+kLasJhVNWsu8ZyVEJYRpGA5XESQ9d/7zOa08U0Ou4cmB++hMNY/3OSV9KIbg==} + konan@2.1.1: dependencies: - '@babel/parser': 7.26.8 - '@babel/traverse': 7.26.8(supports-color@5.5.0) + '@babel/parser': 7.26.9 + '@babel/traverse': 7.26.9(supports-color@5.5.0) transitivePeerDependencies: - supports-color - dev: true - /lazy-cache@0.2.7: - resolution: {integrity: sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==} - engines: {node: '>=0.10.0'} - dev: true + lazy-cache@0.2.7: {} - /lazy-cache@1.0.4: - resolution: {integrity: sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==} - engines: {node: '>=0.10.0'} - dev: true + lazy-cache@1.0.4: {} - /leac@0.6.0: - resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==} - dev: true + leac@0.6.0: {} - /levdist@1.0.0: - resolution: {integrity: sha512-YguwC2spb0pqpJM3a5OsBhih/GG2ZHoaSHnmBqhEI7997a36buhqcRTegEjozHxyxByIwLpZHZTVYMThq+Zd3g==} - dev: true + levdist@1.0.0: {} - /lex@1.7.9: - resolution: {integrity: sha512-vzaalVBmFLnMaedq0QAsBAaXsWahzRpvnIBdBjj7y+7EKTS6lnziU2y/PsU2c6rV5qYj2B5IDw0uNJ9peXD0vw==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - dev: true + lex@1.7.9: {} - /lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - dev: true + lilconfig@2.1.0: {} - /line-diff@2.1.1: - resolution: {integrity: sha512-vswdynAI5AMPJacOo2o+JJ4caDJbnY2NEqms4MhMW0NJbjh3skP/brpVTAgBxrg55NRZ2Vtw88ef18hnagIpYQ==} + line-diff@2.1.1: dependencies: levdist: 1.0.0 - dev: true - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true + lines-and-columns@1.2.4: {} - /load-bmfont@1.4.2: - resolution: {integrity: sha512-qElWkmjW9Oq1F9EI5Gt7aD9zcdHb9spJCW1L/dmPf7KzCCEJxq8nhHz5eCgI9aMf7vrG/wyaCqdsI+Iy9ZTlog==} + load-bmfont@1.4.2: dependencies: buffer-equal: 0.0.1 mime: 1.6.0 @@ -9970,257 +13506,152 @@ packages: xtend: 4.0.2 transitivePeerDependencies: - debug - dev: true - /loader-runner@4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} - engines: {node: '>=6.11.5'} - dev: true + loader-runner@4.3.0: {} - /loader-utils@2.0.4: - resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} - engines: {node: '>=8.9.0'} + loader-utils@2.0.4: dependencies: big.js: 5.2.2 emojis-list: 3.0.0 json5: 2.2.3 - dev: true - /loader-utils@3.3.1: - resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} - engines: {node: '>= 12.13.0'} - dev: true + loader-utils@3.3.1: {} - /locate-path@3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} + locate-path@3.0.0: dependencies: p-locate: 3.0.0 path-exists: 3.0.0 - dev: true - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} + locate-path@5.0.0: dependencies: p-locate: 4.1.0 - dev: true - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 - dev: true - /locate-path@7.2.0: - resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + locate-path@7.2.0: dependencies: p-locate: 6.0.0 - dev: true - /lodash-es@4.17.21: - resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} - dev: true + lodash-es@4.17.21: {} - /lodash._reinterpolate@3.0.0: - resolution: {integrity: sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==} - dev: true + lodash._reinterpolate@3.0.0: {} - /lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - dev: true + lodash.camelcase@4.3.0: {} - /lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - dev: true + lodash.debounce@4.0.8: {} - /lodash.includes@4.3.0: - resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} - dev: true + lodash.includes@4.3.0: {} - /lodash.isboolean@3.0.3: - resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} - dev: true + lodash.isboolean@3.0.3: {} - /lodash.isinteger@4.0.4: - resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} - dev: true + lodash.isinteger@4.0.4: {} - /lodash.isnumber@3.0.3: - resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} - dev: true + lodash.isnumber@3.0.3: {} - /lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - dev: true + lodash.isplainobject@4.0.6: {} - /lodash.isstring@4.0.1: - resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} - dev: true + lodash.isstring@4.0.1: {} - /lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - dev: true + lodash.memoize@4.1.2: {} - /lodash.once@4.1.1: - resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} - dev: true + lodash.once@4.1.1: {} - /lodash.startcase@4.4.0: - resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - dev: true + lodash.startcase@4.4.0: {} - /lodash.template@4.5.0: - resolution: {integrity: sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==} - deprecated: This package is deprecated. Use https://socket.dev/npm/package/eta instead. + lodash.template@4.5.0: dependencies: lodash._reinterpolate: 3.0.0 lodash.templatesettings: 4.2.0 - dev: true - /lodash.templatesettings@4.2.0: - resolution: {integrity: sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==} + lodash.templatesettings@4.2.0: dependencies: lodash._reinterpolate: 3.0.0 - dev: true - /lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - dev: true + lodash.uniq@4.5.0: {} - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true + lodash@4.17.21: {} - /log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} + log-symbols@4.1.0: dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 - dev: true - /longest-streak@3.1.0: - resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - dev: true + longest-streak@3.1.0: {} - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 - dev: true - /lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + lower-case@2.0.2: dependencies: tslib: 2.8.1 - dev: true - /lowlight@1.20.0: - resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==} + lowlight@1.20.0: dependencies: fault: 1.0.4 highlight.js: 10.7.3 - dev: true - /lru-cache@4.1.5: - resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + lru-cache@4.1.5: dependencies: pseudomap: 1.0.2 yallist: 2.1.2 - dev: true - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 - dev: true - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + lru-cache@6.0.0: dependencies: yallist: 4.0.0 - dev: true - /magic-string@0.30.12: - resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} + magic-string@0.30.12: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 - dev: true - /magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - requiresBuild: true + magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 - dev: true optional: true - /make-dir@2.1.0: - resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} - engines: {node: '>=6'} + make-dir@2.1.0: dependencies: pify: 4.0.1 semver: 5.7.2 - dev: true - /map-cache@0.2.2: - resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} - engines: {node: '>=0.10.0'} - dev: true + map-cache@0.2.2: {} - /markdown-extensions@1.1.1: - resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} - engines: {node: '>=0.10.0'} - dev: true + markdown-extensions@1.1.1: {} - /markdown-table@3.0.4: - resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} - dev: true + markdown-table@3.0.4: {} - /matchit@1.1.0: - resolution: {integrity: sha512-+nGYoOlfHmxe5BW5tE0EMJppXEwdSf8uBA1GTZC7Q77kbT35+VKLYJMzVNWCHSsga1ps1tPYFtFyvxvKzWVmMA==} - engines: {node: '>=6'} + matchit@1.1.0: dependencies: '@arr/every': 1.0.1 - dev: true - /math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - dev: true + math-intrinsics@1.1.0: {} - /md5.js@1.3.5: - resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + md5.js@1.3.5: dependencies: hash-base: 3.0.5 inherits: 2.0.4 safe-buffer: 5.2.1 - dev: true - /mdast-util-definitions@5.1.2: - resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} + mdast-util-definitions@5.1.2: dependencies: '@types/mdast': 3.0.15 '@types/unist': 2.0.11 unist-util-visit: 4.1.2 - dev: true - /mdast-util-find-and-replace@2.2.2: - resolution: {integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==} + mdast-util-find-and-replace@2.2.2: dependencies: '@types/mdast': 3.0.15 escape-string-regexp: 5.0.0 unist-util-is: 5.2.1 unist-util-visit-parents: 5.1.3 - dev: true - /mdast-util-from-markdown@1.3.1: - resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} + mdast-util-from-markdown@1.3.1: dependencies: '@types/mdast': 3.0.15 '@types/unist': 2.0.11 @@ -10236,34 +13667,26 @@ packages: uvu: 0.5.6 transitivePeerDependencies: - supports-color - dev: true - /mdast-util-gfm-autolink-literal@1.0.3: - resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==} + mdast-util-gfm-autolink-literal@1.0.3: dependencies: '@types/mdast': 3.0.15 ccount: 2.0.1 mdast-util-find-and-replace: 2.2.2 micromark-util-character: 1.2.0 - dev: true - /mdast-util-gfm-footnote@1.0.2: - resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==} + mdast-util-gfm-footnote@1.0.2: dependencies: '@types/mdast': 3.0.15 mdast-util-to-markdown: 1.5.0 micromark-util-normalize-identifier: 1.1.0 - dev: true - /mdast-util-gfm-strikethrough@1.0.3: - resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==} + mdast-util-gfm-strikethrough@1.0.3: dependencies: '@types/mdast': 3.0.15 mdast-util-to-markdown: 1.5.0 - dev: true - /mdast-util-gfm-table@1.0.7: - resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==} + mdast-util-gfm-table@1.0.7: dependencies: '@types/mdast': 3.0.15 markdown-table: 3.0.4 @@ -10271,17 +13694,13 @@ packages: mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: - supports-color - dev: true - /mdast-util-gfm-task-list-item@1.0.2: - resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==} + mdast-util-gfm-task-list-item@1.0.2: dependencies: '@types/mdast': 3.0.15 mdast-util-to-markdown: 1.5.0 - dev: true - /mdast-util-gfm@2.0.2: - resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==} + mdast-util-gfm@2.0.2: dependencies: mdast-util-from-markdown: 1.3.1 mdast-util-gfm-autolink-literal: 1.0.3 @@ -10292,16 +13711,12 @@ packages: mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: - supports-color - dev: true - /mdast-util-inject@1.1.0: - resolution: {integrity: sha512-CcJ0mHa36QYumDKiZ2OIR+ClhfOM7zIzN+Wfy8tRZ1hpH9DKLCS+Mh4DyK5bCxzE9uxMWcbIpeNFWsg1zrj/2g==} + mdast-util-inject@1.1.0: dependencies: mdast-util-to-string: 1.1.0 - dev: true - /mdast-util-mdx-expression@1.3.2: - resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==} + mdast-util-mdx-expression@1.3.2: dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 2.3.10 @@ -10310,10 +13725,8 @@ packages: mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: - supports-color - dev: true - /mdast-util-mdx-jsx@2.1.4: - resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==} + mdast-util-mdx-jsx@2.1.4: dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 2.3.10 @@ -10329,10 +13742,8 @@ packages: vfile-message: 3.1.4 transitivePeerDependencies: - supports-color - dev: true - /mdast-util-mdx@2.0.1: - resolution: {integrity: sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==} + mdast-util-mdx@2.0.1: dependencies: mdast-util-from-markdown: 1.3.1 mdast-util-mdx-expression: 1.3.2 @@ -10341,10 +13752,8 @@ packages: mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: - supports-color - dev: true - /mdast-util-mdxjs-esm@1.3.1: - resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==} + mdast-util-mdxjs-esm@1.3.1: dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 2.3.10 @@ -10353,17 +13762,13 @@ packages: mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: - supports-color - dev: true - /mdast-util-phrasing@3.0.1: - resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} + mdast-util-phrasing@3.0.1: dependencies: '@types/mdast': 3.0.15 unist-util-is: 5.2.1 - dev: true - /mdast-util-to-hast@12.3.0: - resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} + mdast-util-to-hast@12.3.0: dependencies: '@types/hast': 2.3.10 '@types/mdast': 3.0.15 @@ -10373,10 +13778,8 @@ packages: unist-util-generated: 2.0.1 unist-util-position: 4.0.4 unist-util-visit: 4.1.2 - dev: true - /mdast-util-to-markdown@1.5.0: - resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} + mdast-util-to-markdown@1.5.0: dependencies: '@types/mdast': 3.0.15 '@types/unist': 2.0.11 @@ -10386,20 +13789,14 @@ packages: micromark-util-decode-string: 1.1.0 unist-util-visit: 4.1.2 zwitch: 2.0.4 - dev: true - /mdast-util-to-string@1.1.0: - resolution: {integrity: sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==} - dev: true + mdast-util-to-string@1.1.0: {} - /mdast-util-to-string@3.2.0: - resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} + mdast-util-to-string@3.2.0: dependencies: '@types/mdast': 3.0.15 - dev: true - /mdast-util-toc@6.1.1: - resolution: {integrity: sha512-Er21728Kow8hehecK2GZtb7Ny3omcoPUVrmObiSUwmoRYVZaXLR751QROEFjR8W/vAQdHMLj49Lz20J55XaNpw==} + mdast-util-toc@6.1.1: dependencies: '@types/extend': 3.0.4 '@types/mdast': 3.0.15 @@ -10408,61 +13805,34 @@ packages: mdast-util-to-string: 3.2.0 unist-util-is: 5.2.1 unist-util-visit: 4.1.2 - dev: true - /mdn-data@2.0.28: - resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} - dev: true + mdn-data@2.0.28: {} - /mdn-data@2.0.30: - resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - dev: true + mdn-data@2.0.30: {} - /media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - dev: true + media-typer@0.3.0: {} - /medium-zoom@1.0.8: - resolution: {integrity: sha512-CjFVuFq/IfrdqesAXfg+hzlDKu6A2n80ZIq0Kl9kWjoHh9j1N9Uvk5X0/MmN0hOfm5F9YBswlClhcwnmtwz7gA==} - dev: true + medium-zoom@1.0.8: {} - /memfs@3.5.3: - resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} - engines: {node: '>= 4.0.0'} + memfs@3.5.3: dependencies: fs-monkey: 1.0.6 - dev: true - /merge-deep@3.0.3: - resolution: {integrity: sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==} - engines: {node: '>=0.10.0'} + merge-deep@3.0.3: dependencies: arr-union: 3.1.0 clone-deep: 0.2.4 kind-of: 3.2.2 - dev: true - /merge-descriptors@1.0.3: - resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} - dev: true + merge-descriptors@1.0.3: {} - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true + merge-stream@2.0.0: {} - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true + merge2@1.4.1: {} - /methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - dev: true + methods@1.1.2: {} - /micromark-core-commonmark@1.1.0: - resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} + micromark-core-commonmark@1.1.0: dependencies: decode-named-character-reference: 1.0.2 micromark-factory-destination: 1.1.0 @@ -10480,19 +13850,15 @@ packages: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 uvu: 0.5.6 - dev: true - /micromark-extension-gfm-autolink-literal@1.0.5: - resolution: {integrity: sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==} + micromark-extension-gfm-autolink-literal@1.0.5: dependencies: micromark-util-character: 1.2.0 micromark-util-sanitize-uri: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 - dev: true - /micromark-extension-gfm-footnote@1.1.2: - resolution: {integrity: sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==} + micromark-extension-gfm-footnote@1.1.2: dependencies: micromark-core-commonmark: 1.1.0 micromark-factory-space: 1.1.0 @@ -10502,10 +13868,8 @@ packages: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 uvu: 0.5.6 - dev: true - /micromark-extension-gfm-strikethrough@1.0.7: - resolution: {integrity: sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==} + micromark-extension-gfm-strikethrough@1.0.7: dependencies: micromark-util-chunked: 1.1.0 micromark-util-classify-character: 1.1.0 @@ -10513,36 +13877,28 @@ packages: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 uvu: 0.5.6 - dev: true - /micromark-extension-gfm-table@1.0.7: - resolution: {integrity: sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==} + micromark-extension-gfm-table@1.0.7: dependencies: micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 uvu: 0.5.6 - dev: true - /micromark-extension-gfm-tagfilter@1.0.2: - resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==} + micromark-extension-gfm-tagfilter@1.0.2: dependencies: micromark-util-types: 1.1.0 - dev: true - /micromark-extension-gfm-task-list-item@1.0.5: - resolution: {integrity: sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==} + micromark-extension-gfm-task-list-item@1.0.5: dependencies: micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 uvu: 0.5.6 - dev: true - /micromark-extension-gfm@2.0.3: - resolution: {integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==} + micromark-extension-gfm@2.0.3: dependencies: micromark-extension-gfm-autolink-literal: 1.0.5 micromark-extension-gfm-footnote: 1.1.2 @@ -10552,10 +13908,8 @@ packages: micromark-extension-gfm-task-list-item: 1.0.5 micromark-util-combine-extensions: 1.1.0 micromark-util-types: 1.1.0 - dev: true - /micromark-extension-mdx-expression@1.0.8: - resolution: {integrity: sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==} + micromark-extension-mdx-expression@1.0.8: dependencies: '@types/estree': 1.0.6 micromark-factory-mdx-expression: 1.0.9 @@ -10565,10 +13919,8 @@ packages: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 uvu: 0.5.6 - dev: true - /micromark-extension-mdx-jsx@1.0.5: - resolution: {integrity: sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==} + micromark-extension-mdx-jsx@1.0.5: dependencies: '@types/acorn': 4.0.6 '@types/estree': 1.0.6 @@ -10580,16 +13932,12 @@ packages: micromark-util-types: 1.1.0 uvu: 0.5.6 vfile-message: 3.1.4 - dev: true - /micromark-extension-mdx-md@1.0.1: - resolution: {integrity: sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==} + micromark-extension-mdx-md@1.0.1: dependencies: micromark-util-types: 1.1.0 - dev: true - /micromark-extension-mdxjs-esm@1.0.5: - resolution: {integrity: sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==} + micromark-extension-mdxjs-esm@1.0.5: dependencies: '@types/estree': 1.0.6 micromark-core-commonmark: 1.1.0 @@ -10600,10 +13948,8 @@ packages: unist-util-position-from-estree: 1.1.2 uvu: 0.5.6 vfile-message: 3.1.4 - dev: true - /micromark-extension-mdxjs@1.0.1: - resolution: {integrity: sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==} + micromark-extension-mdxjs@1.0.1: dependencies: acorn: 8.14.0 acorn-jsx: 5.3.2(acorn@8.14.0) @@ -10613,27 +13959,21 @@ packages: micromark-extension-mdxjs-esm: 1.0.5 micromark-util-combine-extensions: 1.1.0 micromark-util-types: 1.1.0 - dev: true - /micromark-factory-destination@1.1.0: - resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} + micromark-factory-destination@1.1.0: dependencies: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 - dev: true - /micromark-factory-label@1.1.0: - resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} + micromark-factory-label@1.1.0: dependencies: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 uvu: 0.5.6 - dev: true - /micromark-factory-mdx-expression@1.0.9: - resolution: {integrity: sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==} + micromark-factory-mdx-expression@1.0.9: dependencies: '@types/estree': 1.0.6 micromark-util-character: 1.2.0 @@ -10643,82 +13983,60 @@ packages: unist-util-position-from-estree: 1.1.2 uvu: 0.5.6 vfile-message: 3.1.4 - dev: true - /micromark-factory-space@1.1.0: - resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} + micromark-factory-space@1.1.0: dependencies: micromark-util-character: 1.2.0 micromark-util-types: 1.1.0 - dev: true - /micromark-factory-title@1.1.0: - resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} + micromark-factory-title@1.1.0: dependencies: micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 - dev: true - /micromark-factory-whitespace@1.1.0: - resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} + micromark-factory-whitespace@1.1.0: dependencies: micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 - dev: true - /micromark-util-character@1.2.0: - resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} + micromark-util-character@1.2.0: dependencies: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 - dev: true - /micromark-util-chunked@1.1.0: - resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} + micromark-util-chunked@1.1.0: dependencies: micromark-util-symbol: 1.1.0 - dev: true - /micromark-util-classify-character@1.1.0: - resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} + micromark-util-classify-character@1.1.0: dependencies: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 - dev: true - /micromark-util-combine-extensions@1.1.0: - resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} + micromark-util-combine-extensions@1.1.0: dependencies: micromark-util-chunked: 1.1.0 micromark-util-types: 1.1.0 - dev: true - /micromark-util-decode-numeric-character-reference@1.1.0: - resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} + micromark-util-decode-numeric-character-reference@1.1.0: dependencies: micromark-util-symbol: 1.1.0 - dev: true - /micromark-util-decode-string@1.1.0: - resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} + micromark-util-decode-string@1.1.0: dependencies: decode-named-character-reference: 1.0.2 micromark-util-character: 1.2.0 micromark-util-decode-numeric-character-reference: 1.1.0 micromark-util-symbol: 1.1.0 - dev: true - /micromark-util-encode@1.1.0: - resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} - dev: true + micromark-util-encode@1.1.0: {} - /micromark-util-events-to-acorn@1.2.3: - resolution: {integrity: sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==} + micromark-util-events-to-acorn@1.2.3: dependencies: '@types/acorn': 4.0.6 '@types/estree': 1.0.6 @@ -10728,51 +14046,35 @@ packages: micromark-util-types: 1.1.0 uvu: 0.5.6 vfile-message: 3.1.4 - dev: true - /micromark-util-html-tag-name@1.2.0: - resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} - dev: true + micromark-util-html-tag-name@1.2.0: {} - /micromark-util-normalize-identifier@1.1.0: - resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} + micromark-util-normalize-identifier@1.1.0: dependencies: micromark-util-symbol: 1.1.0 - dev: true - /micromark-util-resolve-all@1.1.0: - resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} + micromark-util-resolve-all@1.1.0: dependencies: micromark-util-types: 1.1.0 - dev: true - /micromark-util-sanitize-uri@1.2.0: - resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} + micromark-util-sanitize-uri@1.2.0: dependencies: micromark-util-character: 1.2.0 micromark-util-encode: 1.1.0 micromark-util-symbol: 1.1.0 - dev: true - /micromark-util-subtokenize@1.1.0: - resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} + micromark-util-subtokenize@1.1.0: dependencies: micromark-util-chunked: 1.1.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 uvu: 0.5.6 - dev: true - /micromark-util-symbol@1.1.0: - resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} - dev: true + micromark-util-symbol@1.1.0: {} - /micromark-util-types@1.1.0: - resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} - dev: true + micromark-util-types@1.1.0: {} - /micromark@3.2.0: - resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} + micromark@3.2.0: dependencies: '@types/debug': 4.1.12 debug: 4.4.0(supports-color@5.5.0) @@ -10793,201 +14095,107 @@ packages: uvu: 0.5.6 transitivePeerDependencies: - supports-color - dev: true - /micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 - dev: true - /miller-rabin@4.0.1: - resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} - hasBin: true + miller-rabin@4.0.1: dependencies: bn.js: 4.12.1 brorand: 1.1.0 - dev: true - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: true + mime-db@1.52.0: {} - /mime-db@1.53.0: - resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} - engines: {node: '>= 0.6'} - dev: true + mime-db@1.53.0: {} - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + mime-types@2.1.35: dependencies: mime-db: 1.52.0 - dev: true - /mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - dev: true + mime@1.6.0: {} - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: true + mimic-fn@2.1.0: {} - /min-document@2.19.0: - resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} + min-document@2.19.0: dependencies: dom-walk: 0.1.2 - dev: true - /minimalistic-assert@1.0.1: - resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - dev: true + minimalistic-assert@1.0.1: {} - /minimalistic-crypto-utils@1.0.1: - resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} - dev: true + minimalistic-crypto-utils@1.0.1: {} - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - dev: true - /minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} + minimatch@5.1.6: dependencies: brace-expansion: 2.0.1 - dev: true - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true + minimist@1.2.8: {} - /mixin-object@2.0.1: - resolution: {integrity: sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==} - engines: {node: '>=0.10.0'} + mixin-object@2.0.1: dependencies: for-in: 0.1.8 is-extendable: 0.1.1 - dev: true - /mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true + mkdirp@0.5.6: dependencies: minimist: 1.2.8 - dev: true - /mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} - engines: {node: '>=4'} - dev: true + mri@1.2.0: {} - /mrmime@2.0.0: - resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} - engines: {node: '>=10'} - dev: true + mrmime@2.0.1: {} - /ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - dev: true + ms@2.0.0: {} - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true + ms@2.1.3: {} - /mute-stream@1.0.0: - resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true + mute-stream@1.0.0: {} - /mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + mz@2.7.0: dependencies: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 - dev: true - /nanoid@3.3.8: - resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true + nanoid@3.3.8: {} - /negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - dev: true + negotiator@0.6.3: {} - /negotiator@0.6.4: - resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} - engines: {node: '>= 0.6'} - dev: true + negotiator@0.6.4: {} - /neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - dev: true + neo-async@2.6.2: {} - /no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + no-case@3.0.4: dependencies: lower-case: 2.0.2 tslib: 2.8.1 - dev: true - /node-abort-controller@3.1.1: - resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} - dev: true + node-abort-controller@3.1.1: {} - /node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} - dev: true + node-domexception@1.0.0: {} - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 - dev: true - /node-fetch@3.3.0: - resolution: {integrity: sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + node-fetch@3.3.0: dependencies: data-uri-to-buffer: 4.0.1 fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 - dev: true - /node-html-parser@6.1.13: - resolution: {integrity: sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==} + node-html-parser@6.1.13: dependencies: css-select: 5.1.0 he: 1.2.0 - dev: true - /node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} - dev: true + node-releases@2.0.19: {} - /nodemon@3.1.9: - resolution: {integrity: sha512-hdr1oIb2p6ZSxu3PB2JWWYS7ZQ0qvaZsc3hK8DR8f02kRzc8rjYmxAIvdz+aYC+8F2IjNaB7HMcSDg8nQpJxyg==} - engines: {node: '>=10'} - hasBin: true + nodemon@3.1.9: dependencies: chokidar: 3.6.0 debug: 4.4.0(supports-color@5.5.0) @@ -10999,133 +14207,73 @@ packages: supports-color: 5.5.0 touch: 3.1.1 undefsafe: 2.0.5 - dev: true - /normalize-package-data@3.0.3: - resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} - engines: {node: '>=10'} + normalize-package-data@3.0.3: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.16.1 semver: 7.7.1 validate-npm-package-license: 3.0.4 - dev: true - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true + normalize-path@3.0.0: {} - /normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - dev: true + normalize-range@0.1.2: {} - /npm-run-path@5.3.0: - resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + npm-run-path@5.3.0: dependencies: path-key: 4.0.0 - dev: true - /npm-watch@0.13.0: - resolution: {integrity: sha512-MYcgocqCzYA44feZhFoYj69FfSaO0EeRE1gcRcmPaXIpNhUMAhNJ1pwic2C4Hn0OPOQmZKSl90CPgmwvOsVhTg==} - hasBin: true + npm-watch@0.13.0: dependencies: nodemon: 3.1.9 through2: 4.0.2 - dev: true - /nprogress@0.2.0: - resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} - dev: true + nprogress@0.2.0: {} - /nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + nth-check@2.1.1: dependencies: boolbase: 1.0.0 - dev: true - /nwsapi@2.2.16: - resolution: {integrity: sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==} - dev: true + nwsapi@2.2.16: {} - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: true + object-assign@4.1.1: {} - /object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - dev: true + object-hash@3.0.0: {} - /object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} - dev: true + object-inspect@1.13.4: {} - /object-is@1.1.6: - resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} - engines: {node: '>= 0.4'} + object-is@1.1.6: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - dev: true - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true + object-keys@1.1.1: {} - /omggif@1.0.10: - resolution: {integrity: sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==} - dev: true + omggif@1.0.10: {} - /on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} + on-finished@2.4.1: dependencies: ee-first: 1.1.1 - dev: true - /on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} - engines: {node: '>= 0.8'} - dev: true + on-headers@1.0.2: {} - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + once@1.4.0: dependencies: wrappy: 1.0.2 - dev: true - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + onetime@5.1.2: dependencies: mimic-fn: 2.1.0 - dev: true - /open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} + open@8.4.2: dependencies: define-lazy-prop: 2.0.0 is-docker: 2.2.1 is-wsl: 2.2.0 - dev: true - /openai@4.57.1(zod@3.24.1): - resolution: {integrity: sha512-7q+4U9A/klaAT40bqL6sPFhIKb4jsUJ8udddCzaf8mdwICYeBG7grps/zDcrOUfkwCxCzR6fxfDDah3WqHoVUA==} - hasBin: true - peerDependencies: - zod: ^3.23.8 - peerDependenciesMeta: - zod: - optional: true + openai@4.57.1(zod@3.24.2): dependencies: - '@types/node': 18.19.75 + '@types/node': 18.19.76 '@types/node-fetch': 2.6.12 '@types/qs': 6.9.18 abort-controller: 3.0.0 @@ -11134,23 +14282,16 @@ packages: formdata-node: 4.4.1 node-fetch: 2.7.0 qs: 6.14.0 - zod: 3.24.1 + optionalDependencies: + zod: 3.24.2 transitivePeerDependencies: - encoding - dev: true - /opener@1.5.2: - resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} - hasBin: true - dev: true + opener@1.5.2: {} - /optional@0.1.4: - resolution: {integrity: sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw==} - dev: true + optional@0.1.4: {} - /ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} + ora@5.4.1: dependencies: bl: 4.1.0 chalk: 4.1.2 @@ -11161,119 +14302,67 @@ packages: log-symbols: 4.1.0 strip-ansi: 6.0.1 wcwidth: 1.0.1 - dev: true - /os-browserify@0.3.0: - resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} - dev: true + os-browserify@0.3.0: {} - /os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - dev: true + os-tmpdir@1.0.2: {} - /outdent@0.5.0: - resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} - dev: true + outdent@0.5.0: {} - /p-filter@2.1.0: - resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} - engines: {node: '>=8'} + p-filter@2.1.0: dependencies: p-map: 2.1.0 - dev: true - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + p-limit@2.3.0: dependencies: p-try: 2.2.0 - dev: true - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - dev: true - /p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-limit@4.0.0: dependencies: yocto-queue: 1.1.1 - dev: true - /p-locate@3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} + p-locate@3.0.0: dependencies: p-limit: 2.3.0 - dev: true - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} + p-locate@4.1.0: dependencies: p-limit: 2.3.0 - dev: true - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + p-locate@5.0.0: dependencies: p-limit: 3.1.0 - dev: true - /p-locate@6.0.0: - resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-locate@6.0.0: dependencies: p-limit: 4.0.0 - dev: true - /p-map@2.1.0: - resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} - engines: {node: '>=6'} - dev: true + p-map@2.1.0: {} - /p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} + p-map@4.0.0: dependencies: aggregate-error: 3.1.0 - dev: true - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: true + p-try@2.2.0: {} - /package-manager-detector@0.2.9: - resolution: {integrity: sha512-+vYvA/Y31l8Zk8dwxHhL3JfTuHPm6tlxM2A3GeQyl7ovYnSp1+mzAxClxaOr0qO1TtPxbQxetI7v5XqKLJZk7Q==} - dev: true + package-manager-detector@0.2.9: {} - /pako@1.0.11: - resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} - dev: true + pako@1.0.11: {} - /param-case@3.0.4: - resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + param-case@3.0.4: dependencies: dot-case: 3.0.4 tslib: 2.8.1 - dev: true - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + parent-module@1.0.1: dependencies: callsites: 3.1.0 - dev: true - /parse-asn1@5.1.7: - resolution: {integrity: sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==} - engines: {node: '>= 0.10'} + parse-asn1@5.1.7: dependencies: asn1.js: 4.10.1 browserify-aes: 1.2.0 @@ -11281,25 +14370,17 @@ packages: hash-base: 3.0.5 pbkdf2: 3.1.2 safe-buffer: 5.2.1 - dev: true - /parse-bmfont-ascii@1.0.6: - resolution: {integrity: sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==} - dev: true + parse-bmfont-ascii@1.0.6: {} - /parse-bmfont-binary@1.0.6: - resolution: {integrity: sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==} - dev: true + parse-bmfont-binary@1.0.6: {} - /parse-bmfont-xml@1.1.6: - resolution: {integrity: sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==} + parse-bmfont-xml@1.1.6: dependencies: xml-parse-from-string: 1.0.1 xml2js: 0.5.0 - dev: true - /parse-entities@2.0.0: - resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} + parse-entities@2.0.0: dependencies: character-entities: 1.2.4 character-entities-legacy: 1.1.4 @@ -11307,10 +14388,8 @@ packages: is-alphanumerical: 1.0.4 is-decimal: 1.0.4 is-hexadecimal: 1.0.4 - dev: true - /parse-entities@4.0.2: - resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + parse-entities@4.0.2: dependencies: '@types/unist': 2.0.11 character-entities-legacy: 3.0.0 @@ -11319,245 +14398,141 @@ packages: is-alphanumerical: 2.0.1 is-decimal: 2.0.1 is-hexadecimal: 2.0.1 - dev: true - /parse-filepath@1.0.2: - resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==} - engines: {node: '>=0.8'} + parse-filepath@1.0.2: dependencies: is-absolute: 1.0.0 map-cache: 0.2.2 path-root: 0.1.1 - dev: true - /parse-headers@2.0.5: - resolution: {integrity: sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==} - dev: true + parse-headers@2.0.5: {} - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + parse-json@5.2.0: dependencies: '@babel/code-frame': 7.26.2 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - dev: true - /parse-ms@4.0.0: - resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} - engines: {node: '>=18'} - dev: true + parse-ms@4.0.0: {} - /parse-path@7.0.0: - resolution: {integrity: sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==} + parse-path@7.0.1: dependencies: - protocols: 2.0.1 - dev: true + protocols: 2.0.2 - /parse-svg-path@0.1.2: - resolution: {integrity: sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ==} - dev: true + parse-svg-path@0.1.2: {} - /parse-url@8.1.0: - resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==} + parse-url@8.1.0: dependencies: - parse-path: 7.0.0 - dev: true + parse-path: 7.0.1 - /parse5@6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - dev: true + parse5@6.0.1: {} - /parse5@7.1.1: - resolution: {integrity: sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==} + parse5@7.1.1: dependencies: entities: 4.5.0 - dev: true - /parse5@7.2.1: - resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + parse5@7.2.1: dependencies: entities: 4.5.0 - dev: true - /parseley@0.12.1: - resolution: {integrity: sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==} + parseley@0.12.1: dependencies: leac: 0.6.0 peberminta: 0.9.0 - dev: true - /parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - dev: true + parseurl@1.3.3: {} - /pascal-case@3.1.2: - resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + pascal-case@3.1.2: dependencies: no-case: 3.0.4 tslib: 2.8.1 - dev: true - /path-browserify@1.0.1: - resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} - dev: true + path-browserify@1.0.1: {} - /path-exists@3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} - dev: true + path-exists@3.0.0: {} - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true + path-exists@4.0.0: {} - /path-exists@5.0.0: - resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + path-exists@5.0.0: {} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true + path-is-absolute@1.0.1: {} - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true + path-key@3.1.1: {} - /path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - dev: true + path-key@4.0.0: {} - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true + path-parse@1.0.7: {} - /path-root-regex@0.1.2: - resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==} - engines: {node: '>=0.10.0'} - dev: true + path-root-regex@0.1.2: {} - /path-root@0.1.1: - resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==} - engines: {node: '>=0.10.0'} + path-root@0.1.1: dependencies: path-root-regex: 0.1.2 - dev: true - /path-to-regexp@0.1.10: - resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} - dev: true + path-to-regexp@0.1.10: {} - /path-to-regexp@6.3.0: - resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} - dev: true + path-to-regexp@6.3.0: {} - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: true + path-type@4.0.0: {} - /pbkdf2@3.1.2: - resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} - engines: {node: '>=0.12'} + pbkdf2@3.1.2: dependencies: create-hash: 1.2.0 create-hmac: 1.1.7 ripemd160: 2.0.2 safe-buffer: 5.2.1 sha.js: 2.4.11 - dev: true - /peberminta@0.9.0: - resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} - dev: true + peberminta@0.9.0: {} - /peek-readable@4.1.0: - resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==} - engines: {node: '>=8'} - dev: true + peek-readable@4.1.0: {} - /periscopic@3.1.0: - resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} + periscopic@3.1.0: dependencies: '@types/estree': 1.0.6 estree-walker: 3.0.3 is-reference: 3.0.3 - dev: true - /phin@3.7.1: - resolution: {integrity: sha512-GEazpTWwTZaEQ9RhL7Nyz0WwqilbqgLahDM3D0hxWwmVDI52nXEybHqiN6/elwpkJBhcuj+WbBu+QfT0uhPGfQ==} - engines: {node: '>= 8'} + phin@3.7.1: dependencies: centra: 2.7.0 transitivePeerDependencies: - debug - dev: true - /picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - dev: true + picocolors@1.1.1: {} - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true + picomatch@2.3.1: {} - /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - dev: true + pify@2.3.0: {} - /pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} - engines: {node: '>=6'} - dev: true + pify@4.0.1: {} - /pify@6.1.0: - resolution: {integrity: sha512-KocF8ve28eFjjuBKKGvzOBGzG8ew2OqOOSxTTZhirkzH7h3BI1vyzqlR0qbfcDBve1Yzo3FVlWUAtCRrbVN8Fw==} - engines: {node: '>=14.16'} - dev: true + pify@6.1.0: {} - /pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - dev: true + pirates@4.0.6: {} - /pixelmatch@4.0.2: - resolution: {integrity: sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==} - hasBin: true + pixelmatch@4.0.2: dependencies: pngjs: 3.4.0 - dev: true - /pixi-filters@6.0.5(pixi.js@8.1.1): - resolution: {integrity: sha512-M7F+Xu4Ysp2iy7bNZxt6U4hxO+X8c3msVKOQAq/tf3sLt99XOiY54iH2Ixj5VRIesmjdLWA5CaUQ+TUfyBVe2g==} - peerDependencies: - pixi.js: '>=8.0.0-0' + pixi-filters@6.0.5(pixi.js@8.1.1): dependencies: '@types/gradient-parser': 0.1.5 pixi.js: 8.1.1 - dev: true - /pixi.js-legacy@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2)(@pixi/extract@7.4.2)(@pixi/graphics@7.4.2)(@pixi/mesh-extras@7.4.2)(@pixi/mesh@7.4.2)(@pixi/particle-container@7.4.2)(@pixi/prepare@7.4.2)(@pixi/sprite-tiling@7.4.2)(@pixi/sprite@7.4.2)(@pixi/text@7.4.2): - resolution: {integrity: sha512-azGsuJvLHk/VJwt45AjlathtTNdUjLDSoaGt8JBNjzG/05cxVswFLL7GsSe83eNSe0eEuIrxiNIt3vBRNyU3AA==} + pixi.js-legacy@7.4.2(b8c41235b07ba7e580c31fab611ea1c0): dependencies: - '@pixi/canvas-display': 7.4.2(@pixi/display@7.4.2) - '@pixi/canvas-extract': 7.4.2(@pixi/canvas-renderer@7.4.2)(@pixi/core@7.4.2)(@pixi/display@7.4.2)(@pixi/extract@7.4.2) - '@pixi/canvas-graphics': 7.4.2(@pixi/canvas-display@7.4.2)(@pixi/canvas-renderer@7.4.2)(@pixi/core@7.4.2)(@pixi/graphics@7.4.2) - '@pixi/canvas-mesh': 7.4.2(@pixi/canvas-display@7.4.2)(@pixi/canvas-renderer@7.4.2)(@pixi/core@7.4.2)(@pixi/mesh-extras@7.4.2)(@pixi/mesh@7.4.2) - '@pixi/canvas-particle-container': 7.4.2(@pixi/particle-container@7.4.2) - '@pixi/canvas-prepare': 7.4.2(@pixi/canvas-renderer@7.4.2)(@pixi/core@7.4.2)(@pixi/prepare@7.4.2) + '@pixi/canvas-display': 7.4.2(@pixi/display@7.4.2(@pixi/core@7.4.2)) + '@pixi/canvas-extract': 7.4.2(@pixi/canvas-renderer@7.4.2(@pixi/core@7.4.2))(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/extract@7.4.2(@pixi/core@7.4.2)) + '@pixi/canvas-graphics': 7.4.2(@pixi/canvas-display@7.4.2(@pixi/display@7.4.2(@pixi/core@7.4.2)))(@pixi/canvas-renderer@7.4.2(@pixi/core@7.4.2))(@pixi/core@7.4.2)(@pixi/graphics@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)))) + '@pixi/canvas-mesh': 7.4.2(@pixi/canvas-display@7.4.2(@pixi/display@7.4.2(@pixi/core@7.4.2)))(@pixi/canvas-renderer@7.4.2(@pixi/core@7.4.2))(@pixi/core@7.4.2)(@pixi/mesh-extras@7.4.2(@pixi/core@7.4.2)(@pixi/mesh@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))))(@pixi/mesh@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))) + '@pixi/canvas-particle-container': 7.4.2(@pixi/particle-container@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)))) + '@pixi/canvas-prepare': 7.4.2(@pixi/canvas-renderer@7.4.2(@pixi/core@7.4.2))(@pixi/core@7.4.2)(@pixi/prepare@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/graphics@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))))(@pixi/text@7.4.2(@pixi/core@7.4.2)(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))))) '@pixi/canvas-renderer': 7.4.2(@pixi/core@7.4.2) - '@pixi/canvas-sprite': 7.4.2(@pixi/canvas-display@7.4.2)(@pixi/canvas-renderer@7.4.2)(@pixi/core@7.4.2)(@pixi/sprite@7.4.2) - '@pixi/canvas-sprite-tiling': 7.4.2(@pixi/canvas-renderer@7.4.2)(@pixi/canvas-sprite@7.4.2)(@pixi/core@7.4.2)(@pixi/sprite-tiling@7.4.2) - '@pixi/canvas-text': 7.4.2(@pixi/canvas-sprite@7.4.2)(@pixi/sprite@7.4.2)(@pixi/text@7.4.2) + '@pixi/canvas-sprite': 7.4.2(@pixi/canvas-display@7.4.2(@pixi/display@7.4.2(@pixi/core@7.4.2)))(@pixi/canvas-renderer@7.4.2(@pixi/core@7.4.2))(@pixi/core@7.4.2)(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))) + '@pixi/canvas-sprite-tiling': 7.4.2(@pixi/canvas-renderer@7.4.2(@pixi/core@7.4.2))(@pixi/canvas-sprite@7.4.2(@pixi/canvas-display@7.4.2(@pixi/display@7.4.2(@pixi/core@7.4.2)))(@pixi/canvas-renderer@7.4.2(@pixi/core@7.4.2))(@pixi/core@7.4.2)(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))))(@pixi/core@7.4.2)(@pixi/sprite-tiling@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)))) + '@pixi/canvas-text': 7.4.2(@pixi/canvas-sprite@7.4.2(@pixi/canvas-display@7.4.2(@pixi/display@7.4.2(@pixi/core@7.4.2)))(@pixi/canvas-renderer@7.4.2(@pixi/core@7.4.2))(@pixi/core@7.4.2)(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))))(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)))(@pixi/text@7.4.2(@pixi/core@7.4.2)(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)))) pixi.js: 7.4.2 transitivePeerDependencies: - '@pixi/core' @@ -11571,18 +14546,16 @@ packages: - '@pixi/sprite' - '@pixi/sprite-tiling' - '@pixi/text' - dev: true - /pixi.js@7.4.2: - resolution: {integrity: sha512-TifqgHGNofO7UCEbdZJOpUu7dUnpu4YZ0o76kfCqxDa4RS8ITc9zjECCbtalmuNXkVhSEZmBKQvE7qhHMqw/xg==} + pixi.js@7.4.2: dependencies: - '@pixi/accessibility': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2)(@pixi/events@7.4.2) - '@pixi/app': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2) + '@pixi/accessibility': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/events@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))) + '@pixi/app': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)) '@pixi/assets': 7.4.2(@pixi/core@7.4.2) - '@pixi/compressed-textures': 7.4.2(@pixi/assets@7.4.2)(@pixi/core@7.4.2) + '@pixi/compressed-textures': 7.4.2(@pixi/assets@7.4.2(@pixi/core@7.4.2))(@pixi/core@7.4.2) '@pixi/core': 7.4.2 '@pixi/display': 7.4.2(@pixi/core@7.4.2) - '@pixi/events': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2) + '@pixi/events': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)) '@pixi/extensions': 7.4.2 '@pixi/extract': 7.4.2(@pixi/core@7.4.2) '@pixi/filter-alpha': 7.4.2(@pixi/core@7.4.2) @@ -11591,323 +14564,184 @@ packages: '@pixi/filter-displacement': 7.4.2(@pixi/core@7.4.2) '@pixi/filter-fxaa': 7.4.2(@pixi/core@7.4.2) '@pixi/filter-noise': 7.4.2(@pixi/core@7.4.2) - '@pixi/graphics': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2)(@pixi/sprite@7.4.2) - '@pixi/mesh': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2) - '@pixi/mesh-extras': 7.4.2(@pixi/core@7.4.2)(@pixi/mesh@7.4.2) - '@pixi/mixin-cache-as-bitmap': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2)(@pixi/sprite@7.4.2) - '@pixi/mixin-get-child-by-name': 7.4.2(@pixi/display@7.4.2) - '@pixi/mixin-get-global-position': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2) - '@pixi/particle-container': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2)(@pixi/sprite@7.4.2) - '@pixi/prepare': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2)(@pixi/graphics@7.4.2)(@pixi/text@7.4.2) - '@pixi/sprite': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2) - '@pixi/sprite-animated': 7.4.2(@pixi/core@7.4.2)(@pixi/sprite@7.4.2) - '@pixi/sprite-tiling': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2)(@pixi/sprite@7.4.2) - '@pixi/spritesheet': 7.4.2(@pixi/assets@7.4.2)(@pixi/core@7.4.2) - '@pixi/text': 7.4.2(@pixi/core@7.4.2)(@pixi/sprite@7.4.2) - '@pixi/text-bitmap': 7.4.2(@pixi/assets@7.4.2)(@pixi/core@7.4.2)(@pixi/display@7.4.2)(@pixi/mesh@7.4.2)(@pixi/text@7.4.2) - '@pixi/text-html': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2)(@pixi/sprite@7.4.2)(@pixi/text@7.4.2) - dev: true - - /pixi.js@8.1.1: - resolution: {integrity: sha512-/4D1HokubR2TlA/3JdeAb/EsGlkSRt5SmmMiPnsw9QB1PHDdzR7Td1m401fGIjTRq5edl5Zrz29hYXPuVwzdIw==} + '@pixi/graphics': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))) + '@pixi/mesh': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)) + '@pixi/mesh-extras': 7.4.2(@pixi/core@7.4.2)(@pixi/mesh@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))) + '@pixi/mixin-cache-as-bitmap': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))) + '@pixi/mixin-get-child-by-name': 7.4.2(@pixi/display@7.4.2(@pixi/core@7.4.2)) + '@pixi/mixin-get-global-position': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)) + '@pixi/particle-container': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))) + '@pixi/prepare': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/graphics@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))))(@pixi/text@7.4.2(@pixi/core@7.4.2)(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)))) + '@pixi/sprite': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)) + '@pixi/sprite-animated': 7.4.2(@pixi/core@7.4.2)(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))) + '@pixi/sprite-tiling': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))) + '@pixi/spritesheet': 7.4.2(@pixi/assets@7.4.2(@pixi/core@7.4.2))(@pixi/core@7.4.2) + '@pixi/text': 7.4.2(@pixi/core@7.4.2)(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))) + '@pixi/text-bitmap': 7.4.2(@pixi/assets@7.4.2(@pixi/core@7.4.2))(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/mesh@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)))(@pixi/text@7.4.2(@pixi/core@7.4.2)(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)))) + '@pixi/text-html': 7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2))(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)))(@pixi/text@7.4.2(@pixi/core@7.4.2)(@pixi/sprite@7.4.2(@pixi/core@7.4.2)(@pixi/display@7.4.2(@pixi/core@7.4.2)))) + + pixi.js@8.1.1: dependencies: '@pixi/colord': 2.9.6 '@types/css-font-loading-module': 0.0.12 '@types/earcut': 2.1.4 - '@webgpu/types': 0.1.54 + '@webgpu/types': 0.1.53 '@xmldom/xmldom': 0.8.10 earcut: 2.2.4 eventemitter3: 5.0.1 ismobilejs: 1.1.1 parse-svg-path: 0.1.2 - dev: true - /pkg-dir@3.0.0: - resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} - engines: {node: '>=6'} + pkg-dir@3.0.0: dependencies: find-up: 3.0.0 - dev: true - /pkg-up@3.1.0: - resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} - engines: {node: '>=8'} + pkg-up@3.1.0: dependencies: find-up: 3.0.0 - dev: true - /playwright-core@1.50.1: - resolution: {integrity: sha512-ra9fsNWayuYumt+NiM069M6OkcRb1FZSK8bgi66AtpFoWkg2+y0bJSNmkFrWhMbEBbVKC/EruAHH3g0zmtwGmQ==} - engines: {node: '>=18'} - hasBin: true - dev: true + playwright-core@1.50.1: {} - /playwright@1.50.1: - resolution: {integrity: sha512-G8rwsOQJ63XG6BbKj2w5rHeavFjy5zynBA9zsJMMtBoe/Uf757oG12NXz6e6OirF7RCrTVAKFXbLmn1RbL7Qaw==} - engines: {node: '>=18'} - hasBin: true + playwright@1.50.1: dependencies: playwright-core: 1.50.1 optionalDependencies: fsevents: 2.3.2 - dev: true - /pngjs@3.4.0: - resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==} - engines: {node: '>=4.0.0'} - dev: true + pngjs@3.4.0: {} - /pngjs@6.0.0: - resolution: {integrity: sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==} - engines: {node: '>=12.13.0'} - dev: true + pngjs@6.0.0: {} - /polka@0.5.2: - resolution: {integrity: sha512-FVg3vDmCqP80tOrs+OeNlgXYmFppTXdjD5E7I4ET1NjvtNmQrb1/mJibybKkb/d4NA7YWAr1ojxuhpL3FHqdlw==} + polka@0.5.2: dependencies: '@polka/url': 0.5.0 trouter: 2.0.1 - dev: true - /portfinder@1.0.32: - resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} - engines: {node: '>= 0.12.0'} + portfinder@1.0.32: dependencies: async: 2.6.4 debug: 3.2.7 mkdirp: 0.5.6 transitivePeerDependencies: - supports-color - dev: true - /possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} - engines: {node: '>= 0.4'} - dev: true + possible-typed-array-names@1.1.0: {} - /postcss-calc@9.0.1(postcss@8.4.27): - resolution: {integrity: sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.2.2 + postcss-calc@9.0.1(postcss@8.4.27): dependencies: postcss: 8.4.27 postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 - dev: true - /postcss-colormin@6.1.0(postcss@8.4.27): - resolution: {integrity: sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-colormin@6.1.0(postcss@8.4.27): dependencies: browserslist: 4.24.4 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.4.27 postcss-value-parser: 4.2.0 - dev: true - /postcss-convert-values@6.1.0(postcss@8.4.27): - resolution: {integrity: sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-convert-values@6.1.0(postcss@8.4.27): dependencies: browserslist: 4.24.4 postcss: 8.4.27 postcss-value-parser: 4.2.0 - dev: true - /postcss-discard-comments@6.0.2(postcss@8.4.27): - resolution: {integrity: sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-discard-comments@6.0.2(postcss@8.4.27): dependencies: postcss: 8.4.27 - dev: true - /postcss-discard-duplicates@6.0.3(postcss@8.4.27): - resolution: {integrity: sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-discard-duplicates@6.0.3(postcss@8.4.27): dependencies: postcss: 8.4.27 - dev: true - /postcss-discard-empty@6.0.3(postcss@8.4.27): - resolution: {integrity: sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-discard-empty@6.0.3(postcss@8.4.27): dependencies: postcss: 8.4.27 - dev: true - /postcss-discard-overridden@6.0.2(postcss@8.4.27): - resolution: {integrity: sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-discard-overridden@6.0.2(postcss@8.4.27): dependencies: postcss: 8.4.27 - dev: true - /postcss-import@14.1.0(postcss@8.4.27): - resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} - engines: {node: '>=10.0.0'} - peerDependencies: - postcss: ^8.0.0 + postcss-import@14.1.0(postcss@8.4.27): dependencies: postcss: 8.4.27 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.10 - dev: true - /postcss-js@4.0.1(postcss@8.4.27): - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 + postcss-js@4.0.1(postcss@8.4.27): dependencies: camelcase-css: 2.0.1 postcss: 8.4.27 - dev: true - /postcss-load-config@3.1.4(postcss@8.4.27): - resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} - engines: {node: '>= 10'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true + postcss-load-config@3.1.4(postcss@8.4.27): dependencies: lilconfig: 2.1.0 - postcss: 8.4.27 yaml: 1.10.2 - dev: true + optionalDependencies: + postcss: 8.4.27 - /postcss-merge-longhand@6.0.5(postcss@8.4.27): - resolution: {integrity: sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-merge-longhand@6.0.5(postcss@8.4.27): dependencies: postcss: 8.4.27 postcss-value-parser: 4.2.0 stylehacks: 6.1.1(postcss@8.4.27) - dev: true - /postcss-merge-rules@6.1.1(postcss@8.4.27): - resolution: {integrity: sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-merge-rules@6.1.1(postcss@8.4.27): dependencies: browserslist: 4.24.4 caniuse-api: 3.0.0 cssnano-utils: 4.0.2(postcss@8.4.27) postcss: 8.4.27 postcss-selector-parser: 6.1.2 - dev: true - /postcss-minify-font-values@6.1.0(postcss@8.4.27): - resolution: {integrity: sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-minify-font-values@6.1.0(postcss@8.4.27): dependencies: postcss: 8.4.27 postcss-value-parser: 4.2.0 - dev: true - /postcss-minify-gradients@6.0.3(postcss@8.4.27): - resolution: {integrity: sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-minify-gradients@6.0.3(postcss@8.4.27): dependencies: colord: 2.9.3 cssnano-utils: 4.0.2(postcss@8.4.27) postcss: 8.4.27 postcss-value-parser: 4.2.0 - dev: true - /postcss-minify-params@6.1.0(postcss@8.4.27): - resolution: {integrity: sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-minify-params@6.1.0(postcss@8.4.27): dependencies: browserslist: 4.24.4 cssnano-utils: 4.0.2(postcss@8.4.27) postcss: 8.4.27 postcss-value-parser: 4.2.0 - dev: true - /postcss-minify-selectors@6.0.4(postcss@8.4.27): - resolution: {integrity: sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-minify-selectors@6.0.4(postcss@8.4.27): dependencies: postcss: 8.4.27 postcss-selector-parser: 6.1.2 - dev: true - /postcss-modules-extract-imports@3.1.0(postcss@8.5.2): - resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 + postcss-modules-extract-imports@3.1.0(postcss@8.5.2): dependencies: postcss: 8.5.2 - dev: true - /postcss-modules-local-by-default@4.2.0(postcss@8.5.2): - resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 + postcss-modules-local-by-default@4.2.0(postcss@8.5.2): dependencies: icss-utils: 5.1.0(postcss@8.5.2) postcss: 8.5.2 postcss-selector-parser: 7.1.0 postcss-value-parser: 4.2.0 - dev: true - /postcss-modules-scope@3.2.1(postcss@8.5.2): - resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 + postcss-modules-scope@3.2.1(postcss@8.5.2): dependencies: postcss: 8.5.2 postcss-selector-parser: 7.1.0 - dev: true - /postcss-modules-values@4.0.0(postcss@8.5.2): - resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 + postcss-modules-values@4.0.0(postcss@8.5.2): dependencies: icss-utils: 5.1.0(postcss@8.5.2) postcss: 8.5.2 - dev: true - /postcss-modules@4.3.1(postcss@8.5.2): - resolution: {integrity: sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==} - peerDependencies: - postcss: ^8.0.0 + postcss-modules@4.3.1(postcss@8.5.2): dependencies: generic-names: 4.0.0 icss-replace-symbols: 1.1.0 @@ -11918,281 +14752,153 @@ packages: postcss-modules-scope: 3.2.1(postcss@8.5.2) postcss-modules-values: 4.0.0(postcss@8.5.2) string-hash: 1.1.3 - dev: true - /postcss-nested@6.0.0(postcss@8.4.27): - resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 + postcss-nested@6.0.0(postcss@8.4.27): dependencies: postcss: 8.4.27 postcss-selector-parser: 6.1.2 - dev: true - /postcss-normalize-charset@6.0.2(postcss@8.4.27): - resolution: {integrity: sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-normalize-charset@6.0.2(postcss@8.4.27): dependencies: postcss: 8.4.27 - dev: true - /postcss-normalize-display-values@6.0.2(postcss@8.4.27): - resolution: {integrity: sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-normalize-display-values@6.0.2(postcss@8.4.27): dependencies: postcss: 8.4.27 postcss-value-parser: 4.2.0 - dev: true - /postcss-normalize-positions@6.0.2(postcss@8.4.27): - resolution: {integrity: sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-normalize-positions@6.0.2(postcss@8.4.27): dependencies: postcss: 8.4.27 postcss-value-parser: 4.2.0 - dev: true - /postcss-normalize-repeat-style@6.0.2(postcss@8.4.27): - resolution: {integrity: sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-normalize-repeat-style@6.0.2(postcss@8.4.27): dependencies: postcss: 8.4.27 postcss-value-parser: 4.2.0 - dev: true - /postcss-normalize-string@6.0.2(postcss@8.4.27): - resolution: {integrity: sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-normalize-string@6.0.2(postcss@8.4.27): dependencies: postcss: 8.4.27 postcss-value-parser: 4.2.0 - dev: true - /postcss-normalize-timing-functions@6.0.2(postcss@8.4.27): - resolution: {integrity: sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-normalize-timing-functions@6.0.2(postcss@8.4.27): dependencies: postcss: 8.4.27 postcss-value-parser: 4.2.0 - dev: true - /postcss-normalize-unicode@6.1.0(postcss@8.4.27): - resolution: {integrity: sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-normalize-unicode@6.1.0(postcss@8.4.27): dependencies: browserslist: 4.24.4 postcss: 8.4.27 postcss-value-parser: 4.2.0 - dev: true - /postcss-normalize-url@6.0.2(postcss@8.4.27): - resolution: {integrity: sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-normalize-url@6.0.2(postcss@8.4.27): dependencies: postcss: 8.4.27 postcss-value-parser: 4.2.0 - dev: true - /postcss-normalize-whitespace@6.0.2(postcss@8.4.27): - resolution: {integrity: sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-normalize-whitespace@6.0.2(postcss@8.4.27): dependencies: postcss: 8.4.27 postcss-value-parser: 4.2.0 - dev: true - /postcss-ordered-values@6.0.2(postcss@8.4.27): - resolution: {integrity: sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-ordered-values@6.0.2(postcss@8.4.27): dependencies: cssnano-utils: 4.0.2(postcss@8.4.27) postcss: 8.4.27 postcss-value-parser: 4.2.0 - dev: true - /postcss-reduce-initial@6.1.0(postcss@8.4.27): - resolution: {integrity: sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-reduce-initial@6.1.0(postcss@8.4.27): dependencies: browserslist: 4.24.4 caniuse-api: 3.0.0 postcss: 8.4.27 - dev: true - /postcss-reduce-transforms@6.0.2(postcss@8.4.27): - resolution: {integrity: sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-reduce-transforms@6.0.2(postcss@8.4.27): dependencies: postcss: 8.4.27 postcss-value-parser: 4.2.0 - dev: true - /postcss-selector-parser@6.1.2: - resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} - engines: {node: '>=4'} + postcss-selector-parser@6.1.2: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - dev: true - /postcss-selector-parser@7.1.0: - resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} - engines: {node: '>=4'} + postcss-selector-parser@7.1.0: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - dev: true - /postcss-svgo@6.0.3(postcss@8.4.27): - resolution: {integrity: sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==} - engines: {node: ^14 || ^16 || >= 18} - peerDependencies: - postcss: ^8.4.31 + postcss-svgo@6.0.3(postcss@8.4.27): dependencies: postcss: 8.4.27 postcss-value-parser: 4.2.0 svgo: 3.3.2 - dev: true - /postcss-unique-selectors@6.0.4(postcss@8.4.27): - resolution: {integrity: sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-unique-selectors@6.0.4(postcss@8.4.27): dependencies: postcss: 8.4.27 postcss-selector-parser: 6.1.2 - dev: true - /postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: true + postcss-value-parser@4.2.0: {} - /postcss@8.4.27: - resolution: {integrity: sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==} - engines: {node: ^10 || ^12 || >=14} + postcss@8.4.27: dependencies: nanoid: 3.3.8 picocolors: 1.1.1 source-map-js: 1.2.1 - dev: true - /postcss@8.5.2: - resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} - engines: {node: ^10 || ^12 || >=14} + postcss@8.5.2: dependencies: nanoid: 3.3.8 picocolors: 1.1.1 source-map-js: 1.2.1 - dev: true - /prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} - hasBin: true - dev: true + prettier@2.8.8: {} - /pretty-ms@9.2.0: - resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} - engines: {node: '>=18'} + pretty-ms@9.2.0: dependencies: parse-ms: 4.0.0 - dev: true - /prismjs@1.27.0: - resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} - engines: {node: '>=6'} - dev: true - - /prismjs@1.29.0: - resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} - engines: {node: '>=6'} - dev: true + prismjs@1.27.0: {} - /process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: true + prismjs@1.29.0: {} - /process@0.11.10: - resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} - engines: {node: '>= 0.6.0'} - dev: true + process-nextick-args@2.0.1: {} - /prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + process@0.11.10: {} + + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 - dev: true - /property-information@5.6.0: - resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==} + property-information@5.6.0: dependencies: xtend: 4.0.2 - dev: true - /property-information@6.5.0: - resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} - dev: true + property-information@6.5.0: {} - /protocols@2.0.1: - resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==} - dev: true + protocols@2.0.2: {} - /proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 ipaddr.js: 1.9.1 - dev: true - /proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: true + proxy-from-env@1.1.0: {} - /pseudomap@1.0.2: - resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} - dev: true + pseudomap@1.0.2: {} - /psl@1.15.0: - resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} + psl@1.15.0: dependencies: punycode: 2.3.1 - dev: true - /pstree.remy@1.1.8: - resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} - dev: true + pstree.remy@1.1.8: {} - /public-encrypt@4.0.3: - resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} + public-encrypt@4.0.3: dependencies: bn.js: 4.12.1 browserify-rsa: 4.1.1 @@ -12200,677 +14906,413 @@ packages: parse-asn1: 5.1.7 randombytes: 2.1.0 safe-buffer: 5.2.1 - dev: true - /punycode@1.4.1: - resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} - dev: true + punycode@1.4.1: {} - /punycode@2.1.1: - resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} - engines: {node: '>=6'} - dev: true + punycode@2.1.1: {} - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - dev: true + punycode@2.3.1: {} - /qrcode.react@3.2.0(react@18.3.1): - resolution: {integrity: sha512-YietHHltOHA4+l5na1srdaMx4sVSOjV9tamHs+mwiLWAMr6QVACRUw1Neax5CptFILcNoITctJY0Ipyn5enQ8g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + qrcode.react@3.2.0(react@18.3.1): dependencies: react: 18.3.1 - dev: true - /qs@6.13.0: - resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} - engines: {node: '>=0.6'} + qs@6.13.0: dependencies: side-channel: 1.1.0 - dev: true - /qs@6.14.0: - resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} - engines: {node: '>=0.6'} + qs@6.14.0: dependencies: side-channel: 1.1.0 - dev: true - /query-string@9.1.1: - resolution: {integrity: sha512-MWkCOVIcJP9QSKU52Ngow6bsAWAPlPK2MludXvcrS2bGZSl+T1qX9MZvRIkqUIkGLJquMJHWfsT6eRqUpp4aWg==} - engines: {node: '>=18'} + query-string@9.1.1: dependencies: decode-uri-component: 0.4.1 filter-obj: 5.1.0 split-on-first: 3.0.0 - dev: true - /querystring-es3@0.2.1: - resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} - engines: {node: '>=0.4.x'} - dev: true + querystring-es3@0.2.1: {} - /querystringify@2.2.0: - resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - dev: true + querystringify@2.2.0: {} - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true + queue-microtask@1.2.3: {} - /quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - dev: true + quick-lru@5.1.1: {} - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 - dev: true - /randomfill@1.0.4: - resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} + randomfill@1.0.4: dependencies: randombytes: 2.1.0 safe-buffer: 5.2.1 - dev: true - /range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - dev: true + range-parser@1.2.1: {} - /raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} - engines: {node: '>= 0.8'} + raw-body@2.5.2: dependencies: bytes: 3.1.2 http-errors: 2.0.0 iconv-lite: 0.4.24 unpipe: 1.0.0 - dev: true - /rc-cascader@3.28.2(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-8f+JgM83iLTvjgdkgU7GfI4qY8icXOBP0cGZjOdx2iJAkEe8ucobxDQAVE69UD/c3ehCxZlcgEHeD5hFmypbUw==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + rc-cascader@3.28.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 array-tree-filter: 2.1.0 classnames: 2.5.1 - rc-select: 14.15.2(react-dom@18.3.1)(react@18.3.1) - rc-tree: 5.9.0(react-dom@18.3.1)(react@18.3.1) - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-select: 14.15.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-tree: 5.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-checkbox@3.3.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-Ih3ZaAcoAiFKJjifzwsGiT/f/quIkxJoklW4yKGho14Olulwn8gN7hOBve0/WGDg5o/l/5mL0w7ff7/YGvefVw==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + rc-checkbox@3.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 classnames: 2.5.1 - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-collapse@3.8.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-YVBkssrKPBG09TGfcWWGj8zJBYD9G3XuTy89t5iUmSXrIXEAnO1M+qjUxRW6b4Qi0+wNWG6MHJF/+US+nmIlzA==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + rc-collapse@3.8.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 classnames: 2.5.1 - rc-motion: 2.9.5(react-dom@18.3.1)(react@18.3.1) - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-dialog@9.6.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-ApoVi9Z8PaCQg6FsUzS8yvBEQy0ZL2PkuvAgrmohPkN3okps5WZ5WQWPc1RNuiOKaAYv8B97ACdsFU5LizzCqg==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + rc-dialog@9.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 - '@rc-component/portal': 1.1.2(react-dom@18.3.1)(react@18.3.1) + '@babel/runtime': 7.26.9 + '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) classnames: 2.5.1 - rc-motion: 2.9.5(react-dom@18.3.1)(react@18.3.1) - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-drawer@7.2.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-9lOQ7kBekEJRdEpScHvtmEtXnAsy+NGDXiRWc2ZVC7QXAazNVbeT4EraQKYwCME8BJLa8Bxqxvs5swwyOepRwg==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + rc-drawer@7.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 - '@rc-component/portal': 1.1.2(react-dom@18.3.1)(react@18.3.1) + '@babel/runtime': 7.26.9 + '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) classnames: 2.5.1 - rc-motion: 2.9.5(react-dom@18.3.1)(react@18.3.1) - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-dropdown@4.2.1(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-YDAlXsPv3I1n42dv1JpdM7wJ+gSUBfeyPK59ZpBD9jQhK9jVuxpjj3NmWQHOBceA1zEPVX84T2wbdb2SD0UjmA==} - peerDependencies: - react: '>=16.11.0' - react-dom: '>=16.11.0' + rc-dropdown@4.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 - '@rc-component/trigger': 2.2.6(react-dom@18.3.1)(react@18.3.1) + '@babel/runtime': 7.26.9 + '@rc-component/trigger': 2.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) classnames: 2.5.1 - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-field-form@2.4.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-XZ/lF9iqf9HXApIHQHqzJK5v2w4mkUMsVqAzOyWVzoiwwXEavY6Tpuw7HavgzIoD+huVff4JghSGcgEfX6eycg==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + rc-field-form@2.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 '@rc-component/async-validator': 5.0.4 - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-image@7.11.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-aZkTEZXqeqfPZtnSdNUnKQA0N/3MbgR7nUnZ+/4MfSFWPFHZau4p5r5ShaI0KPEMnNjv4kijSCFq/9wtJpwykw==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + rc-image@7.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 - '@rc-component/portal': 1.1.2(react-dom@18.3.1)(react@18.3.1) + '@babel/runtime': 7.26.9 + '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) classnames: 2.5.1 - rc-dialog: 9.6.0(react-dom@18.3.1)(react@18.3.1) - rc-motion: 2.9.5(react-dom@18.3.1)(react@18.3.1) - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-dialog: 9.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-input-number@9.2.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-5XZFhBCV5f9UQ62AZ2hFbEY8iZT/dm23Q1kAg0H8EvOgD3UDbYYJAayoVIkM3lQaCqYAW5gV0yV3vjw1XtzWHg==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + rc-input-number@9.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 '@rc-component/mini-decimal': 1.1.0 classnames: 2.5.1 - rc-input: 1.6.4(react-dom@18.3.1)(react@18.3.1) - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-input: 1.6.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-input@1.6.4(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-lBZhfRD4NSAUW0zOKLUeI6GJuXkxeZYi0hr8VcJgJpyTNOvHw1ysrKWAHcEOAAHj7guxgmWYSi6xWrEdfrSAsA==} - peerDependencies: - react: '>=16.0.0' - react-dom: '>=16.0.0' + rc-input@1.6.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 classnames: 2.5.1 - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-mentions@2.16.1(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-GnhSTGP9Mtv6pqFFGQze44LlrtWOjHNrUUAcsdo9DnNAhN4pwVPEWy4z+2jpjkiGlJ3VoXdvMHcNDQdfI9fEaw==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + rc-mentions@2.16.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 - '@rc-component/trigger': 2.2.6(react-dom@18.3.1)(react@18.3.1) + '@babel/runtime': 7.26.9 + '@rc-component/trigger': 2.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) classnames: 2.5.1 - rc-input: 1.6.4(react-dom@18.3.1)(react@18.3.1) - rc-menu: 9.15.1(react-dom@18.3.1)(react@18.3.1) - rc-textarea: 1.8.2(react-dom@18.3.1)(react@18.3.1) - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-input: 1.6.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-menu: 9.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-textarea: 1.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-menu@9.15.1(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-UKporqU6LPfHnpPmtP6hdEK4iO5Q+b7BRv/uRpxdIyDGplZy9jwUjsnpev5bs3PQKB0H0n34WAPDfjAfn3kAPA==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + rc-menu@9.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 - '@rc-component/trigger': 2.2.6(react-dom@18.3.1)(react@18.3.1) + '@babel/runtime': 7.26.9 + '@rc-component/trigger': 2.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) classnames: 2.5.1 - rc-motion: 2.9.5(react-dom@18.3.1)(react@18.3.1) - rc-overflow: 1.4.1(react-dom@18.3.1)(react@18.3.1) - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-overflow: 1.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-motion@2.9.5(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-w+XTUrfh7ArbYEd2582uDrEhmBHwK1ZENJiSJVb7uRxdE7qJSYjbO2eksRXmndqyKqKoYPc9ClpPh5242mV1vA==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + rc-motion@2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 classnames: 2.5.1 - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-notification@5.6.3(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-42szwnn8VYQoT6GnjO00i1iwqV9D1TTMvxObWsuLwgl0TsOokzhkYiufdtQBsJMFjJravS1hfDKVMHLKLcPE4g==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + rc-notification@5.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 classnames: 2.5.1 - rc-motion: 2.9.5(react-dom@18.3.1)(react@18.3.1) - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-overflow@1.4.1(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-3MoPQQPV1uKyOMVNd6SZfONi+f3st0r8PksexIdBTeIYbMX0Jr+k7pHEDvsXtR4BpCv90/Pv2MovVNhktKrwvw==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + rc-overflow@1.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 classnames: 2.5.1 - rc-resize-observer: 1.4.3(react-dom@18.3.1)(react@18.3.1) - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-resize-observer: 1.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-pagination@4.3.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-UubEWA0ShnroQ1tDa291Fzw6kj0iOeF26IsUObxYTpimgj4/qPCWVFl18RLZE+0Up1IZg0IK4pMn6nB3mjvB7g==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + rc-pagination@4.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 classnames: 2.5.1 - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-picker@4.6.15(dayjs@1.11.11)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-OWZ1yrMie+KN2uEUfYCfS4b2Vu6RC1FWwNI0s+qypsc3wRt7g+peuZKVIzXCTaJwyyZruo80+akPg2+GmyiJjw==} - engines: {node: '>=8.x'} - peerDependencies: - date-fns: '>= 2.x' - dayjs: '>= 1.x' - luxon: '>= 3.x' - moment: '>= 2.x' - react: '>=16.9.0' - react-dom: '>=16.9.0' - peerDependenciesMeta: - date-fns: - optional: true - dayjs: - optional: true - luxon: - optional: true - moment: - optional: true + rc-picker@4.6.15(dayjs@1.11.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 - '@rc-component/trigger': 2.2.6(react-dom@18.3.1)(react@18.3.1) + '@babel/runtime': 7.26.9 + '@rc-component/trigger': 2.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) classnames: 2.5.1 - dayjs: 1.11.11 - rc-overflow: 1.4.1(react-dom@18.3.1)(react@18.3.1) - rc-resize-observer: 1.4.3(react-dom@18.3.1)(react@18.3.1) - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-overflow: 1.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-resize-observer: 1.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true + optionalDependencies: + dayjs: 1.11.11 - /rc-progress@4.0.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-oofVMMafOCokIUIBnZLNcOZFsABaUw8PPrf1/y0ZBvKZNpOiu5h4AO9vv11Sw0p4Hb3D0yGWuEattcQGtNJ/aw==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + rc-progress@4.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 classnames: 2.5.1 - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-rate@2.13.1(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-QUhQ9ivQ8Gy7mtMZPAjLbxBt5y9GRp65VcUyGUMF3N3fhiftivPHdpuDIaWIMOTEprAjZPC08bls1dQB+I1F2Q==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + rc-rate@2.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 classnames: 2.5.1 - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-resize-observer@1.4.3(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-YZLjUbyIWox8E9i9C3Tm7ia+W7euPItNWSPX5sCcQTYbnwDb5uNpnLHQCG1f22oZWUhLw4Mv2tFmeWe68CDQRQ==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + rc-resize-observer@1.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 classnames: 2.5.1 - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) resize-observer-polyfill: 1.5.1 - dev: true - /rc-segmented@2.5.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-B28Fe3J9iUFOhFJET3RoXAPFJ2u47QvLSYcZWC4tFYNGPEjug5LAxEasZlA/PpAxhdOPqGWsGbSj7ftneukJnw==} - peerDependencies: - react: '>=16.0.0' - react-dom: '>=16.0.0' + rc-segmented@2.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 classnames: 2.5.1 - rc-motion: 2.9.5(react-dom@18.3.1)(react@18.3.1) - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-select@14.15.2(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-oNoXlaFmpqXYcQDzcPVLrEqS2J9c+/+oJuGrlXeVVX/gVgrbHa5YcyiRUXRydFjyuA7GP3elRuLF7Y3Tfwltlw==} - engines: {node: '>=8.x'} - peerDependencies: - react: '*' - react-dom: '*' + rc-select@14.15.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 - '@rc-component/trigger': 2.2.6(react-dom@18.3.1)(react@18.3.1) + '@babel/runtime': 7.26.9 + '@rc-component/trigger': 2.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) classnames: 2.5.1 - rc-motion: 2.9.5(react-dom@18.3.1)(react@18.3.1) - rc-overflow: 1.4.1(react-dom@18.3.1)(react@18.3.1) - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) - rc-virtual-list: 3.18.1(react-dom@18.3.1)(react@18.3.1) + rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-overflow: 1.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-virtual-list: 3.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-slider@11.1.8(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-2gg/72YFSpKP+Ja5AjC5DPL1YnV8DEITDQrcc1eASrUYjl0esptaBVJBh5nLTXCCp15eD8EuGjwezVGSHhs9tQ==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + rc-slider@11.1.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 classnames: 2.5.1 - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-steps@6.0.1(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-lKHL+Sny0SeHkQKKDJlAjV5oZ8DwCdS2hFhAkIjuQt1/pB81M0cA0ErVFdHq9+jmPmFw1vJB2F5NBzFXLJxV+g==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + rc-steps@6.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 classnames: 2.5.1 - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-switch@4.1.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-TI8ufP2Az9oEbvyCeVE4+90PDSljGyuwix3fV58p7HV2o4wBnVToEyomJRVyTaZeqNPAp+vqeo4Wnj5u0ZZQBg==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + rc-switch@4.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 classnames: 2.5.1 - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-table@7.47.5(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-fzq+V9j/atbPIcvs3emuclaEoXulwQpIiJA6/7ey52j8+9cJ4P8DGmp4YzfUVDrb3qhgedcVeD6eRgUrokwVEQ==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + rc-table@7.47.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 - '@rc-component/context': 1.4.0(react-dom@18.3.1)(react@18.3.1) + '@babel/runtime': 7.26.9 + '@rc-component/context': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) classnames: 2.5.1 - rc-resize-observer: 1.4.3(react-dom@18.3.1)(react@18.3.1) - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) - rc-virtual-list: 3.18.1(react-dom@18.3.1)(react@18.3.1) + rc-resize-observer: 1.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-virtual-list: 3.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-tabs@15.3.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-lzE18r+zppT/jZWOAWS6ntdkDUKHOLJzqMi5UAij1LeKwOaQaupupAoI9Srn73GRzVpmGznkECMRrzkRusC40A==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + rc-tabs@15.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 classnames: 2.5.1 - rc-dropdown: 4.2.1(react-dom@18.3.1)(react@18.3.1) - rc-menu: 9.15.1(react-dom@18.3.1)(react@18.3.1) - rc-motion: 2.9.5(react-dom@18.3.1)(react@18.3.1) - rc-resize-observer: 1.4.3(react-dom@18.3.1)(react@18.3.1) - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-dropdown: 4.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-menu: 9.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-resize-observer: 1.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-textarea@1.8.2(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-UFAezAqltyR00a8Lf0IPAyTd29Jj9ee8wt8DqXyDMal7r/Cg/nDt3e1OOv3Th4W6mKaZijjgwuPXhAfVNTN8sw==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + rc-textarea@1.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 classnames: 2.5.1 - rc-input: 1.6.4(react-dom@18.3.1)(react@18.3.1) - rc-resize-observer: 1.4.3(react-dom@18.3.1)(react@18.3.1) - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-input: 1.6.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-resize-observer: 1.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-tooltip@6.2.1(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-rws0duD/3sHHsD905Nex7FvoUGy2UBQRhTkKxeEvr2FB+r21HsOxcDJI0TzyO8NHhnAA8ILr8pfbSBg5Jj5KBg==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + rc-tooltip@6.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 - '@rc-component/trigger': 2.2.6(react-dom@18.3.1)(react@18.3.1) + '@babel/runtime': 7.26.9 + '@rc-component/trigger': 2.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) classnames: 2.5.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-tree-select@5.23.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-aQGi2tFSRw1WbXv0UVXPzHm09E0cSvUVZMLxQtMv3rnZZpNmdRXWrnd9QkLNlVH31F+X5rgghmdSFF3yZW0N9A==} - peerDependencies: - react: '*' - react-dom: '*' + rc-tree-select@5.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 classnames: 2.5.1 - rc-select: 14.15.2(react-dom@18.3.1)(react@18.3.1) - rc-tree: 5.9.0(react-dom@18.3.1)(react@18.3.1) - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-select: 14.15.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-tree: 5.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-tree@5.9.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-CPrgOvm9d/9E+izTONKSngNzQdIEjMox2PBufWjS1wf7vxtvmCWzK1SlpHbRY6IaBfJIeZ+88RkcIevf729cRg==} - engines: {node: '>=10.x'} - peerDependencies: - react: '*' - react-dom: '*' + rc-tree@5.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 classnames: 2.5.1 - rc-motion: 2.9.5(react-dom@18.3.1)(react@18.3.1) - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) - rc-virtual-list: 3.18.1(react-dom@18.3.1)(react@18.3.1) + rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-virtual-list: 3.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-upload@4.8.1(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-toEAhwl4hjLAI1u8/CgKWt30BR06ulPa4iGQSMvSXoHzO88gPCslxqV/mnn4gJU7PDoltGIC9Eh+wkeudqgHyw==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + rc-upload@4.8.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 classnames: 2.5.1 - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /rc-util@5.44.4(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-resueRJzmHG9Q6rI/DfK6Kdv9/Lfls05vzMs1Sk3M2P+3cJa+MakaZyWY8IPfehVuhPJFKrIY1IK4GqbiaiY5w==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + rc-util@5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-is: 18.3.1 - dev: true - /rc-virtual-list@3.18.1(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-ARSsD/dey/I4yNQHFYYUaKLUkD1wnD4lRZIvb3rCLMbTMmoFQJRVrWuSfbNt5P5MzMNooEBDvqrUPM4QN7BMNA==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + rc-virtual-list@3.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 classnames: 2.5.1 - rc-resize-observer: 1.4.3(react-dom@18.3.1)(react@18.3.1) - rc-util: 5.44.4(react-dom@18.3.1)(react@18.3.1) + rc-resize-observer: 1.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /react-docgen-typescript@2.2.2(typescript@5.0.4): - resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} - peerDependencies: - typescript: '>= 4.3.x' + react-docgen-typescript@2.2.2(typescript@5.0.4): dependencies: typescript: 5.0.4 - dev: true - /react-dom@18.3.1(react@18.3.1): - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} - peerDependencies: - react: ^18.3.1 + react-dom@18.3.1(react@18.3.1): dependencies: loose-envify: 1.4.0 react: 18.3.1 scheduler: 0.23.2 - dev: true - /react-fast-compare@3.2.2: - resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} - dev: true + react-fast-compare@3.2.2: {} - /react-helmet-async@1.3.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==} - peerDependencies: - react: ^16.6.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 + react-helmet-async@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 invariant: 2.2.4 prop-types: 15.8.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-fast-compare: 3.2.2 shallowequal: 1.1.0 - dev: true - /react-helmet@6.1.0(react@18.3.1): - resolution: {integrity: sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==} - peerDependencies: - react: '>=16.3.0' + react-helmet@6.1.0(react@18.3.1): dependencies: object-assign: 4.1.1 prop-types: 15.8.1 react: 18.3.1 react-fast-compare: 3.2.2 react-side-effect: 2.1.2(react@18.3.1) - dev: true - /react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - dev: true + react-is@16.13.1: {} - /react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - dev: true + react-is@18.3.1: {} - /react-lazy-with-preload@2.2.1: - resolution: {integrity: sha512-ONSb8gizLE5jFpdHAclZ6EAAKuFX2JydnFXPPPjoUImZlLjGtKzyBS8SJgJq7CpLgsGKh9QCZdugJyEEOVC16Q==} - dev: true + react-lazy-with-preload@2.2.1: {} - /react-markdown@8.0.7(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==} - peerDependencies: - '@types/react': '>=16' - react: '>=16' + react-markdown@8.0.7(@types/react@18.3.3)(react@18.3.1): dependencies: '@types/hast': 2.3.10 '@types/prop-types': 15.7.14 @@ -12891,158 +15333,93 @@ packages: vfile: 5.3.7 transitivePeerDependencies: - supports-color - dev: true - /react-refresh@0.14.0: - resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} - engines: {node: '>=0.10.0'} - dev: true + react-refresh@0.14.0: {} - /react-resizable-panels@2.0.22(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-G8x8o7wjQxCG+iF4x4ngKVBpe0CY+DAZ/SaiDoqBEt0yuKJe9OE/VVYMBMMugQ3GyQ65NnSJt23tujlaZZe75A==} - peerDependencies: - react: ^16.14.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.14.0 || ^17.0.0 || ^18.0.0 + react-resizable-panels@2.0.22(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /react-router-dom@6.11.1(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-dPC2MhoPeTQ1YUOt5uIK376SMNWbwUxYRWk2ZmTT4fZfwlOvabF8uduRKKJIyfkCZvMgiF0GSCQckmkGGijIrg==} - engines: {node: '>=14'} - peerDependencies: - react: '>=16.8' - react-dom: '>=16.8' + react-router-dom@6.11.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@remix-run/router': 1.6.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-router: 6.11.1(react@18.3.1) - dev: true - /react-router-dom@6.27.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-+bvtFWMC0DgAFrfKXKG9Fc+BcXWRUO1aJIihbB79xaeq0v5UzfvnM5houGUm1Y461WVRcgAQ+Clh5rdb1eCx4g==} - engines: {node: '>=14.0.0'} - peerDependencies: - react: '>=16.8' - react-dom: '>=16.8' + react-router-dom@6.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@remix-run/router': 1.20.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-router: 6.27.0(react@18.3.1) - dev: true - /react-router-dom@6.29.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-pkEbJPATRJ2iotK+wUwHfy0xs2T59YPEN8BQxVCPeBZvK7kfPESRc/nyxzdcxR17hXgUPYx2whMwl+eo9cUdnQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - react: '>=16.8' - react-dom: '>=16.8' + react-router-dom@6.29.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@remix-run/router': 1.22.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-router: 6.29.0(react@18.3.1) - dev: true - /react-router@6.11.1(react@18.3.1): - resolution: {integrity: sha512-OZINSdjJ2WgvAi7hgNLazrEV8SGn6xrKA+MkJe9wVDMZ3zQ6fdJocUjpCUCI0cNrelWjcvon0S/QK/j0NzL3KA==} - engines: {node: '>=14'} - peerDependencies: - react: '>=16.8' + react-router@6.11.1(react@18.3.1): dependencies: '@remix-run/router': 1.6.1 react: 18.3.1 - dev: true - /react-router@6.27.0(react@18.3.1): - resolution: {integrity: sha512-YA+HGZXz4jaAkVoYBE98VQl+nVzI+cVI2Oj/06F5ZM+0u3TgedN9Y9kmMRo2mnkSK2nCpNQn0DVob4HCsY/WLw==} - engines: {node: '>=14.0.0'} - peerDependencies: - react: '>=16.8' + react-router@6.27.0(react@18.3.1): dependencies: '@remix-run/router': 1.20.0 react: 18.3.1 - dev: true - /react-router@6.29.0(react@18.3.1): - resolution: {integrity: sha512-DXZJoE0q+KyeVw75Ck6GkPxFak63C4fGqZGNijnWgzB/HzSP1ZfTlBj5COaGWwhrMQ/R8bXiq5Ooy4KG+ReyjQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - react: '>=16.8' + react-router@6.29.0(react@18.3.1): dependencies: '@remix-run/router': 1.22.0 react: 18.3.1 - dev: true - /react-side-effect@2.1.2(react@18.3.1): - resolution: {integrity: sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==} - peerDependencies: - react: ^16.3.0 || ^17.0.0 || ^18.0.0 + react-side-effect@2.1.2(react@18.3.1): dependencies: react: 18.3.1 - dev: true - /react-syntax-highlighter@15.6.1(react@18.3.1): - resolution: {integrity: sha512-OqJ2/vL7lEeV5zTJyG7kmARppUjiB9h9udl4qHQjjgEos66z00Ia0OckwYfRxCSFrW8RJIBnsBwQsHZbVPspqg==} - peerDependencies: - react: '>= 0.14.0' + react-syntax-highlighter@15.6.1(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.9 highlight.js: 10.7.3 highlightjs-vue: 1.0.0 lowlight: 1.20.0 prismjs: 1.29.0 react: 18.3.1 refractor: 3.6.0 - dev: true - /react@18.3.1: - resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} - engines: {node: '>=0.10.0'} + react@18.3.1: dependencies: loose-envify: 1.4.0 - dev: true - /read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + read-cache@1.0.0: dependencies: pify: 2.3.0 - dev: true - /read-pkg-up@9.1.0: - resolution: {integrity: sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + read-pkg-up@9.1.0: dependencies: find-up: 6.3.0 read-pkg: 7.1.0 type-fest: 2.19.0 - dev: true - /read-pkg@7.1.0: - resolution: {integrity: sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==} - engines: {node: '>=12.20'} + read-pkg@7.1.0: dependencies: '@types/normalize-package-data': 2.4.4 normalize-package-data: 3.0.3 parse-json: 5.2.0 type-fest: 2.19.0 - dev: true - /read-yaml-file@1.1.0: - resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} - engines: {node: '>=6'} + read-yaml-file@1.1.0: dependencies: graceful-fs: 4.2.11 js-yaml: 3.14.1 pify: 4.0.1 strip-bom: 3.0.0 - dev: true - /readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -13051,93 +15428,58 @@ packages: safe-buffer: 5.1.2 string_decoder: 1.1.1 util-deprecate: 1.0.2 - dev: true - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} + readable-stream@3.6.2: dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - dev: true - /readable-stream@4.7.0: - resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + readable-stream@4.7.0: dependencies: abort-controller: 3.0.0 buffer: 6.0.3 events: 3.3.0 process: 0.11.10 string_decoder: 1.3.0 - dev: true - /readable-web-to-node-stream@3.0.3: - resolution: {integrity: sha512-In3boYjBnbGVrLuuRu/Ath/H6h1jgk30nAsk/71tCare1dTVoe1oMBGRn5LGf0n3c1BcHwwAqpraxX4AUAP5KA==} - engines: {node: '>=8'} + readable-web-to-node-stream@3.0.4: dependencies: - process: 0.11.10 readable-stream: 4.7.0 - dev: true - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + readdirp@3.6.0: dependencies: picomatch: 2.3.1 - dev: true - /redux-promise-middleware@6.2.0(redux@4.2.1): - resolution: {integrity: sha512-TEzfMeLX63gju2WqkdFQlQMvUGYzFvJNePIJJsBlbPHs3Txsbc/5Rjhmtha1XdMU6lkeiIlp1Qx7AR3Zo9he9g==} - peerDependencies: - redux: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + redux-promise-middleware@6.2.0(redux@4.2.1): dependencies: redux: 4.2.1 - dev: true - /redux@4.2.1: - resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==} + redux@4.2.1: dependencies: - '@babel/runtime': 7.26.7 - dev: true + '@babel/runtime': 7.26.9 - /refractor@3.6.0: - resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==} + refractor@3.6.0: dependencies: hastscript: 6.0.0 parse-entities: 2.0.0 prismjs: 1.27.0 - dev: true - /regenerate-unicode-properties@10.2.0: - resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} - engines: {node: '>=4'} + regenerate-unicode-properties@10.2.0: dependencies: regenerate: 1.4.2 - dev: true - /regenerate@1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - dev: true + regenerate@1.4.2: {} - /regenerator-runtime@0.13.11: - resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} - dev: true + regenerator-runtime@0.13.11: {} - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - dev: true + regenerator-runtime@0.14.1: {} - /regenerator-transform@0.15.2: - resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + regenerator-transform@0.15.2: dependencies: - '@babel/runtime': 7.26.7 - dev: true + '@babel/runtime': 7.26.9 - /regexpu-core@6.2.0: - resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} - engines: {node: '>=4'} + regexpu-core@6.2.0: dependencies: regenerate: 1.4.2 regenerate-unicode-properties: 10.2.0 @@ -13145,21 +15487,14 @@ packages: regjsparser: 0.12.0 unicode-match-property-ecmascript: 2.0.0 unicode-match-property-value-ecmascript: 2.2.0 - dev: true - /regjsgen@0.8.0: - resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} - dev: true + regjsgen@0.8.0: {} - /regjsparser@0.12.0: - resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} - hasBin: true + regjsparser@0.12.0: dependencies: jsesc: 3.0.2 - dev: true - /rehype-autolink-headings@6.1.1: - resolution: {integrity: sha512-NMYzZIsHM3sA14nC5rAFuUPIOfg+DFmf9EY1YMhaNlB7+3kK/ZlE6kqPfuxr1tsJ1XWkTrMtMoyHosU70d35mA==} + rehype-autolink-headings@6.1.1: dependencies: '@types/hast': 2.3.10 extend: 3.0.2 @@ -13168,10 +15503,8 @@ packages: hast-util-is-element: 2.1.3 unified: 10.1.2 unist-util-visit: 4.1.2 - dev: true - /rehype-external-links@2.1.0: - resolution: {integrity: sha512-2YMJZVM1hxZnwl9IPkbN5Pjn78kXkAX7lq9VEtlaGA29qIls25vZN+ucNIJdbQUe+9NNFck17BiOhGmsD6oLIg==} + rehype-external-links@2.1.0: dependencies: '@types/hast': 2.3.10 extend: 3.0.2 @@ -13180,10 +15513,8 @@ packages: space-separated-tokens: 2.0.2 unified: 10.1.2 unist-util-visit: 4.1.2 - dev: true - /rehype-slug@5.1.0: - resolution: {integrity: sha512-Gf91dJoXneiorNEnn+Phx97CO7oRMrpi+6r155tTxzGuLtm+QrI4cTwCa9e1rtePdL4i9tSO58PeSS6HWfgsiw==} + rehype-slug@5.1.0: dependencies: '@types/hast': 2.3.10 github-slugger: 2.0.0 @@ -13192,23 +15523,16 @@ packages: hast-util-to-string: 2.0.0 unified: 10.1.2 unist-util-visit: 4.1.2 - dev: true - /rehype-stringify@9.0.4: - resolution: {integrity: sha512-Uk5xu1YKdqobe5XpSskwPvo1XeHUUucWEQSl8hTrXt5selvca1e8K1EZ37E6YoZ4BT8BCqCdVfQW7OfHfthtVQ==} + rehype-stringify@9.0.4: dependencies: '@types/hast': 2.3.10 hast-util-to-html: 8.0.4 unified: 10.1.2 - dev: true - /relateurl@0.2.7: - resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} - engines: {node: '>= 0.10'} - dev: true + relateurl@0.2.7: {} - /remark-gfm@3.0.1: - resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==} + remark-gfm@3.0.1: dependencies: '@types/mdast': 3.0.15 mdast-util-gfm: 2.0.2 @@ -13216,72 +15540,56 @@ packages: unified: 10.1.2 transitivePeerDependencies: - supports-color - dev: true - /remark-html@15.0.2: - resolution: {integrity: sha512-/CIOI7wzHJzsh48AiuIyIe1clxVkUtreul73zcCXLub0FmnevQE0UMFDQm7NUx8/3rl/4zCshlMfqBdWScQthw==} + remark-html@15.0.2: dependencies: '@types/mdast': 3.0.15 hast-util-sanitize: 4.1.0 hast-util-to-html: 8.0.4 mdast-util-to-hast: 12.3.0 unified: 10.1.2 - dev: true - /remark-mdx@2.3.0: - resolution: {integrity: sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==} + remark-mdx@2.3.0: dependencies: mdast-util-mdx: 2.0.1 micromark-extension-mdxjs: 1.0.1 transitivePeerDependencies: - supports-color - dev: true - /remark-parse@10.0.2: - resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} + remark-parse@10.0.2: dependencies: '@types/mdast': 3.0.15 mdast-util-from-markdown: 1.3.1 unified: 10.1.2 transitivePeerDependencies: - supports-color - dev: true - /remark-reference-links@6.0.1: - resolution: {integrity: sha512-34wY2C6HXSuKVTRtyJJwefkUD8zBOZOSHFZ4aSTnU2F656gr9WeuQ2dL6IJDK3NPd2F6xKF2t4XXcQY9MygAXg==} + remark-reference-links@6.0.1: dependencies: '@types/mdast': 3.0.15 unified: 10.1.2 unist-util-visit: 4.1.2 - dev: true - /remark-rehype@10.1.0: - resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} + remark-rehype@10.1.0: dependencies: '@types/hast': 2.3.10 '@types/mdast': 3.0.15 mdast-util-to-hast: 12.3.0 unified: 10.1.2 - dev: true - /remark-stringify@10.0.3: - resolution: {integrity: sha512-koyOzCMYoUHudypbj4XpnAKFbkddRMYZHwghnxd7ue5210WzGw6kOBwauJTRUMq16jsovXx8dYNvSSWP89kZ3A==} + remark-stringify@10.0.3: dependencies: '@types/mdast': 3.0.15 mdast-util-to-markdown: 1.5.0 unified: 10.1.2 - dev: true - /remark-toc@8.0.1: - resolution: {integrity: sha512-7he2VOm/cy13zilnOTZcyAoyoolV26ULlon6XyCFU+vG54Z/LWJnwphj/xKIDLOt66QmJUgTyUvLVHi2aAElyg==} + remark-toc@8.0.1: dependencies: '@types/mdast': 3.0.15 mdast-util-toc: 6.1.1 unified: 10.1.2 - dev: true - /remark@14.0.3: - resolution: {integrity: sha512-bfmJW1dmR2LvaMJuAnE88pZP9DktIFYXazkTfOIKZzi3Knk9lT0roItIA24ydOucI3bV/g/tXBA6hzqq3FV9Ew==} + remark@14.0.3: dependencies: '@types/mdast': 3.0.15 remark-parse: 10.0.2 @@ -13289,224 +15597,125 @@ packages: unified: 10.1.2 transitivePeerDependencies: - supports-color - dev: true - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true + require-directory@2.1.1: {} - /require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: true + require-from-string@2.0.2: {} - /requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - dev: true + requires-port@1.0.0: {} - /reselect@4.1.8: - resolution: {integrity: sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==} - dev: true + reselect@4.1.8: {} - /resize-observer-polyfill@1.5.1: - resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} - dev: true + resize-observer-polyfill@1.5.1: {} - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true + resolve-from@4.0.0: {} - /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: true + resolve-from@5.0.0: {} - /resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - dev: true + resolve-pkg-maps@1.0.0: {} - /resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} - engines: {node: '>= 0.4'} - hasBin: true + resolve@1.22.10: dependencies: is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true - /restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} + restore-cursor@3.1.0: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - dev: true - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true + reusify@1.0.4: {} - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true + rimraf@3.0.2: dependencies: glob: 7.2.3 - dev: true - /ripemd160@2.0.2: - resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + ripemd160@2.0.2: dependencies: hash-base: 3.0.5 inherits: 2.0.4 - dev: true - /rslog@1.2.3: - resolution: {integrity: sha512-antALPJaKBRPBU1X2q9t085K4htWDOOv/K1qhTUk7h0l1ePU/KbDqKJn19eKP0dk7PqMioeA0+fu3gyPXCsXxQ==} - engines: {node: '>=14.17.6'} - dev: true + rslog@1.2.3: {} - /rspack-manifest-plugin@5.0.0-alpha0(webpack@5.97.1): - resolution: {integrity: sha512-a84H6P/lK0x3kb0I8Qdiwxrnjt1oNW0j+7kwPMWcODJu8eYFBrTXa1t+14n18Jvg9RKIR6llCH16mYxf2d0s8A==} - engines: {node: '>=14'} - peerDependencies: - webpack: ^5.75.0 + rspack-manifest-plugin@5.0.0-alpha0(webpack@5.98.0): dependencies: tapable: 2.2.1 - webpack: 5.97.1 + webpack: 5.98.0 webpack-sources: 2.3.1 - dev: true - /rspack-plugin-virtual-module@0.1.7: - resolution: {integrity: sha512-8LFxQ+YI0KeveA5Vl7SWMB9LRq8pBnrtmzF6klOU3pNfWFWsaRf+D8OnDRHHlrYUq6l+1Q8yTlZB/HgqksRD9Q==} + rspack-plugin-virtual-module@0.1.7: dependencies: fs-extra: 11.3.0 - dev: true - /run-async@3.0.0: - resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} - engines: {node: '>=0.12.0'} - dev: true + run-async@3.0.0: {} - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - dev: true - /rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + rxjs@7.8.1: dependencies: tslib: 2.8.1 - dev: true - /sade@1.8.1: - resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} - engines: {node: '>=6'} + sade@1.8.1: dependencies: mri: 1.2.0 - dev: true - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: true + safe-buffer@5.1.2: {} - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true + safe-buffer@5.2.1: {} - /safe-identifier@0.4.2: - resolution: {integrity: sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==} - dev: true + safe-identifier@0.4.2: {} - /safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} + safe-regex-test@1.1.0: dependencies: call-bound: 1.0.3 es-errors: 1.3.0 is-regex: 1.2.1 - dev: true - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true + safer-buffer@2.1.2: {} - /sax@1.4.1: - resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} - dev: true + sax@1.4.1: {} - /saxes@6.0.0: - resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} - engines: {node: '>=v12.22.7'} + saxes@6.0.0: dependencies: xmlchars: 2.2.0 - dev: true - /scheduler@0.23.2: - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + scheduler@0.23.2: dependencies: loose-envify: 1.4.0 - dev: true - /schema-utils@3.3.0: - resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} - engines: {node: '>= 10.13.0'} + schema-utils@3.3.0: dependencies: '@types/json-schema': 7.0.15 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) - dev: true - /schema-utils@4.3.0: - resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==} - engines: {node: '>= 10.13.0'} + schema-utils@4.3.0: dependencies: '@types/json-schema': 7.0.15 ajv: 8.17.1 ajv-formats: 2.1.1(ajv@8.17.1) ajv-keywords: 5.1.0(ajv@8.17.1) - dev: true - /scroll-into-view-if-needed@3.1.0: - resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} + scroll-into-view-if-needed@3.1.0: dependencies: compute-scroll-into-view: 3.1.1 - dev: true - /secure-compare@3.0.1: - resolution: {integrity: sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==} - dev: true + secure-compare@3.0.1: {} - /selderee@0.11.0: - resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} + selderee@0.11.0: dependencies: parseley: 0.12.1 - dev: true - /semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - dev: true + semver@5.7.2: {} - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - dev: true + semver@6.3.1: {} - /semver@7.7.1: - resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} - engines: {node: '>=10'} - hasBin: true - dev: true + semver@7.7.1: {} - /send@0.19.0: - resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} - engines: {node: '>= 0.8.0'} + send@0.19.0: dependencies: debug: 2.6.9 depd: 2.0.0 @@ -13523,17 +15732,12 @@ packages: statuses: 2.0.1 transitivePeerDependencies: - supports-color - dev: true - /serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 - dev: true - /serve-static@1.16.2: - resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} - engines: {node: '>= 0.8.0'} + serve-static@1.16.2: dependencies: encodeurl: 2.0.0 escape-html: 1.0.3 @@ -13541,11 +15745,8 @@ packages: send: 0.19.0 transitivePeerDependencies: - supports-color - dev: true - /set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 @@ -13553,412 +15754,244 @@ packages: get-intrinsic: 1.2.7 gopd: 1.2.0 has-property-descriptors: 1.0.2 - dev: true - /setimmediate@1.0.5: - resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} - dev: true + setimmediate@1.0.5: {} - /setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - dev: true + setprototypeof@1.2.0: {} - /sha.js@2.4.11: - resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} - hasBin: true + sha.js@2.4.11: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 - dev: true - /shallow-clone@0.1.2: - resolution: {integrity: sha512-J1zdXCky5GmNnuauESROVu31MQSnLoYvlyEn6j2Ztk6Q5EHFIhxkMhYcv6vuDzl2XEzoRr856QwzMgWM/TmZgw==} - engines: {node: '>=0.10.0'} + shallow-clone@0.1.2: dependencies: is-extendable: 0.1.1 kind-of: 2.0.1 lazy-cache: 0.2.7 mixin-object: 2.0.1 - dev: true - /shallow-clone@3.0.1: - resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} - engines: {node: '>=8'} + shallow-clone@3.0.1: dependencies: kind-of: 6.0.3 - dev: true - /shallowequal@1.1.0: - resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} - dev: true + shallowequal@1.1.0: {} - /shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} + shebang-command@1.2.0: dependencies: shebang-regex: 1.0.0 - dev: true - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - dev: true - /shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} - dev: true + shebang-regex@1.0.0: {} - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true + shebang-regex@3.0.0: {} - /side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} + side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 object-inspect: 1.13.4 - dev: true - /side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} + side-channel-map@1.0.1: dependencies: call-bound: 1.0.3 es-errors: 1.3.0 get-intrinsic: 1.2.7 object-inspect: 1.13.4 - dev: true - /side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} + side-channel-weakmap@1.0.2: dependencies: call-bound: 1.0.3 es-errors: 1.3.0 get-intrinsic: 1.2.7 object-inspect: 1.13.4 side-channel-map: 1.0.1 - dev: true - /side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} + side-channel@1.1.0: dependencies: es-errors: 1.3.0 object-inspect: 1.13.4 side-channel-list: 1.0.0 side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 - dev: true - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true + signal-exit@3.0.7: {} - /signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - dev: true + signal-exit@4.1.0: {} - /simple-update-notifier@2.0.0: - resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} - engines: {node: '>=10'} + simple-update-notifier@2.0.0: dependencies: semver: 7.7.1 - dev: true - /sirv@2.0.4: - resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} - engines: {node: '>= 10'} + sirv@2.0.4: dependencies: '@polka/url': 1.0.0-next.28 - mrmime: 2.0.0 + mrmime: 2.0.1 totalist: 3.0.1 - dev: true - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - dev: true + slash@3.0.0: {} - /smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - dev: true + smart-buffer@4.2.0: {} - /snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + snake-case@3.0.4: dependencies: dot-case: 3.0.4 tslib: 2.8.1 - dev: true - /socks-proxy-agent@8.0.4: - resolution: {integrity: sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==} - engines: {node: '>= 14'} + socks-proxy-agent@8.0.4: dependencies: agent-base: 7.1.3 debug: 4.4.0(supports-color@5.5.0) socks: 2.8.4 transitivePeerDependencies: - supports-color - dev: true - /socks@2.8.4: - resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + socks@2.8.4: dependencies: ip-address: 9.0.5 smart-buffer: 4.2.0 - dev: true - /source-list-map@2.0.1: - resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} - dev: true + source-list-map@2.0.1: {} - /source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - dev: true + source-map-js@1.2.1: {} - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - dev: true - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true + source-map@0.6.1: {} - /source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - dev: true + source-map@0.7.4: {} - /space-separated-tokens@1.1.5: - resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} - dev: true + space-separated-tokens@1.1.5: {} - /space-separated-tokens@2.0.2: - resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - dev: true + space-separated-tokens@2.0.2: {} - /spawndamnit@2.0.0: - resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} + spawndamnit@2.0.0: dependencies: cross-spawn: 5.1.0 signal-exit: 3.0.7 - dev: true - /spawndamnit@3.0.1: - resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} + spawndamnit@3.0.1: dependencies: cross-spawn: 7.0.6 signal-exit: 4.1.0 - dev: true - /spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 spdx-license-ids: 3.0.21 - dev: true - /spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - dev: true + spdx-exceptions@2.5.0: {} - /spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.5.0 spdx-license-ids: 3.0.21 - dev: true - /spdx-license-ids@3.0.21: - resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} - dev: true + spdx-license-ids@3.0.21: {} - /split-on-first@3.0.0: - resolution: {integrity: sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA==} - engines: {node: '>=12'} - dev: true + split-on-first@3.0.0: {} - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: true + sprintf-js@1.0.3: {} - /sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - dev: true + sprintf-js@1.1.3: {} - /stackframe@1.3.4: - resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} - dev: true + stackframe@1.3.4: {} - /statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - dev: true + statuses@2.0.1: {} - /stoppable@1.1.0: - resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==} - engines: {node: '>=4', npm: '>=6'} - dev: true + stoppable@1.1.0: {} - /stream-browserify@3.0.0: - resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} + stream-browserify@3.0.0: dependencies: inherits: 2.0.4 readable-stream: 3.6.2 - dev: true - /stream-http@3.2.0: - resolution: {integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==} + stream-http@3.2.0: dependencies: builtin-status-codes: 3.0.0 inherits: 2.0.4 readable-stream: 3.6.2 xtend: 4.0.2 - dev: true - /string-convert@0.2.1: - resolution: {integrity: sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==} - dev: true + string-convert@0.2.1: {} - /string-hash@1.1.3: - resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} - dev: true + string-hash@1.1.3: {} - /string-replace-loader@3.1.0(webpack@5.97.1): - resolution: {integrity: sha512-5AOMUZeX5HE/ylKDnEa/KKBqvlnFmRZudSOjVJHxhoJg9QYTwl1rECx7SLR8BBH7tfxb4Rp7EM2XVfQFxIhsbQ==} - peerDependencies: - webpack: ^5 + string-replace-loader@3.1.0(webpack@5.98.0): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.97.1 - dev: true + webpack: 5.98.0 - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: true - /string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} + string-width@5.1.2: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.1.0 - dev: true - /string.fromcodepoint@0.2.1: - resolution: {integrity: sha512-n69H31OnxSGSZyZbgBlvYIXlrMhJQ0dQAX1js1QDhpaUH6zmU3QYlj07bCwCNlPOu3oRXIubGPl2gDGnHsiCqg==} - dev: true + string.fromcodepoint@0.2.1: {} - /string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 - dev: true - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 - dev: true - /stringify-entities@4.0.4: - resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + stringify-entities@4.0.4: dependencies: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 - dev: true - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - dev: true - /strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} + strip-ansi@7.1.0: dependencies: ansi-regex: 6.1.0 - dev: true - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - dev: true + strip-bom@3.0.0: {} - /strip-final-newline@4.0.0: - resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} - engines: {node: '>=18'} - dev: true + strip-final-newline@4.0.0: {} - /strip-json-comments@5.0.1: - resolution: {integrity: sha512-0fk9zBqO67Nq5M/m45qHCJxylV/DhBlIOVExqgOMiCCrzrhU6tCibRXNqE3jwJLftzE9SNuZtYbpzcO+i9FiKw==} - engines: {node: '>=14.16'} - dev: true + strip-json-comments@5.0.1: {} - /strtok3@6.3.0: - resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} - engines: {node: '>=10'} + strtok3@6.3.0: dependencies: '@tokenizer/token': 0.3.0 peek-readable: 4.1.0 - dev: true - /style-inject@0.3.0: - resolution: {integrity: sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==} - dev: true + style-inject@0.3.0: {} - /style-loader@3.3.3(webpack@5.97.1): - resolution: {integrity: sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 + style-loader@3.3.3(webpack@5.98.0): dependencies: - webpack: 5.97.1 - dev: true + webpack: 5.98.0 - /style-to-object@0.4.4: - resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} + style-to-object@0.4.4: dependencies: inline-style-parser: 0.1.1 - dev: true - /styled-components@5.3.11(@babel/core@7.26.8)(react-dom@18.3.1)(react-is@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==} - engines: {node: '>=10'} - peerDependencies: - react: '>= 16.8.0' - react-dom: '>= 16.8.0' - react-is: '>= 16.8.0' + styled-components@5.3.11(@babel/core@7.26.9)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1): dependencies: '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) - '@babel/traverse': 7.26.8(supports-color@5.5.0) + '@babel/traverse': 7.26.9(supports-color@5.5.0) '@emotion/is-prop-valid': 1.3.1 '@emotion/stylis': 0.8.5 '@emotion/unitless': 0.7.5 - babel-plugin-styled-components: 2.1.4(@babel/core@7.26.8)(styled-components@5.3.11)(supports-color@5.5.0) + babel-plugin-styled-components: 2.1.4(@babel/core@7.26.9)(styled-components@5.3.11(@babel/core@7.26.9)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(supports-color@5.5.0) css-to-react-native: 3.2.0 hoist-non-react-statics: 3.3.2 react: 18.3.1 @@ -13968,27 +16001,16 @@ packages: supports-color: 5.5.0 transitivePeerDependencies: - '@babel/core' - dev: true - /stylehacks@6.1.1(postcss@8.4.27): - resolution: {integrity: sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + stylehacks@6.1.1(postcss@8.4.27): dependencies: browserslist: 4.24.4 postcss: 8.4.27 postcss-selector-parser: 6.1.2 - dev: true - /stylis@4.3.6: - resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} - dev: true + stylis@4.3.6: {} - /sucrase@3.29.0: - resolution: {integrity: sha512-bZPAuGA5SdFHuzqIhTAqt9fvNEo9rESqXIG3oiKdF8K4UmkQxC4KlNL3lVyAErXp+mPvUqZ5l13qx6TrDIGf3A==} - engines: {node: '>=8'} - hasBin: true + sucrase@3.29.0: dependencies: commander: 4.1.1 glob: 7.1.6 @@ -13996,67 +16018,38 @@ packages: mz: 2.7.0 pirates: 4.0.6 ts-interface-checker: 0.1.13 - dev: true - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + supports-color@5.5.0: dependencies: has-flag: 3.0.0 - dev: true - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - dev: true - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} + supports-color@8.1.1: dependencies: has-flag: 4.0.0 - dev: true - /supports-color@9.4.0: - resolution: {integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==} - engines: {node: '>=12'} - dev: true + supports-color@9.4.0: {} - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true + supports-preserve-symlinks-flag@1.0.0: {} - /svg-parser@2.0.4: - resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} - dev: true + svg-parser@2.0.4: {} - /svgo@3.3.2: - resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==} - engines: {node: '>=14.0.0'} - hasBin: true + svgo@3.3.2: dependencies: '@trysound/sax': 0.2.0 commander: 7.2.0 css-select: 5.1.0 css-tree: 2.3.1 css-what: 6.1.0 - csso: 5.0.5 - picocolors: 1.1.1 - dev: true - - /symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - dev: true - - /tailwindcss@3.2.7(postcss@8.4.27): - resolution: {integrity: sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==} - engines: {node: '>=12.13.0'} - hasBin: true - peerDependencies: - postcss: ^8.0.9 + csso: 5.0.5 + picocolors: 1.1.1 + + symbol-tree@3.2.4: {} + + tailwindcss@3.2.7(postcss@8.4.27): dependencies: arg: 5.0.2 chokidar: 3.6.0 @@ -14083,282 +16076,151 @@ packages: resolve: 1.22.10 transitivePeerDependencies: - ts-node - dev: true - /tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - dev: true + tapable@2.2.1: {} - /term-size@2.2.1: - resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} - engines: {node: '>=8'} - dev: true + term-size@2.2.1: {} - /terser-webpack-plugin@5.3.11(webpack@5.97.1): - resolution: {integrity: sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==} - engines: {node: '>= 10.13.0'} - peerDependencies: - '@swc/core': '*' - esbuild: '*' - uglify-js: '*' - webpack: ^5.1.0 - peerDependenciesMeta: - '@swc/core': - optional: true - esbuild: - optional: true - uglify-js: - optional: true + terser-webpack-plugin@5.3.11(webpack@5.98.0): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 4.3.0 serialize-javascript: 6.0.2 - terser: 5.38.1 - webpack: 5.97.1 - dev: true + terser: 5.39.0 + webpack: 5.98.0 - /terser@5.38.1: - resolution: {integrity: sha512-GWANVlPM/ZfYzuPHjq0nxT+EbOEDDN3Jwhwdg1D8TU8oSkktp8w64Uq4auuGLxFSoNTRDncTq2hQHX1Ld9KHkA==} - engines: {node: '>=10'} - hasBin: true + terser@5.39.0: dependencies: '@jridgewell/source-map': 0.3.6 acorn: 8.14.0 commander: 2.20.3 source-map-support: 0.5.21 - dev: true - /thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} + thenify-all@1.6.0: dependencies: thenify: 3.3.1 - dev: true - /thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + thenify@3.3.1: dependencies: any-promise: 1.3.0 - dev: true - /throttle-debounce@5.0.2: - resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==} - engines: {node: '>=12.22'} - dev: true + throttle-debounce@5.0.2: {} - /through2@4.0.2: - resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + through2@4.0.2: dependencies: readable-stream: 3.6.2 - dev: true - /timers-browserify@2.0.12: - resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} - engines: {node: '>=0.6.0'} + timers-browserify@2.0.12: dependencies: setimmediate: 1.0.5 - dev: true - /timm@1.7.1: - resolution: {integrity: sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==} - dev: true + timm@1.7.1: {} - /tinycolor2@1.6.0: - resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} - dev: true + tinycolor2@1.6.0: {} - /tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 - dev: true - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - dev: true - /toggle-selection@1.0.6: - resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} - dev: true + toggle-selection@1.0.6: {} - /toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - dev: true + toidentifier@1.0.1: {} - /token-types@4.2.1: - resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} - engines: {node: '>=10'} + token-types@4.2.1: dependencies: '@tokenizer/token': 0.3.0 ieee754: 1.2.1 - dev: true - /totalist@3.0.1: - resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} - engines: {node: '>=6'} - dev: true + totalist@3.0.1: {} - /touch@3.1.1: - resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==} - hasBin: true - dev: true + touch@3.1.1: {} - /tough-cookie@4.1.4: - resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} - engines: {node: '>=6'} + tough-cookie@4.1.4: dependencies: psl: 1.15.0 punycode: 2.3.1 universalify: 0.2.0 url-parse: 1.5.10 - dev: true - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: true + tr46@0.0.3: {} - /tr46@3.0.0: - resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} - engines: {node: '>=12'} + tr46@3.0.0: dependencies: punycode: 2.3.1 - dev: true - /trim-lines@3.0.1: - resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - dev: true + trim-lines@3.0.1: {} - /trough@2.2.0: - resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - dev: true + trough@2.2.0: {} - /trouter@2.0.1: - resolution: {integrity: sha512-kr8SKKw94OI+xTGOkfsvwZQ8mWoikZDd2n8XZHjJVZUARZT+4/VV6cacRS6CLsH9bNm+HFIPU1Zx4CnNnb4qlQ==} - engines: {node: '>=6'} + trouter@2.0.1: dependencies: matchit: 1.1.0 - dev: true - /ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - dev: true + ts-interface-checker@0.1.13: {} - /tsconfig-paths-webpack-plugin@4.1.0: - resolution: {integrity: sha512-xWFISjviPydmtmgeUAuXp4N1fky+VCtfhOkDUFIv5ea7p4wuTomI4QTrXvFBX2S4jZsmyTSrStQl+E+4w+RzxA==} - engines: {node: '>=10.13.0'} + tsconfig-paths-webpack-plugin@4.1.0: dependencies: chalk: 4.1.2 enhanced-resolve: 5.12.0 tsconfig-paths: 4.2.0 - dev: true - /tsconfig-paths@4.2.0: - resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} - engines: {node: '>=6'} + tsconfig-paths@4.2.0: dependencies: json5: 2.2.3 minimist: 1.2.8 strip-bom: 3.0.0 - dev: true - /tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - dev: true + tslib@2.8.1: {} - /tsx@4.19.2: - resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} - engines: {node: '>=18.0.0'} - hasBin: true + tsx@4.19.2: dependencies: esbuild: 0.23.1 get-tsconfig: 4.10.0 optionalDependencies: fsevents: 2.3.3 - dev: true - /tty-browserify@0.0.1: - resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} - dev: true + tty-browserify@0.0.1: {} - /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - dev: true + type-fest@0.21.3: {} - /type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} - dev: true + type-fest@2.19.0: {} - /type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} + type-is@1.6.18: dependencies: media-typer: 0.3.0 mime-types: 2.1.35 - dev: true - /typescript@5.0.4: - resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} - engines: {node: '>=12.20'} - hasBin: true - dev: true + typescript@5.0.4: {} - /unc-path-regex@0.1.2: - resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} - engines: {node: '>=0.10.0'} - dev: true + unc-path-regex@0.1.2: {} - /undefsafe@2.0.5: - resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} - dev: true + undefsafe@2.0.5: {} - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true + undici-types@5.26.5: {} - /undici-types@6.20.0: - resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} - dev: true + undici-types@6.20.0: {} - /unescape-js@1.1.4: - resolution: {integrity: sha512-42SD8NOQEhdYntEiUQdYq/1V/YHwr1HLwlHuTJB5InVVdOSbgI6xu8jK5q65yIzuFCfczzyDF/7hbGzVbyCw0g==} + unescape-js@1.1.4: dependencies: string.fromcodepoint: 0.2.1 - dev: true - /unicode-canonical-property-names-ecmascript@2.0.1: - resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} - engines: {node: '>=4'} - dev: true + unicode-canonical-property-names-ecmascript@2.0.1: {} - /unicode-match-property-ecmascript@2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} - engines: {node: '>=4'} + unicode-match-property-ecmascript@2.0.0: dependencies: unicode-canonical-property-names-ecmascript: 2.0.1 unicode-property-aliases-ecmascript: 2.1.0 - dev: true - /unicode-match-property-value-ecmascript@2.2.0: - resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} - engines: {node: '>=4'} - dev: true + unicode-match-property-value-ecmascript@2.2.0: {} - /unicode-property-aliases-ecmascript@2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} - engines: {node: '>=4'} - dev: true + unicode-property-aliases-ecmascript@2.1.0: {} - /unified@10.1.2: - resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + unified@10.1.2: dependencies: '@types/unist': 2.0.11 bail: 2.0.2 @@ -14367,214 +16229,132 @@ packages: is-plain-obj: 4.1.0 trough: 2.2.0 vfile: 5.3.7 - dev: true - /union@0.5.0: - resolution: {integrity: sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==} - engines: {node: '>= 0.8.0'} + union@0.5.0: dependencies: qs: 6.14.0 - dev: true - /unist-builder@3.0.1: - resolution: {integrity: sha512-gnpOw7DIpCA0vpr6NqdPvTWnlPTApCTRzr+38E6hCWx3rz/cjo83SsKIlS1Z+L5ttScQ2AwutNnb8+tAvpb6qQ==} + unist-builder@3.0.1: dependencies: '@types/unist': 2.0.11 - dev: true - /unist-util-generated@2.0.1: - resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==} - dev: true + unist-util-generated@2.0.1: {} - /unist-util-is@5.2.1: - resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + unist-util-is@5.2.1: dependencies: '@types/unist': 2.0.11 - dev: true - /unist-util-position-from-estree@1.1.2: - resolution: {integrity: sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==} + unist-util-position-from-estree@1.1.2: dependencies: '@types/unist': 2.0.11 - dev: true - /unist-util-position@4.0.4: - resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==} + unist-util-position@4.0.4: dependencies: '@types/unist': 2.0.11 - dev: true - /unist-util-remove-position@4.0.2: - resolution: {integrity: sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==} + unist-util-remove-position@4.0.2: dependencies: '@types/unist': 2.0.11 unist-util-visit: 4.1.2 - dev: true - /unist-util-stringify-position@3.0.3: - resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} + unist-util-stringify-position@3.0.3: dependencies: '@types/unist': 2.0.11 - dev: true - /unist-util-visit-children@2.0.2: - resolution: {integrity: sha512-+LWpMFqyUwLGpsQxpumsQ9o9DG2VGLFrpz+rpVXYIEdPy57GSy5HioC0g3bg/8WP9oCLlapQtklOzQ8uLS496Q==} + unist-util-visit-children@2.0.2: dependencies: '@types/unist': 2.0.11 - dev: true - /unist-util-visit-parents@5.1.3: - resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + unist-util-visit-parents@5.1.3: dependencies: '@types/unist': 2.0.11 unist-util-is: 5.2.1 - dev: true - /unist-util-visit@4.1.2: - resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} + unist-util-visit@4.1.2: dependencies: '@types/unist': 2.0.11 unist-util-is: 5.2.1 unist-util-visit-parents: 5.1.3 - dev: true - /universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - dev: true + universalify@0.1.2: {} - /universalify@0.2.0: - resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} - engines: {node: '>= 4.0.0'} - dev: true + universalify@0.2.0: {} - /universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - dev: true + universalify@2.0.1: {} - /unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - dev: true + unpipe@1.0.0: {} - /update-browserslist-db@1.1.2(browserslist@4.24.4): - resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + update-browserslist-db@1.1.2(browserslist@4.24.4): dependencies: browserslist: 4.24.4 escalade: 3.2.0 picocolors: 1.1.1 - dev: true - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uri-js@4.4.1: dependencies: punycode: 2.3.1 - dev: true - /url-join@4.0.1: - resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} - dev: true + url-join@4.0.1: {} - /url-parse@1.5.10: - resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + url-parse@1.5.10: dependencies: querystringify: 2.2.0 requires-port: 1.0.0 - dev: true - /url@0.11.4: - resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} - engines: {node: '>= 0.4'} + url@0.11.4: dependencies: punycode: 1.4.1 qs: 6.14.0 - dev: true - /use-sync-external-store@1.2.0(react@18.3.1): - resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + use-sync-external-store@1.2.0(react@18.3.1): dependencies: react: 18.3.1 - dev: true - /utf8@3.0.0: - resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} - dev: true + utf8@3.0.0: {} - /utif2@4.1.0: - resolution: {integrity: sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w==} + utif2@4.1.0: dependencies: pako: 1.0.11 - dev: true - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true + util-deprecate@1.0.2: {} - /util@0.12.5: - resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + util@0.12.5: dependencies: inherits: 2.0.4 is-arguments: 1.2.0 is-generator-function: 1.1.0 is-typed-array: 1.1.15 which-typed-array: 1.1.18 - dev: true - /utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - dev: true + utils-merge@1.0.1: {} - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: true + uuid@8.3.2: {} - /uvu@0.5.6: - resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} - engines: {node: '>=8'} - hasBin: true + uvu@0.5.6: dependencies: dequal: 2.0.3 diff: 5.2.0 kleur: 4.1.5 sade: 1.8.1 - dev: true - /validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - dev: true - /vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - dev: true + vary@1.1.2: {} - /vfile-location@4.1.0: - resolution: {integrity: sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==} + vfile-location@4.1.0: dependencies: '@types/unist': 2.0.11 vfile: 5.3.7 - dev: true - /vfile-message@3.1.4: - resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} + vfile-message@3.1.4: dependencies: '@types/unist': 2.0.11 unist-util-stringify-position: 3.0.3 - dev: true - /vfile-reporter@7.0.5: - resolution: {integrity: sha512-NdWWXkv6gcd7AZMvDomlQbK3MqFWL1RlGzMn++/O2TI+68+nqxCPTvLugdOtfSzXmjh+xUyhp07HhlrbJjT+mw==} + vfile-reporter@7.0.5: dependencies: '@types/supports-color': 8.1.3 string-width: 5.1.2 @@ -14584,110 +16364,63 @@ packages: vfile-message: 3.1.4 vfile-sort: 3.0.1 vfile-statistics: 2.0.1 - dev: true - /vfile-sort@3.0.1: - resolution: {integrity: sha512-1os1733XY6y0D5x0ugqSeaVJm9lYgj0j5qdcZQFyxlZOSy1jYarL77lLyb5gK4Wqr1d5OxmuyflSO3zKyFnTFw==} + vfile-sort@3.0.1: dependencies: vfile: 5.3.7 vfile-message: 3.1.4 - dev: true - /vfile-statistics@2.0.1: - resolution: {integrity: sha512-W6dkECZmP32EG/l+dp2jCLdYzmnDBIw6jwiLZSER81oR5AHRcVqL+k3Z+pfH1R73le6ayDkJRMk0sutj1bMVeg==} + vfile-statistics@2.0.1: dependencies: vfile: 5.3.7 vfile-message: 3.1.4 - dev: true - /vfile@5.3.7: - resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} + vfile@5.3.7: dependencies: '@types/unist': 2.0.11 is-buffer: 2.0.5 unist-util-stringify-position: 3.0.3 vfile-message: 3.1.4 - dev: true - /vm-browserify@1.1.2: - resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} - dev: true + vm-browserify@1.1.2: {} - /vue-template-compiler@2.7.16: - resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==} - requiresBuild: true + vue-template-compiler@2.7.16: dependencies: de-indent: 1.0.2 he: 1.2.0 - dev: true optional: true - /w3c-xmlserializer@4.0.0: - resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} - engines: {node: '>=14'} + w3c-xmlserializer@4.0.0: dependencies: xml-name-validator: 4.0.0 - dev: true - /watchpack@2.4.2: - resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} - engines: {node: '>=10.13.0'} + watchpack@2.4.2: dependencies: glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - dev: true + graceful-fs: 4.2.10 - /wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + wcwidth@1.0.1: dependencies: defaults: 1.0.4 - dev: true - /web-namespaces@2.0.1: - resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} - dev: true + web-namespaces@2.0.1: {} - /web-streams-polyfill@3.3.3: - resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} - engines: {node: '>= 8'} - dev: true + web-streams-polyfill@3.3.3: {} - /web-streams-polyfill@4.0.0-beta.3: - resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} - engines: {node: '>= 14'} - dev: true + web-streams-polyfill@4.0.0-beta.3: {} - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: true + webidl-conversions@3.0.1: {} - /webidl-conversions@7.0.0: - resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} - engines: {node: '>=12'} - dev: true + webidl-conversions@7.0.0: {} - /webpack-sources@2.3.1: - resolution: {integrity: sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==} - engines: {node: '>=10.13.0'} + webpack-sources@2.3.1: dependencies: source-list-map: 2.0.1 source-map: 0.6.1 - dev: true - /webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - dev: true + webpack-sources@3.2.3: {} - /webpack@5.97.1: - resolution: {integrity: sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true + webpack@5.98.0: dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.6 @@ -14707,188 +16440,107 @@ packages: loader-runner: 4.3.0 mime-types: 2.1.35 neo-async: 2.6.2 - schema-utils: 3.3.0 + schema-utils: 4.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.11(webpack@5.97.1) + terser-webpack-plugin: 5.3.11(webpack@5.98.0) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - dev: true - /whatwg-encoding@2.0.0: - resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} - engines: {node: '>=12'} + whatwg-encoding@2.0.0: dependencies: iconv-lite: 0.6.3 - dev: true - /whatwg-fetch@3.6.20: - resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} - dev: true + whatwg-fetch@3.6.20: {} - /whatwg-mimetype@3.0.0: - resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} - engines: {node: '>=12'} - dev: true + whatwg-mimetype@3.0.0: {} - /whatwg-url@11.0.0: - resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} - engines: {node: '>=12'} + whatwg-url@11.0.0: dependencies: tr46: 3.0.0 webidl-conversions: 7.0.0 - dev: true - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - dev: true - /which-typed-array@1.1.18: - resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} - engines: {node: '>= 0.4'} + which-typed-array@1.1.18: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.8 call-bound: 1.0.3 - for-each: 0.3.4 + for-each: 0.3.5 gopd: 1.2.0 has-tostringtag: 1.0.2 - dev: true - /which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true + which@1.3.1: dependencies: isexe: 2.0.0 - dev: true - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which@2.0.2: dependencies: isexe: 2.0.0 - dev: true - /wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} + wrap-ansi@6.2.0: dependencies: 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==} - engines: {node: '>=10'} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true + wrappy@1.0.2: {} - /ws@8.18.0: - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true + ws@8.18.0: {} - /xhr@2.6.0: - resolution: {integrity: sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==} + xhr@2.6.0: dependencies: global: 4.4.0 is-function: 1.0.2 parse-headers: 2.0.5 xtend: 4.0.2 - dev: true - /xml-name-validator@4.0.0: - resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} - engines: {node: '>=12'} - dev: true + xml-name-validator@4.0.0: {} - /xml-parse-from-string@1.0.1: - resolution: {integrity: sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==} - dev: true + xml-parse-from-string@1.0.1: {} - /xml2js@0.5.0: - resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} - engines: {node: '>=4.0.0'} + xml2js@0.5.0: dependencies: sax: 1.4.1 xmlbuilder: 11.0.1 - dev: true - /xmlbuilder@11.0.1: - resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} - engines: {node: '>=4.0'} - dev: true + xmlbuilder@11.0.1: {} - /xmlchars@2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - dev: true + xmlchars@2.2.0: {} - /xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - dev: true + xtend@4.0.2: {} - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true + y18n@5.0.8: {} - /yallist@2.1.2: - resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} - dev: true + yallist@2.1.2: {} - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: true + yallist@3.1.1: {} - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true + yallist@4.0.0: {} - /yaml-front-matter@4.1.1: - resolution: {integrity: sha512-ULGbghCLsN8Hs8vfExlqrJIe8Hl2TUjD7/zsIGMP8U+dgRXEsDXk4yydxeZJgdGiimP1XB7zhmhOB4/HyfqOyQ==} - hasBin: true + yaml-front-matter@4.1.1: dependencies: commander: 6.2.1 js-yaml: 3.14.1 - dev: true - /yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - dev: true + yaml@1.10.2: {} - /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - dev: true + yargs-parser@21.1.1: {} - /yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + yargs@17.7.2: dependencies: cliui: 8.0.1 escalade: 3.2.0 @@ -14897,61 +16549,27 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - dev: true - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true + yocto-queue@0.1.0: {} - /yocto-queue@1.1.1: - resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} - engines: {node: '>=12.20'} - dev: true + yocto-queue@1.1.1: {} - /yoctocolors-cjs@2.1.2: - resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} - engines: {node: '>=18'} - dev: true + yoctocolors-cjs@2.1.2: {} - /yoctocolors@2.1.1: - resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} - engines: {node: '>=18'} - dev: true + yoctocolors@2.1.1: {} - /zod-validation-error@1.2.0(zod@3.24.1): - resolution: {integrity: sha512-laJkD/ugwEh8CpuH+xXv5L9Z+RLz3lH8alNxolfaHZJck611OJj97R4Rb+ZqA7WNly2kNtTo4QwjdjXw9scpiw==} - engines: {node: ^14.17 || >=16.0.0} - peerDependencies: - zod: ^3.18.0 + zod-validation-error@1.2.0(zod@3.24.2): dependencies: - zod: 3.24.1 - dev: true + zod: 3.24.2 - /zod@3.24.1: - resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} - dev: true + zod@3.24.2: {} - /zustand@4.5.2(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-2cN1tPkDVkwCy5ickKrI7vijSjPksFRfqS6237NzT0vqSsztTNnQdHw9mmN7uBdk3gceVXU0a+21jFzFzAc9+g==} - engines: {node: '>=12.7.0'} - peerDependencies: - '@types/react': '>=16.8' - immer: '>=9.0.6' - react: '>=16.8' - peerDependenciesMeta: - '@types/react': - optional: true - immer: - optional: true - react: - optional: true + zustand@4.5.2(@types/react@18.3.3)(immer@9.0.21)(react@18.3.1): dependencies: + use-sync-external-store: 1.2.0(react@18.3.1) + optionalDependencies: '@types/react': 18.3.3 + immer: 9.0.21 react: 18.3.1 - use-sync-external-store: 1.2.0(react@18.3.1) - dev: true - /zwitch@2.0.4: - resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} - dev: true + zwitch@2.0.4: {} diff --git a/packages/visualizer/scripts/build-html.ts b/packages/visualizer/scripts/build-html.ts index e4b82dd0f..8a73b0a2f 100644 --- a/packages/visualizer/scripts/build-html.ts +++ b/packages/visualizer/scripts/build-html.ts @@ -3,6 +3,7 @@ * SPDX-License-Identifier: MIT */ import { strict as assert } from 'node:assert'; +import CleanCSS from 'clean-css'; import { writeFileSync } from 'node:fs'; import { join } from 'node:path'; @@ -33,42 +34,22 @@ const replaceStringWithFirstAppearance = ( /* report utils */ function emptyDumpReportHTML() { + const cleanCSS = new CleanCSS(); + const minifiedCSS = cleanCSS.minify(reportCSS).styles; + let html = replaceStringWithFirstAppearance( reportTpl, '{{css}}', - `\n`, + `\n`, ); + html = replaceStringWithFirstAppearance( html, '{{js}}', ``, ); - return html; -} - -const tplRetrieverFn = `window.get_midscene_report_tpl = () => { - const tpl = document.getElementById('midscene_report_tpl').innerText; - const tplDecoded = decodeURIComponent(tpl); - return tplDecoded; -};`; -function putReportTplIntoHTML(html: string, outsourceMode = false) { - assert(html.indexOf('') !== -1, 'HTML must contain '); - const tplWrapper = ``; - - if (outsourceMode) { - // in Chrome extension - return html.replace( - '', - `${tplWrapper}\n`, - ); - } - return html.replace( - '', - `${tplWrapper}\n`, - ); + return html; } export function reportHTMLWithDump( @@ -87,12 +68,11 @@ export function reportHTMLWithDump( dumpContent || '{{dump}}', ); - const html = putReportTplIntoHTML(reportHTML); if (filePath) { - writeFileSync(filePath, html); + writeFileSync(filePath, reportHTML); console.log(`HTML file generated successfully: ${filePath}`); } - return html; + return reportHTML; } async function zipDir(src: string, dest: string) { @@ -101,7 +81,7 @@ async function zipDir(src: string, dest: string) { } /* build task: report and demo pages*/ -function buildReport() { +async function buildReport() { const reportHTMLContent = reportHTMLWithDump(); assert(reportHTMLContent.length >= 1000); ensureDirectoryExistence(outputReportHTML); From 16d75455985f5ba4e9360ab5176d2ea6a0428f90 Mon Sep 17 00:00:00 2001 From: Charles Date: Thu, 20 Feb 2025 14:50:46 +0800 Subject: [PATCH 17/62] feat: add ui-tars GUI Agent SDK (#110) * fix(bug): ensure screen capture uses primary display source (#117) * fix: ensure screen capture uses primary display source * test: add device.test.ts * test: update device.test.ts * tweak(ux): close Settings Window after saving (#115) * feat(visualizer): reduce html report size (close: #118) (#119) * feat(visualizer): reduce html report size * feat(visualizer): remove midscene_report_tpl element and minify css & js code * feat(visualizer): externals common lib * feat: init sdk * chore: operators * feat: sdk agent * feat: sdk ready * chore: add publish beta shell * feat: packages changelog * release: publish beta packages * chore: remove pre pack * refactor(agent): use @ui-tars/sdk refactor * chore: type * chore: beta shell * chore: add utio * chore: remove app agent code * release: publish beta packages * chore: version * fix: async_hooks * chore: unsafe * chore: forge * fix(build): front end bundle server code * release: publish beta packages * chore: status * fix(operator): scaleFactor * fix: scaleFactor * chore: unused * fix: model retry bug * fix: som bug * fix: windows screenshot size * fix: resize screenshot * fix: scale factor * release: publish beta packages * fix: sdk add parsedPrediction * chore: utio version * release: publish beta packages * fix: useConfig bug * chore: peer deps * fix: model custom * chore: typo * fix(sdk): async_hooks store get undefined multiple sdk versions in the project * fix: screen sources primary * chore: ci test * chore: replace inquirer to clack * chore: date.now * feat: support pass InstanceType model * release: publish beta packages * fix: operator bug * release: publish beta packages * chore: add instruction * chore: sdk add maxLoopCount * chore: simplify sdk * refactor: useConfig to useContext * release: publish beta packages * chore: useContext * fix: global this * chore: browser * chore: add test cases * feat: init sdk * chore: unused --------- Co-authored-by: Dugyu Co-authored-by: skychx Co-authored-by: heh <38528320+ZhaoHeh@users.noreply.github.com> --- .changeset/angry-mirrors-cheer.md | 5 + .changeset/cuddly-bottles-shave.md | 11 + .changeset/fuzzy-donuts-wash.md | 11 + .changeset/giant-dots-happen.md | 11 + .changeset/large-mangos-push.md | 11 + .changeset/new-emus-hammer.md | 11 + .changeset/pre.json | 25 + .changeset/proud-buttons-drum.md | 11 + .changeset/slow-wasps-sing.md | 7 + .changeset/wicked-trains-smash.md | 11 + .prettierrc.mjs | 24 +- CONTRIBUTING.md | 27 +- codecov.yml | 2 + docs/sdk.md | 234 ++++ e2e/execBack.ts | 62 +- forge.config.ts | 2 +- package.json | 9 +- packages/action-parser/CHANGELOG.md | 59 + packages/action-parser/package.json | 5 +- packages/cli/CHANGELOG.md | 84 ++ packages/cli/README.md | 3 + packages/cli/bin/index.js | 13 + packages/cli/package.json | 46 + packages/cli/src/cli/commands.ts | 28 + packages/cli/src/cli/start.ts | 103 ++ .../constant.ts => packages/cli/src/index.ts | 7 +- packages/cli/tsconfig.json | 19 + packages/cli/tsup.config.ts | 16 + packages/cli/vitest.config.mts | 27 + packages/electron-ipc/CHANGELOG.md | 43 + packages/electron-ipc/package.json | 5 +- packages/operators/nut-js/CHANGELOG.md | 82 ++ packages/operators/nut-js/README.md | 3 + packages/operators/nut-js/package.json | 52 + packages/operators/nut-js/src/index.ts | 268 +++++ .../operators/nut-js/test}/execute.test.ts | 102 +- packages/operators/nut-js/tsconfig.json | 19 + packages/operators/nut-js/tsup.config.ts | 20 + packages/operators/nut-js/vitest.config.mts | 27 + packages/sdk/CHANGELOG.md | 1 + packages/sdk/README.md | 234 ++++ packages/sdk/package.json | 75 ++ packages/sdk/scripts/sync-docs.ts | 24 + packages/sdk/src/GUIAgent.ts | 311 +++++ packages/sdk/src/Model.ts | 118 ++ packages/sdk/src/base/index.ts | 46 + packages/sdk/src/constants.ts | 40 + packages/sdk/src/context/useContext.ts | 26 + packages/sdk/src/core.ts | 18 + packages/sdk/src/index.ts | 8 + packages/sdk/src/types.ts | 88 ++ packages/sdk/src/utils.ts | 178 +++ packages/sdk/tests/GUIAgent.test.ts | 374 ++++++ .../fixtures/async-hooks-test/context.ts | 54 + .../tests/fixtures/async-hooks-test/file1.ts | 44 + .../fixtures/async-hooks-test/guiagent.ts | 20 + .../sdk/tests}/utils.test.ts | 68 +- packages/sdk/tsconfig.json | 19 + packages/sdk/tsup.config.ts | 20 + packages/sdk/vitest.config.mts | 27 + packages/shared/CHANGELOG.md | 42 + packages/shared/package.json | 5 +- packages/shared/src/types/agent.ts | 5 + packages/shared/src/types/data.ts | 14 +- packages/shared/src/utils/coords.ts | 2 +- packages/utio/CHANGELOG.md | 43 + packages/utio/package.json | 5 +- pnpm-lock.yaml | 1009 ++++++++++++++++- pnpm-workspace.yaml | 2 +- scripts/release-beta-pkgs.sh | 35 + src/main/agent/device.ts | 95 -- src/main/agent/execute.ts | 261 ----- src/main/agent/index.ts | 371 ------ src/main/agent/llm/base.ts | 43 - src/main/agent/llm/ui-tars.ts | 97 -- .../{device.test.ts => operator.test.ts} | 19 +- src/main/agent/operator.ts | 79 ++ src/main/agent/utils.ts | 85 -- src/main/ipcRoutes/screen.ts | 10 +- src/main/services/runAgent.ts | 110 +- src/main/shared/setOfMarks.test.ts | 8 +- src/main/shared/setOfMarks.ts | 4 +- src/main/shared/types.ts | 9 + src/main/store/types.ts | 9 +- src/main/utils/coords.test.ts | 2 +- src/main/utils/coords.ts | 2 +- src/main/utils/image.test.ts | 65 -- src/main/utils/image.ts | 132 +-- src/main/utils/screen.ts | 27 + src/main/window/ScreenMarker.ts | 12 +- src/renderer/index.html | 4 +- src/renderer/src/App.tsx | 30 +- .../src/components/ChatInput/index.tsx | 15 +- .../src/components/RunMessages/index.tsx | 6 +- src/renderer/src/hooks/useScreenRecord.ts | 12 +- 95 files changed, 4577 insertions(+), 1390 deletions(-) create mode 100644 .changeset/angry-mirrors-cheer.md create mode 100644 .changeset/cuddly-bottles-shave.md create mode 100644 .changeset/fuzzy-donuts-wash.md create mode 100644 .changeset/giant-dots-happen.md create mode 100644 .changeset/large-mangos-push.md create mode 100644 .changeset/new-emus-hammer.md create mode 100644 .changeset/pre.json create mode 100644 .changeset/proud-buttons-drum.md create mode 100644 .changeset/slow-wasps-sing.md create mode 100644 .changeset/wicked-trains-smash.md create mode 100644 codecov.yml create mode 100644 docs/sdk.md create mode 100644 packages/cli/CHANGELOG.md create mode 100644 packages/cli/README.md create mode 100755 packages/cli/bin/index.js create mode 100644 packages/cli/package.json create mode 100644 packages/cli/src/cli/commands.ts create mode 100644 packages/cli/src/cli/start.ts rename src/main/agent/constant.ts => packages/cli/src/index.ts (57%) create mode 100644 packages/cli/tsconfig.json create mode 100644 packages/cli/tsup.config.ts create mode 100644 packages/cli/vitest.config.mts create mode 100644 packages/electron-ipc/CHANGELOG.md create mode 100644 packages/operators/nut-js/CHANGELOG.md create mode 100644 packages/operators/nut-js/README.md create mode 100644 packages/operators/nut-js/package.json create mode 100644 packages/operators/nut-js/src/index.ts rename {src/main/agent => packages/operators/nut-js/test}/execute.test.ts (64%) create mode 100644 packages/operators/nut-js/tsconfig.json create mode 100644 packages/operators/nut-js/tsup.config.ts create mode 100644 packages/operators/nut-js/vitest.config.mts create mode 100644 packages/sdk/CHANGELOG.md create mode 100644 packages/sdk/README.md create mode 100644 packages/sdk/package.json create mode 100644 packages/sdk/scripts/sync-docs.ts create mode 100644 packages/sdk/src/GUIAgent.ts create mode 100644 packages/sdk/src/Model.ts create mode 100644 packages/sdk/src/base/index.ts create mode 100644 packages/sdk/src/constants.ts create mode 100644 packages/sdk/src/context/useContext.ts create mode 100644 packages/sdk/src/core.ts create mode 100644 packages/sdk/src/index.ts create mode 100644 packages/sdk/src/types.ts create mode 100644 packages/sdk/src/utils.ts create mode 100644 packages/sdk/tests/GUIAgent.test.ts create mode 100644 packages/sdk/tests/fixtures/async-hooks-test/context.ts create mode 100644 packages/sdk/tests/fixtures/async-hooks-test/file1.ts create mode 100644 packages/sdk/tests/fixtures/async-hooks-test/guiagent.ts rename {src/main/agent => packages/sdk/tests}/utils.test.ts (79%) create mode 100644 packages/sdk/tsconfig.json create mode 100644 packages/sdk/tsup.config.ts create mode 100644 packages/sdk/vitest.config.mts create mode 100644 packages/utio/CHANGELOG.md create mode 100755 scripts/release-beta-pkgs.sh delete mode 100644 src/main/agent/device.ts delete mode 100644 src/main/agent/execute.ts delete mode 100644 src/main/agent/index.ts delete mode 100644 src/main/agent/llm/base.ts delete mode 100644 src/main/agent/llm/ui-tars.ts rename src/main/agent/{device.test.ts => operator.test.ts} (79%) create mode 100644 src/main/agent/operator.ts delete mode 100644 src/main/agent/utils.ts create mode 100644 src/main/shared/types.ts delete mode 100644 src/main/utils/image.test.ts create mode 100644 src/main/utils/screen.ts diff --git a/.changeset/angry-mirrors-cheer.md b/.changeset/angry-mirrors-cheer.md new file mode 100644 index 000000000..ae2abfda7 --- /dev/null +++ b/.changeset/angry-mirrors-cheer.md @@ -0,0 +1,5 @@ +--- +'@ui-tars/sdk': patch +--- + +chore: operator type diff --git a/.changeset/cuddly-bottles-shave.md b/.changeset/cuddly-bottles-shave.md new file mode 100644 index 000000000..c39bffa0d --- /dev/null +++ b/.changeset/cuddly-bottles-shave.md @@ -0,0 +1,11 @@ +--- +'@ui-tars/operator-nut-js': patch +'@ui-tars/action-parser': patch +'@ui-tars/electron-ipc': patch +'@ui-tars/shared': patch +'@ui-tars/utio': patch +'@ui-tars/cli': patch +'@ui-tars/sdk': patch +--- + +chore: new version diff --git a/.changeset/fuzzy-donuts-wash.md b/.changeset/fuzzy-donuts-wash.md new file mode 100644 index 000000000..52d217a61 --- /dev/null +++ b/.changeset/fuzzy-donuts-wash.md @@ -0,0 +1,11 @@ +--- +'@ui-tars/operator-nut-js': minor +'@ui-tars/shared': minor +'@ui-tars/cli': minor +'@ui-tars/sdk': minor +'@ui-tars/action-parser': minor +'@ui-tars/electron-ipc': minor +'@ui-tars/utio': minor +--- + +feat: ui-tars agent sdk support diff --git a/.changeset/giant-dots-happen.md b/.changeset/giant-dots-happen.md new file mode 100644 index 000000000..76e4f42f5 --- /dev/null +++ b/.changeset/giant-dots-happen.md @@ -0,0 +1,11 @@ +--- +'@ui-tars/operator-nut-js': patch +'@ui-tars/action-parser': patch +'@ui-tars/electron-ipc': patch +'@ui-tars/shared': patch +'@ui-tars/utio': patch +'@ui-tars/cli': patch +'@ui-tars/sdk': patch +--- + +chore: add retry diff --git a/.changeset/large-mangos-push.md b/.changeset/large-mangos-push.md new file mode 100644 index 000000000..4219f248c --- /dev/null +++ b/.changeset/large-mangos-push.md @@ -0,0 +1,11 @@ +--- +'@ui-tars/operator-nut-js': patch +'@ui-tars/action-parser': patch +'@ui-tars/electron-ipc': patch +'@ui-tars/shared': patch +'@ui-tars/utio': patch +'@ui-tars/cli': patch +'@ui-tars/sdk': patch +--- + +chore: update sdk diff --git a/.changeset/new-emus-hammer.md b/.changeset/new-emus-hammer.md new file mode 100644 index 000000000..c1138976b --- /dev/null +++ b/.changeset/new-emus-hammer.md @@ -0,0 +1,11 @@ +--- +'@ui-tars/operator-nut-js': patch +'@ui-tars/action-parser': patch +'@ui-tars/electron-ipc': patch +'@ui-tars/shared': patch +'@ui-tars/utio': patch +'@ui-tars/cli': patch +'@ui-tars/sdk': patch +--- + +chore: remove unused code diff --git a/.changeset/pre.json b/.changeset/pre.json new file mode 100644 index 000000000..310d8ba05 --- /dev/null +++ b/.changeset/pre.json @@ -0,0 +1,25 @@ +{ + "mode": "exit", + "tag": "beta", + "initialVersions": { + "ui-tars-desktop": "0.0.6-beta.1", + "@ui-tars/action-parser": "1.2.0-beta.6", + "@ui-tars/cli": "1.2.0-beta.7", + "@ui-tars/electron-ipc": "1.2.0-beta.6", + "@ui-tars/operator-nut-js": "1.2.0-beta.7", + "@ui-tars/sdk": "1.2.0-beta.7", + "@ui-tars/shared": "1.2.0-beta.6", + "@ui-tars/utio": "1.2.0-beta.6" + }, + "changesets": [ + "angry-mirrors-cheer", + "cuddly-bottles-shave", + "fuzzy-donuts-wash", + "giant-dots-happen", + "large-mangos-push", + "new-emus-hammer", + "proud-buttons-drum", + "slow-wasps-sing", + "wicked-trains-smash" + ] +} diff --git a/.changeset/proud-buttons-drum.md b/.changeset/proud-buttons-drum.md new file mode 100644 index 000000000..f856c9c21 --- /dev/null +++ b/.changeset/proud-buttons-drum.md @@ -0,0 +1,11 @@ +--- +'@ui-tars/operator-nut-js': patch +'@ui-tars/action-parser': patch +'@ui-tars/electron-ipc': patch +'@ui-tars/shared': patch +'@ui-tars/utio': patch +'@ui-tars/cli': patch +'@ui-tars/sdk': patch +--- + +chore: publish diff --git a/.changeset/slow-wasps-sing.md b/.changeset/slow-wasps-sing.md new file mode 100644 index 000000000..862c1e68e --- /dev/null +++ b/.changeset/slow-wasps-sing.md @@ -0,0 +1,7 @@ +--- +'@ui-tars/operator-nut-js': patch +'@ui-tars/cli': patch +'@ui-tars/sdk': patch +--- + +fix: useConfig to useContext diff --git a/.changeset/wicked-trains-smash.md b/.changeset/wicked-trains-smash.md new file mode 100644 index 000000000..5a8cb0d9b --- /dev/null +++ b/.changeset/wicked-trains-smash.md @@ -0,0 +1,11 @@ +--- +'@ui-tars/operator-nut-js': patch +'@ui-tars/action-parser': patch +'@ui-tars/electron-ipc': patch +'@ui-tars/shared': patch +'@ui-tars/utio': patch +'@ui-tars/cli': patch +'@ui-tars/sdk': patch +--- + +feat: new sdk diff --git a/.prettierrc.mjs b/.prettierrc.mjs index 14c2c185d..9579ff6ab 100644 --- a/.prettierrc.mjs +++ b/.prettierrc.mjs @@ -22,18 +22,18 @@ export default { useTabs: false, embeddedLanguageFormatting: 'auto', endOfLine: 'auto', - importOrder: [ - '^node:(.*)$', - '', - '^@ui-tars/(.*)$', - '^@main/(.*)$', - '^@shared/(.*)$', - '^@renderer/(.*)$', - '^@resources/(.*)$', - '^[./]', - ], - importOrderSeparation: true, - importOrderSortSpecifiers: true, + // importOrder: [ + // '^node:(.*)$', + // '', + // '^@ui-tars/(.*)$', + // '^@main/(.*)$', + // '^@shared/(.*)$', + // '^@renderer/(.*)$', + // '^@resources/(.*)$', + // '^[./]', + // ], + // importOrderSeparation: true, + // importOrderSortSpecifiers: true, // https://github.com/trivago/prettier-plugin-sort-imports/issues/229 // plugins: ['@trivago/prettier-plugin-sort-imports'], }; diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e1c5ffd83..8a050afaa 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -58,6 +58,7 @@ This is a [Monorepo](https://pnpm.io/workspaces) project including the following ├── package.json # Electron application dependencies ├── forge.config.ts # Electron pack and publish configuration ├── electron.vite.config.ts # Electron bundle configuration +│ ├── src # Electron application source code │   ├── main # Main process source code(Like backend) │   ├── preload # Preload script source code @@ -65,10 +66,14 @@ This is a [Monorepo](https://pnpm.io/workspaces) project including the following │ ├── packages # Packages or Modules or SDK for UI-TARS Desktop │   ├── action-parser # Action parser for parsing UI-TARS model output into actions +│   ├── core # Core SDK package for UI-TARS Agent │   ├── electron-ipc # Electron IPC for communication between main and renderer processes │   ├── shared # Shared code of the project(including types, utils, constants, etc.) │   ├── utio # UTIO (UI-TARS Insights and Observation) -│   └── visualizer # Sharing HTML Visualization Reporter +│   ├── visualizer # Sharing HTML Visualization Reporter +│ └── operators # Automation operators +│   └── nut-js # Nut.js is a framework for building automation operators +│ ├── docs # Documentation of the project ├── rfcs # RFCs (Request for Comments) for the project ├── e2e # E2E test cases for the project @@ -104,6 +109,14 @@ After the application starts, you can see the UI-TARS interface within the appli > **Note**: On MacOS, you need to grant permissions to the app (e.g., iTerm2, Terminal) you are using to run commands. +#### Main process reload + +By default, `pnpm run dev` only has frontend Hot Module Replacement (HMR) hot updates. If you need to simultaneously reload the main process during debugging, you can execute `pnpm run dev:w`. + +```bash +$ pnpm run dev:w +``` + ### Release #### Desktop Application @@ -122,12 +135,22 @@ Currently, the release workflow supports the following platforms: #### Packages -If you want to publish the packages to the npm registry, you can run the following command: +##### Latest version + +If you want to publish the `latest` version packages to the npm registry, you can run the following command: 1. `pnpm changeset` to specify the changelogs for the packages you want to publish 2. Git commit and push to the `release-pkgs/${version}` branch, create a PR targeting `main` branch, titled `release(pkgs): ${version}` 3. `pnpm run publish:packages` to publish the packages in latest `origin/main` branch after the PR is merged +##### Beta version + +If you want to publish the `beta` version packages to the npm registry, you can run the following command: + +1. `pnpm changeset` to specify the changelogs for the packages you want to publish +2. Git commit and push to the branch +3. `pnpm run publish-beta:packages` to publish the packages in current branch + ### Documentation diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 000000000..e00ce3d69 --- /dev/null +++ b/codecov.yml @@ -0,0 +1,2 @@ +github_checks: + annotations: false diff --git a/docs/sdk.md b/docs/sdk.md new file mode 100644 index 000000000..1e0eaf738 --- /dev/null +++ b/docs/sdk.md @@ -0,0 +1,234 @@ +# @ui-tars/sdk Guide(Beta) + +## Overview + +`@ui-tars/sdk` is a powerful cross-platform(ANY device/platform) toolkit for building GUI automation agents. + +It provides a flexible framework to create agents that can interact with graphical user interfaces through various operators. It supports running on both **Node.js** and the **Web Browser** + +## Installation + +```bash +npm install @ui-tars/sdk@beta +``` + +> Note: Later, we will release the stable version `@ui-tars/sdk@latest`. + +## Quick Start + +### Basic Usage + +Basic usage is largely derived from package `@ui-tars/sdk`, here's a basic example of using the SDK: + +> Note: Using `nut-js`(cross-platform computer control tool) as the operator, you can also use or customize other operators. NutJS operator that supports common desktop automation actions: +> - Mouse actions: click, double click, right click, drag, hover +> - Keyboard input: typing, hotkeys +> - Scrolling +> - Screenshot capture + +```ts +import { GUIAgent } from '@ui-tars/sdk'; +import { NutJSOperator } from '@ui-tars/operator-nut-js'; + +const guiAgent = new GUIAgent({ + model: { + baseURL: config.baseURL, + apiKey: config.apiKey, + model: config.model, + }, + operator: new NutJSOperator(), + onData: ({ data }) => { + console.log(data) + }, + onError: ({ data, error }) => { + console.error(error, data); + }, +}); + +await guiAgent.run('send "hello world" to x.com'); +``` + +### Handling Abort Signals + +You can abort the agent by passing a `AbortSignal` to the GUIAgent `signal` option. + +```ts +const abortController = new AbortController(); + +const guiAgent = new GUIAgent({ + // ... other config + signal: abortController.signal, +}); + +// ctrl/cmd + c to cancel operation +process.on('SIGINT', () => { + abortController.abort(); +}); +``` + +## Configuration Options + +The `GUIAgent` constructor accepts the following configuration options: + +- `model`: Model configuration(OpenAI-compatible API) or custom model instance + - `baseURL`: API endpoint URL + - `apiKey`: API authentication key + - `model`: Model name to use + - more options see [OpenAI API](https://platform.openai.com/docs/guides/vision/uploading-base-64-encoded-images) +- `operator`: Instance of an operator class that implements the required interface +- `signal`: AbortController signal for canceling operations +- `onData`: Callback for receiving agent data/status updates + - `data.conversations` is an array of objects, **IMPORTANT: is delta, not the whole conversation history**, each object contains: + - `from`: The role of the message, it can be one of the following: + - `human`: Human message + - `gpt`: Agent response + - `screenshotBase64`: Screenshot base64 + - `value`: The content of the message + - `data.status` is the current status of the agent, it can be one of the following: + - `StatusEnum.INIT`: Initial state + - `StatusEnum.RUNNING`: Agent is actively executing + - `StatusEnum.END`: Operation completed + - `StatusEnum.MAX_LOOP`: Maximum loop count reached +- `onError`: Callback for error handling +- `systemPrompt`: Optional custom system prompt +- `maxLoopCount`: Maximum number of interaction loops (default: 25) + + +## Advanced Usage + +### Operator Interface + +When implementing a custom operator, you need to implement two core methods: + +#### screenshot() + +This method captures the current screen state and returns a `ScreenshotOutput`: + +```typescript +interface ScreenshotOutput { + // Base64 encoded image string + base64: string; + // Physical screen width + width: number; + // Physical screen height + height: number; + // Device pixel ratio (DPR) + scaleFactor: number; +} +``` + +#### execute() + +This method performs actions based on model predictions. It receives an `ExecuteParams` object: + +```typescript +interface ExecuteParams { + // Raw prediction string from the model + prediction: string; + // Parsed prediction object + parsedPrediction: { + action_type: string; + action_inputs: Record; + reflection: string | null; + thought: string; + }; + // Physical screen width + screenWidth: number; + // Physical screen height + screenHeight: number; + // Device pixel ratio (DPR) + scaleFactor: number; +} +``` + +Advanced sdk usage is largely derived from package `@ui-tars/sdk/core`, you can create custom operators by extending the base `Operator` class: + +```typescript +import { Operator, ScreenshotOutput, ExecuteParams } from '@ui-tars/sdk/core'; + +export class CustomOperator extends Operator { + public async screenshot(): Promise { + // Implement screenshot functionality + return { + base64: 'base64-encoded-image', + width: 1920, + height: 1080, + scaleFactor: 1 + }; + } + + async execute(params: ExecuteParams): Promise { + const { parsedPrediction, screenWidth, screenHeight, scaleFactor } = params; + // Implement action execution logic + } +} +``` + +Required methods: +- `screenshot()`: Captures the current screen state +- `execute()`: Performs the requested action based on model predictions + +### Custom Model Implementation + +You can implement custom model logic by extending the `UITarsModel` class: + +```typescript +class CustomUITarsModel extends UITarsModel { + constructor(modelConfig: { model: string }) { + super(modelConfig); + } + + async invoke(params: any) { + // Implement custom model logic + return { + prediction: 'action description', + parsedPredictions: [{ + action_type: 'click', + action_inputs: { /* ... */ }, + reflection: null, + thought: 'reasoning' + }] + }; + } +} + +const agent = new GUIAgent({ + model: new CustomUITarsModel({ model: 'custom-model' }), + // ... other config +}); +``` + +> Note: However, it is not recommended to implement a custom model because it contains a lot of data processing logic (including image transformations, scaling factors, etc.). + +### Planning + +```ts +const guiAgent = new GUIAgent({ + // ... other config +}); + +const planningList = await reasoningModel.invoke({ + conversations: [ + { + role: 'user', + content: 'buy a ticket from beijing to shanghai', + } + ] +}) +/** + * [ + * 'open chrome', + * 'open trip.com', + * 'click "search" button', + * 'select "beijing" in "from" input', + * 'select "shanghai" in "to" input', + * 'click "search" button', + * ] + */ + +for (const planning of planningList) { + await guiAgent.run(planning); +} +``` + + diff --git a/e2e/execBack.ts b/e2e/execBack.ts index 594c48cb3..fb9e74d90 100644 --- a/e2e/execBack.ts +++ b/e2e/execBack.ts @@ -2,36 +2,36 @@ * Copyright (c) 2025 Bytedance, Inc. and its affiliates. * SPDX-License-Identifier: Apache-2.0 */ -import { execute } from '@main/agent/execute'; -import { PredictionParsed } from '@ui-tars/shared/types'; +// import { execute } from '@main/agent/execute'; +// import { PredictionParsed } from '@ui-tars/shared/types'; -const screenWidth = 1310; -const screenHeight = 813; -const predictions: PredictionParsed[] = [ - { - action_type: 'click', - action_inputs: { - start_box: '[0.256,0.431,0.256,0.431]', - }, - reflection: 'reflection', - thought: 'thought', - }, - { - action_type: 'type', - action_inputs: { - content: 'www.doubao.com', - }, - reflection: 'reflection', - thought: 'thought', - }, -]; +// const screenWidth = 1310; +// const screenHeight = 813; +// const predictions: PredictionParsed[] = [ +// { +// action_type: 'click', +// action_inputs: { +// start_box: '[0.256,0.431,0.256,0.431]', +// }, +// reflection: 'reflection', +// thought: 'thought', +// }, +// { +// action_type: 'type', +// action_inputs: { +// content: 'www.doubao.com', +// }, +// reflection: 'reflection', +// thought: 'thought', +// }, +// ]; -(async () => { - for (const prediction of predictions) { - await execute({ - prediction, - screenWidth, - screenHeight, - }); - } -})(); +// (async () => { +// for (const prediction of predictions) { +// await execute({ +// prediction, +// screenWidth, +// screenHeight, +// }); +// } +// })(); diff --git a/forge.config.ts b/forge.config.ts index 91d124693..ed89e4558 100644 --- a/forge.config.ts +++ b/forge.config.ts @@ -86,7 +86,7 @@ const noopAfterCopy = ( const config: ForgeConfig = { packagerConfig: { - appBundleId: 'com.bytedance.uitars', + // appBundleId: 'com.bytedance.uitars', name: 'UI TARS', icon: 'resources/icon', asar: { diff --git a/package.json b/package.json index 74804878e..00e26032f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ui-tars-desktop", - "version": "0.0.5", + "version": "0.0.6-beta.1", "private": true, "packageManager": "pnpm@9.10.0", "description": "A GUI Agent application based on UI-TARS(Vision-Lanuage Model) that allows you to control your computer using natural language.", @@ -36,6 +36,7 @@ "publish:win32-arm64": "npm run build && electron-forge publish --arch=arm64 --platform=win32", "publish": "npm run build && electron-forge publish", "publish:packages": "bash scripts/release-pkgs.sh", + "publish-beta:packages": "bash scripts/release-beta-pkgs.sh", "prepare": "husky" }, "dependencies": { @@ -43,12 +44,12 @@ "@computer-use/node-mac-permissions": "2.2.2", "@computer-use/nut-js": "^4.2.0", "@electron-toolkit/utils": "^3.0.0", + "@ui-tars/sdk": "workspace:*", + "@ui-tars/operator-nut-js": "workspace:*", "@ui-tars/action-parser": "workspace:*", "@ui-tars/shared": "workspace:*", "@ui-tars/utio": "workspace:*", "@ui-tars/electron-ipc": "workspace:*", - "async-retry": "^1.3.3", - "big.js": "^6.2.2", "dotenv": "^16.4.7", "electron-debug": "^3.2.0", "electron-devtools-installer": "^3.2.0", @@ -57,7 +58,6 @@ "electron-store": "^10.0.0", "js-yaml": "^4.1.0", "ms": "^2.1.3", - "openai": "4.73.0", "sharp": "0.33.3", "update-electron-app": "^3.1.0", "zustand": "^5.0.0" @@ -127,7 +127,6 @@ "lint-staged": "^14.0.1", "markdown-it": "14.1.0", "medium-zoom": "1.1.0", - "mitt": "^3.0.1", "opencommit": "^3.2.5", "prettier": "^3.3.2", "qs": "6.13.1", diff --git a/packages/action-parser/CHANGELOG.md b/packages/action-parser/CHANGELOG.md index 064b3d264..afd86114a 100644 --- a/packages/action-parser/CHANGELOG.md +++ b/packages/action-parser/CHANGELOG.md @@ -1,5 +1,64 @@ # @ui-tars/action-parser +## 1.2.0-beta.6 + +### Patch Changes + +- feat: new sdk +- Updated dependencies + - @ui-tars/shared@1.2.0-beta.6 + +## 1.2.0-beta.5 + +### Patch Changes + +- chore: update sdk +- Updated dependencies + - @ui-tars/shared@1.2.0-beta.5 + +## 1.2.0-beta.4 + +### Patch Changes + +- chore: new version +- Updated dependencies + - @ui-tars/shared@1.2.0-beta.4 + +## 1.2.0-beta.3 + +### Patch Changes + +- chore: add retry +- Updated dependencies + - @ui-tars/shared@1.2.0-beta.3 + +## 1.2.0-beta.2 + +### Patch Changes + +- chore: publish +- Updated dependencies + - @ui-tars/shared@1.2.0-beta.2 + +## 1.2.0-beta.1 + +### Patch Changes + +- chore: remove unused code +- Updated dependencies + - @ui-tars/shared@1.2.0-beta.1 + +## 1.2.0-beta.0 + +### Minor Changes + +- a062e03: feat: ui-tars agent sdk support + +### Patch Changes + +- Updated dependencies [a062e03] + - @ui-tars/shared@1.2.0-beta.0 + ## 1.1.0 ### Minor Changes diff --git a/packages/action-parser/package.json b/packages/action-parser/package.json index 36a521b3b..b8367e8d6 100644 --- a/packages/action-parser/package.json +++ b/packages/action-parser/package.json @@ -1,6 +1,6 @@ { "name": "@ui-tars/action-parser", - "version": "1.1.0", + "version": "1.2.0-beta.6", "description": "Action parser SDK for UI-TARS", "repository": { "type": "git", @@ -22,8 +22,7 @@ "dev": "tsup --watch", "prepare": "npm run build", "build": "tsup", - "test": "vitest", - "prepack": "npm run build" + "test": "vitest" }, "license": "Apache-2.0", "files": [ diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md new file mode 100644 index 000000000..e45b47d65 --- /dev/null +++ b/packages/cli/CHANGELOG.md @@ -0,0 +1,84 @@ +# @ui-tars/cli + +## 1.2.0-beta.8 + +### Patch Changes + +- fix: useConfig to useContext +- Updated dependencies + - @ui-tars/operator-nut-js@1.2.0-beta.8 + - @ui-tars/sdk@1.2.0-beta.8 + +## 1.2.0-beta.7 + +### Patch Changes + +- Updated dependencies + - @ui-tars/sdk@1.2.0-beta.7 + - @ui-tars/operator-nut-js@1.2.0-beta.7 + +## 1.2.0-beta.6 + +### Patch Changes + +- feat: new sdk +- Updated dependencies + - @ui-tars/operator-nut-js@1.2.0-beta.6 + - @ui-tars/sdk@1.2.0-beta.6 + +## 1.2.0-beta.5 + +### Patch Changes + +- chore: update sdk +- Updated dependencies + - @ui-tars/operator-nut-js@1.2.0-beta.5 + - @ui-tars/sdk@1.2.0-beta.5 + +## 1.2.0-beta.4 + +### Patch Changes + +- chore: new version +- Updated dependencies + - @ui-tars/operator-nut-js@1.2.0-beta.4 + - @ui-tars/sdk@1.2.0-beta.4 + +## 1.2.0-beta.3 + +### Patch Changes + +- chore: add retry +- Updated dependencies + - @ui-tars/operator-nut-js@1.2.0-beta.3 + - @ui-tars/sdk@1.2.0-beta.3 + +## 1.2.0-beta.2 + +### Patch Changes + +- chore: publish +- Updated dependencies + - @ui-tars/operator-nut-js@1.2.0-beta.2 + - @ui-tars/sdk@1.2.0-beta.2 + +## 1.2.0-beta.1 + +### Patch Changes + +- chore: remove unused code +- Updated dependencies + - @ui-tars/operator-nut-js@1.2.0-beta.1 + - @ui-tars/sdk@1.2.0-beta.1 + +## 1.2.0-beta.0 + +### Minor Changes + +- a062e03: feat: ui-tars agent sdk support + +### Patch Changes + +- Updated dependencies [a062e03] + - @ui-tars/operator-nut-js@1.2.0-beta.0 + - @ui-tars/sdk@1.2.0-beta.0 diff --git a/packages/cli/README.md b/packages/cli/README.md new file mode 100644 index 000000000..2d66758f4 --- /dev/null +++ b/packages/cli/README.md @@ -0,0 +1,3 @@ +# @ui-tars/cli + +CLI for UI-TARS. diff --git a/packages/cli/bin/index.js b/packages/cli/bin/index.js new file mode 100755 index 000000000..ce23237c1 --- /dev/null +++ b/packages/cli/bin/index.js @@ -0,0 +1,13 @@ +#!/usr/bin/env node + +function main() { + try { + const { run } = require('../dist/cli/commands'); + run(); + } catch (err) { + console.error(err); + process.exit(1); + } +} + +main(); diff --git a/packages/cli/package.json b/packages/cli/package.json new file mode 100644 index 000000000..927eeb160 --- /dev/null +++ b/packages/cli/package.json @@ -0,0 +1,46 @@ +{ + "name": "@ui-tars/cli", + "version": "1.2.0-beta.8", + "description": "CLI for UI-TARS", + "repository": { + "type": "git", + "url": "https://github.com/bytedance/UI-TARS-desktop" + }, + "bugs": { + "url": "https://github.com/bytedance/UI-TARS-desktop/issues" + }, + "bin": { + "ui-tars": "./bin/index.js" + }, + "keywords": [ + "CLI", + "UI-TARS" + ], + "scripts": { + "dev": "tsup --watch", + "prepare": "npm run build", + "build": "tsup", + "test": "vitest" + }, + "license": "Apache-2.0", + "files": [ + "dist", + "bin" + ], + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org" + }, + "dependencies": { + "commander": "^13.1.0", + "jimp": "1.6.0", + "@clack/prompts": "^0.10.0", + "@ui-tars/operator-nut-js": "workspace:*", + "@ui-tars/sdk": "workspace:*" + }, + "devDependencies": { + "tsup": "^8.3.5", + "typescript": "^5.7.2", + "vitest": "^3.0.2" + } +} diff --git a/packages/cli/src/cli/commands.ts b/packages/cli/src/cli/commands.ts new file mode 100644 index 000000000..15d039c44 --- /dev/null +++ b/packages/cli/src/cli/commands.ts @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { program } from 'commander'; + +import { version } from '../../package.json'; +import { CliOptions, start } from './start'; + +export const run = () => { + program.name('ui-tars').usage(' [options]').version(version); + + program + .command('start') + .description('starting the ui-tars agent...') + .option('-p, --presets', 'Model Config Presets') + .action(async (options: CliOptions) => { + try { + await start(options); + } catch (err) { + console.error('Failed to start'); + console.error(err); + process.exit(1); + } + }); + + program.parse(); +}; diff --git a/packages/cli/src/cli/start.ts b/packages/cli/src/cli/start.ts new file mode 100644 index 000000000..77cee18d6 --- /dev/null +++ b/packages/cli/src/cli/start.ts @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { GUIAgent } from '@ui-tars/sdk'; +import * as p from '@clack/prompts'; +// import { inspect } from 'node:util'; +import fs from 'node:fs'; +import path from 'node:path'; +import os from 'node:os'; + +import { NutJSOperator } from '@ui-tars/operator-nut-js'; + +export interface CliOptions { + presets?: string; +} +export const start = async (options: CliOptions) => { + const CONFIG_PATH = path.join(os.homedir(), '.ui-tars-cli.json'); + + // read config file + let config = { + baseURL: '', + apiKey: '', + model: '', + }; + + try { + if (fs.existsSync(CONFIG_PATH)) { + config = JSON.parse(fs.readFileSync(CONFIG_PATH, 'utf-8')); + } + } catch (error) { + console.warn('read config file failed', error); + return; + } + if (!config.baseURL || !config.apiKey || !config.model) { + const configAnswers = await p.group( + { + baseURL: () => p.text({ message: 'please input vlm model baseURL:' }), + apiKey: () => p.text({ message: 'please input vlm model apiKey:' }), + model: () => p.text({ message: 'please input vlm model name:' }), + }, + { + onCancel: () => { + p.cancel('operation cancelled'); + process.exit(0); + }, + }, + ); + + config = { ...config, ...configAnswers }; + + // save config to file + try { + fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2)); + console.log('model config file saved to:', CONFIG_PATH); + } catch (error) { + console.error('save model config file failed', error); + } + } + + const answers = await p.group( + { + instruction: () => p.text({ message: 'Input your instruction' }), + }, + { + onCancel: () => { + p.cancel('操作已取消'); + process.exit(0); + }, + }, + ); + + const abortController = new AbortController(); + process.on('SIGINT', () => { + abortController.abort(); + }); + + const guiAgent = new GUIAgent({ + model: { + baseURL: config.baseURL, + apiKey: config.apiKey, + model: config.model, + }, + operator: new NutJSOperator(), + signal: abortController.signal, + // onData: ({ data }) => { + // console.log( + // '[======data======]', + // inspect(data, { + // showHidden: false, + // depth: null, + // colors: true, + // maxStringLength: 100, + // }), + // ); + // }, + onError: ({ data, error }) => { + console.error(error, data); + }, + }); + + await guiAgent.run(answers.instruction); +}; diff --git a/src/main/agent/constant.ts b/packages/cli/src/index.ts similarity index 57% rename from src/main/agent/constant.ts rename to packages/cli/src/index.ts index 1a5b6448e..aba02857d 100644 --- a/src/main/agent/constant.ts +++ b/packages/cli/src/index.ts @@ -1,6 +1,7 @@ -/** +/* * Copyright (c) 2025 Bytedance, Inc. and its affiliates. * SPDX-License-Identifier: Apache-2.0 */ -export const FACTOR = 1000; -export const MAX_PIXELS = 1350 * 28 * 28; +import { run } from './cli/commands'; + +run(); diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json new file mode 100644 index 000000000..5f8bd0f3b --- /dev/null +++ b/packages/cli/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "moduleResolution": "Bundler", + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "outDir": "./dist", + "strict": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "isolatedModules": true, + "skipLibCheck": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/cli/tsup.config.ts b/packages/cli/tsup.config.ts new file mode 100644 index 000000000..b722c9ce7 --- /dev/null +++ b/packages/cli/tsup.config.ts @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { defineConfig } from 'tsup'; + +export default defineConfig((options) => { + return { + entry: ['./src/**/*.ts', '!src/**/*.{test,bench}.ts'], + format: ['esm', 'cjs'], + dts: true, + clean: true, + bundle: false, + outDir: 'dist', + }; +}); diff --git a/packages/cli/vitest.config.mts b/packages/cli/vitest.config.mts new file mode 100644 index 000000000..1b73d9704 --- /dev/null +++ b/packages/cli/vitest.config.mts @@ -0,0 +1,27 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +import tsconfigPath from 'vite-tsconfig-paths'; +import { defineProject } from 'vitest/config'; + +const __dirname = fileURLToPath(new URL('.', import.meta.url)); + +export default defineProject({ + root: './', + test: { + globals: true, + setupFiles: [resolve(__dirname, '../../scripts/vitest-setup.ts')], + environment: 'node', + includeSource: [resolve(__dirname, '.')], + }, + + plugins: [ + tsconfigPath({ + projects: ['../../tsconfig.node.json'], + }), + ], +}); diff --git a/packages/electron-ipc/CHANGELOG.md b/packages/electron-ipc/CHANGELOG.md new file mode 100644 index 000000000..6f1d90a04 --- /dev/null +++ b/packages/electron-ipc/CHANGELOG.md @@ -0,0 +1,43 @@ +# @ui-tars/electron-ipc + +## 1.2.0-beta.6 + +### Patch Changes + +- feat: new sdk + +## 1.2.0-beta.5 + +### Patch Changes + +- chore: update sdk + +## 1.2.0-beta.4 + +### Patch Changes + +- chore: new version + +## 1.2.0-beta.3 + +### Patch Changes + +- chore: add retry + +## 1.2.0-beta.2 + +### Patch Changes + +- chore: publish + +## 1.2.0-beta.1 + +### Patch Changes + +- chore: remove unused code + +## 1.2.0-beta.0 + +### Minor Changes + +- a062e03: feat: ui-tars agent sdk support diff --git a/packages/electron-ipc/package.json b/packages/electron-ipc/package.json index 90511de8b..39d9253b0 100644 --- a/packages/electron-ipc/package.json +++ b/packages/electron-ipc/package.json @@ -1,6 +1,6 @@ { "name": "@ui-tars/electron-ipc", - "version": "1.1.0", + "version": "1.2.0-beta.6", "description": "Type-safe Electron inter-process communication for UI-TARS", "repository": { "type": "git", @@ -31,8 +31,7 @@ "dev": "tsup --watch", "prepare": "npm run build", "build": "tsup", - "test": "vitest", - "prepack": "npm run build" + "test": "vitest" }, "license": "Apache-2.0", "files": [ diff --git a/packages/operators/nut-js/CHANGELOG.md b/packages/operators/nut-js/CHANGELOG.md new file mode 100644 index 000000000..8d1f76ac9 --- /dev/null +++ b/packages/operators/nut-js/CHANGELOG.md @@ -0,0 +1,82 @@ +# @ui-tars/operator-nut-js + +## 1.2.0-beta.8 + +### Patch Changes + +- fix: useConfig to useContext +- Updated dependencies + - @ui-tars/sdk@1.2.0-beta.8 + +## 1.2.0-beta.7 + +### Patch Changes + +- Updated dependencies + - @ui-tars/sdk@1.2.0-beta.7 + +## 1.2.0-beta.6 + +### Patch Changes + +- feat: new sdk +- Updated dependencies + - @ui-tars/shared@1.2.0-beta.6 + - @ui-tars/sdk@1.2.0-beta.6 + +## 1.2.0-beta.5 + +### Patch Changes + +- chore: update sdk +- Updated dependencies + - @ui-tars/shared@1.2.0-beta.5 + - @ui-tars/sdk@1.2.0-beta.5 + +## 1.2.0-beta.4 + +### Patch Changes + +- chore: new version +- Updated dependencies + - @ui-tars/shared@1.2.0-beta.4 + - @ui-tars/sdk@1.2.0-beta.4 + +## 1.2.0-beta.3 + +### Patch Changes + +- chore: add retry +- Updated dependencies + - @ui-tars/shared@1.2.0-beta.3 + - @ui-tars/sdk@1.2.0-beta.3 + +## 1.2.0-beta.2 + +### Patch Changes + +- chore: publish +- Updated dependencies + - @ui-tars/shared@1.2.0-beta.2 + - @ui-tars/sdk@1.2.0-beta.2 + +## 1.2.0-beta.1 + +### Patch Changes + +- chore: remove unused code +- Updated dependencies + - @ui-tars/shared@1.2.0-beta.1 + - @ui-tars/sdk@1.2.0-beta.1 + +## 1.2.0-beta.0 + +### Minor Changes + +- a062e03: feat: ui-tars agent sdk support + +### Patch Changes + +- Updated dependencies [a062e03] + - @ui-tars/shared@1.2.0-beta.0 + - @ui-tars/sdk@1.2.0-beta.0 diff --git a/packages/operators/nut-js/README.md b/packages/operators/nut-js/README.md new file mode 100644 index 000000000..4ec11b8ad --- /dev/null +++ b/packages/operators/nut-js/README.md @@ -0,0 +1,3 @@ +# @ui-tars/operator-nut-js + +Operator Nut JS SDK for UI-TARS. diff --git a/packages/operators/nut-js/package.json b/packages/operators/nut-js/package.json new file mode 100644 index 000000000..037f4cfed --- /dev/null +++ b/packages/operators/nut-js/package.json @@ -0,0 +1,52 @@ +{ + "name": "@ui-tars/operator-nut-js", + "version": "1.2.0-beta.8", + "description": "Operator Nut JS SDK for UI-TARS", + "repository": { + "type": "git", + "url": "https://github.com/bytedance/UI-TARS-desktop" + }, + "bugs": { + "url": "https://github.com/bytedance/UI-TARS-desktop/issues" + }, + "keywords": [ + "AI", + "Core", + "SDK", + "Operator", + "UI-TARS" + ], + "main": "./dist/index.js", + "module": "./dist/index.mjs", + "types": "./dist/index.d.ts", + "scripts": { + "dev": "tsup --watch", + "prepare": "npm run build", + "build": "tsup", + "test": "vitest" + }, + "license": "Apache-2.0", + "files": [ + "dist" + ], + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org" + }, + "dependencies": { + "@ui-tars/shared": "workspace:*", + "big.js": "^6.2.2", + "jimp": "1.6.0", + "@computer-use/nut-js": "^4.2.0" + }, + "peerDependencies": { + "@ui-tars/sdk": "workspace:*" + }, + "devDependencies": { + "@ui-tars/sdk": "workspace:*", + "tsup": "^8.3.5", + "typescript": "^5.7.2", + "vitest": "^3.0.2", + "@types/big.js": "^6.2.2" + } +} diff --git a/packages/operators/nut-js/src/index.ts b/packages/operators/nut-js/src/index.ts new file mode 100644 index 000000000..e2caf59f6 --- /dev/null +++ b/packages/operators/nut-js/src/index.ts @@ -0,0 +1,268 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { + Operator, + useContext, + type ScreenshotOutput, + type ExecuteParams, +} from '@ui-tars/sdk/core'; +import { Jimp } from 'jimp'; +import { + screen, + Button, + Key, + Point, + Region, + centerOf, + keyboard, + mouse, + sleep, + straightTo, + clipboard, +} from '@computer-use/nut-js'; +import Big from 'big.js'; +import { parseBoxToScreenCoords } from '@ui-tars/sdk/core'; + +const moveStraightTo = async (startX: number | null, startY: number | null) => { + if (startX === null || startY === null) { + return; + } + await mouse.move(straightTo(new Point(startX, startY))); +}; +export class NutJSOperator extends Operator { + public async screenshot(): Promise { + const { logger } = useContext(); + const grabImage = await screen.grab(); + const screenWithScale = await grabImage.toRGB(); // widthScale = screenWidth * scaleX + + const scaleFactor = screenWithScale.pixelDensity.scaleX; + + logger.info( + '[NutjsOperator]', + 'scaleX', + screenWithScale.pixelDensity.scaleX, + 'scaleY', + screenWithScale.pixelDensity.scaleY, + ); + + const screenWithScaleImage = await Jimp.fromBitmap({ + width: screenWithScale.width, + height: screenWithScale.height, + data: Buffer.from(screenWithScale.data), + }); + + const width = screenWithScale.width / screenWithScale.pixelDensity.scaleX; + const height = screenWithScale.height / screenWithScale.pixelDensity.scaleY; + + const realScreenImage = await screenWithScaleImage + .resize({ + w: width, + h: height, + }) + .getBuffer('image/png', { quality: 75 }); + + const output = { + base64: realScreenImage.toString('base64'), + width, + height, + scaleFactor, + }; + + logger?.info( + `[NutjsOperator] screenshot: ${output.width}x${output.height}, scaleFactor: ${scaleFactor}`, + ); + return output; + } + + async execute(params: ExecuteParams): Promise { + const { logger } = useContext(); + const { parsedPrediction, screenWidth, screenHeight, scaleFactor } = params; + + const { action_type, action_inputs } = parsedPrediction; + const startBoxStr = action_inputs?.start_box || ''; + + logger.info('[NutjsOperator] execute', scaleFactor); + const { x: startX, y: startY } = parseBoxToScreenCoords({ + boxStr: startBoxStr, + screenWidth, + screenHeight, + }); + + logger.info(`[NutjsOperator Position]: (${startX}, ${startY})`); + + // execute configs + mouse.config.mouseSpeed = 3000; + + // if (startBoxStr) { + // const region = await nutScreen.highlight( + // new Region(startX, startY, 100, 100), + // ); + // logger.info('[execute] [Region]', region); + // } + + switch (action_type) { + case 'wait': + logger.info('[NutjsOperator] wait', action_inputs); + await sleep(1000); + break; + + case 'mouse_move': + case 'hover': + logger.info('[NutjsOperator] mouse_move'); + await moveStraightTo(startX, startY); + break; + + case 'click': + case 'left_click': + case 'left_single': + logger.info('[NutjsOperator] left_click'); + await moveStraightTo(startX, startY); + await sleep(100); + await mouse.click(Button.LEFT); + break; + + case 'left_double': + case 'double_click': + logger.info(`[NutjsOperator] ${action_type}(${startX}, ${startY})`); + await moveStraightTo(startX, startY); + await sleep(100); + await mouse.doubleClick(Button.LEFT); + break; + + case 'right_click': + case 'right_single': + logger.info('[NutjsOperator] right_click'); + await moveStraightTo(startX, startY); + await sleep(100); + await mouse.click(Button.RIGHT); + break; + + case 'middle_click': + logger.info('[NutjsOperator] middle_click'); + await moveStraightTo(startX, startY); + await mouse.click(Button.MIDDLE); + break; + + case 'left_click_drag': + case 'drag': + case 'select': { + logger.info('[NutjsOperator] drag', action_inputs); + // end_box + if (action_inputs?.end_box) { + const { x: endX, y: endY } = parseBoxToScreenCoords({ + boxStr: action_inputs.end_box, + screenWidth, + screenHeight, + }); + + if (startX && startY && endX && endY) { + // calculate x and y direction difference + const diffX = Big(endX).minus(startX).toNumber(); + const diffY = Big(endY).minus(startY).toNumber(); + + await mouse.drag( + straightTo(centerOf(new Region(startX, startY, diffX, diffY))), + ); + } + } + break; + } + + case 'type': { + const content = action_inputs.content?.trim(); + logger.info('[NutjsOperator] type', content); + if (content) { + const stripContent = content.replace(/\\n$/, '').replace(/\n$/, ''); + keyboard.config.autoDelayMs = 0; + if (process.platform === 'win32') { + const originalClipboard = await clipboard.getContent(); + await clipboard.setContent(stripContent); + await keyboard.pressKey(Key.LeftControl, Key.V); + await sleep(50); + await keyboard.releaseKey(Key.LeftControl, Key.V); + await sleep(50); + await clipboard.setContent(originalClipboard); + } else { + await keyboard.type(stripContent); + } + + if (content.endsWith('\n') || content.endsWith('\\n')) { + await keyboard.pressKey(Key.Enter); + await keyboard.releaseKey(Key.Enter); + } + + keyboard.config.autoDelayMs = 500; + } + break; + } + + case 'hotkey': { + const keyStr = action_inputs?.key || action_inputs?.hotkey; + if (keyStr) { + const platformCommandKey = + process.platform === 'darwin' ? Key.LeftCmd : Key.LeftWin; + const keyMap: Record = { + return: Key.Enter, + enter: Key.Enter, + ctrl: Key.LeftControl, + shift: Key.LeftShift, + alt: Key.LeftAlt, + space: Key.Space, + 'page down': Key.PageDown, + pagedown: Key.PageDown, + 'page up': Key.PageUp, + pageup: Key.PageUp, + meta: platformCommandKey, + win: platformCommandKey, + command: platformCommandKey, + cmd: platformCommandKey, + }; + + const keys = keyStr + .split(/[\s+]/) + .map( + (k) => + keyMap[k.toLowerCase()] || + Key[k.toUpperCase() as keyof typeof Key], + ); + logger.info('[NutjsOperator] hotkey: ', keys); + await keyboard.pressKey(...keys); + await keyboard.releaseKey(...keys); + } + break; + } + + case 'scroll': { + const { direction } = action_inputs; + // if startX and startY is not null, move mouse to startX, startY + if (startX !== null && startY !== null) { + await moveStraightTo(startX, startY); + } + + switch (direction?.toLowerCase()) { + case 'up': + await mouse.scrollUp(5 * 100); + break; + case 'down': + await mouse.scrollDown(5 * 100); + break; + default: + console.warn( + `[NutjsOperator] Unsupported scroll direction: ${direction}`, + ); + } + break; + } + + case 'call_user': + case 'finished': + break; + + default: + logger.warn(`Unsupported action: ${action_type}`); + return; + } + } +} diff --git a/src/main/agent/execute.test.ts b/packages/operators/nut-js/test/execute.test.ts similarity index 64% rename from src/main/agent/execute.test.ts rename to packages/operators/nut-js/test/execute.test.ts index 849f7e59b..34b498f0f 100644 --- a/src/main/agent/execute.test.ts +++ b/packages/operators/nut-js/test/execute.test.ts @@ -1,3 +1,8 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { type ExecuteParams } from '@ui-tars/sdk/core'; import { Button, Key, @@ -10,7 +15,23 @@ import { } from '@computer-use/nut-js'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { ExecuteParams, execute } from './execute'; +import { NutJSOperator } from '../src/index'; + +vi.mock('@ui-tars/sdk/core', async (importOriginal) => { + const actual: any = await importOriginal(); + return { + useContext: vi.fn().mockReturnValue({ + logger: { + info: vi.fn(), + warn: vi.fn(), + error: vi.fn(), + }, + factor: 1000, + }), + Operator: actual.Operator, + parseBoxToScreenCoords: actual.parseBoxToScreenCoords, + }; +}); // Mock @computer-use/nut-js vi.mock('@computer-use/nut-js', async (importOriginal) => { @@ -48,19 +69,16 @@ vi.mock('@computer-use/nut-js', async (importOriginal) => { }); describe('execute', () => { - const mockLogger = { - info: vi.fn(), - warn: vi.fn(), - error: vi.fn(), - }; - beforeEach(() => { vi.clearAllMocks(); }); it('Click on the search bar at the top of the screen', async () => { + const nutJSOperator = new NutJSOperator(); const executeParams: ExecuteParams = { - prediction: { + prediction: + "Thought: Click on the search bar at the top of the screen\nAction: click(start_box='(72,74)')", + parsedPrediction: { reflection: '', thought: 'Click on the search bar at the top of the screen\n', action_type: 'click', @@ -70,11 +88,10 @@ describe('execute', () => { }, screenWidth: 1920, screenHeight: 1080, - logger: mockLogger, scaleFactor: 1, }; - await execute(executeParams); + await nutJSOperator.execute(executeParams); expect(mouse.move).toHaveBeenCalledWith( straightTo(new Point(138.24, 697.68)), @@ -83,34 +100,12 @@ describe('execute', () => { expect(mouse.click).toHaveBeenCalledWith(Button.LEFT); }); - it('Click on the search bar at the top of the screen with scaleFactor', async () => { - const executeParams: ExecuteParams = { - prediction: { - reflection: '', - thought: 'Click on the search bar at the top of the screen\n', - action_type: 'click', - action_inputs: { - start_box: '[0.072,0.646,0.072,0.646]', - }, - }, - screenWidth: 1920, - screenHeight: 1080, - logger: mockLogger, - scaleFactor: 1.5, - }; - - await execute(executeParams); - - expect(mouse.move).toHaveBeenCalledWith( - straightTo(new Point(207.36, 1046.52)), - ); - - expect(mouse.click).toHaveBeenCalledWith(Button.LEFT); - }); - it('type doubao.com\n', async () => { + const nutJSOperator = new NutJSOperator(); const executeParams: ExecuteParams = { - prediction: { + prediction: + "Thought: To proceed with the task of accessing doubao.com, I need to type the URL into the address bar. This will allow me to navigate to the website and continue with the subsequent steps of the task.\nAction: type(content='doubao.com\\n')", + parsedPrediction: { reflection: '', thought: 'To proceed with the task of accessing doubao.com, I need to type the URL into the address bar. This will allow me to navigate to the website and continue with the subsequent steps of the task.\n' + @@ -120,19 +115,21 @@ describe('execute', () => { }, screenWidth: 1920, screenHeight: 1080, - logger: mockLogger, scaleFactor: 1, }; - await execute(executeParams); + await nutJSOperator.execute(executeParams); expect(keyboard.type).toHaveBeenCalledWith('doubao.com'); expect(keyboard.pressKey).toHaveBeenCalledWith(Key.Enter); }); it('type doubao.com', async () => { + const nutJSOperator = new NutJSOperator(); const executeParams: ExecuteParams = { - prediction: { + prediction: + "Thought: To proceed with the task of accessing doubao.com, I need to type the URL into the address bar. This will allow me to navigate to the website and continue with the subsequent steps of the task.\nAction: type(content='doubao.com')", + parsedPrediction: { reflection: '', thought: 'To proceed with the task of accessing doubao.com, I need to type the URL into the address bar. This will allow me to navigate to the website and continue with the subsequent steps of the task.\n' + @@ -142,19 +139,21 @@ describe('execute', () => { }, screenWidth: 1920, screenHeight: 1080, - logger: mockLogger, scaleFactor: 1, }; - await execute(executeParams); + await nutJSOperator.execute(executeParams); expect(keyboard.type).toHaveBeenCalledWith('doubao.com'); expect(keyboard.pressKey).not.toHaveBeenCalledWith(Key.Enter); }); it('type Hello World\nUI-TARS\n', async () => { + const nutJSOperator = new NutJSOperator(); const executeParams: ExecuteParams = { - prediction: { + prediction: + "Thought: To proceed with the task of accessing doubao.com, I need to type the URL into the address bar. This will allow me to navigate to the website and continue with the subsequent steps of the task.\nAction: type(content='Hello World\\nUI-TARS\\n')", + parsedPrediction: { reflection: '', thought: 'To proceed with the task of accessing doubao.com, I need to type the URL into the address bar. This will allow me to navigate to the website and continue with the subsequent steps of the task.\n' + @@ -164,19 +163,21 @@ describe('execute', () => { }, screenWidth: 1920, screenHeight: 1080, - logger: mockLogger, scaleFactor: 1, }; - await execute(executeParams); + await nutJSOperator.execute(executeParams); expect(keyboard.type).toHaveBeenCalledWith('Hello World\\nUI-TARS'); expect(keyboard.pressKey).toHaveBeenCalledWith(Key.Enter); }); it('drag slider horizontally', async () => { + const nutJSOperator = new NutJSOperator(); const executeParams: ExecuteParams = { - prediction: { + prediction: + "Thought: To narrow down the search results to cat litters within the specified price range of $18 to $32, I need to adjust the price filter. The next logical step is to drag the left handle of the price slider to set the minimum price to $18, ensuring that only products within the desired range are displayed.\nAction: drag(start_box='(72,74)', end_box='(175,74)')", + parsedPrediction: { reflection: '', thought: 'To narrow down the search results to cat litters within the specified price range of $18 to $32, I need to adjust the price filter. The next logical step is to drag the left handle of the price slider to set the minimum price to $18, ensuring that only products within the desired range are displayed.\n' + @@ -189,11 +190,10 @@ describe('execute', () => { }, screenWidth: 1920, screenHeight: 1080, - logger: mockLogger, scaleFactor: 1, }; - await execute(executeParams); + await nutJSOperator.execute(executeParams); expect(mouse.drag).toHaveBeenCalledWith( straightTo(centerOf(new Region(138.24, 697.68, 197.76, 1.08))), @@ -201,8 +201,11 @@ describe('execute', () => { }); it('drag slider vertically', async () => { + const nutJSOperator = new NutJSOperator(); const executeParams: ExecuteParams = { - prediction: { + prediction: + "Thought: To narrow down the search results to cat litters within the specified price range of $18 to $32, I need to adjust the price filter. The next logical step is to drag the left handle of the price slider to set the minimum price to $18, ensuring that only products within the desired range are displayed.\nAction: drag(start_box='(72,74)', end_box='(72,546)')", + parsedPrediction: { reflection: '', thought: 'To narrow down the search results to cat litters within the specified price range of $18 to $32, I need to adjust the price filter. The next logical step is to drag the left handle of the price slider to set the minimum price to $18, ensuring that only products within the desired range are displayed.\n' + @@ -215,11 +218,10 @@ describe('execute', () => { }, screenWidth: 1920, screenHeight: 1080, - logger: mockLogger, scaleFactor: 1, }; - await execute(executeParams); + await nutJSOperator.execute(executeParams); expect(mouse.drag).toHaveBeenCalledWith( straightTo(centerOf(new Region(138.24, 697.68, 0, -108))), diff --git a/packages/operators/nut-js/tsconfig.json b/packages/operators/nut-js/tsconfig.json new file mode 100644 index 000000000..5f8bd0f3b --- /dev/null +++ b/packages/operators/nut-js/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "moduleResolution": "Bundler", + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "outDir": "./dist", + "strict": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "isolatedModules": true, + "skipLibCheck": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/operators/nut-js/tsup.config.ts b/packages/operators/nut-js/tsup.config.ts new file mode 100644 index 000000000..69e94b15d --- /dev/null +++ b/packages/operators/nut-js/tsup.config.ts @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { defineConfig } from 'tsup'; + +export default defineConfig((options) => { + return { + entry: ['src/**/*.ts', '!src/**/*.{test,bench}.ts'], + format: ['esm', 'cjs'], + dts: true, + clean: true, + bundle: false, + outDir: 'dist', + }; +}); diff --git a/packages/operators/nut-js/vitest.config.mts b/packages/operators/nut-js/vitest.config.mts new file mode 100644 index 000000000..53fca497f --- /dev/null +++ b/packages/operators/nut-js/vitest.config.mts @@ -0,0 +1,27 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +import tsconfigPath from 'vite-tsconfig-paths'; +import { defineProject } from 'vitest/config'; + +const __dirname = fileURLToPath(new URL('.', import.meta.url)); + +export default defineProject({ + root: './', + test: { + globals: true, + setupFiles: [resolve(__dirname, '../../../scripts/vitest-setup.ts')], + environment: 'node', + includeSource: [resolve(__dirname, '.')], + }, + + plugins: [ + tsconfigPath({ + projects: ['../../../tsconfig.node.json'], + }), + ], +}); diff --git a/packages/sdk/CHANGELOG.md b/packages/sdk/CHANGELOG.md new file mode 100644 index 000000000..76bc39ca6 --- /dev/null +++ b/packages/sdk/CHANGELOG.md @@ -0,0 +1 @@ +# @ui-tars/sdk diff --git a/packages/sdk/README.md b/packages/sdk/README.md new file mode 100644 index 000000000..1e0eaf738 --- /dev/null +++ b/packages/sdk/README.md @@ -0,0 +1,234 @@ +# @ui-tars/sdk Guide(Beta) + +## Overview + +`@ui-tars/sdk` is a powerful cross-platform(ANY device/platform) toolkit for building GUI automation agents. + +It provides a flexible framework to create agents that can interact with graphical user interfaces through various operators. It supports running on both **Node.js** and the **Web Browser** + +## Installation + +```bash +npm install @ui-tars/sdk@beta +``` + +> Note: Later, we will release the stable version `@ui-tars/sdk@latest`. + +## Quick Start + +### Basic Usage + +Basic usage is largely derived from package `@ui-tars/sdk`, here's a basic example of using the SDK: + +> Note: Using `nut-js`(cross-platform computer control tool) as the operator, you can also use or customize other operators. NutJS operator that supports common desktop automation actions: +> - Mouse actions: click, double click, right click, drag, hover +> - Keyboard input: typing, hotkeys +> - Scrolling +> - Screenshot capture + +```ts +import { GUIAgent } from '@ui-tars/sdk'; +import { NutJSOperator } from '@ui-tars/operator-nut-js'; + +const guiAgent = new GUIAgent({ + model: { + baseURL: config.baseURL, + apiKey: config.apiKey, + model: config.model, + }, + operator: new NutJSOperator(), + onData: ({ data }) => { + console.log(data) + }, + onError: ({ data, error }) => { + console.error(error, data); + }, +}); + +await guiAgent.run('send "hello world" to x.com'); +``` + +### Handling Abort Signals + +You can abort the agent by passing a `AbortSignal` to the GUIAgent `signal` option. + +```ts +const abortController = new AbortController(); + +const guiAgent = new GUIAgent({ + // ... other config + signal: abortController.signal, +}); + +// ctrl/cmd + c to cancel operation +process.on('SIGINT', () => { + abortController.abort(); +}); +``` + +## Configuration Options + +The `GUIAgent` constructor accepts the following configuration options: + +- `model`: Model configuration(OpenAI-compatible API) or custom model instance + - `baseURL`: API endpoint URL + - `apiKey`: API authentication key + - `model`: Model name to use + - more options see [OpenAI API](https://platform.openai.com/docs/guides/vision/uploading-base-64-encoded-images) +- `operator`: Instance of an operator class that implements the required interface +- `signal`: AbortController signal for canceling operations +- `onData`: Callback for receiving agent data/status updates + - `data.conversations` is an array of objects, **IMPORTANT: is delta, not the whole conversation history**, each object contains: + - `from`: The role of the message, it can be one of the following: + - `human`: Human message + - `gpt`: Agent response + - `screenshotBase64`: Screenshot base64 + - `value`: The content of the message + - `data.status` is the current status of the agent, it can be one of the following: + - `StatusEnum.INIT`: Initial state + - `StatusEnum.RUNNING`: Agent is actively executing + - `StatusEnum.END`: Operation completed + - `StatusEnum.MAX_LOOP`: Maximum loop count reached +- `onError`: Callback for error handling +- `systemPrompt`: Optional custom system prompt +- `maxLoopCount`: Maximum number of interaction loops (default: 25) + + +## Advanced Usage + +### Operator Interface + +When implementing a custom operator, you need to implement two core methods: + +#### screenshot() + +This method captures the current screen state and returns a `ScreenshotOutput`: + +```typescript +interface ScreenshotOutput { + // Base64 encoded image string + base64: string; + // Physical screen width + width: number; + // Physical screen height + height: number; + // Device pixel ratio (DPR) + scaleFactor: number; +} +``` + +#### execute() + +This method performs actions based on model predictions. It receives an `ExecuteParams` object: + +```typescript +interface ExecuteParams { + // Raw prediction string from the model + prediction: string; + // Parsed prediction object + parsedPrediction: { + action_type: string; + action_inputs: Record; + reflection: string | null; + thought: string; + }; + // Physical screen width + screenWidth: number; + // Physical screen height + screenHeight: number; + // Device pixel ratio (DPR) + scaleFactor: number; +} +``` + +Advanced sdk usage is largely derived from package `@ui-tars/sdk/core`, you can create custom operators by extending the base `Operator` class: + +```typescript +import { Operator, ScreenshotOutput, ExecuteParams } from '@ui-tars/sdk/core'; + +export class CustomOperator extends Operator { + public async screenshot(): Promise { + // Implement screenshot functionality + return { + base64: 'base64-encoded-image', + width: 1920, + height: 1080, + scaleFactor: 1 + }; + } + + async execute(params: ExecuteParams): Promise { + const { parsedPrediction, screenWidth, screenHeight, scaleFactor } = params; + // Implement action execution logic + } +} +``` + +Required methods: +- `screenshot()`: Captures the current screen state +- `execute()`: Performs the requested action based on model predictions + +### Custom Model Implementation + +You can implement custom model logic by extending the `UITarsModel` class: + +```typescript +class CustomUITarsModel extends UITarsModel { + constructor(modelConfig: { model: string }) { + super(modelConfig); + } + + async invoke(params: any) { + // Implement custom model logic + return { + prediction: 'action description', + parsedPredictions: [{ + action_type: 'click', + action_inputs: { /* ... */ }, + reflection: null, + thought: 'reasoning' + }] + }; + } +} + +const agent = new GUIAgent({ + model: new CustomUITarsModel({ model: 'custom-model' }), + // ... other config +}); +``` + +> Note: However, it is not recommended to implement a custom model because it contains a lot of data processing logic (including image transformations, scaling factors, etc.). + +### Planning + +```ts +const guiAgent = new GUIAgent({ + // ... other config +}); + +const planningList = await reasoningModel.invoke({ + conversations: [ + { + role: 'user', + content: 'buy a ticket from beijing to shanghai', + } + ] +}) +/** + * [ + * 'open chrome', + * 'open trip.com', + * 'click "search" button', + * 'select "beijing" in "from" input', + * 'select "shanghai" in "to" input', + * 'click "search" button', + * ] + */ + +for (const planning of planningList) { + await guiAgent.run(planning); +} +``` + + diff --git a/packages/sdk/package.json b/packages/sdk/package.json new file mode 100644 index 000000000..fcaaaf3bc --- /dev/null +++ b/packages/sdk/package.json @@ -0,0 +1,75 @@ +{ + "name": "@ui-tars/sdk", + "version": "1.2.0-beta.8", + "description": "A powerful cross-platform(ANY device/platform) toolkit for building GUI automation agents for UI-TARS", + "repository": { + "type": "git", + "url": "https://github.com/bytedance/UI-TARS-desktop" + }, + "bugs": { + "url": "https://github.com/bytedance/UI-TARS-desktop/issues" + }, + "keywords": [ + "AI", + "SDK", + "Operator", + "UI-TARS" + ], + "main": "./dist/index.js", + "module": "./dist/index.mjs", + "types": "./dist/index.d.ts", + "sideEffects": false, + "browser": { + "./": "./dist/index.mjs", + "./core": "./dist/core.mjs", + "./constants": "./dist/constants.mjs" + }, + "exports": { + ".": { + "import": "./dist/index.mjs", + "require": "./dist/index.js" + }, + "./core": { + "import": "./dist/core.mjs", + "require": "./dist/core.js" + }, + "./constants": { + "import": "./dist/constants.mjs", + "require": "./dist/constants.js" + } + }, + "scripts": { + "dev": "tsup --watch", + "prepare": "tsx scripts/sync-docs.ts && npm run build", + "build": "tsup", + "test:browser": "vitest --environment happy-dom", + "test": "vitest --environment happy-dom && vitest --environment node" + }, + "license": "Apache-2.0", + "files": [ + "dist" + ], + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org" + }, + "dependencies": { + "openai": "4.85.1", + "jimp": "1.6.0", + "async-retry": "1.3.3", + "@ui-tars/shared": "workspace:*", + "@ui-tars/action-parser": "workspace:*" + }, + "devDependencies": { + "tsx": "^4.19.2", + "tsup": "^8.3.5", + "typescript": "^5.7.2", + "vitest": "^3.0.2", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "@vitejs/plugin-react": "^4.3.4", + "vitest-browser-react": "^0.1.1", + "@types/async-retry": "1.4.9", + "happy-dom": "^17.1.1" + } +} diff --git a/packages/sdk/scripts/sync-docs.ts b/packages/sdk/scripts/sync-docs.ts new file mode 100644 index 000000000..757a9b805 --- /dev/null +++ b/packages/sdk/scripts/sync-docs.ts @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import * as fs from 'fs/promises'; +import * as path from 'path'; + +const packageDirPath = path.join(__dirname, '..'); +const docFilePath = path.join(packageDirPath, '../../docs/sdk.md'); + +async function syncDocs() { + try { + const content = await fs.readFile(docFilePath, 'utf-8'); + + await fs.writeFile(path.join(packageDirPath, 'README.md'), content); + + console.log('✨ 文档已从 docs/sdk.md 覆盖写入到 packages/sdk/README.md'); + } catch (error) { + console.error('❌ 同步文档失败:', error); + process.exit(1); + } +} + +syncDocs(); diff --git a/packages/sdk/src/GUIAgent.ts b/packages/sdk/src/GUIAgent.ts new file mode 100644 index 000000000..443c6d9bc --- /dev/null +++ b/packages/sdk/src/GUIAgent.ts @@ -0,0 +1,311 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { GUIAgentData, StatusEnum, ShareVersion } from '@ui-tars/shared/types'; +import { IMAGE_PLACEHOLDER, MAX_LOOP_COUNT } from '@ui-tars/shared/constants'; +import { sleep } from '@ui-tars/shared/utils'; +import asyncRetry from 'async-retry'; + +import { setContext } from './context/useContext'; +import { Operator, GUIAgentConfig } from './types'; +import { UITarsModel } from './Model'; +import { BaseGUIAgent } from './base'; +import { getSummary, processVlmParams, toVlmModelFormat } from './utils'; +import { MAX_SNAPSHOT_ERR_CNT, SYSTEM_PROMPT } from './constants'; + +export class GUIAgent extends BaseGUIAgent< + GUIAgentConfig +> { + private readonly operator: T; + private readonly model: InstanceType; + private readonly logger: NonNullable['logger']>; + private systemPrompt: string; + + constructor(config: GUIAgentConfig) { + super(config); + this.operator = config.operator; + + this.model = + config.model instanceof UITarsModel + ? config.model + : new UITarsModel(config.model); + this.logger = config.logger || console; + this.systemPrompt = config.systemPrompt || SYSTEM_PROMPT; + } + + async run(instruction: string) { + const { operator, model, logger } = this; + const { + signal, + onData, + onError, + retry = {}, + maxLoopCount = MAX_LOOP_COUNT, + } = this.config; + + const currentTime = Date.now(); + const data: GUIAgentData = { + version: ShareVersion.V1, + systemPrompt: this.systemPrompt, + instruction, + modelName: this.model.modelName, + status: StatusEnum.INIT, + logTime: currentTime, + conversations: [ + { + from: 'human', + value: instruction, + timing: { + start: currentTime, + end: currentTime, + cost: 0, + }, + }, + ], + }; + + // inject guiAgent config for operator to get + setContext( + Object.assign(this.config, { + logger: this.logger, + systemPrompt: this.systemPrompt, + factor: this.model.factor, + model: this.model, + }), + ); + + let loopCnt = 0; + let snapshotErrCnt = 0; + + // start running agent + data.status = StatusEnum.RUNNING; + await onData?.({ data: { ...data, conversations: [] } }); + + try { + // eslint-disable-next-line no-constant-condition + while (true) { + console.log('[run_data_status]', data.status); + + if (data.status !== StatusEnum.RUNNING || signal?.aborted) { + signal?.aborted && (data.status = StatusEnum.END); + await onData?.({ data: { ...data, conversations: [] } }); + break; + } + + if (loopCnt >= maxLoopCount || snapshotErrCnt >= MAX_SNAPSHOT_ERR_CNT) { + Object.assign(data, { + status: StatusEnum.MAX_LOOP, + errMsg: + loopCnt >= maxLoopCount + ? 'Exceeds the maximum number of loops' + : 'Too many screenshot failures', + }); + await onData?.({ data: { ...data, conversations: [] } }); + break; + } + + loopCnt += 1; + const start = Date.now(); + + const snapshot = await asyncRetry(() => operator.screenshot(), { + retries: retry?.screenshot?.maxRetries ?? 0, + onRetry: retry?.screenshot?.onRetry, + }); + + const isValidImage = !!( + snapshot?.base64 && + snapshot?.width && + snapshot?.height + ); + + if (!isValidImage) { + loopCnt -= 1; + snapshotErrCnt += 1; + await sleep(1000); + continue; + } + + let end = Date.now(); + data.conversations.push({ + from: 'human', + value: IMAGE_PLACEHOLDER, + screenshotBase64: snapshot.base64, + screenshotContext: { + size: { + width: snapshot.width, + height: snapshot.height, + }, + scaleFactor: snapshot.scaleFactor, + }, + timing: { + start, + end, + cost: end - start, + }, + }); + await onData?.({ + data: { + ...data, + conversations: data.conversations.slice(-1), + }, + }); + + // conversations -> messages, images + const modelFormat = toVlmModelFormat({ + conversations: data.conversations, + systemPrompt: data.systemPrompt, + }); + // sliding images window to vlm model + const vlmParams = processVlmParams( + modelFormat.conversations, + modelFormat.images, + ); + const { prediction, parsedPredictions } = await asyncRetry( + async (bail) => { + try { + const result = await model.invoke(vlmParams); + return result; + } catch (error: unknown) { + if ( + error instanceof Error && + (error?.name === 'APIUserAbortError' || + error?.message?.includes('aborted')) + ) { + bail(error as unknown as Error); + return { + prediction: '', + parsedPredictions: [], + }; + } + throw error; + } + }, + { + retries: retry?.model?.maxRetries ?? 0, + onRetry: retry?.model?.onRetry, + }, + ); + + logger.info('[GUIAgent Response]:', prediction); + logger.info( + 'GUIAgent Parsed Predictions:', + JSON.stringify(parsedPredictions), + ); + + if (!prediction) { + logger.error('[GUIAgent Response Empty]:', prediction); + continue; + } + + const predictionSummary = getSummary(prediction); + + end = Date.now(); + data.conversations.push({ + from: 'gpt', + value: predictionSummary, + timing: { + start, + end, + cost: end - start, + }, + screenshotContext: { + size: { + width: snapshot.width, + height: snapshot.height, + }, + scaleFactor: snapshot.scaleFactor, + }, + predictionParsed: parsedPredictions, + }); + await onData?.({ + data: { + ...data, + // end before execute loop + ...(parsedPredictions?.[0]?.action_type === 'finished' + ? { status: StatusEnum.END } + : {}), + conversations: data.conversations.slice(-1), + }, + }); + + for (const parsedPrediction of parsedPredictions) { + const actionType = parsedPrediction.action_type; + + logger.info('GUIAgent Action:', actionType); + + const prevStatus: StatusEnum = data.status; + switch (actionType) { + case 'error_env': + case 'call_user': + case 'finished': + data.status = StatusEnum.END; + break; + case 'max_loop': + data.status = StatusEnum.MAX_LOOP; + break; + } + if (data.status !== prevStatus) { + await onData?.({ + data: { + ...data, + conversations: [], + }, + }); + } + + if (!['wait', 'finished'].includes(actionType) && !signal?.aborted) { + logger.info( + 'GUIAgent Action Inputs:', + parsedPrediction.action_inputs, + parsedPrediction.action_type, + ); + await asyncRetry( + () => + operator.execute({ + prediction, + parsedPrediction, + screenWidth: snapshot.width, + screenHeight: snapshot.height, + scaleFactor: snapshot.scaleFactor, + }), + { + retries: retry?.execute?.maxRetries ?? 0, + onRetry: retry?.execute?.onRetry, + }, + ); + } + } + } + } catch (error) { + if ( + error instanceof Error && + (error.name === 'AbortError' || error.message?.includes('aborted')) + ) { + logger.info('Request was aborted'); + return; + } + + logger.error('[runLoop] error', error); + onError?.({ + data, + error: { + code: -1, + error: '服务异常', + stack: `${error}`, + }, + }); + throw error; + } finally { + data.status = StatusEnum.END; + await onData?.({ + data: { + ...data, + conversations: [], + }, + }); + logger.info('[GUIAgent] finally: status', data.status); + } + } +} diff --git a/packages/sdk/src/Model.ts b/packages/sdk/src/Model.ts new file mode 100644 index 000000000..7252d9fb8 --- /dev/null +++ b/packages/sdk/src/Model.ts @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import OpenAI, { type ClientOptions } from 'openai'; +import { ChatCompletionCreateParamsBase } from 'openai/resources/chat/completions'; +import { actionParser } from '@ui-tars/action-parser'; + +import { useContext } from './context/useContext'; +import { Model, type InvokeParams, type InvokeOutput } from './types'; + +import { preprocessResizeImage, convertToOpenAIMessages } from './utils'; +import { FACTOR, MAX_PIXELS } from './constants'; + +type OpenAIChatCompletionCreateParams = Omit & + Pick< + ChatCompletionCreateParamsBase, + 'model' | 'max_tokens' | 'temperature' | 'top_p' + >; + +export interface UITarsModelConfig extends OpenAIChatCompletionCreateParams {} + +export class UITarsModel extends Model { + constructor(private readonly modelConfig: UITarsModelConfig) { + super(); + this.modelConfig = modelConfig; + } + + get factor(): number { + return FACTOR; + } + + get modelName(): string { + return this.modelConfig.model ?? 'unknown'; + } + + async invoke(params: InvokeParams): Promise { + const { conversations, images } = params; + const { logger, signal } = useContext(); + const { + baseURL, + apiKey, + model, + max_tokens = 1000, + temperature = 0, + top_p = 0.7, + ...restOptions + } = this.modelConfig; + + const compressedImages = await Promise.all( + images.map((image) => preprocessResizeImage(image, MAX_PIXELS)), + ); + + const messages = convertToOpenAIMessages({ + conversations, + images: compressedImages, + }); + + const openai = new OpenAI({ + ...restOptions, + maxRetries: 0, + baseURL, + apiKey, + }); + + const startTime = Date.now(); + const result = await openai.chat.completions + .create( + { + model, + messages, + stream: false, + seed: null, + stop: null, + frequency_penalty: null, + presence_penalty: null, + // custom options + max_tokens, + temperature, + top_p, + }, + { + signal, + }, + ) + .finally(() => { + logger?.info(`[UITarsModel cost]: ${Date.now() - startTime}ms`); + }); + + if (!result.choices[0].message.content) { + const err = new Error(); + err.name = 'vlm response error'; + err.stack = JSON.stringify(result) ?? 'no message'; + logger?.error(err); + throw err; + } + + const prediction = result.choices[0].message.content; + + const data = { + prediction, + factor: FACTOR, + }; + try { + const { parsed: parsedPredictions } = await actionParser(data); + return { + prediction, + parsedPredictions, + }; + } catch (error) { + logger?.error('[UITarsModel] error', error); + return { + prediction, + parsedPredictions: [], + }; + } + } +} diff --git a/packages/sdk/src/base/index.ts b/packages/sdk/src/base/index.ts new file mode 100644 index 000000000..09b954585 --- /dev/null +++ b/packages/sdk/src/base/index.ts @@ -0,0 +1,46 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @abstract + * @class BaseGUIAgent + * @classdesc Abstract base class for GUI Agents. + */ +export abstract class BaseGUIAgent< + TConfig = Record, + TRunParams = unknown, + TRunOutput = unknown, +> { + constructor(protected config: TConfig) { + this.config = config; + } + /** + * @abstract + * @method run + * @description Abstract method to run the GUI Agent with an instruction. + */ + abstract run(instruction: TRunParams): Promise; +} + +/** + * @abstract + * @class BaseModel + * @classdesc Abstract base class for Models. + * @template T - Generic type for model configurations. + */ +export abstract class BaseModel { + abstract invoke(params: TParams): Promise; +} + +/** + * @abstract + * @class BaseOperator + * @classdesc Abstract base class for Operators. + */ +export abstract class BaseOperator { + abstract screenshot(params?: unknown): Promise; + abstract execute(params: unknown): Promise; +} diff --git a/packages/sdk/src/constants.ts b/packages/sdk/src/constants.ts new file mode 100644 index 000000000..f3324faed --- /dev/null +++ b/packages/sdk/src/constants.ts @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import type { AgentContext } from './types'; + +export const MAX_SNAPSHOT_ERR_CNT = 10; +export const FACTOR = 1000; +export const MAX_PIXELS = 1350 * 28 * 28; +export const SYSTEM_PROMPT = `You are a GUI agent. You are given a task and your action history, with screenshots. You need to perform the next action to complete the task. + +## Output Format +\`\`\` +Thought: ... +Action: ... +\`\`\` + +## Action Space +click(start_box='[x1, y1, x2, y2]') +left_double(start_box='[x1, y1, x2, y2]') +right_single(start_box='[x1, y1, x2, y2]') +drag(start_box='[x1, y1, x2, y2]', end_box='[x3, y3, x4, y4]') +hotkey(key='') +type(content='') #If you want to submit your input, use "\\n" at the end of \`content\`. +scroll(start_box='[x1, y1, x2, y2]', direction='down or up or right or left') +wait() #Sleep for 5s and take a screenshot to check for any changes. +finished() +call_user() # Submit the task and call the user when the task is unsolvable, or when you need the user's help. + +## Note +- Write a small plan and finally summarize your next action (with its target element) in one sentence in \`Thought\` part. + +## User Instruction +`; + +export const DEFAULT_CONTEXT = { + logger: console, + factor: FACTOR, + systemPrompt: SYSTEM_PROMPT, +} satisfies Partial; diff --git a/packages/sdk/src/context/useContext.ts b/packages/sdk/src/context/useContext.ts new file mode 100644 index 000000000..befa0c7c6 --- /dev/null +++ b/packages/sdk/src/context/useContext.ts @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import type { AgentContext } from '../types'; +import { DEFAULT_CONTEXT } from '../constants'; + +const isBrowser: boolean = + typeof window !== 'undefined' && typeof window.document !== 'undefined'; + +// @ts-ignore +const _globalThis: any = isBrowser ? window : global; + +const GLOBAL_CONTEXT_KEY = Symbol.for('@ui-tars/sdk/context'); + +if (!_globalThis[GLOBAL_CONTEXT_KEY]) { + _globalThis[GLOBAL_CONTEXT_KEY] = DEFAULT_CONTEXT; +} + +export function setContext(context: AgentContext): void { + _globalThis[GLOBAL_CONTEXT_KEY] = context; +} + +export function useContext(): T { + return _globalThis[GLOBAL_CONTEXT_KEY] as T; +} diff --git a/packages/sdk/src/core.ts b/packages/sdk/src/core.ts new file mode 100644 index 000000000..e40c10cca --- /dev/null +++ b/packages/sdk/src/core.ts @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +export { + Operator, + type InvokeParams, + type InvokeOutput, + type ExecuteParams, + type ScreenshotOutput, +} from './types'; +export { UITarsModel } from './Model'; +export { useContext } from './context/useContext'; +export { + parseBoxToScreenCoords, + preprocessResizeImage, + convertToOpenAIMessages, +} from './utils'; diff --git a/packages/sdk/src/index.ts b/packages/sdk/src/index.ts new file mode 100644 index 000000000..569b80f82 --- /dev/null +++ b/packages/sdk/src/index.ts @@ -0,0 +1,8 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +export { GUIAgent } from './GUIAgent'; +export type { GUIAgentConfig, GUIAgentError } from './types'; +export type { GUIAgentData } from '@ui-tars/shared/types'; +export { StatusEnum } from '@ui-tars/shared/types'; diff --git a/packages/sdk/src/types.ts b/packages/sdk/src/types.ts new file mode 100644 index 000000000..0512ba5aa --- /dev/null +++ b/packages/sdk/src/types.ts @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { + Message, + GUIAgentData, + PredictionParsed, + ScreenshotResult, + StatusEnum, +} from '@ui-tars/shared/types'; + +import { BaseOperator, BaseModel } from './base'; +import { UITarsModel } from './Model'; + +export interface ExecuteParams { + prediction: string; + parsedPrediction: PredictionParsed; + /** Device Physical Resolution */ + screenWidth: number; + /** Device Physical Resolution */ + screenHeight: number; + /** Device DPR */ + scaleFactor: number; +} + +export interface ScreenshotOutput extends ScreenshotResult {} + +export interface InvokeParams { + conversations: Message[]; + images: string[]; +} + +export interface InvokeOutput { + prediction: string; + parsedPredictions: PredictionParsed[]; + // TODO: status: StatusEnum, status should be provided by model +} +export abstract class Operator extends BaseOperator { + abstract screenshot(): Promise; + abstract execute(params: ExecuteParams): Promise; +} + +export abstract class Model extends BaseModel { + abstract invoke(params: InvokeParams): Promise; +} + +export type Logger = Pick; + +export interface RetryConfig { + maxRetries: number; + onRetry?: (error: Error, attempt: number) => void; +} + +export interface GUIAgentError { + // TODO: define error code + code: number; + error: string; + stack?: string; +} + +export interface GUIAgentConfig { + operator: TOperator; + model: + | InstanceType + | ConstructorParameters[0]; + + // ===== Optional ===== + systemPrompt?: string; + signal?: AbortSignal; + onData?: (params: { data: GUIAgentData }) => void; + onError?: (params: { data: GUIAgentData; error: GUIAgentError }) => void; + logger?: Logger; + retry?: { + model?: RetryConfig; + /** TODO: whether need to provider retry config in SDK?, should be provided with operator? */ + screenshot?: RetryConfig; + execute?: RetryConfig; + }; + /** Maximum number of turns for Agent to execute, @default 25 */ + maxLoopCount?: number; +} + +export interface AgentContext extends GUIAgentConfig { + logger: NonNullable['logger']>; + factor: number; + model: InstanceType; +} diff --git a/packages/sdk/src/utils.ts b/packages/sdk/src/utils.ts new file mode 100644 index 000000000..996cab539 --- /dev/null +++ b/packages/sdk/src/utils.ts @@ -0,0 +1,178 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { Jimp } from 'jimp'; +import { ChatCompletionMessageParam } from 'openai/resources/chat/completions'; + +import { IMAGE_PLACEHOLDER, MAX_IMAGE_LENGTH } from '@ui-tars/shared/constants'; +import { Conversation, Message } from '@ui-tars/shared/types'; +import { parseBoxToScreenCoords as _parseBoxToScreenCoords } from '@ui-tars/shared/utils'; +import { FACTOR } from './constants'; + +/** + * parse box string to screen coordinates + * eg: '[0.131,0.25,0.131,0.25]' 2560x1440 -> { x: 335.36, y: 360 } + * @param boxStr box string + * @param screenWidth screen width + * @param screenHeight screen height + * @returns screen coordinates + */ +export const parseBoxToScreenCoords = ({ + boxStr, + screenWidth, + screenHeight, +}: { + boxStr: string; + screenWidth: number; + screenHeight: number; +}) => { + const { x: _x, y: _y } = boxStr + ? _parseBoxToScreenCoords(boxStr, screenWidth, screenHeight, FACTOR) + : { x: null, y: null }; + + return { + x: _x, + y: _y, + }; +}; + +export const processVlmParams = ( + conversations: Message[], + images: string[], +) => { + // Check if the images array exceeds the limit + // TODO: configurable max image length + if (images.length > MAX_IMAGE_LENGTH) { + // Calculate the number of items to remove + const excessCount = images.length - MAX_IMAGE_LENGTH; + + // Remove excess images from the start + images = images.slice(excessCount); + + // Remove corresponding conversations where "value" is "" + let imageCountToRemove = excessCount; + conversations = conversations.filter((convo) => { + if (imageCountToRemove > 0 && convo.value === IMAGE_PLACEHOLDER) { + imageCountToRemove--; + return false; + } + return true; + }); + } + + // Return the processed result + return { images, conversations }; +}; + +export const toVlmModelFormat = ({ + conversations, + systemPrompt, +}: { + conversations: Conversation[]; + systemPrompt: string; +}): { + conversations: Message[]; + images: string[]; +} => { + return { + conversations: conversations.map((conv, idx) => { + if (idx === 0 && conv.from === 'human') { + return { + from: conv.from, + value: `${systemPrompt}${conv.value}`, + }; + } + return { + from: conv.from, + value: conv.value, + }; + }), + images: conversations + .filter( + (conv) => conv.value === IMAGE_PLACEHOLDER && !!conv.screenshotBase64, + ) + .map((conv) => conv.screenshotBase64!), + }; +}; + +export const getSummary = (prediction: string) => + prediction + .replace(/Reflection:[\s\S]*?(?=Action_Summary:|Action:|$)/g, '') + .trim(); + +/** + * convert conversations to OpenAI ChatCompletionMessageParam + * @param conversations conversations + * @param images images + * @returns OpenAI ChatCompletionMessageParam + */ +export const convertToOpenAIMessages = ({ + conversations, + images, +}: { + conversations: Message[]; + images: string[]; +}): Array => { + const messages: Array = []; + let imageIndex = 0; + + conversations.forEach((conv) => { + if (conv.value === IMAGE_PLACEHOLDER) { + // handle image message + if (imageIndex < images.length) { + messages.push({ + role: 'user', + content: [ + { + type: 'image_url', + image_url: { url: `data:image/png;base64,${images[imageIndex]}` }, + }, + ], + }); + imageIndex++; + } + } else { + // handle text message + messages.push({ + role: conv.from === 'human' ? 'user' : 'assistant', + content: conv.value, + }); + } + }); + + return messages; +}; + +export async function preprocessResizeImage( + image_base64: string, + maxPixels: number, +): Promise { + try { + const imageBuffer = Buffer.from(image_base64, 'base64'); + + const image = await Jimp.read(imageBuffer); + const { width, height } = image.bitmap; + + const currentPixels = width * height; + if (currentPixels > maxPixels) { + const resizeFactor = Math.sqrt(maxPixels / currentPixels); + const newWidth = Math.floor(width * resizeFactor); + const newHeight = Math.floor(height * resizeFactor); + + const resized = await image + .resize({ + w: newWidth, + h: newHeight, + }) + .getBuffer('image/png', { quality: 75 }); + + return resized.toString('base64'); + } + + return image_base64; + } catch (error) { + console.error('preprocessResizeImage error:', error); + throw error; + } +} diff --git a/packages/sdk/tests/GUIAgent.test.ts b/packages/sdk/tests/GUIAgent.test.ts new file mode 100644 index 000000000..94c749d6e --- /dev/null +++ b/packages/sdk/tests/GUIAgent.test.ts @@ -0,0 +1,374 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { describe, it, expect, vi, afterEach } from 'vitest'; +import { GUIAgent } from '../src/GUIAgent'; +import OpenAI from 'openai'; +import { Operator } from '../src/types'; +import { Jimp } from 'jimp'; +import { useContext } from '../src/context/useContext'; +import { StatusEnum } from '../src'; +import { IMAGE_PLACEHOLDER } from '@ui-tars/shared/constants'; +import { UITarsModel } from '../src/Model'; + +const getContext = vi.fn(); +vi.mock('openai', () => ({ + default: vi.fn(), +})); + +function mockOpenAIResponse(responses: string | (string | Promise)[]) { + const responseArray = Array.isArray(responses) ? responses : [responses]; + + const mockCreate = vi.fn(); + + responseArray.forEach((response) => { + mockCreate.mockImplementationOnce(async (params, options) => { + const checkAbort = () => { + if (options?.signal?.aborted) { + const error = new Error('Request aborted'); + error.name = 'AbortError'; + throw error; + } + }; + + const result = { + choices: [ + { + message: { + content: + typeof response === 'string' + ? response + : await Promise.race([ + response, + // 创建一个 Promise 来监听 abort 事件 + new Promise((_, reject) => { + console.log( + 'options?.signal?.aborted', + options?.signal?.aborted, + ); + if (options?.signal?.aborted) { + reject(new Error('Request aborted')); + } + options?.signal?.addEventListener( + 'abort', + () => { + reject(new Error('Request aborted')); + }, + { once: true }, + ); + }), + ]), + }, + }, + ], + }; + checkAbort(); + return Promise.resolve(result); + }); + }); + + vi.mocked(OpenAI).mockReturnValue({ + chat: { + completions: { + create: mockCreate, + }, + }, + } as unknown as OpenAI); +} + +const image = new Jimp({ + width: 1920, + height: 1080, + color: 0xffffffff, +}); +class MockOperator extends Operator { + screenshot = vi.fn().mockImplementation(async () => { + const buffer = await image.getBuffer('image/png'); + + return { + base64: buffer.toString('base64'), + width: 1920, + height: 1080, + scaleFactor: 1, + }; + }); + + execute = vi.fn().mockImplementation(async () => { + getContext(useContext()); + }); +} + +describe('GUIAgent', () => { + afterEach(() => { + getContext.mockRestore(); + }); + it('normal run', async () => { + mockOpenAIResponse([ + "Thought: Click on the search bar at the top of the screen\nAction: click(start_box='(72,646)')", + 'Thought: finished.\nAction: finished()', + ]); + const modelConfig = { + baseURL: 'http://localhost:3000/v1', + apiKey: 'test', + model: 'ui-tars', + }; + const operator = new MockOperator(); + let data = { + conversations: [], + }; + const onData = vi.fn().mockImplementation(({ data: newData }) => { + data = { + ...data, + ...newData, + conversations: [...data.conversations, ...newData.conversations], + }; + }); + const onError = vi.fn(); + + const agent = new GUIAgent({ + model: modelConfig, + operator, + onData, + onError, + }); + + await agent.run('click the button'); + + expect(getContext.mock.calls[0][0]).toMatchObject({ + model: { + modelConfig, + }, + }); + + expect(operator.execute).toBeCalledTimes(1); + expect(operator.execute.mock.calls[0][0]).toEqual({ + parsedPrediction: { + action_inputs: { + start_box: '[0.072,0.646,0.072,0.646]', + }, + action_type: 'click', + reflection: null, + thought: 'Click on the search bar at the top of the screen', + }, + prediction: + "Thought: Click on the search bar at the top of the screen\nAction: click(start_box='(72,646)')", + scaleFactor: 1, + screenHeight: 1080, + screenWidth: 1920, + }); + + expect(data.conversations).toEqual([ + expect.objectContaining({ + from: 'human', + value: IMAGE_PLACEHOLDER, + screenshotBase64: (await image.getBuffer('image/png')).toString( + 'base64', + ), + }), + expect.objectContaining({ + from: 'gpt', + value: + "Thought: Click on the search bar at the top of the screen\nAction: click(start_box='(72,646)')", + }), + expect.objectContaining({ + from: 'human', + value: IMAGE_PLACEHOLDER, + screenshotBase64: (await image.getBuffer('image/png')).toString( + 'base64', + ), + }), + expect.objectContaining({ + from: 'gpt', + value: 'Thought: finished.\nAction: finished()', + }), + ]); + // @ts-ignore + expect(data.status!).toEqual(StatusEnum.END); + expect(onData.mock.calls[0][0]).toEqual({ + data: expect.objectContaining({ + status: StatusEnum.RUNNING, + modelName: 'ui-tars', + }), + }); + expect(onData.mock.calls[1][0]).toEqual({ + data: expect.objectContaining({ + status: StatusEnum.RUNNING, + }), + }); + expect(onData.mock.calls[2][0]).toEqual({ + data: expect.objectContaining({ + status: StatusEnum.RUNNING, + }), + }); + expect(onData.mock.calls[3][0]).toEqual({ + data: expect.objectContaining({ + status: StatusEnum.RUNNING, + }), + }); + expect(onData.mock.calls[4][0]).toEqual({ + data: expect.objectContaining({ + status: StatusEnum.END, + }), + }); + + expect(onError).not.toHaveBeenCalled(); + }); + + it('custom UITarsModel run', async () => { + mockOpenAIResponse(['Thought: finished.\nAction: finished()']); + const operator = new MockOperator(); + const getContextCustom = vi.fn(); + + class CustomUITarsModel extends UITarsModel { + constructor(modelConfig: { model: string }) { + super(modelConfig); + } + async invoke(params: any) { + getContextCustom(useContext()); + const prediction = await Promise.resolve('finished.'); + return { + prediction, + parsedPredictions: [ + { + action_type: 'finished', + action_inputs: {}, + reflection: null, + thought: 'finished.', + }, + ], + }; + } + } + let data = { + conversations: [], + }; + const onData = vi.fn().mockImplementation(({ data: newData }) => { + data = { + ...data, + ...newData, + conversations: [...data.conversations, ...newData.conversations], + }; + }); + const onError = vi.fn(); + + const agent = new GUIAgent({ + model: new CustomUITarsModel({ + model: 'ui-tars-sft', + }), + operator, + onData, + onError, + }); + + await agent.run('click the button'); + + expect(getContextCustom.mock.calls[0][0]).toMatchObject({ + model: { + modelConfig: { + model: 'ui-tars-sft', + }, + }, + }); + + expect(operator.execute).not.toHaveBeenCalled(); + + expect(data.conversations).toEqual([ + expect.objectContaining({ + from: 'human', + value: IMAGE_PLACEHOLDER, + screenshotBase64: (await image.getBuffer('image/png')).toString( + 'base64', + ), + }), + expect.objectContaining({ + from: 'gpt', + value: 'finished.', + }), + ]); + // @ts-ignore + expect(data.status!).toEqual(StatusEnum.END); + expect(onData.mock.calls[0][0]).toEqual({ + data: expect.objectContaining({ + status: StatusEnum.RUNNING, + modelName: 'ui-tars-sft', + }), + }); + expect(onData.mock.calls[1][0]).toEqual({ + data: expect.objectContaining({ + status: StatusEnum.RUNNING, + }), + }); + expect(onData.mock.calls[1][0]).toEqual({ + data: expect.objectContaining({ + status: StatusEnum.RUNNING, + }), + }); + + expect(onError).not.toHaveBeenCalled(); + }); + + it('should handle abort correctly', async () => { + const abortController = new AbortController(); + class MockAbortOperator extends Operator { + screenshot = vi.fn().mockImplementation(async () => { + abortController.abort(); + const buffer = await image.getBuffer('image/png'); + + return { + base64: buffer.toString('base64'), + width: 1920, + height: 1080, + scaleFactor: 1, + }; + }); + + execute = vi.fn().mockImplementation(async () => { + return; + }); + } + + const promise: Promise = new Promise((resolve) => { + setTimeout( + () => + resolve( + "Thought: Click on the search bar\nAction: click(start_box='(72,646)')", + ), + 10000, + ); + }); + // mock 5s + mockOpenAIResponse([promise]); + + const operator = new MockAbortOperator(); + let data = { + conversations: [], + }; + const onData = vi.fn().mockImplementation(({ data: newData }) => { + data = { + ...data, + ...newData, + conversations: [...data.conversations, ...newData.conversations], + }; + }); + const onError = vi.fn(); + + const agent = new GUIAgent({ + model: { + baseURL: 'http://localhost:3000/v1', + apiKey: 'test', + model: 'ui-tars', + }, + operator, + signal: abortController.signal, + onData, + onError, + }); + + await agent.run('click the button'); + + expect(operator.screenshot).toBeCalledTimes(1); + expect(operator.execute).not.toHaveBeenCalled(); + }); +}); diff --git a/packages/sdk/tests/fixtures/async-hooks-test/context.ts b/packages/sdk/tests/fixtures/async-hooks-test/context.ts new file mode 100644 index 000000000..989ef7c40 --- /dev/null +++ b/packages/sdk/tests/fixtures/async-hooks-test/context.ts @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { AsyncLocalStorage } from 'async_hooks'; +import { FACTOR } from '../../../src/constants'; + +const instanceStorage = new AsyncLocalStorage(); + +export function setCurrentInstance(instance: any) { + return instanceStorage.enterWith(instance); +} + +export function getCurrentInstance(): any { + const instance = instanceStorage.getStore(); + if (!instance) { + throw new Error('No instance found in current context'); + } + return instance; +} + +// ConfigContext 实现 +export class ConfigContext { + private static instance: ConfigContext; + private configs = new WeakMap>(); + + static getInstance(): ConfigContext { + if (!ConfigContext.instance) { + ConfigContext.instance = new ConfigContext(); + } + return ConfigContext.instance; + } + + setConfig(instance: any, config: Record) { + this.configs.set(instance, config); + } + + getConfig(instance: any): Record | null { + return this.configs.get(instance) || null; + } +} + +export function useConfig(): Record { + const currentInstance = getCurrentInstance(); + const config = ConfigContext.getInstance().getConfig(currentInstance); + if (!config) { + console.error('Config not initialized'); + return { + logger: console, + factor: FACTOR, + }; + } + return config; +} diff --git a/packages/sdk/tests/fixtures/async-hooks-test/file1.ts b/packages/sdk/tests/fixtures/async-hooks-test/file1.ts new file mode 100644 index 000000000..f66a8a12a --- /dev/null +++ b/packages/sdk/tests/fixtures/async-hooks-test/file1.ts @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { GUIAgent } from './guiagent'; +import { useConfig } from './context'; + +export class O1 { + async fn() { + const config = useConfig(); + console.log('config', config); + return config; + } +} + +export class O2 { + async fn() { + const config = useConfig(); + console.log('config2', config); + return config; + } +} + +const o1 = new O1(); +const guiAgent = new GUIAgent({ + config: { + bar: 'foo', + }, + o: o1, +}); + +const guiAgent2 = new GUIAgent({ + config: { + bar2: 'foo2', + }, + o: o1, +}); + +const guiAgent3 = new GUIAgent({ + config: { + bar3: 'foo3', + }, + o: new O2(), +}); diff --git a/packages/sdk/tests/fixtures/async-hooks-test/guiagent.ts b/packages/sdk/tests/fixtures/async-hooks-test/guiagent.ts new file mode 100644 index 000000000..cc63e3ffe --- /dev/null +++ b/packages/sdk/tests/fixtures/async-hooks-test/guiagent.ts @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { ConfigContext, setCurrentInstance } from './context'; + +export class GUIAgent { + private o: any; + + constructor(options: { config: Record; o: any }) { + this.o = options.o; + ConfigContext.getInstance().setConfig(this, options.config); + this.initialize(); + } + + private async initialize() { + setCurrentInstance(this); + await this.o.fn(); + } +} diff --git a/src/main/agent/utils.test.ts b/packages/sdk/tests/utils.test.ts similarity index 79% rename from src/main/agent/utils.test.ts rename to packages/sdk/tests/utils.test.ts index 0a08914bb..208212707 100644 --- a/src/main/agent/utils.test.ts +++ b/packages/sdk/tests/utils.test.ts @@ -7,7 +7,12 @@ import { describe, expect, it } from 'vitest'; import { IMAGE_PLACEHOLDER, MAX_IMAGE_LENGTH } from '@ui-tars/shared/constants'; import type { Message } from '@ui-tars/shared/types'; -import { convertToOpenAIMessages, processVlmParams } from './utils'; +import { + convertToOpenAIMessages, + processVlmParams, + preprocessResizeImage, +} from '../src/utils'; +import { Jimp } from 'jimp'; describe('processVlmParams', () => { it('round 1', () => { @@ -17,7 +22,7 @@ describe('processVlmParams', () => { { from: 'human', value: IMAGE_PLACEHOLDER }, ]; - const result = processVlmParams({ conversations, images }); + const result = processVlmParams(conversations, images); expect(result.images.length).toBe(1); expect(result.conversations).toEqual(conversations); @@ -36,7 +41,7 @@ describe('processVlmParams', () => { { from: 'human', value: IMAGE_PLACEHOLDER }, ]; - const result = processVlmParams({ conversations, images }); + const result = processVlmParams(conversations, images); expect(result.images.length).toBe(2); expect(result.conversations).toEqual(conversations); @@ -61,7 +66,7 @@ describe('processVlmParams', () => { { from: 'human', value: IMAGE_PLACEHOLDER }, ]; - const result = processVlmParams({ conversations, images }); + const result = processVlmParams(conversations, images); expect(result.images.length).toBe(MAX_IMAGE_LENGTH); expect(result.conversations).toEqual(conversations); @@ -88,7 +93,7 @@ describe('processVlmParams', () => { { from: 'human', value: IMAGE_PLACEHOLDER }, ]; - const result = processVlmParams({ conversations, images }); + const result = processVlmParams(conversations, images); expect(result.images.length).toBe(MAX_IMAGE_LENGTH); expect(result.conversations).toEqual([ @@ -245,3 +250,56 @@ describe('convertToOpenAIMessages', () => { ]); }); }); + +describe('preprocessResizeImage', () => { + const MAX_PIXELS = 512 * 28 * 28; + // Testing util for creating a base64 image + async function createTestImage( + width: number, + height: number, + ): Promise { + const image = new Jimp({ + width, + height, + color: 0xff0000ff, + }); // 创建红色图片 + const buffer = await image.getBuffer('image/png'); + return buffer.toString('base64'); + } + + it('should resize image when pixel count exceeds limit', async () => { + // Create a large image (1000x1000 = 1,000,000 pixels) + const largeImage = await createTestImage(1000, 1000); + const result = await preprocessResizeImage(largeImage, MAX_PIXELS); + + // Verify processed image dimensions + const resultBuffer = Buffer.from(result, 'base64'); + const { width, height } = await Jimp.read(resultBuffer); + + // Calculate maximum allowed pixels (512 * 28 * 28 = 401,408) + const processedPixels = width! * height!; + + expect(processedPixels).toBeLessThanOrEqual(MAX_PIXELS); + }); + + it('should not resize small images', async () => { + // Create a small image (100x100 = 10,000 pixels) + const smallImage = await createTestImage(100, 100); + const result = await preprocessResizeImage(smallImage, MAX_PIXELS); + + // Verify processed image dimensions + const resultBuffer = Buffer.from(result, 'base64'); + const { width, height } = await Jimp.read(resultBuffer); + + expect(width).toBe(100); + expect(height).toBe(100); + }); + + it('should throw error when processing invalid image', async () => { + const invalidBase64 = 'invalid_base64_string'; + + await expect( + preprocessResizeImage(invalidBase64, MAX_PIXELS), + ).rejects.toThrow(); + }); +}); diff --git a/packages/sdk/tsconfig.json b/packages/sdk/tsconfig.json new file mode 100644 index 000000000..5f8bd0f3b --- /dev/null +++ b/packages/sdk/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "moduleResolution": "Bundler", + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "outDir": "./dist", + "strict": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "isolatedModules": true, + "skipLibCheck": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/sdk/tsup.config.ts b/packages/sdk/tsup.config.ts new file mode 100644 index 000000000..69e94b15d --- /dev/null +++ b/packages/sdk/tsup.config.ts @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { defineConfig } from 'tsup'; + +export default defineConfig((options) => { + return { + entry: ['src/**/*.ts', '!src/**/*.{test,bench}.ts'], + format: ['esm', 'cjs'], + dts: true, + clean: true, + bundle: false, + outDir: 'dist', + }; +}); diff --git a/packages/sdk/vitest.config.mts b/packages/sdk/vitest.config.mts new file mode 100644 index 000000000..1b73d9704 --- /dev/null +++ b/packages/sdk/vitest.config.mts @@ -0,0 +1,27 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +import tsconfigPath from 'vite-tsconfig-paths'; +import { defineProject } from 'vitest/config'; + +const __dirname = fileURLToPath(new URL('.', import.meta.url)); + +export default defineProject({ + root: './', + test: { + globals: true, + setupFiles: [resolve(__dirname, '../../scripts/vitest-setup.ts')], + environment: 'node', + includeSource: [resolve(__dirname, '.')], + }, + + plugins: [ + tsconfigPath({ + projects: ['../../tsconfig.node.json'], + }), + ], +}); diff --git a/packages/shared/CHANGELOG.md b/packages/shared/CHANGELOG.md index fc85bf7e0..a7eeff7c8 100644 --- a/packages/shared/CHANGELOG.md +++ b/packages/shared/CHANGELOG.md @@ -1,5 +1,47 @@ # @ui-tars/shared +## 1.2.0-beta.6 + +### Patch Changes + +- feat: new sdk + +## 1.2.0-beta.5 + +### Patch Changes + +- chore: update sdk + +## 1.2.0-beta.4 + +### Patch Changes + +- chore: new version + +## 1.2.0-beta.3 + +### Patch Changes + +- chore: add retry + +## 1.2.0-beta.2 + +### Patch Changes + +- chore: publish + +## 1.2.0-beta.1 + +### Patch Changes + +- chore: remove unused code + +## 1.2.0-beta.0 + +### Minor Changes + +- a062e03: feat: ui-tars agent sdk support + ## 1.1.0 ### Minor Changes diff --git a/packages/shared/package.json b/packages/shared/package.json index 89a8c6fd0..5314f0195 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,6 +1,6 @@ { "name": "@ui-tars/shared", - "version": "1.1.0", + "version": "1.2.0-beta.6", "description": "Shared types for UI-TARS", "repository": { "type": "git", @@ -36,8 +36,7 @@ "scripts": { "prepare": "npm run build", "dev": "tsup --watch", - "build": "tsup", - "prepack": "npm run build" + "build": "tsup" }, "keywords": [ "UI-TARS" diff --git a/packages/shared/src/types/agent.ts b/packages/shared/src/types/agent.ts index 21bcf6974..f06ab1377 100644 --- a/packages/shared/src/types/agent.ts +++ b/packages/shared/src/types/agent.ts @@ -24,9 +24,14 @@ export interface VlmResponse { } export interface ScreenshotResult { + /** screenshot base64, `keep screenshot size as physical resolution` */ base64: string; + /** real screenshot pixel width, `Physical Resolution` */ width: number; + /** real screenshot pixel height, `Physical Resolution` */ height: number; + /** screenshot scale factor(DPR) */ + scaleFactor: number; } export type ActionInputs = Partial< diff --git a/packages/shared/src/types/data.ts b/packages/shared/src/types/data.ts index 31dbb100f..94f610907 100644 --- a/packages/shared/src/types/data.ts +++ b/packages/shared/src/types/data.ts @@ -16,26 +16,30 @@ export interface Conversation extends Message { screenshotBase64?: string; screenshotContext?: { size: { + /** physical device width */ width: number; + /** physical device height */ height: number; }; + /** screenshot scale factor(DPR) */ + scaleFactor?: number; }; predictionParsed?: PredictionParsed[]; - /** exists when predictionParsed exists */ - screenshotBase64WithElementMarker?: string; - reflections?: string[]; } /** + * @deprecated use {@link GUIAgentData} instead * Computer Use data structure, can be used for recording and sharing */ -export interface ComputerUseUserData { +export interface ComputerUseUserData extends GUIAgentData {} + +export interface GUIAgentData { version: ShareVersion; /** Share operation instructions */ instruction: string; systemPrompt: string; modelName: string; - mode: VlmModeEnum; + mode?: VlmModeEnum; logTime: number; status: StatusEnum; errMsg?: string; diff --git a/packages/shared/src/utils/coords.ts b/packages/shared/src/utils/coords.ts index d12430bf4..bc055a065 100644 --- a/packages/shared/src/utils/coords.ts +++ b/packages/shared/src/utils/coords.ts @@ -8,7 +8,7 @@ * @param boxStr box string (format: "[x1,y1,x2,y2]" or "[x,y]") * @param width screen width * @param height screen height - * @param factor scale factor + * @param factor model scale factor * @returns calculated center point coords {x, y} */ export function parseBoxToScreenCoords( diff --git a/packages/utio/CHANGELOG.md b/packages/utio/CHANGELOG.md new file mode 100644 index 000000000..8a4571090 --- /dev/null +++ b/packages/utio/CHANGELOG.md @@ -0,0 +1,43 @@ +# @ui-tars/utio + +## 1.2.0-beta.6 + +### Patch Changes + +- feat: new sdk + +## 1.2.0-beta.5 + +### Patch Changes + +- chore: update sdk + +## 1.1.0-beta.4 + +### Patch Changes + +- chore: new version + +## 1.1.0-beta.3 + +### Patch Changes + +- chore: add retry + +## 1.1.0-beta.2 + +### Patch Changes + +- chore: publish + +## 1.1.0-beta.1 + +### Patch Changes + +- chore: remove unused code + +## 1.1.0-beta.0 + +### Minor Changes + +- a062e03: feat: ui-tars agent sdk support diff --git a/packages/utio/package.json b/packages/utio/package.json index 5b8d82568..a11e5e4a4 100644 --- a/packages/utio/package.json +++ b/packages/utio/package.json @@ -1,6 +1,6 @@ { "name": "@ui-tars/utio", - "version": "1.0.0", + "version": "1.2.0-beta.6", "description": "UTIO (UI-TARS Insights and Observation)", "main": "./dist/index.js", "module": "./dist/index.mjs", @@ -8,8 +8,7 @@ "scripts": { "prepare": "npm run build", "dev": "tsup --watch", - "build": "tsup", - "prepack": "npm run build" + "build": "tsup" }, "keywords": [ "UI-TARS" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 74cbeeffe..1037a08b8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,18 +26,18 @@ importers: '@ui-tars/electron-ipc': specifier: workspace:* version: link:packages/electron-ipc + '@ui-tars/operator-nut-js': + specifier: workspace:* + version: link:packages/operators/nut-js + '@ui-tars/sdk': + specifier: workspace:* + version: link:packages/sdk '@ui-tars/shared': specifier: workspace:* version: link:packages/shared '@ui-tars/utio': specifier: workspace:* version: link:packages/utio - async-retry: - specifier: ^1.3.3 - version: 1.3.3 - big.js: - specifier: ^6.2.2 - version: 6.2.2 dotenv: specifier: ^16.4.7 version: 16.4.7 @@ -65,9 +65,6 @@ importers: ms: specifier: ^2.1.3 version: 2.1.3 - openai: - specifier: 4.73.0 - version: 4.73.0(encoding@0.1.13)(zod@3.24.2) sharp: specifier: 0.33.3 version: 0.33.3 @@ -173,7 +170,7 @@ importers: version: 4.3.4(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)) '@vitest/coverage-istanbul': specifier: ^3.0.3 - version: 3.0.5(vitest@3.0.5(@types/node@20.17.17)(sass-embedded@1.83.4)) + version: 3.0.5(vitest@3.0.5(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4)) clsx: specifier: 2.1.1 version: 2.1.1 @@ -222,12 +219,9 @@ importers: medium-zoom: specifier: 1.1.0 version: 1.1.0 - mitt: - specifier: ^3.0.1 - version: 3.0.1 opencommit: specifier: ^3.2.5 - version: 3.2.5(encoding@0.1.13) + version: 3.2.5(encoding@0.1.13)(ws@8.18.0) prettier: specifier: ^3.3.2 version: 3.5.0 @@ -278,7 +272,7 @@ importers: version: 5.1.4(typescript@5.7.3)(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)) vitest: specifier: ^3.0.2 - version: 3.0.5(@types/node@20.17.17)(sass-embedded@1.83.4) + version: 3.0.5(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4) packages/action-parser: dependencies: @@ -294,7 +288,35 @@ importers: version: 5.7.3 vitest: specifier: ^3.0.2 - version: 3.0.5(@types/node@20.17.17)(sass-embedded@1.83.4) + version: 3.0.5(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4) + + packages/cli: + dependencies: + '@clack/prompts': + specifier: ^0.10.0 + version: 0.10.0 + '@ui-tars/operator-nut-js': + specifier: workspace:* + version: link:../operators/nut-js + '@ui-tars/sdk': + specifier: workspace:* + version: link:../sdk + commander: + specifier: ^13.1.0 + version: 13.1.0 + jimp: + specifier: 1.6.0 + version: 1.6.0 + devDependencies: + tsup: + specifier: ^8.3.5 + version: 8.3.6(jiti@2.4.2)(postcss@8.5.2)(tsx@4.19.2)(typescript@5.7.3) + typescript: + specifier: ^5.7.2 + version: 5.7.3 + vitest: + specifier: ^3.0.2 + version: 3.0.5(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4) packages/electron-ipc: devDependencies: @@ -309,7 +331,87 @@ importers: version: 5.7.3 vitest: specifier: ^3.0.2 - version: 3.0.5(@types/node@20.17.17)(sass-embedded@1.83.4) + version: 3.0.5(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4) + + packages/operators/nut-js: + dependencies: + '@computer-use/nut-js': + specifier: ^4.2.0 + version: 4.2.0(encoding@0.1.13) + '@ui-tars/shared': + specifier: workspace:* + version: link:../../shared + big.js: + specifier: ^6.2.2 + version: 6.2.2 + jimp: + specifier: 1.6.0 + version: 1.6.0 + devDependencies: + '@types/big.js': + specifier: ^6.2.2 + version: 6.2.2 + '@ui-tars/sdk': + specifier: workspace:* + version: link:../../sdk + tsup: + specifier: ^8.3.5 + version: 8.3.6(jiti@2.4.2)(postcss@8.5.2)(tsx@4.19.2)(typescript@5.7.3) + typescript: + specifier: ^5.7.2 + version: 5.7.3 + vitest: + specifier: ^3.0.2 + version: 3.0.5(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4) + + packages/sdk: + dependencies: + '@ui-tars/action-parser': + specifier: workspace:* + version: link:../action-parser + '@ui-tars/shared': + specifier: workspace:* + version: link:../shared + async-retry: + specifier: 1.3.3 + version: 1.3.3 + jimp: + specifier: 1.6.0 + version: 1.6.0 + openai: + specifier: 4.85.1 + version: 4.85.1(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2) + devDependencies: + '@types/async-retry': + specifier: 1.4.9 + version: 1.4.9 + '@vitejs/plugin-react': + specifier: ^4.3.4 + version: 4.3.4(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)) + happy-dom: + specifier: ^17.1.1 + version: 17.1.1 + react: + specifier: ^18.3.1 + version: 18.3.1 + react-dom: + specifier: ^18.3.1 + version: 18.3.1(react@18.3.1) + tsup: + specifier: ^8.3.5 + version: 8.3.6(jiti@2.4.2)(postcss@8.5.2)(tsx@4.19.2)(typescript@5.7.3) + tsx: + specifier: ^4.19.2 + version: 4.19.2 + typescript: + specifier: ^5.7.2 + version: 5.7.3 + vitest: + specifier: ^3.0.2 + version: 3.0.5(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4) + vitest-browser-react: + specifier: ^0.1.1 + version: 0.1.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(@vitest/browser@3.0.5(@types/node@20.17.17)(playwright@1.50.1)(typescript@5.7.3)(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4))(vitest@3.0.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vitest@3.0.5(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4)) packages/shared: devDependencies: @@ -482,6 +584,15 @@ packages: '@bufbuild/protobuf@2.2.3': resolution: {integrity: sha512-tFQoXHJdkEOSwj5tRIZSPNUuXK3RaR7T1nUrPgbYX1pUbvqqaaZAsfo+NXBPsz5rZMSKVFrgK1WL8Q/MSLvprg==} + '@bundled-es-modules/cookie@2.0.1': + resolution: {integrity: sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==} + + '@bundled-es-modules/statuses@1.0.1': + resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==} + + '@bundled-es-modules/tough-cookie@0.1.6': + resolution: {integrity: sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==} + '@chakra-ui/anatomy@2.3.4': resolution: {integrity: sha512-fFIYN7L276gw0Q7/ikMMlZxP7mvnjRaWJ7f3Jsf9VtDOi6eAYIBRrhQe6+SZ0PGmoOkRaBc7gSE5oeIbgFFyrw==} @@ -588,6 +699,12 @@ packages: '@clack/core@0.3.5': resolution: {integrity: sha512-5cfhQNH+1VQ2xLQlmzXMqUoiaH0lRBq9/CLW9lTyMbuKLC3+xEK01tHVvyut++mLOn5urSHmkm6I0Lg9MaJSTQ==} + '@clack/core@0.4.1': + resolution: {integrity: sha512-Pxhij4UXg8KSr7rPek6Zowm+5M22rbd2g1nfojHJkxp5YkFqiZ2+YLEM/XGVIzvGOcM0nqjIFxrpDwWRZYWYjA==} + + '@clack/prompts@0.10.0': + resolution: {integrity: sha512-H3rCl6CwW1NdQt9rE3n373t7o5cthPv7yUoxF2ytZvyvlJv89C5RYMJu83Hed8ODgys5vpBU0GKxIRG83jd8NQ==} + '@clack/prompts@0.6.3': resolution: {integrity: sha512-AM+kFmAHawpUQv2q9+mcB6jLKxXGjgu/r2EQjEwujgpCdzrST6BJqYw00GRn56/L/Izw5U7ImoLmy00X/r80Pw==} bundledDependencies: @@ -1692,10 +1809,37 @@ packages: cpu: [x64] os: [win32] + '@inquirer/confirm@5.1.6': + resolution: {integrity: sha512-6ZXYK3M1XmaVBZX6FCfChgtponnL0R6I7k8Nu+kaoNkT828FVZTcca1MqmWQipaW2oNREQl5AaPCUOOCVNdRMw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/core@10.1.7': + resolution: {integrity: sha512-AA9CQhlrt6ZgiSy6qoAigiA1izOa751ugX6ioSjqgJ+/Gd+tEN/TORk5sUYNjXuHWfW0r1n/a6ak4u/NqHHrtA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@inquirer/figures@1.0.10': resolution: {integrity: sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw==} engines: {node: '>=18'} + '@inquirer/type@3.0.4': + resolution: {integrity: sha512-2MNFrDY8jkFYc9Il9DgLsHhMzuHnOYM1+CUYVWbzu9oT0hC7V7EcYvdCKeoll/Fcci04A+ERZ9wcc7cQ8lTkIA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -1712,9 +1856,21 @@ packages: '@jimp/core@0.22.12': resolution: {integrity: sha512-l0RR0dOPyzMKfjUW1uebzueFEDtCOj9fN6pyTYWWOM/VS4BciXQ1VVrJs8pO3kycGYZxncRKhCoygbNr8eEZQA==} + '@jimp/core@1.6.0': + resolution: {integrity: sha512-EQQlKU3s9QfdJqiSrZWNTxBs3rKXgO2W+GxNXDtwchF3a4IqxDheFX1ti+Env9hdJXDiYLp2jTRjlxhPthsk8w==} + engines: {node: '>=18'} + '@jimp/custom@0.22.12': resolution: {integrity: sha512-xcmww1O/JFP2MrlGUMd3Q78S3Qu6W3mYTXYuIqFq33EorgYHV/HqymHfXy9GjiCJ7OI+7lWx6nYFOzU7M4rd1Q==} + '@jimp/diff@1.6.0': + resolution: {integrity: sha512-+yUAQ5gvRC5D1WHYxjBHZI7JBRusGGSLf8AmPRPCenTzh4PA+wZ1xv2+cYqQwTfQHU5tXYOhA0xDytfHUf1Zyw==} + engines: {node: '>=18'} + + '@jimp/file-ops@1.6.0': + resolution: {integrity: sha512-Dx/bVDmgnRe1AlniRpCKrGRm5YvGmUwbDzt+MAkgmLGf+jvBT75hmMEZ003n9HQI/aPnm/YKnXjg/hOpzNCpHQ==} + engines: {node: '>=18'} + '@jimp/gif@0.22.12': resolution: {integrity: sha512-y6BFTJgch9mbor2H234VSjd9iwAhaNf/t3US5qpYIs0TSbAvM02Fbc28IaDETj9+4YB4676sz4RcN/zwhfu1pg==} peerDependencies: @@ -1725,26 +1881,62 @@ packages: peerDependencies: '@jimp/custom': '>=0.3.5' + '@jimp/js-bmp@1.6.0': + resolution: {integrity: sha512-FU6Q5PC/e3yzLyBDXupR3SnL3htU7S3KEs4e6rjDP6gNEOXRFsWs6YD3hXuXd50jd8ummy+q2WSwuGkr8wi+Gw==} + engines: {node: '>=18'} + + '@jimp/js-gif@1.6.0': + resolution: {integrity: sha512-N9CZPHOrJTsAUoWkWZstLPpwT5AwJ0wge+47+ix3++SdSL/H2QzyMqxbcDYNFe4MoI5MIhATfb0/dl/wmX221g==} + engines: {node: '>=18'} + + '@jimp/js-jpeg@1.6.0': + resolution: {integrity: sha512-6vgFDqeusblf5Pok6B2DUiMXplH8RhIKAryj1yn+007SIAQ0khM1Uptxmpku/0MfbClx2r7pnJv9gWpAEJdMVA==} + engines: {node: '>=18'} + + '@jimp/js-png@1.6.0': + resolution: {integrity: sha512-AbQHScy3hDDgMRNfG0tPjL88AV6qKAILGReIa3ATpW5QFjBKpisvUaOqhzJ7Reic1oawx3Riyv152gaPfqsBVg==} + engines: {node: '>=18'} + + '@jimp/js-tiff@1.6.0': + resolution: {integrity: sha512-zhReR8/7KO+adijj3h0ZQUOiun3mXUv79zYEAKvE0O+rP7EhgtKvWJOZfRzdZSNv0Pu1rKtgM72qgtwe2tFvyw==} + engines: {node: '>=18'} + '@jimp/plugin-blit@0.22.12': resolution: {integrity: sha512-xslz2ZoFZOPLY8EZ4dC29m168BtDx95D6K80TzgUi8gqT7LY6CsajWO0FAxDwHz6h0eomHMfyGX0stspBrTKnQ==} peerDependencies: '@jimp/custom': '>=0.3.5' + '@jimp/plugin-blit@1.6.0': + resolution: {integrity: sha512-M+uRWl1csi7qilnSK8uxK4RJMSuVeBiO1AY0+7APnfUbQNZm6hCe0CCFv1Iyw1D/Dhb8ph8fQgm5mwM0eSxgVA==} + engines: {node: '>=18'} + '@jimp/plugin-blur@0.22.12': resolution: {integrity: sha512-S0vJADTuh1Q9F+cXAwFPlrKWzDj2F9t/9JAbUvaaDuivpyWuImEKXVz5PUZw2NbpuSHjwssbTpOZ8F13iJX4uw==} peerDependencies: '@jimp/custom': '>=0.3.5' + '@jimp/plugin-blur@1.6.0': + resolution: {integrity: sha512-zrM7iic1OTwUCb0g/rN5y+UnmdEsT3IfuCXCJJNs8SZzP0MkZ1eTvuwK9ZidCuMo4+J3xkzCidRwYXB5CyGZTw==} + engines: {node: '>=18'} + '@jimp/plugin-circle@0.22.12': resolution: {integrity: sha512-SWVXx1yiuj5jZtMijqUfvVOJBwOifFn0918ou4ftoHgegc5aHWW5dZbYPjvC9fLpvz7oSlptNl2Sxr1zwofjTg==} peerDependencies: '@jimp/custom': '>=0.3.5' + '@jimp/plugin-circle@1.6.0': + resolution: {integrity: sha512-xt1Gp+LtdMKAXfDp3HNaG30SPZW6AQ7dtAtTnoRKorRi+5yCJjKqXRgkewS5bvj8DEh87Ko1ydJfzqS3P2tdWw==} + engines: {node: '>=18'} + '@jimp/plugin-color@0.22.12': resolution: {integrity: sha512-xImhTE5BpS8xa+mAN6j4sMRWaUgUDLoaGHhJhpC+r7SKKErYDR0WQV4yCE4gP+N0gozD0F3Ka1LUSaMXrn7ZIA==} peerDependencies: '@jimp/custom': '>=0.3.5' + '@jimp/plugin-color@1.6.0': + resolution: {integrity: sha512-J5q8IVCpkBsxIXM+45XOXTrsyfblyMZg3a9eAo0P7VPH4+CrvyNQwaYatbAIamSIN1YzxmO3DkIZXzRjFSz1SA==} + engines: {node: '>=18'} + '@jimp/plugin-contain@0.22.12': resolution: {integrity: sha512-Eo3DmfixJw3N79lWk8q/0SDYbqmKt1xSTJ69yy8XLYQj9svoBbyRpSnHR+n9hOw5pKXytHwUW6nU4u1wegHNoQ==} peerDependencies: @@ -1753,6 +1945,10 @@ packages: '@jimp/plugin-resize': '>=0.3.5' '@jimp/plugin-scale': '>=0.3.5' + '@jimp/plugin-contain@1.6.0': + resolution: {integrity: sha512-oN/n+Vdq/Qg9bB4yOBOxtY9IPAtEfES8J1n9Ddx+XhGBYT1/QTU/JYkGaAkIGoPnyYvmLEDqMz2SGihqlpqfzQ==} + engines: {node: '>=18'} + '@jimp/plugin-cover@0.22.12': resolution: {integrity: sha512-z0w/1xH/v/knZkpTNx+E8a7fnasQ2wHG5ze6y5oL2dhH1UufNua8gLQXlv8/W56+4nJ1brhSd233HBJCo01BXA==} peerDependencies: @@ -1761,37 +1957,65 @@ packages: '@jimp/plugin-resize': '>=0.3.5' '@jimp/plugin-scale': '>=0.3.5' + '@jimp/plugin-cover@1.6.0': + resolution: {integrity: sha512-Iow0h6yqSC269YUJ8HC3Q/MpCi2V55sMlbkkTTx4zPvd8mWZlC0ykrNDeAy9IJegrQ7v5E99rJwmQu25lygKLA==} + engines: {node: '>=18'} + '@jimp/plugin-crop@0.22.12': resolution: {integrity: sha512-FNuUN0OVzRCozx8XSgP9MyLGMxNHHJMFt+LJuFjn1mu3k0VQxrzqbN06yIl46TVejhyAhcq5gLzqmSCHvlcBVw==} peerDependencies: '@jimp/custom': '>=0.3.5' + '@jimp/plugin-crop@1.6.0': + resolution: {integrity: sha512-KqZkEhvs+21USdySCUDI+GFa393eDIzbi1smBqkUPTE+pRwSWMAf01D5OC3ZWB+xZsNla93BDS9iCkLHA8wang==} + engines: {node: '>=18'} + '@jimp/plugin-displace@0.22.12': resolution: {integrity: sha512-qpRM8JRicxfK6aPPqKZA6+GzBwUIitiHaZw0QrJ64Ygd3+AsTc7BXr+37k2x7QcyCvmKXY4haUrSIsBug4S3CA==} peerDependencies: '@jimp/custom': '>=0.3.5' + '@jimp/plugin-displace@1.6.0': + resolution: {integrity: sha512-4Y10X9qwr5F+Bo5ME356XSACEF55485j5nGdiyJ9hYzjQP9nGgxNJaZ4SAOqpd+k5sFaIeD7SQ0Occ26uIng5Q==} + engines: {node: '>=18'} + '@jimp/plugin-dither@0.22.12': resolution: {integrity: sha512-jYgGdSdSKl1UUEanX8A85v4+QUm+PE8vHFwlamaKk89s+PXQe7eVE3eNeSZX4inCq63EHL7cX580dMqkoC3ZLw==} peerDependencies: '@jimp/custom': '>=0.3.5' + '@jimp/plugin-dither@1.6.0': + resolution: {integrity: sha512-600d1RxY0pKwgyU0tgMahLNKsqEcxGdbgXadCiVCoGd6V6glyCvkNrnnwC0n5aJ56Htkj88PToSdF88tNVZEEQ==} + engines: {node: '>=18'} + '@jimp/plugin-fisheye@0.22.12': resolution: {integrity: sha512-LGuUTsFg+fOp6KBKrmLkX4LfyCy8IIsROwoUvsUPKzutSqMJnsm3JGDW2eOmWIS/jJpPaeaishjlxvczjgII+Q==} peerDependencies: '@jimp/custom': '>=0.3.5' + '@jimp/plugin-fisheye@1.6.0': + resolution: {integrity: sha512-E5QHKWSCBFtpgZarlmN3Q6+rTQxjirFqo44ohoTjzYVrDI6B6beXNnPIThJgPr0Y9GwfzgyarKvQuQuqCnnfbA==} + engines: {node: '>=18'} + '@jimp/plugin-flip@0.22.12': resolution: {integrity: sha512-m251Rop7GN8W0Yo/rF9LWk6kNclngyjIJs/VXHToGQ6EGveOSTSQaX2Isi9f9lCDLxt+inBIb7nlaLLxnvHX8Q==} peerDependencies: '@jimp/custom': '>=0.3.5' '@jimp/plugin-rotate': '>=0.3.5' + '@jimp/plugin-flip@1.6.0': + resolution: {integrity: sha512-/+rJVDuBIVOgwoyVkBjUFHtP+wmW0r+r5OQ2GpatQofToPVbJw1DdYWXlwviSx7hvixTWLKVgRWQ5Dw862emDg==} + engines: {node: '>=18'} + '@jimp/plugin-gaussian@0.22.12': resolution: {integrity: sha512-sBfbzoOmJ6FczfG2PquiK84NtVGeScw97JsCC3rpQv1PHVWyW+uqWFF53+n3c8Y0P2HWlUjflEla2h/vWShvhg==} peerDependencies: '@jimp/custom': '>=0.3.5' + '@jimp/plugin-hash@1.6.0': + resolution: {integrity: sha512-wWzl0kTpDJgYVbZdajTf+4NBSKvmI3bRI8q6EH9CVeIHps9VWVsUvEyb7rpbcwVLWYuzDtP2R0lTT6WeBNQH9Q==} + engines: {node: '>=18'} + '@jimp/plugin-invert@0.22.12': resolution: {integrity: sha512-N+6rwxdB+7OCR6PYijaA/iizXXodpxOGvT/smd/lxeXsZ/empHmFFFJ/FaXcYh19Tm04dGDaXcNF/dN5nm6+xQ==} peerDependencies: @@ -1802,6 +2026,10 @@ packages: peerDependencies: '@jimp/custom': '>=0.3.5' + '@jimp/plugin-mask@1.6.0': + resolution: {integrity: sha512-Cwy7ExSJMZszvkad8NV8o/Z92X2kFUFM8mcDAhNVxU0Q6tA0op2UKRJY51eoK8r6eds/qak3FQkXakvNabdLnA==} + engines: {node: '>=18'} + '@jimp/plugin-normalize@0.22.12': resolution: {integrity: sha512-0So0rexQivnWgnhacX4cfkM2223YdExnJTTy6d06WbkfZk5alHUx8MM3yEzwoCN0ErO7oyqEWRnEkGC+As1FtA==} peerDependencies: @@ -1813,11 +2041,23 @@ packages: '@jimp/custom': '>=0.3.5' '@jimp/plugin-blit': '>=0.3.5' + '@jimp/plugin-print@1.6.0': + resolution: {integrity: sha512-zarTIJi8fjoGMSI/M3Xh5yY9T65p03XJmPsuNet19K/Q7mwRU6EV2pfj+28++2PV2NJ+htDF5uecAlnGyxFN2A==} + engines: {node: '>=18'} + + '@jimp/plugin-quantize@1.6.0': + resolution: {integrity: sha512-EmzZ/s9StYQwbpG6rUGBCisc3f64JIhSH+ncTJd+iFGtGo0YvSeMdAd+zqgiHpfZoOL54dNavZNjF4otK+mvlg==} + engines: {node: '>=18'} + '@jimp/plugin-resize@0.22.12': resolution: {integrity: sha512-3NyTPlPbTnGKDIbaBgQ3HbE6wXbAlFfxHVERmrbqAi8R3r6fQPxpCauA8UVDnieg5eo04D0T8nnnNIX//i/sXg==} peerDependencies: '@jimp/custom': '>=0.3.5' + '@jimp/plugin-resize@1.6.0': + resolution: {integrity: sha512-uSUD1mqXN9i1SGSz5ov3keRZ7S9L32/mAQG08wUwZiEi5FpbV0K8A8l1zkazAIZi9IJzLlTauRNU41Mi8IF9fA==} + engines: {node: '>=18'} + '@jimp/plugin-rotate@0.22.12': resolution: {integrity: sha512-9YNEt7BPAFfTls2FGfKBVgwwLUuKqy+E8bDGGEsOqHtbuhbshVGxN2WMZaD4gh5IDWvR+emmmPPWGgaYNYt1gA==} peerDependencies: @@ -1826,6 +2066,10 @@ packages: '@jimp/plugin-crop': '>=0.3.5' '@jimp/plugin-resize': '>=0.3.5' + '@jimp/plugin-rotate@1.6.0': + resolution: {integrity: sha512-JagdjBLnUZGSG4xjCLkIpQOZZ3Mjbg8aGCCi4G69qR+OjNpOeGI7N2EQlfK/WE8BEHOW5vdjSyglNqcYbQBWRw==} + engines: {node: '>=18'} + '@jimp/plugin-scale@0.22.12': resolution: {integrity: sha512-dghs92qM6MhHj0HrV2qAwKPMklQtjNpoYgAB94ysYpsXslhRTiPisueSIELRwZGEr0J0VUxpUY7HgJwlSIgGZw==} peerDependencies: @@ -1846,6 +2090,10 @@ packages: '@jimp/plugin-color': '>=0.8.0' '@jimp/plugin-resize': '>=0.8.0' + '@jimp/plugin-threshold@1.6.0': + resolution: {integrity: sha512-M59m5dzLoHOVWdM41O8z9SyySzcDn43xHseOH0HavjsfQsT56GGCC4QzU1banJidbUrePhzoEdS42uFE8Fei8w==} + engines: {node: '>=18'} + '@jimp/plugins@0.22.12': resolution: {integrity: sha512-yBJ8vQrDkBbTgQZLty9k4+KtUQdRjsIDJSPjuI21YdVeqZxYywifHl4/XWILoTZsjTUASQcGoH0TuC0N7xm3ww==} peerDependencies: @@ -1866,9 +2114,17 @@ packages: peerDependencies: '@jimp/custom': '>=0.3.5' + '@jimp/types@1.6.0': + resolution: {integrity: sha512-7UfRsiKo5GZTAATxm2qQ7jqmUXP0DxTArztllTcYdyw6Xi5oT4RaoXynVtCD4UyLK5gJgkZJcwonoijrhYFKfg==} + engines: {node: '>=18'} + '@jimp/utils@0.22.12': resolution: {integrity: sha512-yJ5cWUknGnilBq97ZXOyOS0HhsHOyAyjHwYfHxGbSyMTohgQI6sVyE8KPgDwH8HHW/nMKXk8TrSwAE71zt716Q==} + '@jimp/utils@1.6.0': + resolution: {integrity: sha512-gqFTGEosKbOkYF/WFj26jMHOI5OH2jeP1MmC/zbK6BF6VJBf8rIC5898dPfSzZEbSA0wbbV5slbntWVc5PKLFA==} + engines: {node: '>=18'} + '@jridgewell/gen-mapping@0.3.8': resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} @@ -1909,6 +2165,10 @@ packages: peerDependencies: zod: '>= 3' + '@mswjs/interceptors@0.37.6': + resolution: {integrity: sha512-wK+5pLK5XFmgtH3aQ2YVvA3HohS3xqV/OxuVOdNx9Wpnz7VE/fnC+e1A7ln6LFYeck7gOJ/dsZV6OLplOtAJ2w==} + engines: {node: '>=18'} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1981,6 +2241,15 @@ packages: '@octokit/webhooks-types@6.11.0': resolution: {integrity: sha512-AanzbulOHljrku1NGfafxdpTCfw2ENaWzH01N2vqQM+cUFbk868Cgh0xylz0JIM9BoKbfI++bdD6EYX0Q/UTEw==} + '@open-draft/deferred-promise@2.2.0': + resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} + + '@open-draft/logger@0.3.0': + resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} + + '@open-draft/until@2.1.0': + resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -1994,6 +2263,9 @@ packages: engines: {node: '>=18'} hasBin: true + '@polka/url@1.0.0-next.28': + resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} + '@popperjs/core@2.11.8': resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} @@ -2103,6 +2375,16 @@ packages: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} + '@testing-library/dom@10.4.0': + resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} + engines: {node: '>=18'} + + '@testing-library/user-event@14.6.1': + resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + '@tokenizer/token@0.3.0': resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} @@ -2141,6 +2423,12 @@ packages: '@types/appdmg@0.5.5': resolution: {integrity: sha512-G+n6DgZTZFOteITE30LnWj+HRVIGr7wMlAiLWOO02uJFWVEitaPU9JVXm9wJokkgshBawb2O1OykdcsmkkZfgg==} + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + + '@types/async-retry@1.4.9': + resolution: {integrity: sha512-s1ciZQJzRh3708X/m3vPExr5KJlzlZJvXsKpbtE2luqNcbROr64qU+3KpJsYHqWMeaxI839OvXf9PrUSw1Xtyg==} + '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -2153,6 +2441,9 @@ packages: '@types/babel__traverse@7.20.6': resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + '@types/big.js@6.2.2': + resolution: {integrity: sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA==} + '@types/cacheable-request@6.0.3': resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} @@ -2227,9 +2518,18 @@ packages: '@types/responselike@1.0.3': resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} + '@types/retry@0.12.5': + resolution: {integrity: sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw==} + '@types/semver@7.5.8': resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + '@types/statuses@2.0.5': + resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==} + + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} @@ -2358,6 +2658,21 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 + '@vitest/browser@3.0.5': + resolution: {integrity: sha512-5WAWJoucuWcGYU5t0HPBY03k9uogbUEIu4pDmZHoB4Dt+6pXqzDbzEmxGjejZSitSYA3k/udYfuotKNxETVA3A==} + peerDependencies: + playwright: '*' + safaridriver: '*' + vitest: 3.0.5 + webdriverio: '*' + peerDependenciesMeta: + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + '@vitest/coverage-istanbul@3.0.5': resolution: {integrity: sha512-yTcIwrpLHOyPP28PXXLRv1NzzKCrqDnmT7oVypTa1Q24P6OwGT4Wi6dXNEaJg33vmrPpoe81f31kwB5MtfM+ow==} peerDependencies: @@ -2491,6 +2806,10 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} @@ -2523,6 +2842,9 @@ packages: resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} engines: {node: '>=10'} + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + array-buffer-byte-length@1.0.2: resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} @@ -2597,6 +2919,10 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + await-to-js@3.0.0: + resolution: {integrity: sha512-zJAaP9zxTcvTHRlejau3ZOY4V7SRpiByf3/dxx2uyKxxor19tpmpV2QRsTKikckwhaPmr2dVpxxMr7jOCYVp5g==} + engines: {node: '>=6.0.0'} + axios@1.7.9: resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} @@ -2635,6 +2961,9 @@ packages: bmp-js@0.1.0: resolution: {integrity: sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==} + bmp-ts@1.0.9: + resolution: {integrity: sha512-cTEHk2jLrPyi+12M3dhpEbnnPOsaZuq7C45ylbbQIiWgDFZq4UVYPEY5mlqjvsj/6gJv9qX5sa+ebDzLXT28Vw==} + body-parser@1.20.3: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -2853,6 +3182,10 @@ packages: resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} engines: {node: '>=16'} + commander@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} + engines: {node: '>=18'} + commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} @@ -2917,6 +3250,10 @@ packages: resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} engines: {node: '>= 0.6'} + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + cookie@1.0.2: resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} engines: {node: '>=18'} @@ -3125,6 +3462,9 @@ packages: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + dom-walk@0.1.2: resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} @@ -3905,6 +4245,14 @@ packages: graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + graphql@16.10.0: + resolution: {integrity: sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + + happy-dom@17.1.1: + resolution: {integrity: sha512-OSTkBlmD/6Do7gCd7nZB5iFq1bF9VQg/iFmjHmxvVX2S1UiOpo6sT+aFNnu3XUsB8hCZb9+GZ0G1g1TaMiAggw==} + engines: {node: '>=18.0.0'} + has-bigints@1.1.0: resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} engines: {node: '>= 0.4'} @@ -3932,6 +4280,9 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + headers-polyfill@4.0.3: + resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} + hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} @@ -4173,6 +4524,9 @@ packages: is-my-json-valid@2.20.6: resolution: {integrity: sha512-1JQwulVNjx8UqkPE/bqDaxtH4PXCe/2VRh/y3p99heOV87HG4Id5/VfDswd+YiAfHcRTfDlWgISycnHuhZq1aw==} + is-node-process@1.2.0: + resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} + is-number-object@1.1.1: resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} engines: {node: '>= 0.4'} @@ -4320,6 +4674,10 @@ packages: jimp@0.22.10: resolution: {integrity: sha512-lCaHIJAgTOsplyJzC1w/laxSxrbSsEBw4byKwXgUdMmh+ayPsnidTblenQm+IvhIs44Gcuvlb6pd2LQ0wcKaKg==} + jimp@1.6.0: + resolution: {integrity: sha512-YcwCHw1kiqEeI5xRpDlPPBGL2EOpBKLwO4yIBJcXWHPj5PnA5urGq0jbyhM5KoNpypQ6VboSoxc9D8HyfvngSg==} + engines: {node: '>=18'} + jiti@2.4.2: resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true @@ -4556,6 +4914,10 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + macos-alias@0.2.12: resolution: {integrity: sha512-yiLHa7cfJcGRFq4FrR4tMlpNHb4Vy4mWnpajlSSIFM5k4Lv8/7BbbDLzCAVogWNl0LlLhizRp1drXv0hK9h0Yw==} os: [darwin] @@ -4653,6 +5015,11 @@ packages: engines: {node: '>=4'} hasBin: true + mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -4730,9 +5097,6 @@ packages: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} - mitt@3.0.1: - resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} - mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -4752,6 +5116,10 @@ packages: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} @@ -4761,6 +5129,16 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + msw@2.7.0: + resolution: {integrity: sha512-BIodwZ19RWfCbYTxWTUfTXc+sg4OwjCAgxU1ZsgmggX/7S3LdUifsbUPJs61j0rWb19CZRGY5if77duhc0uXzw==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + typescript: '>= 4.8.x' + peerDependenciesMeta: + typescript: + optional: true + murmur-32@0.2.0: resolution: {integrity: sha512-ZkcWZudylwF+ir3Ld1n7gL6bI2mQAzXvSobPwVtu8aYi2sbXeipeSkdcanRLzIofLcM5F53lGaKm2dk7orBi7Q==} @@ -4768,6 +5146,10 @@ packages: resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} + mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -4909,12 +5291,15 @@ packages: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} - openai@4.73.0: - resolution: {integrity: sha512-NZstV77w3CEol9KQTRBRQ15+Sw6nxVTicAULSjYO4wn9E5gw72Mtp3fAVaBFXyyVPws4241YmFG6ya4L8v03tA==} + openai@4.85.1: + resolution: {integrity: sha512-jkX2fntHljUvSH3MkWh4jShl10oNkb+SsCj4auKlbu2oF4KWAnmHLNR5EpnUHK1ZNW05Rp0fjbJzYwQzMsH8ZA==} hasBin: true peerDependencies: + ws: ^8.18.0 zod: ^3.23.8 peerDependenciesMeta: + ws: + optional: true zod: optional: true @@ -4937,6 +5322,9 @@ packages: outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + outvariant@1.4.3: + resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} + own-keys@1.0.1: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} @@ -5099,6 +5487,9 @@ packages: path-to-regexp@0.1.12: resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + path-type@2.0.0: resolution: {integrity: sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ==} engines: {node: '>=4'} @@ -5161,6 +5552,10 @@ packages: resolution: {integrity: sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==} hasBin: true + pixelmatch@5.3.0: + resolution: {integrity: sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q==} + hasBin: true + playwright-core@1.50.1: resolution: {integrity: sha512-ra9fsNWayuYumt+NiM069M6OkcRb1FZSK8bgi66AtpFoWkg2+y0bJSNmkFrWhMbEBbVKC/EruAHH3g0zmtwGmQ==} engines: {node: '>=18'} @@ -5183,6 +5578,10 @@ packages: resolution: {integrity: sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==} engines: {node: '>=12.13.0'} + pngjs@7.0.0: + resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==} + engines: {node: '>=14.19.0'} + possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} @@ -5232,6 +5631,10 @@ packages: engines: {node: '>=14'} hasBin: true + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + proc-log@2.0.1: resolution: {integrity: sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -5269,6 +5672,9 @@ packages: proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + psl@1.15.0: + resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} + pump@3.0.2: resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} @@ -5288,6 +5694,9 @@ packages: resolution: {integrity: sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==} engines: {node: '>=0.6'} + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -5339,6 +5748,9 @@ packages: react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + react-refresh@0.14.2: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} @@ -5464,6 +5876,9 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + resedit@2.0.3: resolution: {integrity: sha512-oTeemxwoMuxxTYxXUwjkrOPfngTQehlv0/HoYFNkB4uzsP1Un1A9nI8JQKGOFkxpqkC7qkMs0lUsGrvUlbLNUA==} engines: {node: '>=14', npm: '>=7'} @@ -5828,6 +6243,14 @@ packages: simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + simple-xml-to-json@1.2.3: + resolution: {integrity: sha512-kWJDCr9EWtZ+/EYYM5MareWj2cRnZGF93YDNpH4jQiHB+hBIZnfPFSQiVMzZOdk+zXWqTZ/9fTeQNu2DqeiudA==} + engines: {node: '>=20.12.2'} + + sirv@3.0.1: + resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==} + engines: {node: '>=18'} + sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -5929,6 +6352,9 @@ packages: resolution: {integrity: sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==} engines: {node: '>= 0.10.0'} + strict-event-emitter@0.5.1: + resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} + string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} @@ -6163,6 +6589,14 @@ packages: resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} engines: {node: '>=10'} + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + + tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -6354,6 +6788,10 @@ packages: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} @@ -6381,6 +6819,9 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + use-callback-ref@1.3.3: resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} engines: {node: '>=10'} @@ -6477,6 +6918,22 @@ packages: terser: optional: true + vitest-browser-react@0.1.1: + resolution: {integrity: sha512-n9l+sIAexKqqfBuEkjVGdfZ4xAn1Gn/+wc4Mo8KsUSUOVoM9evSY0rVXdMIzCQqloT/zvmFGAtziFINkqu+t7g==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + '@types/react': '>18.0.0' + '@types/react-dom': '>18.0.0' + '@vitest/browser': '>=2.1.0' + react: '>18.0.0' + react-dom: '>18.0.0' + vitest: '>=2.1.0' + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + vitest@3.0.5: resolution: {integrity: sha512-4dof+HvqONw9bvsYxtkfUp2uHsTN9bV2CZIi1pWgoFpL1Lld8LA1ka9q/ONSsoScAKG7NVGf2stJTI7XRkXb2Q==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -6522,9 +6979,17 @@ packages: webidl-conversions@4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + whatwg-fetch@3.6.20: resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} + whatwg-mimetype@3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} + whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -6595,6 +7060,18 @@ packages: utf-8-validate: optional: true + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + xhr@2.6.0: resolution: {integrity: sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==} @@ -6945,6 +7422,19 @@ snapshots: '@bufbuild/protobuf@2.2.3': {} + '@bundled-es-modules/cookie@2.0.1': + dependencies: + cookie: 0.7.2 + + '@bundled-es-modules/statuses@1.0.1': + dependencies: + statuses: 2.0.1 + + '@bundled-es-modules/tough-cookie@0.1.6': + dependencies: + '@types/tough-cookie': 4.0.5 + tough-cookie: 4.1.4 + '@chakra-ui/anatomy@2.3.4': {} '@chakra-ui/anatomy@2.3.5': {} @@ -7170,6 +7660,17 @@ snapshots: picocolors: 1.1.1 sisteransi: 1.0.5 + '@clack/core@0.4.1': + dependencies: + picocolors: 1.1.1 + sisteransi: 1.0.5 + + '@clack/prompts@0.10.0': + dependencies: + '@clack/core': 0.4.1 + picocolors: 1.1.1 + sisteransi: 1.0.5 + '@clack/prompts@0.6.3': dependencies: '@clack/core': 0.3.5 @@ -8307,8 +8808,32 @@ snapshots: '@img/sharp-win32-x64@0.33.3': optional: true + '@inquirer/confirm@5.1.6(@types/node@20.17.17)': + dependencies: + '@inquirer/core': 10.1.7(@types/node@20.17.17) + '@inquirer/type': 3.0.4(@types/node@20.17.17) + optionalDependencies: + '@types/node': 20.17.17 + + '@inquirer/core@10.1.7(@types/node@20.17.17)': + dependencies: + '@inquirer/figures': 1.0.10 + '@inquirer/type': 3.0.4(@types/node@20.17.17) + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 20.17.17 + '@inquirer/figures@1.0.10': {} + '@inquirer/type@3.0.4(@types/node@20.17.17)': + optionalDependencies: + '@types/node': 20.17.17 + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -8339,12 +8864,31 @@ snapshots: transitivePeerDependencies: - encoding + '@jimp/core@1.6.0': + dependencies: + '@jimp/file-ops': 1.6.0 + '@jimp/types': 1.6.0 + '@jimp/utils': 1.6.0 + await-to-js: 3.0.0 + exif-parser: 0.1.12 + file-type: 16.5.4 + mime: 3.0.0 + '@jimp/custom@0.22.12(encoding@0.1.13)': dependencies: '@jimp/core': 0.22.12(encoding@0.1.13) transitivePeerDependencies: - encoding + '@jimp/diff@1.6.0': + dependencies: + '@jimp/plugin-resize': 1.6.0 + '@jimp/types': 1.6.0 + '@jimp/utils': 1.6.0 + pixelmatch: 5.3.0 + + '@jimp/file-ops@1.6.0': {} + '@jimp/gif@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: '@jimp/custom': 0.22.12(encoding@0.1.13) @@ -8358,27 +8902,83 @@ snapshots: '@jimp/utils': 0.22.12 jpeg-js: 0.4.4 + '@jimp/js-bmp@1.6.0': + dependencies: + '@jimp/core': 1.6.0 + '@jimp/types': 1.6.0 + '@jimp/utils': 1.6.0 + bmp-ts: 1.0.9 + + '@jimp/js-gif@1.6.0': + dependencies: + '@jimp/core': 1.6.0 + '@jimp/types': 1.6.0 + gifwrap: 0.10.1 + omggif: 1.0.10 + + '@jimp/js-jpeg@1.6.0': + dependencies: + '@jimp/core': 1.6.0 + '@jimp/types': 1.6.0 + jpeg-js: 0.4.4 + + '@jimp/js-png@1.6.0': + dependencies: + '@jimp/core': 1.6.0 + '@jimp/types': 1.6.0 + pngjs: 7.0.0 + + '@jimp/js-tiff@1.6.0': + dependencies: + '@jimp/core': 1.6.0 + '@jimp/types': 1.6.0 + utif2: 4.1.0 + '@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/utils': 0.22.12 + '@jimp/plugin-blit@1.6.0': + dependencies: + '@jimp/types': 1.6.0 + '@jimp/utils': 1.6.0 + zod: 3.24.2 + '@jimp/plugin-blur@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/utils': 0.22.12 + '@jimp/plugin-blur@1.6.0': + dependencies: + '@jimp/core': 1.6.0 + '@jimp/utils': 1.6.0 + '@jimp/plugin-circle@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/utils': 0.22.12 + '@jimp/plugin-circle@1.6.0': + dependencies: + '@jimp/types': 1.6.0 + zod: 3.24.2 + '@jimp/plugin-color@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/utils': 0.22.12 tinycolor2: 1.6.0 + '@jimp/plugin-color@1.6.0': + dependencies: + '@jimp/core': 1.6.0 + '@jimp/types': 1.6.0 + '@jimp/utils': 1.6.0 + tinycolor2: 1.6.0 + zod: 3.24.2 + '@jimp/plugin-contain@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))))': dependencies: '@jimp/custom': 0.22.12(encoding@0.1.13) @@ -8387,6 +8987,15 @@ snapshots: '@jimp/plugin-scale': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))) '@jimp/utils': 0.22.12 + '@jimp/plugin-contain@1.6.0': + dependencies: + '@jimp/core': 1.6.0 + '@jimp/plugin-blit': 1.6.0 + '@jimp/plugin-resize': 1.6.0 + '@jimp/types': 1.6.0 + '@jimp/utils': 1.6.0 + zod: 3.24.2 + '@jimp/plugin-cover@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))))': dependencies: '@jimp/custom': 0.22.12(encoding@0.1.13) @@ -8395,37 +9004,86 @@ snapshots: '@jimp/plugin-scale': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))) '@jimp/utils': 0.22.12 + '@jimp/plugin-cover@1.6.0': + dependencies: + '@jimp/core': 1.6.0 + '@jimp/plugin-crop': 1.6.0 + '@jimp/plugin-resize': 1.6.0 + '@jimp/types': 1.6.0 + zod: 3.24.2 + '@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/utils': 0.22.12 + '@jimp/plugin-crop@1.6.0': + dependencies: + '@jimp/core': 1.6.0 + '@jimp/types': 1.6.0 + '@jimp/utils': 1.6.0 + zod: 3.24.2 + '@jimp/plugin-displace@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/utils': 0.22.12 + '@jimp/plugin-displace@1.6.0': + dependencies: + '@jimp/types': 1.6.0 + '@jimp/utils': 1.6.0 + zod: 3.24.2 + '@jimp/plugin-dither@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/utils': 0.22.12 + '@jimp/plugin-dither@1.6.0': + dependencies: + '@jimp/types': 1.6.0 + '@jimp/plugin-fisheye@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/utils': 0.22.12 + '@jimp/plugin-fisheye@1.6.0': + dependencies: + '@jimp/types': 1.6.0 + '@jimp/utils': 1.6.0 + zod: 3.24.2 + '@jimp/plugin-flip@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-rotate@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))))': dependencies: '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/plugin-rotate': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))) '@jimp/utils': 0.22.12 + '@jimp/plugin-flip@1.6.0': + dependencies: + '@jimp/types': 1.6.0 + zod: 3.24.2 + '@jimp/plugin-gaussian@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/utils': 0.22.12 + '@jimp/plugin-hash@1.6.0': + dependencies: + '@jimp/core': 1.6.0 + '@jimp/js-bmp': 1.6.0 + '@jimp/js-jpeg': 1.6.0 + '@jimp/js-png': 1.6.0 + '@jimp/js-tiff': 1.6.0 + '@jimp/plugin-color': 1.6.0 + '@jimp/plugin-resize': 1.6.0 + '@jimp/types': 1.6.0 + '@jimp/utils': 1.6.0 + any-base: 1.1.0 + '@jimp/plugin-invert@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: '@jimp/custom': 0.22.12(encoding@0.1.13) @@ -8436,6 +9094,11 @@ snapshots: '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/utils': 0.22.12 + '@jimp/plugin-mask@1.6.0': + dependencies: + '@jimp/types': 1.6.0 + zod: 3.24.2 + '@jimp/plugin-normalize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: '@jimp/custom': 0.22.12(encoding@0.1.13) @@ -8450,11 +9113,35 @@ snapshots: transitivePeerDependencies: - debug + '@jimp/plugin-print@1.6.0': + dependencies: + '@jimp/core': 1.6.0 + '@jimp/js-jpeg': 1.6.0 + '@jimp/js-png': 1.6.0 + '@jimp/plugin-blit': 1.6.0 + '@jimp/types': 1.6.0 + parse-bmfont-ascii: 1.0.6 + parse-bmfont-binary: 1.0.6 + parse-bmfont-xml: 1.1.6 + simple-xml-to-json: 1.2.3 + zod: 3.24.2 + + '@jimp/plugin-quantize@1.6.0': + dependencies: + image-q: 4.0.0 + zod: 3.24.2 + '@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: '@jimp/custom': 0.22.12(encoding@0.1.13) '@jimp/utils': 0.22.12 + '@jimp/plugin-resize@1.6.0': + dependencies: + '@jimp/core': 1.6.0 + '@jimp/types': 1.6.0 + zod: 3.24.2 + '@jimp/plugin-rotate@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))': dependencies: '@jimp/custom': 0.22.12(encoding@0.1.13) @@ -8463,6 +9150,15 @@ snapshots: '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) '@jimp/utils': 0.22.12 + '@jimp/plugin-rotate@1.6.0': + dependencies: + '@jimp/core': 1.6.0 + '@jimp/plugin-crop': 1.6.0 + '@jimp/plugin-resize': 1.6.0 + '@jimp/types': 1.6.0 + '@jimp/utils': 1.6.0 + zod: 3.24.2 + '@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))': dependencies: '@jimp/custom': 0.22.12(encoding@0.1.13) @@ -8483,6 +9179,15 @@ snapshots: '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) '@jimp/utils': 0.22.12 + '@jimp/plugin-threshold@1.6.0': + dependencies: + '@jimp/core': 1.6.0 + '@jimp/plugin-color': 1.6.0 + '@jimp/plugin-hash': 1.6.0 + '@jimp/types': 1.6.0 + '@jimp/utils': 1.6.0 + zod: 3.24.2 + '@jimp/plugins@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: '@jimp/custom': 0.22.12(encoding@0.1.13) @@ -8532,10 +9237,19 @@ snapshots: '@jimp/tiff': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) timm: 1.7.1 + '@jimp/types@1.6.0': + dependencies: + zod: 3.24.2 + '@jimp/utils@0.22.12': dependencies: regenerator-runtime: 0.13.11 + '@jimp/utils@1.6.0': + dependencies: + '@jimp/types': 1.6.0 + tinycolor2: 1.6.0 + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 @@ -8588,6 +9302,15 @@ snapshots: zod: 3.24.2 zod-to-json-schema: 3.24.1(zod@3.24.2) + '@mswjs/interceptors@0.37.6': + dependencies: + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/logger': 0.3.0 + '@open-draft/until': 2.1.0 + is-node-process: 1.2.0 + outvariant: 1.4.3 + strict-event-emitter: 0.5.1 + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -8696,6 +9419,15 @@ snapshots: '@octokit/webhooks-types@6.11.0': {} + '@open-draft/deferred-promise@2.2.0': {} + + '@open-draft/logger@0.3.0': + dependencies: + is-node-process: 1.2.0 + outvariant: 1.4.3 + + '@open-draft/until@2.1.0': {} + '@pkgjs/parseargs@0.11.0': optional: true @@ -8705,6 +9437,8 @@ snapshots: dependencies: playwright: 1.50.1 + '@polka/url@1.0.0-next.28': {} + '@popperjs/core@2.11.8': {} '@rollup/rollup-android-arm-eabi@4.34.6': @@ -8772,6 +9506,21 @@ snapshots: dependencies: defer-to-connect: 2.0.1 + '@testing-library/dom@10.4.0': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/runtime': 7.26.7 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + + '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.0)': + dependencies: + '@testing-library/dom': 10.4.0 + '@tokenizer/token@0.3.0': {} '@tootallnate/once@2.0.0': {} @@ -8801,6 +9550,12 @@ snapshots: '@types/node': 20.17.17 optional: true + '@types/aria-query@5.0.4': {} + + '@types/async-retry@1.4.9': + dependencies: + '@types/retry': 0.12.5 + '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.26.8 @@ -8822,6 +9577,8 @@ snapshots: dependencies: '@babel/types': 7.26.8 + '@types/big.js@6.2.2': {} + '@types/cacheable-request@6.0.3': dependencies: '@types/http-cache-semantics': 4.0.4 @@ -8901,8 +9658,14 @@ snapshots: dependencies: '@types/node': 20.17.17 + '@types/retry@0.12.5': {} + '@types/semver@7.5.8': {} + '@types/statuses@2.0.5': {} + + '@types/tough-cookie@4.0.5': {} + '@types/yauzl@2.10.3': dependencies: '@types/node': 20.17.17 @@ -9086,7 +9849,28 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/coverage-istanbul@3.0.5(vitest@3.0.5(@types/node@20.17.17)(sass-embedded@1.83.4))': + '@vitest/browser@3.0.5(@types/node@20.17.17)(playwright@1.50.1)(typescript@5.7.3)(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4))(vitest@3.0.5)': + dependencies: + '@testing-library/dom': 10.4.0 + '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0) + '@vitest/mocker': 3.0.5(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)) + '@vitest/utils': 3.0.5 + magic-string: 0.30.17 + msw: 2.7.0(@types/node@20.17.17)(typescript@5.7.3) + sirv: 3.0.1 + tinyrainbow: 2.0.0 + vitest: 3.0.5(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4) + ws: 8.18.0 + optionalDependencies: + playwright: 1.50.1 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - typescript + - utf-8-validate + - vite + + '@vitest/coverage-istanbul@3.0.5(vitest@3.0.5(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4))': dependencies: '@istanbuljs/schema': 0.1.3 debug: 4.4.0 @@ -9098,7 +9882,7 @@ snapshots: magicast: 0.3.5 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.0.5(@types/node@20.17.17)(sass-embedded@1.83.4) + vitest: 3.0.5(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4) transitivePeerDependencies: - supports-color @@ -9109,12 +9893,13 @@ snapshots: chai: 5.1.2 tinyrainbow: 2.0.0 - '@vitest/mocker@3.0.5(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4))': + '@vitest/mocker@3.0.5(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4))': dependencies: '@vitest/spy': 3.0.5 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: + msw: 2.7.0(@types/node@20.17.17)(typescript@5.7.3) vite: 5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4) '@vitest/pretty-format@3.0.5': @@ -9233,6 +10018,8 @@ snapshots: dependencies: color-convert: 2.0.1 + ansi-styles@5.2.0: {} + ansi-styles@6.2.1: {} any-base@1.1.0: {} @@ -9268,6 +10055,10 @@ snapshots: dependencies: tslib: 2.8.1 + aria-query@5.3.0: + dependencies: + dequal: 2.0.3 + array-buffer-byte-length@1.0.2: dependencies: call-bound: 1.0.3 @@ -9364,6 +10155,8 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 + await-to-js@3.0.0: {} + axios@1.7.9: dependencies: follow-redirects: 1.15.9 @@ -9409,6 +10202,8 @@ snapshots: bmp-js@0.1.0: {} + bmp-ts@1.0.9: {} + body-parser@1.20.3: dependencies: bytes: 3.1.2 @@ -9658,6 +10453,8 @@ snapshots: commander@11.0.0: {} + commander@13.1.0: {} + commander@4.1.1: {} commander@5.1.0: {} @@ -9716,6 +10513,8 @@ snapshots: cookie@0.7.1: {} + cookie@0.7.2: {} + cookie@1.0.2: {} copy-to-clipboard@3.3.3: @@ -9895,6 +10694,8 @@ snapshots: dependencies: esutils: 2.0.3 + dom-accessibility-api@0.5.16: {} + dom-walk@0.1.2: {} dot-prop@5.3.0: @@ -11071,6 +11872,13 @@ snapshots: graphemer@1.4.0: {} + graphql@16.10.0: {} + + happy-dom@17.1.1: + dependencies: + webidl-conversions: 7.0.0 + whatwg-mimetype: 3.0.0 + has-bigints@1.1.0: {} has-flag@4.0.0: {} @@ -11093,6 +11901,8 @@ snapshots: dependencies: function-bind: 1.1.2 + headers-polyfill@4.0.3: {} + hoist-non-react-statics@3.3.2: dependencies: react-is: 16.13.1 @@ -11337,6 +12147,8 @@ snapshots: xtend: 4.0.2 optional: true + is-node-process@1.2.0: {} + is-number-object@1.1.1: dependencies: call-bound: 1.0.3 @@ -11493,6 +12305,36 @@ snapshots: - debug - encoding + jimp@1.6.0: + dependencies: + '@jimp/core': 1.6.0 + '@jimp/diff': 1.6.0 + '@jimp/js-bmp': 1.6.0 + '@jimp/js-gif': 1.6.0 + '@jimp/js-jpeg': 1.6.0 + '@jimp/js-png': 1.6.0 + '@jimp/js-tiff': 1.6.0 + '@jimp/plugin-blit': 1.6.0 + '@jimp/plugin-blur': 1.6.0 + '@jimp/plugin-circle': 1.6.0 + '@jimp/plugin-color': 1.6.0 + '@jimp/plugin-contain': 1.6.0 + '@jimp/plugin-cover': 1.6.0 + '@jimp/plugin-crop': 1.6.0 + '@jimp/plugin-displace': 1.6.0 + '@jimp/plugin-dither': 1.6.0 + '@jimp/plugin-fisheye': 1.6.0 + '@jimp/plugin-flip': 1.6.0 + '@jimp/plugin-hash': 1.6.0 + '@jimp/plugin-mask': 1.6.0 + '@jimp/plugin-print': 1.6.0 + '@jimp/plugin-quantize': 1.6.0 + '@jimp/plugin-resize': 1.6.0 + '@jimp/plugin-rotate': 1.6.0 + '@jimp/plugin-threshold': 1.6.0 + '@jimp/types': 1.6.0 + '@jimp/utils': 1.6.0 + jiti@2.4.2: {} joycon@3.1.1: {} @@ -11727,6 +12569,8 @@ snapshots: lru-cache@7.18.3: {} + lz-string@1.5.0: {} + macos-alias@0.2.12: dependencies: nan: 2.22.0 @@ -11836,6 +12680,8 @@ snapshots: mime@1.6.0: {} + mime@3.0.0: {} + mimic-fn@2.1.0: {} mimic-fn@4.0.0: {} @@ -11905,8 +12751,6 @@ snapshots: minipass: 3.3.6 yallist: 4.0.0 - mitt@3.0.1: {} - mkdirp@0.5.6: dependencies: minimist: 1.2.8 @@ -11921,12 +12765,39 @@ snapshots: mri@1.2.0: {} + mrmime@2.0.1: {} + ms@2.0.0: {} ms@2.1.2: {} ms@2.1.3: {} + msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3): + dependencies: + '@bundled-es-modules/cookie': 2.0.1 + '@bundled-es-modules/statuses': 1.0.1 + '@bundled-es-modules/tough-cookie': 0.1.6 + '@inquirer/confirm': 5.1.6(@types/node@20.17.17) + '@mswjs/interceptors': 0.37.6 + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/until': 2.1.0 + '@types/cookie': 0.6.0 + '@types/statuses': 2.0.5 + graphql: 16.10.0 + headers-polyfill: 4.0.3 + is-node-process: 1.2.0 + outvariant: 1.4.3 + path-to-regexp: 6.3.0 + picocolors: 1.1.1 + strict-event-emitter: 0.5.1 + type-fest: 4.34.1 + yargs: 17.7.2 + optionalDependencies: + typescript: 5.7.3 + transitivePeerDependencies: + - '@types/node' + murmur-32@0.2.0: dependencies: encode-utf8: 1.0.3 @@ -11936,6 +12807,8 @@ snapshots: mute-stream@1.0.0: {} + mute-stream@2.0.0: {} + mz@2.7.0: dependencies: any-promise: 1.3.0 @@ -12078,7 +12951,7 @@ snapshots: dependencies: mimic-fn: 4.0.0 - openai@4.73.0(encoding@0.1.13)(zod@3.24.2): + openai@4.85.1(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2): dependencies: '@types/node': 18.19.75 '@types/node-fetch': 2.6.12 @@ -12088,11 +12961,12 @@ snapshots: formdata-node: 4.4.1 node-fetch: 2.7.0(encoding@0.1.13) optionalDependencies: + ws: 8.18.0 zod: 3.24.2 transitivePeerDependencies: - encoding - opencommit@3.2.5(encoding@0.1.13): + opencommit@3.2.5(encoding@0.1.13)(ws@8.18.0): dependencies: '@actions/core': 1.11.1 '@actions/exec': 1.1.1 @@ -12113,13 +12987,14 @@ snapshots: ignore: 5.3.2 ini: 3.0.1 inquirer: 9.3.7 - openai: 4.73.0(encoding@0.1.13)(zod@3.24.2) + openai: 4.85.1(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2) punycode: 2.3.1 zod: 3.24.2 transitivePeerDependencies: - debug - encoding - supports-color + - ws optionator@0.9.4: dependencies: @@ -12146,6 +13021,8 @@ snapshots: outdent@0.5.0: {} + outvariant@1.4.3: {} + own-keys@1.0.1: dependencies: get-intrinsic: 1.2.7 @@ -12279,6 +13156,8 @@ snapshots: path-to-regexp@0.1.12: {} + path-to-regexp@6.3.0: {} + path-type@2.0.0: dependencies: pify: 2.3.0 @@ -12319,6 +13198,10 @@ snapshots: dependencies: pngjs: 3.4.0 + pixelmatch@5.3.0: + dependencies: + pngjs: 6.0.0 + playwright-core@1.50.1: {} playwright@1.50.1: @@ -12337,6 +13220,8 @@ snapshots: pngjs@6.0.0: {} + pngjs@7.0.0: {} + possible-typed-array-names@1.1.0: {} postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.5.2)(tsx@4.19.2): @@ -12367,6 +13252,12 @@ snapshots: prettier@3.5.0: {} + pretty-format@27.5.1: + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + proc-log@2.0.1: {} process-nextick-args@2.0.1: {} @@ -12395,6 +13286,10 @@ snapshots: proxy-from-env@1.1.0: {} + psl@1.15.0: + dependencies: + punycode: 2.3.1 + pump@3.0.2: dependencies: end-of-stream: 1.4.4 @@ -12412,6 +13307,8 @@ snapshots: dependencies: side-channel: 1.1.0 + querystringify@2.2.0: {} + queue-microtask@1.2.3: {} quick-lru@5.1.1: {} @@ -12464,6 +13361,8 @@ snapshots: react-is@16.13.1: {} + react-is@17.0.2: {} + react-refresh@0.14.2: {} react-remove-scroll-bar@2.3.8(@types/react@18.3.18)(react@18.3.1): @@ -12621,6 +13520,8 @@ snapshots: require-from-string@2.0.2: {} + requires-port@1.0.0: {} + resedit@2.0.3: dependencies: pe-library: 1.0.1 @@ -13017,6 +13918,14 @@ snapshots: dependencies: is-arrayish: 0.3.2 + simple-xml-to-json@1.2.3: {} + + sirv@3.0.1: + dependencies: + '@polka/url': 1.0.0-next.28 + mrmime: 2.0.1 + totalist: 3.0.1 + sisteransi@1.0.5: {} slash@3.0.0: {} @@ -13113,6 +14022,8 @@ snapshots: stream-buffers@2.2.0: optional: true + strict-event-emitter@0.5.1: {} + string-argv@0.3.2: {} string-width@4.2.3: @@ -13357,6 +14268,15 @@ snapshots: '@tokenizer/token': 0.3.0 ieee754: 1.2.1 + totalist@3.0.1: {} + + tough-cookie@4.1.4: + dependencies: + psl: 1.15.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + tr46@0.0.3: {} tr46@1.0.1: @@ -13545,6 +14465,8 @@ snapshots: universalify@0.1.2: {} + universalify@0.2.0: {} + universalify@2.0.1: {} unorm@1.6.0: @@ -13573,6 +14495,11 @@ snapshots: dependencies: punycode: 2.3.1 + url-parse@1.5.10: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + use-callback-ref@1.3.3(@types/react@18.3.18)(react@18.3.1): dependencies: react: 18.3.1 @@ -13655,10 +14582,20 @@ snapshots: fsevents: 2.3.3 sass-embedded: 1.83.4 - vitest@3.0.5(@types/node@20.17.17)(sass-embedded@1.83.4): + vitest-browser-react@0.1.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(@vitest/browser@3.0.5(@types/node@20.17.17)(playwright@1.50.1)(typescript@5.7.3)(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4))(vitest@3.0.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vitest@3.0.5(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4)): + dependencies: + '@vitest/browser': 3.0.5(@types/node@20.17.17)(playwright@1.50.1)(typescript@5.7.3)(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4))(vitest@3.0.5) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + vitest: 3.0.5(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) + + vitest@3.0.5(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4): dependencies: '@vitest/expect': 3.0.5 - '@vitest/mocker': 3.0.5(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)) + '@vitest/mocker': 3.0.5(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)) '@vitest/pretty-format': 3.0.5 '@vitest/runner': 3.0.5 '@vitest/snapshot': 3.0.5 @@ -13679,6 +14616,8 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.17.17 + '@vitest/browser': 3.0.5(@types/node@20.17.17)(playwright@1.50.1)(typescript@5.7.3)(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4))(vitest@3.0.5) + happy-dom: 17.1.1 transitivePeerDependencies: - less - lightningcss @@ -13702,8 +14641,12 @@ snapshots: webidl-conversions@4.0.2: {} + webidl-conversions@7.0.0: {} + whatwg-fetch@3.6.20: {} + whatwg-mimetype@3.0.0: {} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 @@ -13794,6 +14737,8 @@ snapshots: ws@7.5.10: {} + ws@8.18.0: {} + xhr@2.6.0: dependencies: global: 4.4.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 0466e4ef3..673412571 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,4 +1,4 @@ packages: - '.' - - 'packages/*' + - 'packages/**' - '!packages/visualizer' diff --git a/scripts/release-beta-pkgs.sh b/scripts/release-beta-pkgs.sh new file mode 100755 index 000000000..5be4ce6b7 --- /dev/null +++ b/scripts/release-beta-pkgs.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash + +set -e + +pnpm changeset pre enter beta + +echo "=== start release ===" + +echo "1. update version and generate CHANGELOG..." +pnpm changeset version + +echo "2. update dependencies..." +pnpm install + +echo "3. create release tag..." +pnpm changeset tag + +echo "4. publish to npm..." +pnpm publish -r --no-git-checks --access public --tag beta + +echo "5. exit changeset..." +pnpm changeset pre exit + +echo "6. prepare to push to remote git repository..." +read -p "confirm push to remote git repository? (y/N) " confirm +if [[ $confirm == [yY] ]]; then + git add . + git commit -m "release: publish beta packages" + echo "pushing code and tag to remote git repository..." + git push --follow-tags + echo "=== release-beta completed ===" +else + echo "cancel pushing to remote git repository" + echo "=== release-beta completed (not pushed to remote) ===" +fi diff --git a/src/main/agent/device.ts b/src/main/agent/device.ts deleted file mode 100644 index 61add424b..000000000 --- a/src/main/agent/device.ts +++ /dev/null @@ -1,95 +0,0 @@ -/** - * Copyright (c) 2025 Bytedance, Inc. and its affiliates. - * SPDX-License-Identifier: Apache-2.0 - */ -import { desktopCapturer, screen } from 'electron'; - -import { actionParser } from '@ui-tars/action-parser'; -import { PredictionParsed, ScreenshotResult } from '@ui-tars/shared/types'; - -import * as env from '@main/env'; -import { logger } from '@main/logger'; - -import { FACTOR } from './constant'; -import { execute } from './execute'; - -export class Desktop { - tearDown() { - logger.info('tearDown'); - } - - async nl2Command( - prediction: string, - // width: number, - // height: number, - ): Promise<{ - command?: string; - parsed: PredictionParsed[]; - }> { - const data = { - prediction, - factor: FACTOR, - // width, - // height, - }; - const body = JSON.stringify(data); - logger.info('[nl2Command] body', body); - try { - const { parsed } = await actionParser(data); - logger.info('[nl2Command] parsed', parsed); - - return { - parsed, - }; - } catch (error) { - logger.error('[lCmd2pyCmd] error', error); - return { - parsed: [], - }; - } - } - - async execute( - prediction: PredictionParsed, - screenWidth: number, - screenHeight: number, - ) { - const primaryDisplay = screen.getPrimaryDisplay(); - const { scaleFactor } = primaryDisplay; - - await execute({ - prediction, - screenWidth, - screenHeight, - logger, - scaleFactor: !env.isMacOS ? scaleFactor : 1, - }); - } - - async screenshot(): Promise { - const primaryDisplay = screen.getPrimaryDisplay(); - const { width, height } = primaryDisplay.size; - - logger.info('[screenshot] [primaryDisplay]', 'size:', primaryDisplay.size); - - logger.info('[screenshot] [scaleScreenSize]', width, height); - - const sources = await desktopCapturer.getSources({ - types: ['screen'], - thumbnailSize: { - width: Math.round(width), - height: Math.round(height), - }, - }); - const primarySource = sources.find( - (source) => source.display_id === primaryDisplay.id.toString(), - ); - const screenshot = primarySource!.thumbnail; - - return { - base64: screenshot.toPNG().toString('base64'), - width, - height, - }; - } -} diff --git a/src/main/agent/execute.ts b/src/main/agent/execute.ts deleted file mode 100644 index 94b2ac82c..000000000 --- a/src/main/agent/execute.ts +++ /dev/null @@ -1,261 +0,0 @@ -/** - * Copyright (c) 2025 Bytedance, Inc. and its affiliates. - * SPDX-License-Identifier: Apache-2.0 - */ -import { - Button, - Key, - Point, - Region, - centerOf, - keyboard, - mouse, - sleep, - straightTo, -} from '@computer-use/nut-js'; -import Big from 'big.js'; -import { clipboard } from 'electron'; - -import { PredictionParsed } from '@ui-tars/shared/types'; - -import * as env from '../env'; -import { parseBoxToScreenCoords } from '../utils/coords'; - -const moveStraightTo = async (startX: number | null, startY: number | null) => { - if (startX === null || startY === null) { - return; - } - await mouse.move(straightTo(new Point(startX, startY))); -}; - -const parseBoxToScreenCoordsWithScaleFactor = ({ - boxStr, - screenWidth, - screenHeight, - scaleFactor, -}: { - boxStr: string; - screenWidth: number; - screenHeight: number; - scaleFactor: number; -}) => { - const { x: _x, y: _y } = boxStr - ? parseBoxToScreenCoords(boxStr, screenWidth, screenHeight) - : { x: null, y: null }; - - const x = _x ? _x * scaleFactor : null; - const y = _y ? _y * scaleFactor : null; - return { - x, - y, - }; -}; - -export interface ExecuteParams { - scaleFactor?: number; - prediction: PredictionParsed; - screenWidth: number; - screenHeight: number; - logger?: any; -} - -export const execute = async (executeParams: ExecuteParams) => { - const { - prediction, - screenWidth, - screenHeight, - logger = console, - scaleFactor = 1, - } = executeParams; - - logger.info( - '[execute] executeParams', - JSON.stringify({ - scaleFactor, - prediction, - screenWidth, - screenHeight, - }), - ); - - const { action_type, action_inputs } = prediction; - - const startBoxStr = action_inputs?.start_box || ''; - - logger.info('[execute] action_type', action_type, 'startBoxStr', startBoxStr); - - const { x: startX, y: startY } = parseBoxToScreenCoordsWithScaleFactor({ - boxStr: startBoxStr, - screenWidth, - screenHeight, - scaleFactor, - }); - - logger.info(`[execute] [Position] (${startX}, ${startY})`); - - // execute configs - mouse.config.mouseSpeed = 3000; - - // if (startBoxStr) { - // const region = await nutScreen.highlight( - // new Region(startX, startY, 100, 100), - // ); - // logger.info('[execute] [Region]', region); - // } - - switch (action_type) { - case 'wait': - logger.info('[device] wait', action_inputs); - await sleep(1000); - break; - - case 'mouse_move': - case 'hover': - logger.info('[device] mouse_move'); - await moveStraightTo(startX, startY); - break; - - case 'click': - case 'left_click': - case 'left_single': - logger.info('[device] left_click'); - await moveStraightTo(startX, startY); - await sleep(100); - await mouse.click(Button.LEFT); - break; - - case 'left_double': - case 'double_click': - logger.info(`[device] ${action_type}(${startX}, ${startY})`); - await moveStraightTo(startX, startY); - await sleep(100); - await mouse.doubleClick(Button.LEFT); - break; - - case 'right_click': - case 'right_single': - logger.info('[device] right_click'); - await moveStraightTo(startX, startY); - await sleep(100); - await mouse.click(Button.RIGHT); - break; - - case 'middle_click': - logger.info('[device] middle_click'); - await moveStraightTo(startX, startY); - await mouse.click(Button.MIDDLE); - break; - - case 'left_click_drag': - case 'drag': - case 'select': { - logger.info('[device] drag', action_inputs); - // end_box - if (action_inputs?.end_box) { - const { x: endX, y: endY } = parseBoxToScreenCoordsWithScaleFactor({ - boxStr: action_inputs.end_box, - screenWidth, - screenHeight, - scaleFactor, - }); - - if (startX && startY && endX && endY) { - // calculate x and y direction difference - const diffX = Big(endX).minus(startX).toNumber(); - const diffY = Big(endY).minus(startY).toNumber(); - - await mouse.drag( - straightTo(centerOf(new Region(startX, startY, diffX, diffY))), - ); - } - } - break; - } - - case 'type': { - const content = action_inputs.content?.trim(); - logger.info('[device] type', content); - if (content) { - const stripContent = content.replace(/\\n$/, '').replace(/\n$/, ''); - keyboard.config.autoDelayMs = 0; - if (env.isWindows) { - const originalClipboard = clipboard.readText(); - clipboard.writeText(stripContent); - await keyboard.pressKey(Key.LeftControl, Key.V); - await sleep(50); - await keyboard.releaseKey(Key.LeftControl, Key.V); - await sleep(50); - clipboard.writeText(originalClipboard); - } else { - await keyboard.type(stripContent); - } - - if (content.endsWith('\n') || content.endsWith('\\n')) { - await keyboard.pressKey(Key.Enter); - await keyboard.releaseKey(Key.Enter); - } - - keyboard.config.autoDelayMs = 500; - } - break; - } - - case 'hotkey': { - const keyStr = action_inputs?.key || action_inputs?.hotkey; - if (keyStr) { - const platformCommandKey = process.platform === 'darwin' ? Key.LeftCmd : Key.LeftWin; - const keyMap: Record = { - return: Key.Enter, - enter: Key.Enter, - ctrl: Key.LeftControl, - shift: Key.LeftShift, - alt: Key.LeftAlt, - space: Key.Space, - 'page down': Key.PageDown, - pagedown: Key.PageDown, - 'page up': Key.PageUp, - pageup: Key.PageUp, - meta: platformCommandKey, - win: platformCommandKey, - command: platformCommandKey, - cmd: platformCommandKey, - }; - - const keys = keyStr - .split(/[\s+]/) - .map((k) => keyMap[k.toLowerCase()] || Key[k.toUpperCase() as keyof typeof Key]); - logger.info('[hotkey]: ', keys); - await keyboard.pressKey(...keys); - await keyboard.releaseKey(...keys); - } - break; - } - - case 'scroll': { - const { direction } = action_inputs; - // if startX and startY is not null, move mouse to startX, startY - if (startX !== null && startY !== null) { - await moveStraightTo(startX, startY); - } - - switch (direction?.toLowerCase()) { - case 'up': - await mouse.scrollUp(5 * 100); - break; - case 'down': - await mouse.scrollDown(5 * 100); - break; - default: - console.warn(`Unsupported scroll direction: ${direction}`); - } - break; - } - - case 'call_user': - case 'finished': - break; - - default: - logger.warn(`Unsupported action: ${action_type}`); - } -}; diff --git a/src/main/agent/index.ts b/src/main/agent/index.ts deleted file mode 100644 index c688ef078..000000000 --- a/src/main/agent/index.ts +++ /dev/null @@ -1,371 +0,0 @@ -/** - * Copyright (c) 2025 Bytedance, Inc. and its affiliates. - * SPDX-License-Identifier: Apache-2.0 - */ -/* eslint-disable max-lines-per-function */ -import retry from 'async-retry'; -import mitt, { Emitter, Handler } from 'mitt'; - -import { - IMAGE_PLACEHOLDER, - MAX_LOOP_COUNT, - VlmModeEnum, -} from '@ui-tars/shared/constants'; -import { - ScreenshotResult, - StatusEnum, - ShareVersion, - ComputerUseUserData, - Conversation, -} from '@ui-tars/shared/types'; -import { sleep } from '@ui-tars/shared/utils'; - -import { logger } from '@main/logger'; - -import { UTIOService } from '../services/utio'; -import { markClickPosition } from '../utils/image'; -import { Desktop } from './device'; -import { VLM, VlmRequest } from './llm/base'; -import { getSummary, processVlmParams } from './utils'; - -type AgentEvents = { - data: ComputerUseUserData; - error: Partial & { - code: number; - error: string; - stack?: string; - }; -}; - -export class ComputerUseAgent { - private readonly logger = logger; - private conversations: Conversation[] = []; - private startTime: number; - private status: StatusEnum; - private lastSentIndex = -1; // 上次发送的 index - private mode: VlmModeEnum = VlmModeEnum.Agent; - private emitter: Emitter; - - constructor( - private readonly config: { - systemPrompt: string; - abortController: AbortController | null; - instruction: string; - device: Desktop; - vlm: VLM; - }, - ) { - this.emitter = mitt(); - this.status = StatusEnum.INIT; - this.startTime = Date.now(); - } - - on( - type: Key, - handler: Handler, - ): void { - this.emitter.on(type, handler); - } - - emit( - type: Key, - event: AgentEvents[Key], - ): void { - this.emitter.emit(type, event); - } - - private toUserDataFormat(): ComputerUseUserData { - const { config } = this; - return { - version: ShareVersion.V1, - systemPrompt: config.systemPrompt, - instruction: config.instruction, - modelName: `${config.vlm.vlmModel}`, - mode: this.mode, - status: this.status, - logTime: this.startTime, - conversations: this.conversations, - }; - } - - private emitData( - newUserData: Omit, 'conversations'> = {}, - ) { - const newConversations = this.conversations.slice(this.lastSentIndex + 1); - // console.log('newConversations', newConversations) - // if (newConversations.length === 0) return; - - const userDataFormat = this.toUserDataFormat(); - const userData: ComputerUseUserData = { - ...userDataFormat, - ...newUserData, - conversations: newConversations, - }; - - this.logger.info('[emitData] status', userData?.status); - - this.emit('data', userData); - this.lastSentIndex = this.conversations.length - 1; - } - - async runAgentLoop({ - loopWaitTime, - }: { - loopWaitTime: (actionType: string) => number; - }) { - const { config, logger } = this; - const { abortController, device, vlm, instruction } = config; - - // Send instruction data to UTIO - await UTIOService.getInstance().sendInstruction(instruction); - - // init - this.mode = VlmModeEnum.Agent; - this.conversations = [ - { - from: 'human', - value: instruction, - timing: { - start: Date.now(), - end: Date.now(), - cost: 0, - }, - }, - ]; - this.lastSentIndex = this.conversations.length - 1; - - let loopCnt = 0; - let snapshotErrCnt = 0; - - logger.info('[runAgentLoop] start'); - - // start - this.status = StatusEnum.RUNNING; - this.emitData(); - - try { - while (true) { - if (this.status !== StatusEnum.RUNNING) { - break; - } - - logger.info( - '[abortController?.signal?.aborted]', - abortController?.signal?.aborted, - ); - if (abortController?.signal?.aborted) { - this.status = StatusEnum.END; - this.emitData(); - break; - } - - loopCnt += 1; - logger.info( - `\n=====第 ${loopCnt} 次循环 Start, 截图错误次数: ${snapshotErrCnt} =======\n`, - ); - - // 10 次截图失败 - if (loopCnt >= MAX_LOOP_COUNT || snapshotErrCnt >= 10) { - this.status = StatusEnum.MAX_LOOP; - this.emitData({ - errMsg: - loopCnt >= MAX_LOOP_COUNT - ? 'Exceeds the maximum number of loops' - : 'Too many screenshot failures', - }); - break; - } - - let start = Date.now(); - // 1、截图 - const snapshot: ScreenshotResult = await retry( - async () => device.screenshot(), - { - retries: 5, - onRetry: (error, number) => { - logger.warn(`[snapshot_retry] 调用失败 (${number}/5)`, error); - }, - }, - ); - - const isValidImage = !!( - snapshot?.base64 && - snapshot?.width && - snapshot?.height - ); - logger.info('[isValidImage]', isValidImage); - - if (!isValidImage) { - loopCnt -= 1; - snapshotErrCnt += 1; - await sleep(1000); - continue; - } - - logger.info( - '[snapshot] width', - snapshot.width, - 'height', - snapshot.height, - ); - - this.addConversation({ - from: 'human', - value: IMAGE_PLACEHOLDER, - screenshotBase64: snapshot.base64, - screenshotContext: { - size: { - width: snapshot.width, - height: snapshot.height, - }, - }, - timing: { - start, - end: Date.now(), - cost: Date.now() - start, - }, - }); - this.emitData(); - start = Date.now(); - - // 2、vlm 推理 - const vlmParams = { - ...processVlmParams(this.toVlmModelFormat()), - }; - logger.info('[vlmParams_conversations]:', vlmParams.conversations); - logger.info('[vlmParams_images_len]:', vlmParams.images.length); - - const vlmRes = await vlm.invoke(vlmParams, { - abortController, - }); - - if (!vlmRes?.prediction) { - continue; - } - - const { parsed } = await device.nl2Command(vlmRes.prediction); - - let eomImage; - if (parsed?.length && snapshot) { - eomImage = await markClickPosition({ - ...snapshot, - parsed, - }).catch((e) => { - logger.error('[markClickPosition error]:', e); - return ''; - }); - } - const predictionSummary = getSummary(vlmRes.prediction); - this.addConversation({ - from: 'gpt', - value: predictionSummary, - timing: { - start, - end: Date.now(), - cost: Date.now() - start, - }, - screenshotContext: { - size: { - width: snapshot.width, - height: snapshot.height, - }, - }, - screenshotBase64WithElementMarker: eomImage, - predictionParsed: parsed, - reflections: vlmRes.reflections, - }); - this.emitData(); - - logger.info('[parsed]', parsed, '[parsed_length]', parsed.length); - - // multiple steps predictions - for (const prediction of parsed) { - // 3、根据模型输出判断是否结束 / 执行指令 - const actionType = prediction.action_type; - - logger.info( - '[parsed_prediction]', - prediction, - '[actionType]', - actionType, - ); - - switch (actionType) { - case 'error_env': - case 'call_user': - case 'finished': - this.status = StatusEnum.END; - break; - case 'max_loop': - this.status = StatusEnum.MAX_LOOP; - break; - default: - this.status = StatusEnum.RUNNING; - } - this.emitData(); - - // 4、执行指令 - if ( - !['wait'].includes(actionType) && - !abortController?.signal?.aborted - ) { - await device.execute(prediction, snapshot.width, snapshot.height); - } - - await sleep(loopWaitTime?.(actionType) ?? 1500); - } - - logger.info(`=====第 ${loopCnt} 次循环 End =======\n\n\n`); - } - } catch (error) { - if ( - error instanceof Error && - (error.name === 'AbortError' || error.message?.includes('aborted')) - ) { - logger.info('Request was aborted'); - return; - } - - logger.error('[runLoop] error', error); - this.emit('error', { - ...this.toUserDataFormat(), - code: -1, - error: '服务异常', - stack: `${error}`, - }); - throw error; - } finally { - this.status = StatusEnum.END; - this.emitData(); - device?.tearDown(); - logger.info('agent finally [this.status]', this.status); - } - } - - private toVlmModelFormat(): VlmRequest { - return { - conversations: this.conversations.map((conv, idx) => { - if (idx === 0 && conv.from === 'human') { - return { - from: conv.from, - value: `${this.config.systemPrompt}${conv.value}`, - }; - } - return { - from: conv.from, - value: conv.value, - }; - }), - images: this.conversations - .filter( - (conv): conv is Conversation & { screenshotBase64: string } => - conv.value === IMAGE_PLACEHOLDER && !!conv.screenshotBase64, - ) - .map((conv) => conv.screenshotBase64), - }; - } - - addConversation(conversation: Conversation) { - this.conversations.push(conversation); - } -} diff --git a/src/main/agent/llm/base.ts b/src/main/agent/llm/base.ts deleted file mode 100644 index 027d90bd8..000000000 --- a/src/main/agent/llm/base.ts +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Copyright (c) 2025 Bytedance, Inc. and its affiliates. - * SPDX-License-Identifier: Apache-2.0 - */ -import { Message } from '@ui-tars/shared/types'; - -export interface VlmRequest { - conversations: Message[]; - images: string[]; -} - -export interface VlmRequestOptions { - abortController?: AbortController | null; -} - -export interface VlmResponse { - prediction: string; - reflections?: string[]; -} - -export interface VlmChatRequest { - conversations: Message[]; - images: string[]; -} - -export interface VlmChatResponse { - prediction: string; -} - -export interface VlmConfig { - model: string; -} - -export abstract class VLM< - T extends VlmRequest = VlmRequest, - K extends VlmResponse = VlmResponse, -> { - abstract get vlmModel(): string; - abstract invoke( - { conversations, images }: T, - options?: VlmRequestOptions, - ): Promise; -} diff --git a/src/main/agent/llm/ui-tars.ts b/src/main/agent/llm/ui-tars.ts deleted file mode 100644 index b9d6e6823..000000000 --- a/src/main/agent/llm/ui-tars.ts +++ /dev/null @@ -1,97 +0,0 @@ -/** - * Copyright (c) 2025 Bytedance, Inc. and its affiliates. - * SPDX-License-Identifier: Apache-2.0 - */ -import OpenAI from 'openai'; - -import { convertToOpenAIMessages } from '@main/agent/utils'; -import { logger } from '@main/logger'; -import { preprocessResizeImage } from '@main/utils/image'; - -import { MAX_PIXELS } from '../constant'; -import { VLM, VlmRequest, VlmRequestOptions, VlmResponse } from './base'; -import { SettingStore } from '@main/store/setting'; - -export interface UITARSOptions { - reflection: boolean; - num_samples: number; - max_new_tokens: number; - do_sample: boolean; - top_k: number; - temperature: number; - top_p: number; - no_answer: boolean; - convert_history_reflection: boolean; -} - -export class UITARS implements VLM { - get vlmModel() { - return SettingStore.getStore().vlmModelName; - } - - // [image, prompt] - // [gpt, image] - async invoke( - { conversations, images }: VlmRequest, - options?: VlmRequestOptions, - ) { - const { abortController } = options ?? {}; - const compressedImages = await Promise.all( - images.map((image) => preprocessResizeImage(image, MAX_PIXELS)), - ); - - const messages = convertToOpenAIMessages({ - conversations, - images: compressedImages, - }); - const vlmBaseUrl = SettingStore.getStore().vlmBaseUrl; - const vlmApiKey = SettingStore.getStore().vlmApiKey; - logger.info('vlmBaseUrl', vlmBaseUrl, 'vlmApiKey', vlmApiKey); - - const openai = new OpenAI({ - baseURL: vlmBaseUrl, - apiKey: vlmApiKey, - }); - - const startTime = Date.now(); - const result = await openai.chat.completions - .create( - { - model: this.vlmModel, - max_tokens: 1000, - stream: false, - temperature: 0, - top_p: 0.7, - seed: null, - stop: null, - frequency_penalty: null, - presence_penalty: null, - // messages - messages, - }, - { - signal: abortController?.signal, - }, - ) - .finally(() => { - logger.info(`[vlm_invoke_time_cost]: ${Date.now() - startTime}ms`); - }); - if (!result.choices[0].message.content) { - const err = new Error(); - err.name = 'vlm response error'; - err.stack = JSON.stringify(result) ?? 'no message'; - logger.error(err); - throw err; - } - - logger.info( - '[ui_tars_vlm_response_content]', - result.choices[0].message.content, - ); - - return { - prediction: result.choices[0].message.content, - reflections: [], - }; - } -} diff --git a/src/main/agent/device.test.ts b/src/main/agent/operator.test.ts similarity index 79% rename from src/main/agent/device.test.ts rename to src/main/agent/operator.test.ts index 994bdd072..3466eeeda 100644 --- a/src/main/agent/device.test.ts +++ b/src/main/agent/operator.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi, beforeEach, afterEach } from 'vitest'; import { screen, desktopCapturer } from 'electron'; -import { Desktop } from './device'; +import { NutJSElectronOperator } from './operator'; // Mock dependencies vi.mock('electron', () => ({ @@ -19,19 +19,15 @@ vi.mock('electron', () => ({ }, })); -vi.mock('./execute', () => ({ - execute: vi.fn(), -})); - vi.mock('@main/env', () => ({ isMacOS: false, })); -describe('Desktop', () => { - let desktop: Desktop; +describe('NutJSElectronOperator', () => { + let operator: NutJSElectronOperator; beforeEach(() => { - desktop = new Desktop(); + operator = new NutJSElectronOperator(); vi.clearAllMocks(); }); @@ -44,11 +40,15 @@ describe('Desktop', () => { const mockDisplay = { id: '1', size: { width: 1920, height: 1080 }, + scaleFactor: 1, }; const mockSource = { display_id: '1', thumbnail: { toPNG: () => Buffer.from('mock-image'), + resize: () => ({ + toPNG: () => Buffer.from('mock-image'), + }), }, }; @@ -57,12 +57,13 @@ describe('Desktop', () => { mockSource as any, ]); - const result = await desktop.screenshot(); + const result = await operator.screenshot(); expect(result).toEqual({ base64: 'bW9jay1pbWFnZQ==', width: 1920, height: 1080, + scaleFactor: 1, }); expect(desktopCapturer.getSources).toHaveBeenCalledWith({ types: ['screen'], diff --git a/src/main/agent/operator.ts b/src/main/agent/operator.ts new file mode 100644 index 000000000..d8c381f9c --- /dev/null +++ b/src/main/agent/operator.ts @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { Key, keyboard } from '@computer-use/nut-js'; +import { type ScreenshotOutput, type ExecuteParams } from '@ui-tars/sdk/core'; +import { NutJSOperator } from '@ui-tars/operator-nut-js'; +import { clipboard } from 'electron'; +import { desktopCapturer } from 'electron'; + +import * as env from '@main/env'; +import { logger } from '@main/logger'; +import { sleep } from '@ui-tars/shared/utils'; +import { getScreenSize } from '@main/utils/screen'; + +export class NutJSElectronOperator extends NutJSOperator { + public async screenshot(): Promise { + const { + physicalSize, + logicalSize, + scaleFactor, + id: primaryDisplayId, + } = getScreenSize(); // Logical = Physical / scaleX + + logger.info( + '[screenshot] [primaryDisplay]', + 'logicalSize:', + logicalSize, + 'scaleFactor:', + scaleFactor, + ); + + const sources = await desktopCapturer.getSources({ + types: ['screen'], + thumbnailSize: { + width: Math.round(logicalSize.width), + height: Math.round(logicalSize.height), + }, + }); + const primarySource = sources.find( + (source) => source.display_id === primaryDisplayId.toString(), + ); + const screenshot = primarySource!.thumbnail; + + const resized = screenshot.resize({ + width: physicalSize.width, + height: physicalSize.height, + }); + + return { + base64: resized.toPNG().toString('base64'), + width: physicalSize.width, + height: physicalSize.height, + scaleFactor, + }; + } + + async execute(params: ExecuteParams): Promise { + const { action_type, action_inputs } = params.parsedPrediction; + + if (action_type === 'type') { + const content = action_inputs.content?.trim(); + logger.info('[device] type', content); + if (content && env.isWindows) { + const stripContent = content.replace(/\\n$/, '').replace(/\n$/, ''); + const originalClipboard = clipboard.readText(); + clipboard.writeText(stripContent); + await keyboard.pressKey(Key.LeftControl, Key.V); + await sleep(50); + await keyboard.releaseKey(Key.LeftControl, Key.V); + await sleep(50); + clipboard.writeText(originalClipboard); + return; + } + } else { + return await super.execute(params); + } + } +} diff --git a/src/main/agent/utils.ts b/src/main/agent/utils.ts deleted file mode 100644 index c6770d8ba..000000000 --- a/src/main/agent/utils.ts +++ /dev/null @@ -1,85 +0,0 @@ -/** - * Copyright (c) 2025 Bytedance, Inc. and its affiliates. - * SPDX-License-Identifier: Apache-2.0 - */ -import { ChatCompletionMessageParam } from 'openai/resources/chat/completions'; - -import { IMAGE_PLACEHOLDER, MAX_IMAGE_LENGTH } from '@ui-tars/shared/constants'; -import { Message } from '@ui-tars/shared/types'; - -import type { VlmRequest } from './llm/base'; - -export const processVlmParams = ({ - conversations, - images, -}: VlmRequest): VlmRequest => { - // Check if the images array exceeds the limit - if (images.length > MAX_IMAGE_LENGTH) { - // Calculate the number of items to remove - const excessCount = images.length - MAX_IMAGE_LENGTH; - - // Remove excess images from the start - images = images.slice(excessCount); - - // Remove corresponding conversations where "value" is "" - let imageCountToRemove = excessCount; - conversations = conversations.filter((convo) => { - if (imageCountToRemove > 0 && convo.value === IMAGE_PLACEHOLDER) { - imageCountToRemove--; - return false; - } - return true; - }); - } - - // Return the processed result - return { images, conversations }; -}; - -export const getSummary = (prediction: string) => - prediction - .replace(/Reflection:[\s\S]*?(?=Action_Summary:|Action:|$)/g, '') - .trim(); - -/** - * 将对话转换为 OpenAI 的 ChatCompletionMessageParam - * @param conversations 对话 - * @param images 图片 - * @returns OpenAI 的 ChatCompletionMessageParam - */ -export const convertToOpenAIMessages = ({ - conversations, - images, -}: { - conversations: Message[]; - images: string[]; -}): Array => { - const messages: Array = []; - let imageIndex = 0; - - conversations.forEach((conv) => { - if (conv.value === IMAGE_PLACEHOLDER) { - // 处理图片消息 - if (imageIndex < images.length) { - messages.push({ - role: 'user', - content: [ - { - type: 'image_url', - image_url: { url: `data:image/png;base64,${images[imageIndex]}` }, - }, - ], - }); - imageIndex++; - } - } else { - // 处理文本消息 - messages.push({ - role: conv.from === 'human' ? 'user' : 'assistant', - content: conv.value, - }); - } - }); - - return messages; -}; diff --git a/src/main/ipcRoutes/screen.ts b/src/main/ipcRoutes/screen.ts index 076929c60..ae0488b87 100644 --- a/src/main/ipcRoutes/screen.ts +++ b/src/main/ipcRoutes/screen.ts @@ -2,17 +2,19 @@ * Copyright (c) 2025 Bytedance, Inc. and its affiliates. * SPDX-License-Identifier: Apache-2.0 */ -import { screen } from 'electron'; import { initIpc } from '@ui-tars/electron-ipc/main'; +import { getScreenSize } from '@main/utils/screen'; const t = initIpc.create(); export const screenRoute = t.router({ getScreenSize: t.procedure.input().handle(async () => { - const primaryDisplay = screen.getPrimaryDisplay(); + const primaryDisplay = getScreenSize(); + return { - screenWidth: primaryDisplay.size.width, - screenHeight: primaryDisplay.size.height, + screenWidth: primaryDisplay.physicalSize.width, + screenHeight: primaryDisplay.physicalSize.height, + scaleFactor: primaryDisplay.scaleFactor, }; }), }); diff --git a/src/main/services/runAgent.ts b/src/main/services/runAgent.ts index e52a262e8..09c82f4f7 100644 --- a/src/main/services/runAgent.ts +++ b/src/main/services/runAgent.ts @@ -7,10 +7,11 @@ import assert from 'assert'; import { logger } from '@main/logger'; import { hideWindowBlock } from '@main/window/index'; import { StatusEnum } from '@ui-tars/shared/types'; - -import { ComputerUseAgent } from '../agent'; -import { Desktop } from '../agent/device'; -import { UITARS } from '../agent/llm/ui-tars'; +import { type ConversationWithSoM } from '@main/shared/types'; +import { GUIAgent, type GUIAgentConfig } from '@ui-tars/sdk'; +import { markClickPosition } from '@main/utils/image'; +import { UTIOService } from '@main/services/utio'; +import { NutJSElectronOperator } from '../agent/operator'; import { getSystemPrompt } from '../agent/prompts'; import { closeScreenMarker, @@ -30,64 +31,113 @@ export const runAgent = async ( logger.info('runAgent'); const settings = SettingStore.getStore(); const { instructions, abortController } = getState(); - const device = new Desktop(); - const vlm = new UITARS(); assert(instructions, 'instructions is required'); const language = settings.language ?? 'en'; - const agent = new ComputerUseAgent({ - systemPrompt: getSystemPrompt(language), - abortController, - instruction: instructions!, - device, - vlm, - }); - showPauseButton(); showScreenWaterFlow(); - agent.on('data', async (data) => { + const handleData: GUIAgentConfig['onData'] = async ({ + data, + }) => { + const lastConv = getState().messages[getState().messages.length - 1]; const { status, conversations, ...restUserData } = data; + logger.info('[status]', status, conversations.length); + + // add SoM to conversations + const conversationsWithSoM: ConversationWithSoM[] = await Promise.all( + conversations.map(async (conv) => { + const { screenshotContext, predictionParsed } = conv; + if ( + lastConv?.screenshotBase64 && + screenshotContext?.size && + predictionParsed + ) { + const screenshotBase64WithElementMarker = await markClickPosition({ + screenshotContext, + base64: lastConv?.screenshotBase64, + parsed: predictionParsed, + }).catch((e) => { + logger.error('[markClickPosition error]:', e); + return ''; + }); + return { + ...conv, + screenshotBase64WithElementMarker, + }; + } + return conv; + }), + ).catch((e) => { + logger.error('[conversationsWithSoM error]:', e); + return conversations; + }); const { screenshotBase64, - screenshotBase64WithElementMarker, predictionParsed, screenshotContext, + screenshotBase64WithElementMarker, ...rest - } = data?.conversations?.[data?.conversations.length - 1] || {}; + } = conversationsWithSoM?.[conversationsWithSoM.length - 1] || {}; logger.info( '======data======\n', predictionParsed, screenshotContext, rest, + status, '\n========', ); - setState({ - ...getState(), - status, - restUserData, - messages: [...(getState().messages || []), ...conversations], - }); - if ( predictionParsed?.length && screenshotContext?.size && !abortController?.signal?.aborted ) { - showPredictionMarker(predictionParsed, screenshotContext.size); + showPredictionMarker(predictionParsed, screenshotContext); } - }); - agent.on('error', (e) => { - logger.error('[runAgent error]', settings, e); + setState({ + ...getState(), + status, + restUserData, + messages: [...(getState().messages || []), ...conversationsWithSoM], + }); + }; + + const guiAgent = new GUIAgent({ + model: { + baseURL: settings.vlmBaseUrl, + apiKey: settings.vlmApiKey, + model: settings.vlmModelName, + }, + systemPrompt: getSystemPrompt(language), + logger, + signal: abortController?.signal, + operator: new NutJSElectronOperator(), + onData: handleData, + onError: ({ error }) => { + logger.error('[runAgent error]', settings, error); + }, + retry: { + model: { + maxRetries: 3, + }, + screenshot: { + maxRetries: 5, + }, + execute: { + maxRetries: 1, + }, + }, }); await hideWindowBlock(async () => { - await agent - .runAgentLoop({ loopWaitTime: () => 800 }) + await UTIOService.getInstance().sendInstruction(instructions); + + await guiAgent + .run(instructions) .catch((e) => { logger.error('[runAgentLoop error]', e); setState({ diff --git a/src/main/shared/setOfMarks.test.ts b/src/main/shared/setOfMarks.test.ts index df795e56e..c50d570c2 100644 --- a/src/main/shared/setOfMarks.test.ts +++ b/src/main/shared/setOfMarks.test.ts @@ -4,7 +4,6 @@ */ import { test, expect } from 'vitest'; import { setOfMarksOverlays } from './setOfMarks'; -// import { sleep } from '@ui-tars/shared/utils'; const testMakeScreenMarker = () => { let xPos; @@ -65,8 +64,11 @@ const testMakeScreenMarker = () => { const { overlays } = setOfMarksOverlays({ predictions: [action], screenshotContext: { - width: 2560, - height: 1440, + size: { + width: 2560, + height: 1440, + }, + scaleFactor: 1, }, xPos, yPos, diff --git a/src/main/shared/setOfMarks.ts b/src/main/shared/setOfMarks.ts index 9e93b8c2f..d1f301069 100644 --- a/src/main/shared/setOfMarks.ts +++ b/src/main/shared/setOfMarks.ts @@ -30,14 +30,14 @@ export const setOfMarksOverlays = ({ yPos, }: { predictions: PredictionParsed[]; - screenshotContext: NonNullable['size']; + screenshotContext: NonNullable; xPos?: number; yPos?: number; }): { overlays: Overlay[]; } => { const overlays: Overlay[] = []; - const { width, height } = screenshotContext; + const { width, height } = screenshotContext?.size || {}; for (const prediction of predictions) { let boxWidth: number; diff --git a/src/main/shared/types.ts b/src/main/shared/types.ts new file mode 100644 index 000000000..4d289c8bb --- /dev/null +++ b/src/main/shared/types.ts @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { Conversation } from '@ui-tars/shared/types'; + +export interface ConversationWithSoM extends Conversation { + screenshotBase64WithElementMarker?: string; +} diff --git a/src/main/store/types.ts b/src/main/store/types.ts index 52f0f6714..02801d366 100644 --- a/src/main/store/types.ts +++ b/src/main/store/types.ts @@ -2,9 +2,10 @@ * Copyright (c) 2025 Bytedance, Inc. and its affiliates. * SPDX-License-Identifier: Apache-2.0 */ -import { ComputerUseUserData } from '@ui-tars/shared/types'; +import { GUIAgentData } from '@ui-tars/shared/types'; import { LocalStore, PresetSource } from './validate'; +import { ConversationWithSoM } from '@main/shared/types'; export type NextAction = | { type: 'key'; text: string } @@ -24,10 +25,10 @@ export type AppState = { theme: 'dark' | 'light'; ensurePermissions: { screenCapture?: boolean; accessibility?: boolean }; instructions: string | null; - restUserData: Omit | null; - status: ComputerUseUserData['status']; + restUserData: Omit | null; + status: GUIAgentData['status']; errorMsg: string | null; - messages: ComputerUseUserData['conversations']; + messages: ConversationWithSoM[]; abortController: AbortController | null; thinking: boolean; }; diff --git a/src/main/utils/coords.test.ts b/src/main/utils/coords.test.ts index c590e26f7..613165891 100644 --- a/src/main/utils/coords.test.ts +++ b/src/main/utils/coords.test.ts @@ -4,7 +4,7 @@ */ import { describe, expect, it } from 'vitest'; -import { FACTOR } from '@main/agent/constant'; +import { FACTOR } from '@ui-tars/sdk/constants'; import { parseBoxToScreenCoords } from './coords'; diff --git a/src/main/utils/coords.ts b/src/main/utils/coords.ts index 74c4f7267..b7db2efcc 100644 --- a/src/main/utils/coords.ts +++ b/src/main/utils/coords.ts @@ -2,7 +2,7 @@ * Copyright (c) 2025 Bytedance, Inc. and its affiliates. * SPDX-License-Identifier: Apache-2.0 */ -import { FACTOR } from '@main/agent/constant'; +import { FACTOR } from '@ui-tars/sdk/constants'; import { parseBoxToScreenCoords as _parseBoxToScreenCoords } from '@ui-tars/shared/utils'; /** diff --git a/src/main/utils/image.test.ts b/src/main/utils/image.test.ts deleted file mode 100644 index ee495d76d..000000000 --- a/src/main/utils/image.test.ts +++ /dev/null @@ -1,65 +0,0 @@ -/** - * Copyright (c) 2025 Bytedance, Inc. and its affiliates. - * SPDX-License-Identifier: Apache-2.0 - */ -import sharp from 'sharp'; -import { describe, expect, it } from 'vitest'; - -import { preprocessResizeImage } from './image'; - -describe('preprocessResizeImage', () => { - const MAX_PIXELS = 512 * 28 * 28; - // Testing util for creating a base64 image - async function createTestImage( - width: number, - height: number, - ): Promise { - const buffer = await sharp({ - create: { - width, - height, - channels: 3, - background: { r: 255, g: 0, b: 0 }, - }, - }) - .png() - .toBuffer(); - return buffer.toString('base64'); - } - - it('should resize image when pixel count exceeds limit', async () => { - // Create a large image (1000x1000 = 1,000,000 pixels) - const largeImage = await createTestImage(1000, 1000); - const result = await preprocessResizeImage(largeImage, MAX_PIXELS); - - // Verify processed image dimensions - const resultBuffer = Buffer.from(result, 'base64'); - const metadata = await sharp(resultBuffer).metadata(); - - // Calculate maximum allowed pixels (512 * 28 * 28 = 401,408) - const processedPixels = metadata.width! * metadata.height!; - - expect(processedPixels).toBeLessThanOrEqual(MAX_PIXELS); - }); - - it('should not resize small images', async () => { - // Create a small image (100x100 = 10,000 pixels) - const smallImage = await createTestImage(100, 100); - const result = await preprocessResizeImage(smallImage, MAX_PIXELS); - - // Verify processed image dimensions - const resultBuffer = Buffer.from(result, 'base64'); - const metadata = await sharp(resultBuffer).metadata(); - - expect(metadata.width).toBe(100); - expect(metadata.height).toBe(100); - }); - - it('should throw error when processing invalid image', async () => { - const invalidBase64 = 'invalid_base64_string'; - - await expect( - preprocessResizeImage(invalidBase64, MAX_PIXELS), - ).rejects.toThrow(); - }); -}); diff --git a/src/main/utils/image.ts b/src/main/utils/image.ts index 0d8e4ab96..ebd754ba3 100644 --- a/src/main/utils/image.ts +++ b/src/main/utils/image.ts @@ -4,80 +4,15 @@ */ import sharp from 'sharp'; -import { type PredictionParsed } from '@ui-tars/shared/types'; +import { Conversation, type PredictionParsed } from '@ui-tars/shared/types'; import { logger } from '@main/logger'; import { setOfMarksOverlays } from '@main/shared/setOfMarks'; -// eslint-disable-next-line @typescript-eslint/require-await -export async function compressBase64Image(base64String: string) { - try { - // 移除 base64 字符串的 header(如:"data:image/jpeg;base64,") - const base64Data = base64String.replace(/^data:image\/\w+;base64,/, ''); - - // 将 base64 转换为 buffer - const imageBuffer = Buffer.from(base64Data, 'base64'); - - // 创建 sharp 实例 - const image = sharp(imageBuffer); - - // 获取图片格式信息 - const metadata = await image.metadata(); - - // 根据原始图片格式选择合适的压缩方式 - let compressedImageBuffer; - if (metadata.format === 'png') { - compressedImageBuffer = await image - .png({ compressionLevel: 9 }) - .withMetadata() - .toBuffer(); - } - - logger.debug( - '[metadata]', - 'width:', - metadata.width, - 'height:', - metadata.height, - 'origin_size:', - `${(imageBuffer.length / 1024).toFixed(2)}KB`, - 'compressed_size:', - `${(compressedImageBuffer.length / 1024).toFixed(2)}KB`, - ); - - return compressedImageBuffer.toString('base64'); - } catch (error) { - logger.error('压缩图片时出错:', error); - // throw error; - return base64String; - } -} - -export async function getImageDimensions(base64String) { - // 移除 base64 字符串的 data:image 前缀部分 - const base64Image = base64String.replace(/^data:image\/\w+;base64,/, ''); - - // 将 base64 转换为 buffer - const imageBuffer = Buffer.from(base64Image, 'base64'); - - try { - // 使用 sharp 获取图片信息 - const metadata = await sharp(imageBuffer).metadata(); - - return { - width: metadata.width, - height: metadata.height, - }; - } catch (error) { - logger.error('获取图片尺寸失败:', error); - throw error; - } -} - +// TODO: use jimp to mark click position export async function markClickPosition(data: { base64: string; - width: number; - height: number; + screenshotContext: NonNullable; parsed: PredictionParsed[]; }): Promise { if (!data?.parsed?.length) { @@ -87,10 +22,7 @@ export async function markClickPosition(data: { const imageBuffer = Buffer.from(data.base64, 'base64'); const { overlays = [] } = setOfMarksOverlays({ predictions: data.parsed, - screenshotContext: { - width: data.width, - height: data.height, - }, + screenshotContext: data.screenshotContext, }); const imageOverlays: sharp.OverlayOptions[] = overlays .map((o) => { @@ -118,59 +50,3 @@ export async function markClickPosition(data: { return ''; } } - -/** - * Preprocess image: If the image exceeds/falls below the pixel limit, calculate a resize factor `resize_factor` to scale the image down to equal or fewer than max_pixels. This scaling factor is calculated by taking the square root, ensuring aspect ratio preservation, allowing original relative coordinates to be reused without conversion. - * @param image_base64 The base64 encoded image - * @returns The base64 encoded processed image - */ -export async function preprocessResizeImage( - image_base64: string, - maxPixels: number, -): Promise { - try { - // base64 to buffer - const imageBuffer = Buffer.from(image_base64, 'base64'); - - // get image info - const metadata = await sharp(imageBuffer).metadata(); - if (!metadata.width || !metadata.height) { - throw new Error('can not get image size'); - } - - // calculate resize factor - const currentPixels = metadata.width * metadata.height; - if (currentPixels > maxPixels) { - const resizeFactor = Math.sqrt(maxPixels / currentPixels); - - const newWidth = Math.floor(metadata.width * resizeFactor); - const newHeight = Math.floor(metadata.height * resizeFactor); - - // resize image and convert to RGB format - const processedImage = await sharp(imageBuffer) - .resize(newWidth, newHeight) - .png({ - quality: 75, - compressionLevel: 9, - }) - .toBuffer(); - - logger.debug( - '[preprocessResizeImage]', - 'width:', - newWidth, - 'height:', - newHeight, - 'size:', - `${(processedImage.length / 1024).toFixed(2)}KB`, - ); - - return processedImage.toString('base64'); - } - - return image_base64; - } catch (error) { - logger.error('preprocessResizeImage error:', error); - throw error; - } -} diff --git a/src/main/utils/screen.ts b/src/main/utils/screen.ts new file mode 100644 index 000000000..7eaf751d1 --- /dev/null +++ b/src/main/utils/screen.ts @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { screen } from 'electron'; + +import * as env from '@main/env'; + +export const getScreenSize = () => { + const primaryDisplay = screen.getPrimaryDisplay(); + + const logicalSize = primaryDisplay.size; // Logical = Physical / scaleX + // Mac retina display scaleFactor = 1 + const scaleFactor = env.isMacOS ? 1 : primaryDisplay.scaleFactor; + + const physicalSize = { + width: Math.round(logicalSize.width * scaleFactor), + height: Math.round(logicalSize.height * scaleFactor), + }; + + return { + id: primaryDisplay.id, + physicalSize, + logicalSize, + scaleFactor, + }; +}; diff --git a/src/main/window/ScreenMarker.ts b/src/main/window/ScreenMarker.ts index 4b7ef6b24..61a41ba24 100644 --- a/src/main/window/ScreenMarker.ts +++ b/src/main/window/ScreenMarker.ts @@ -199,7 +199,7 @@ class ScreenMarker { // show Screen Marker in screen for prediction showPredictionMarker( predictions: PredictionParsed[], - screenshotContext: NonNullable['size'], + screenshotContext: NonNullable, ) { const { overlays } = setOfMarksOverlays({ predictions, @@ -207,11 +207,12 @@ class ScreenMarker { xPos: this.lastShowPredictionMarkerPos?.xPos, yPos: this.lastShowPredictionMarkerPos?.yPos, }); + const { scaleFactor = 1 } = screenshotContext; // loop predictions for (let i = 0; i < overlays.length; i++) { const overlay = overlays[i]; - logger.info('[showPredictionMarker] prediction', overlay); + // logger.info('[showPredictionMarker] prediction', overlay); try { this.closeOverlay(); @@ -230,8 +231,9 @@ class ScreenMarker { webPreferences: { nodeIntegration: true, contextIsolation: false }, ...(overlay.xPos && overlay.yPos && { - x: overlay.xPos + overlay.offsetX, - y: overlay.yPos + overlay.offsetY, + // Logical Resolution + x: (overlay.xPos + overlay.offsetX) * scaleFactor, + y: (overlay.yPos + overlay.offsetY) * scaleFactor, }), }); @@ -309,7 +311,7 @@ export const closeScreenMarker = () => { export const showPredictionMarker = ( predictions: PredictionParsed[], - screenshotContext: NonNullable['size'], + screenshotContext: NonNullable, ) => { ScreenMarker.getInstance().showPredictionMarker( predictions, diff --git a/src/renderer/index.html b/src/renderer/index.html index 6b1415ba2..db907b57c 100644 --- a/src/renderer/index.html +++ b/src/renderer/index.html @@ -6,11 +6,11 @@ UI-TARS Desktop + + +

    @agent-infra/logger Browser Example

    + +
    + + + + + + +
    + +

    Output

    +

    Check your browser's console (F12 or right-click > Inspect > Console)

    + +

    Code Snippet

    +
    +import { ConsoleLogger } from '../dist/index.mjs';
    +
    +// Create a logger instance
    +const logger = new ConsoleLogger('[Browser]');
    +
    +// Basic logging
    +logger.info('This is an info message');
    +logger.warn('This is a warning message');
    +logger.error('This is an error message');
    +logger.success('This is a success message');
    +
    +// Logging with data
    +logger.infoWithData('User data:', 
    +  { id: 1, name: 'John', email: 'john@example.com' },
    +  (user) => ({ ...user, email: '***@example.com' })
    +);
    +
    +// Hierarchical logging
    +const apiLogger = logger.spawn('API');
    +apiLogger.info('API request received');
    +  
    + + + + \ No newline at end of file diff --git a/packages/agent-infra/logger/examples/node.js b/packages/agent-infra/logger/examples/node.js new file mode 100644 index 000000000..0efcc8ba7 --- /dev/null +++ b/packages/agent-infra/logger/examples/node.js @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ + +// ESM example for Node.js +import { ConsoleLogger } from '../dist/index.mjs'; + +// Create a logger instance +const logger = new ConsoleLogger('[Node]'); + +// Basic logging +logger.info('This is an info message'); +logger.warn('This is a warning message'); +logger.error('This is an error message'); +logger.success('This is a success message'); + +// Logging with data +logger.infoWithData( + 'User data:', + { id: 1, name: 'John', email: 'john@example.com' }, + (user) => ({ ...user, email: '***@example.com' }), +); + +// Hierarchical logging +const dbLogger = logger.spawn('DB'); + +dbLogger.info('Connected to database'); diff --git a/packages/agent-infra/logger/media/browser.png b/packages/agent-infra/logger/media/browser.png new file mode 100644 index 0000000000000000000000000000000000000000..9b90ee66ce4cefde592fe06974090da19d2e44f7 GIT binary patch literal 63963 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

    D{!g@_-9RJ4k(-Nw}WUV-ycsMYdaHoOS>E= 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 literal 0 HcmV?d00001 diff --git a/packages/agent-infra/logger/media/node.png b/packages/agent-infra/logger/media/node.png new file mode 100644 index 0000000000000000000000000000000000000000..557829eeed24e1998cf88e77258e40c917c1670b GIT binary patch literal 47165 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¨HR=655)Ol(^YvUo40A~elM9ueg5_7X5XEA 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 A = {}; +Object.entries(CSS_COLOR_VALUES).forEach(([key, value]) => { + CSS_COLORS[key] = `color: ${value}`; +}); + +export type ColorName = keyof typeof ANSI_COLORS; + +/** + * Adds color to text in both Node.js and browser environments + * Returns formatted text for Node.js or special format for browser console + * + * @param text - The text to colorize + * @param color - The color to apply + * @returns Colorized text string + */ +export function colorize(text: string, color: ColorName): string { + if (!text) return text; + + if (isBrowser) { + // For browser, we still return the original text + // The actual coloring happens in the log function + return text; + } + + // In Node.js environment, add ANSI color codes if supported + if (supportsColor && ANSI_COLORS[color]) { + return `${ANSI_COLORS[color]}${text}${ANSI_COLORS.reset}`; + } + + // Return original text in environments without color support + return text; +} + +/** + * Logs colored text in both browser and Node.js environments + * Ensures consistent behavior across platforms + * + * @param text - The text to log with color + * @param color - The color to apply + */ +export function colorLog(text: string, color: ColorName): void { + if (isBrowser && CSS_COLORS[color]) { + console.log(`%c${text}`, CSS_COLORS[color]); + } else if (supportsColor) { + console.log(colorize(text, color)); + } else { + console.log(text); + } +} diff --git a/packages/agent-infra/logger/src/console-logger.ts b/packages/agent-infra/logger/src/console-logger.ts new file mode 100644 index 000000000..3be0de292 --- /dev/null +++ b/packages/agent-infra/logger/src/console-logger.ts @@ -0,0 +1,226 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ + +import { BaseLogger, ColorName, LogLevel } from './types'; +import { colorize, colorLog, CSS_COLOR_VALUES } from './colorize'; + +export class ConsoleLogger extends BaseLogger { + private prefix: string; + private lastPrefixColor: ColorName | null = null; + private level: LogLevel = LogLevel.INFO; + + /** + * Creates a new console logger instance + * + * @param prefix - Optional prefix to prepend to all log messages + * @param level - Initial log level (defaults to INFO) + */ + constructor(prefix = '', level: LogLevel = LogLevel.INFO) { + super(); + this.prefix = prefix; + this.level = level; + } + + /** + * Applies color to the prefix based on log type + * + * @param prefix - The prefix string to colorize + * @param type - Optional log type to determine color + * @returns Colorized prefix string + * @private + */ + private colorPrefix( + prefix: string, + type?: 'info' | 'warn' | 'error' | 'success', + ): string { + if (!prefix) return ''; + + let color: ColorName = 'gray'; + switch (type) { + case 'info': + color = 'blue'; + break; + case 'warn': + color = 'yellow'; + break; + case 'error': + color = 'red'; + break; + case 'success': + color = 'green'; + break; + } + + const isBrowser = + typeof window !== 'undefined' && typeof window.document !== 'undefined'; + + if (isBrowser) { + this.lastPrefixColor = color; + return prefix; + } + + return colorize(prefix, color); + } + + /** + * Basic log method (equivalent to console.log) + * Only outputs if log level is DEBUG or lower + * + * @param args - Arguments to log + */ + log(...args: any[]): void { + if (this.level <= LogLevel.DEBUG) { + console.log(this.colorPrefix(this.prefix), ...args); + } + } + + /** + * Logs informational messages + * Only outputs if log level is INFO or lower + * + * @param args - Arguments to log + */ + info(...args: any[]): void { + if (this.level <= LogLevel.INFO) { + const prefix = this.colorPrefix(this.prefix, 'info'); + + if (typeof window !== 'undefined' && this.lastPrefixColor) { + console.log( + `%c${prefix}%c`, + `color: ${CSS_COLOR_VALUES[this.lastPrefixColor]}`, + 'color: inherit', + ...args, + ); + this.lastPrefixColor = null; + } else { + console.log(`${prefix}`, ...args); + } + } + } + + /** + * Logs warning messages + * Only outputs if log level is WARN or lower + * + * @param args - Arguments to log + */ + warn(...args: any[]): void { + if (this.level <= LogLevel.WARN) { + const prefix = this.colorPrefix(this.prefix, 'warn'); + + if (typeof window !== 'undefined' && this.lastPrefixColor) { + console.warn( + `%c${prefix}%c`, + `color: ${CSS_COLOR_VALUES[this.lastPrefixColor]}`, + 'color: inherit', + ...args, + ); + this.lastPrefixColor = null; + } else { + console.warn(`${prefix}`, ...args); + } + } + } + + /** + * Logs error messages + * Only outputs if log level is ERROR or lower + * + * @param args - Arguments to log + */ + error(...args: any[]): void { + if (this.level <= LogLevel.ERROR) { + const prefix = this.colorPrefix(this.prefix, 'error'); + + if (typeof window !== 'undefined' && this.lastPrefixColor) { + console.error( + `%c${prefix}%c`, + `color: ${CSS_COLOR_VALUES[this.lastPrefixColor]}`, + 'color: inherit', + ...args, + ); + this.lastPrefixColor = null; + } else { + console.error(`${prefix}`, ...args); + } + } + } + + /** + * Logs success messages + * Only outputs if log level is SUCCESS or lower + * + * @param message - Success message to display + */ + success(message: string): void { + if (this.level <= LogLevel.SUCCESS) { + const prefix = this.colorPrefix(this.prefix, 'success'); + + if (typeof window !== 'undefined' && this.lastPrefixColor) { + console.log( + `%c${prefix}%c ${message}`, + `color: ${CSS_COLOR_VALUES[this.lastPrefixColor]}`, + 'color: inherit', + ); + this.lastPrefixColor = null; + } else { + console.log(`${prefix} ${message}`); + } + } + } + + /** + * Logs a message with associated structured data + * Optionally transforms the data before logging + * Only outputs if log level is INFO or lower + * + * @param message - The message to log + * @param data - Optional structured data to log + * @param transformer - Optional function to transform data before logging + */ + infoWithData( + message: string, + data?: T, + transformer?: (value: T) => any, + ): void { + if (this.level <= LogLevel.INFO) { + this.info(message); + if (data) { + console.log(transformer ? transformer(data) : data); + } + } + } + + /** + * Creates a child logger with a nested prefix + * + * @param prefix - Prefix for the child logger + * @returns A new ConsoleLogger instance with combined prefix + */ + spawn(prefix: string): ConsoleLogger { + const newPrefix = this.prefix ? `${this.prefix}:${prefix}` : prefix; + // Pass the current log level to the child logger + return new ConsoleLogger(newPrefix, this.level); + } + + /** + * Sets the current log level + * + * @param level - New log level to set + */ + setLevel(level: LogLevel): void { + this.level = level; + } + + /** + * Gets the current log level + * + * @returns Current log level + */ + getLevel(): LogLevel { + return this.level; + } +} diff --git a/packages/agent-infra/logger/src/index.ts b/packages/agent-infra/logger/src/index.ts new file mode 100644 index 000000000..3024d7c50 --- /dev/null +++ b/packages/agent-infra/logger/src/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './types'; +export * from './console-logger'; +export { colorize, colorLog } from './colorize'; diff --git a/packages/agent-infra/logger/src/types.ts b/packages/agent-infra/logger/src/types.ts new file mode 100644 index 000000000..050e74e45 --- /dev/null +++ b/packages/agent-infra/logger/src/types.ts @@ -0,0 +1,130 @@ +/* eslint-disable @typescript-eslint/no-empty-function */ +/* eslint-disable @typescript-eslint/no-explicit-any */ + +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ + +export type { ColorName } from './colorize'; + +/** + * Log levels in order of increasing severity + */ +export enum LogLevel { + /** Most verbose level, includes all logs */ + DEBUG = 0, + /** Standard information messages */ + INFO = 1, + /** Success messages and operations */ + SUCCESS = 2, + /** Warning messages */ + WARN = 3, + /** Error messages */ + ERROR = 4, + /** No logs will be displayed */ + SILENT = 5, +} + +/** + * Core logger interface defining the required methods for all logger implementations + */ +export interface Logger { + /** + * Basic logging method (equivalent to console.log) + * @param args - Arguments to log + */ + log(...args: any[]): void; + + /** + * Log informational messages + * @param args - Arguments to log + */ + info(...args: any[]): void; + + /** + * Log warning messages + * @param args - Arguments to log + */ + warn(...args: any[]): void; + + /** + * Log error messages + * @param args - Arguments to log + */ + error(...args: any[]): void; + + /** + * Log success messages with green color + * @param message - Success message to display + */ + success(message: string): void; + + /** + * Log a message with associated structured data + * @param message - The message to log + * @param data - Optional structured data to log + * @param transformer - Optional function to transform data before logging + */ + infoWithData( + message: string, + data?: T, + transformer?: (value: T) => any, + ): void; + + /** + * Create a new logger with additional prefix + * @param subPrefix - Prefix to add to the new logger + * @returns A new logger instance with the combined prefix + */ + spawn(subPrefix: string): Logger; + + /** + * Set the current log level + * @param level - New log level to set + */ + setLevel(level: LogLevel): void; + + /** + * Get the current log level + * @returns Current log level + */ + getLevel(): LogLevel; +} + +/** + * Base implementation of Logger interface with no-op methods. + * Useful as a fallback or for extending to create custom loggers. + */ +export class BaseLogger implements Logger { + log(...args: any[]): void {} + + info(...args: any[]): void {} + + warn(...args: any[]): void {} + + error(...args: any[]): void {} + + success(message: string): void {} + + infoWithData( + message: string, + data?: T, + transformer?: (value: T) => any, + ): void {} + + spawn(subPrefix: string): Logger { + return new BaseLogger(); + } + + setLevel(level: LogLevel): void {} + + getLevel(): LogLevel { + return LogLevel.INFO; + } +} + +/** + * Default no-op logger instance + */ +export const defaultLogger = new BaseLogger(); diff --git a/packages/agent-infra/logger/tsconfig.json b/packages/agent-infra/logger/tsconfig.json new file mode 100644 index 000000000..7482ba59b --- /dev/null +++ b/packages/agent-infra/logger/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "moduleResolution": "node", + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "outDir": "./dist", + "strict": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "isolatedModules": true, + "skipLibCheck": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3d6fe74b4..fcedcff66 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -347,6 +347,49 @@ importers: specifier: 34.1.1 version: 34.1.1 + packages/agent-infra/logger: + devDependencies: + '@rslib/core': + specifier: 0.5.3 + version: 0.5.3(typescript@4.9.4) + '@types/node': + specifier: 20.14.8 + version: 20.14.8 + typescript: + specifier: 4.9.4 + version: 4.9.4 + + packages/agent-infra/shared: + dependencies: + '@types/turndown': + specifier: ^5.0.5 + version: 5.0.5 + turndown: + specifier: ^7.2.0 + version: 7.2.0 + turndown-plugin-gfm: + specifier: ^1.0.2 + version: 1.0.2 + devDependencies: + '@mozilla/readability': + specifier: ^0.5.0 + version: 0.5.0 + '@rslib/core': + specifier: 0.5.3 + version: 0.5.3(typescript@4.9.4) + '@types/node': + specifier: 20.14.8 + version: 20.14.8 + ts-node: + specifier: 10.9.2 + version: 10.9.2(@types/node@20.14.8)(typescript@4.9.4) + typescript: + specifier: 4.9.4 + version: 4.9.4 + vitest: + specifier: 3.0.7 + version: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4) + packages/common/configs: devDependencies: '@rslib/core': @@ -620,60 +663,118 @@ packages: '@anthropic-ai/sdk@0.27.3': resolution: {integrity: sha512-IjLt0gd3L4jlOfilxVXTifn42FnVffMgDC04RJK1KDZpmkBWLv0XC92MVVmkxrFZNS/7l3xWgP/I3nqtX1sQHw==} + '@ast-grep/napi-darwin-arm64@0.35.0': + resolution: {integrity: sha512-T+MN4Oinc+sXjXCIHzfxDDWY7r2pKgPxM6zVeVlkMTrJV2mJtyKYBIS+CABhRM6kflps2T2I6l4DGaKV/8Ym9w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + '@ast-grep/napi-darwin-arm64@0.36.0': resolution: {integrity: sha512-DCVAQM6U39xa6jcSGNtNNzdruA3S9MUBRzZ/lUlVYUzOy+BwpJTdZb+xXFI8NxygTm/jA54LtnIrbEqpFJvOOg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] + '@ast-grep/napi-darwin-x64@0.35.0': + resolution: {integrity: sha512-pEYiN6JI1HY2uWhMYJ9+3yIMyVYKuYdFzeD+dL7odA3qzK0o9N9AM3/NOt4ynU2EhufaWCJr0P5NoQ636qN6MQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + '@ast-grep/napi-darwin-x64@0.36.0': resolution: {integrity: sha512-vieCkPTITrkEZqInKXRdneLri7sOn3Lq6VfnqhvYHwV7nUS05UKPS2bbQ/N76rNRfz/BdsOmWSUvz9V9RLH+BA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] + '@ast-grep/napi-linux-arm64-gnu@0.35.0': + resolution: {integrity: sha512-NBuzQngABGKz7lhG08IQb+7nPqUx81Ol37xmS3ZhVSdSgM0mtp93rCbgFTkJcAFE8IMfCHQSg7G4g0Iotz4ABQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + '@ast-grep/napi-linux-arm64-gnu@0.36.0': resolution: {integrity: sha512-h2TqS1FZyLf0LcbC1EM6jMd3jsLqzoysx67r3H0sen7FK9drrPdZfCvnn4dqi/oF8YuWo5X4X3TxfhAsQCUACA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + '@ast-grep/napi-linux-arm64-musl@0.35.0': + resolution: {integrity: sha512-1EcvHPwyWpCL/96LuItBYGfeI5FaMTRvL+dHbO/hL5q1npqbb5qn+ppJwtNOjTPz8tayvgggxVk9T4C2O7taYA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + '@ast-grep/napi-linux-arm64-musl@0.36.0': resolution: {integrity: sha512-Be5dnZ7n/7XxHj5cjFmEVkht9v5OD5Yi9RNDEkirFhMoh6VEYVcn236z9xY4N5ET2OKw4xAbQ3//8qzGaqcViQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + '@ast-grep/napi-linux-x64-gnu@0.35.0': + resolution: {integrity: sha512-FDzNdlqmQnsiWXhnLxusw5AOfEcEM+5xtmrnAf3SBRFr86JyWD9qsynnFYC2pnP9hlMfifNH2TTmMpyGJW49Xw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + '@ast-grep/napi-linux-x64-gnu@0.36.0': resolution: {integrity: sha512-sNjf8JhX2d7Le5OrpQ98oyfNNZJcFHBtOa9x1IbUI1lkcAKPa4w/kT1fG+1e3B6n53PqCjnceArb6P0q6n7++g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + '@ast-grep/napi-linux-x64-musl@0.35.0': + resolution: {integrity: sha512-wlmndjfBafT8u5p4DBnoRQyoCSGNuVSz7rT3TqhvlHcPzUouRWMn95epU9B1LNLyjXvr9xHeRjSktyCN28w57Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + '@ast-grep/napi-linux-x64-musl@0.36.0': resolution: {integrity: sha512-mZMCJkoMnrTNaYPCJA1NFzw4isiWGBntSMvYalfQRQsD0D1RCEYSI9k8mtaLvH8Bbe5CreNMkvHk0Nlvm5ku4A==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + '@ast-grep/napi-win32-arm64-msvc@0.35.0': + resolution: {integrity: sha512-gkhJeYc4rrZLX2icLxalPikTLMR57DuIYLwLr9g+StHYXIsGHrbfrE6Nnbdd8Izfs34ArFCrcwdaMrGlvOPSeg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + '@ast-grep/napi-win32-arm64-msvc@0.36.0': resolution: {integrity: sha512-uTYt+l058dHOSG5o8covRz0ORhoCb+3YJEt+c6fsDTvFiwdCkbyEqk2GOwGhEKYw3o8IMQYkTfCtM2276r3VJg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] + '@ast-grep/napi-win32-ia32-msvc@0.35.0': + resolution: {integrity: sha512-OdUuRa3chHCZ65y+qALfkUjz0W0Eg21YZ9TyPquV5why07M6HAK38mmYGzLxFH6294SvRQhs+FA/rAfbKeH0jA==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + '@ast-grep/napi-win32-ia32-msvc@0.36.0': resolution: {integrity: sha512-+q70W4LADdyN55oe/Z9dypxQV3EE/yez98HD35L607HEXT7xDfknANNtT2u/fKl36KRb04g4S01VoTTOpS1Pkg==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] + '@ast-grep/napi-win32-x64-msvc@0.35.0': + resolution: {integrity: sha512-pcQRUHqbroTN1oQ56V982a7IZTUUySQYWa2KEyksiifHGuBuitlzcyzFGjT96ThcqD9XW0UVJMvpoF2Qjh006Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + '@ast-grep/napi-win32-x64-msvc@0.36.0': resolution: {integrity: sha512-vIk3PcXJYQr3/4CrEN5P4VqUXME+dnoJeiu505448zYEYUmWVktHVIrcev1isflGbTc9OYgb0pHln06hBhQUSw==} engines: {node: '>= 10'} cpu: [x64] os: [win32] + '@ast-grep/napi@0.35.0': + resolution: {integrity: sha512-3ucaaSxV6fxXoqHrE/rxAvP1THnDdY5jNzGlnvx+JvnY9C/dSRKc0jlRMRz59N3El572+/yNRUUpAV1T9aBJug==} + engines: {node: '>= 10'} + '@ast-grep/napi@0.36.0': resolution: {integrity: sha512-po7sndAfW53voskEV/5bwfiigfQYBW0ESiSmVpYthl2zXja8xuGj47vIPa2IMMjdCGCxoLKfAE1U/aKOHEn0BQ==} engines: {node: '>= 10'} @@ -2246,6 +2347,9 @@ packages: peerDependencies: zod: '>= 3' + '@mixmark-io/domino@2.2.0': + resolution: {integrity: sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==} + '@module-federation/error-codes@0.8.4': resolution: {integrity: sha512-55LYmrDdKb4jt+qr8qE8U3al62ZANp3FhfVaNPOaAmdTh0jHdD8M3yf5HKFlr5xVkVO4eV/F/J2NCfpbh+pEXQ==} @@ -2261,6 +2365,10 @@ packages: '@module-federation/webpack-bundler-runtime@0.8.4': resolution: {integrity: sha512-HggROJhvHPUX7uqBD/XlajGygMNM1DG0+4OAkk8MBQe4a18QzrRNzZt6XQbRTSG4OaEoyRWhQHvYD3Yps405tQ==} + '@mozilla/readability@0.5.0': + resolution: {integrity: sha512-Z+CZ3QaosfFaTqvhQsIktyGrjFjSC0Fa4EMph4mqKnWhmyoGICsV/8QK+8HpXut6zV7zwfWwqDmEjtk1Qf6EgQ==} + engines: {node: '>=14.0.0'} + '@mswjs/interceptors@0.37.6': resolution: {integrity: sha512-wK+5pLK5XFmgtH3aQ2YVvA3HohS3xqV/OxuVOdNx9Wpnz7VE/fnC+e1A7ln6LFYeck7gOJ/dsZV6OLplOtAJ2w==} engines: {node: '>=18'} @@ -2475,6 +2583,19 @@ packages: engines: {node: '>=16.7.0'} hasBin: true + '@rslib/core@0.5.3': + resolution: {integrity: sha512-HlFGd4PZ4kJDrGZ4VBPIglGPjsTI+LuVWTaFg/hrmElnmXpw3iq0Oln5Esv24L3VBofyvZGPMlu1fZTiqTPzcw==} + engines: {node: '>=16.7.0'} + hasBin: true + peerDependencies: + '@microsoft/api-extractor': ^7 + typescript: ^5 + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + typescript: + optional: true + '@rslib/core@0.5.4': resolution: {integrity: sha512-rJ+wG++/Y8SbyuJB1RhlgnOUPzsxubD0lBivZWXVhOGawAea7mUoI4kZQ6YmF0iybW1QA61wHOf3FY+R1BxvgQ==} engines: {node: '>=16.7.0'} @@ -2695,6 +2816,9 @@ packages: '@types/node@18.19.75': resolution: {integrity: sha512-UIksWtThob6ZVSyxcOqCLOUNg/dyO1Qvx4McgeuhrEtHTLFTf7BBhEazaE4K806FGTPtzd/2sE90qn4fVr7cyw==} + '@types/node@20.14.8': + resolution: {integrity: sha512-DO+2/jZinXfROG7j7WKFn/3C6nFwxy2lLpgLjEXJz+0XKphZlTLJ14mo8Vfg8X5BWN6XjyESXq+LcYdT7tR3bA==} + '@types/node@20.17.17': resolution: {integrity: sha512-/WndGO4kIfMicEQLTi/mDANUu/iVUhT7KboZPdEqqHQ4aTS+3qT3U5gIqWDFV+XouorjfgGqvKILJeHhuQgFYg==} @@ -2727,6 +2851,9 @@ packages: '@types/tough-cookie@4.0.5': resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + '@types/turndown@5.0.5': + resolution: {integrity: sha512-TL2IgGgc7B5j78rIccBtlYAnkuv8nUQqhQc+DSYV5j9Be9XOcm/SKOVRuA47xAVI3680Tk9B1d8flK2GWT2+4w==} + '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} @@ -2887,6 +3014,9 @@ packages: '@vitest/expect@3.0.5': resolution: {integrity: sha512-nNIOqupgZ4v5jWuQx2DSlHLEs7Q4Oh/7AYwNyE+k0UQzG7tSmjPXShUikn1mpNGzYEN2jJbTvLejwShMitovBA==} + '@vitest/expect@3.0.7': + resolution: {integrity: sha512-QP25f+YJhzPfHrHfYHtvRn+uvkCFCqFtW9CktfBxmB+25QqWsx7VB2As6f4GmwllHLDhXNHvqedwhvMmSnNmjw==} + '@vitest/mocker@3.0.5': resolution: {integrity: sha512-CLPNBFBIE7x6aEGbIjaQAX03ZZlBMaWwAjBdMkIf/cAn6xzLTiM3zYqO/WAbieEjsAZir6tO71mzeHZoodThvw==} peerDependencies: @@ -2898,21 +3028,50 @@ packages: vite: optional: true + '@vitest/mocker@3.0.7': + resolution: {integrity: sha512-qui+3BLz9Eonx4EAuR/i+QlCX6AUZ35taDQgwGkK/Tw6/WgwodSrjN1X2xf69IA/643ZX5zNKIn2svvtZDrs4w==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + '@vitest/pretty-format@3.0.5': resolution: {integrity: sha512-CjUtdmpOcm4RVtB+up8r2vVDLR16Mgm/bYdkGFe3Yj/scRfCpbSi2W/BDSDcFK7ohw8UXvjMbOp9H4fByd/cOA==} + '@vitest/pretty-format@3.0.7': + resolution: {integrity: sha512-CiRY0BViD/V8uwuEzz9Yapyao+M9M008/9oMOSQydwbwb+CMokEq3XVaF3XK/VWaOK0Jm9z7ENhybg70Gtxsmg==} + + '@vitest/pretty-format@3.0.8': + resolution: {integrity: sha512-BNqwbEyitFhzYMYHUVbIvepOyeQOSFA/NeJMIP9enMntkkxLgOcgABH6fjyXG85ipTgvero6noreavGIqfJcIg==} + '@vitest/runner@3.0.5': resolution: {integrity: sha512-BAiZFityFexZQi2yN4OX3OkJC6scwRo8EhRB0Z5HIGGgd2q+Nq29LgHU/+ovCtd0fOfXj5ZI6pwdlUmC5bpi8A==} + '@vitest/runner@3.0.7': + resolution: {integrity: sha512-WeEl38Z0S2ZcuRTeyYqaZtm4e26tq6ZFqh5y8YD9YxfWuu0OFiGFUbnxNynwLjNRHPsXyee2M9tV7YxOTPZl2g==} + '@vitest/snapshot@3.0.5': resolution: {integrity: sha512-GJPZYcd7v8QNUJ7vRvLDmRwl+a1fGg4T/54lZXe+UOGy47F9yUfE18hRCtXL5aHN/AONu29NGzIXSVFh9K0feA==} + '@vitest/snapshot@3.0.7': + resolution: {integrity: sha512-eqTUryJWQN0Rtf5yqCGTQWsCFOQe4eNz5Twsu21xYEcnFJtMU5XvmG0vgebhdLlrHQTSq5p8vWHJIeJQV8ovsA==} + '@vitest/spy@3.0.5': resolution: {integrity: sha512-5fOzHj0WbUNqPK6blI/8VzZdkBlQLnT25knX0r4dbZI9qoZDf3qAdjoMmDcLG5A83W6oUUFJgUd0EYBc2P5xqg==} + '@vitest/spy@3.0.7': + resolution: {integrity: sha512-4T4WcsibB0B6hrKdAZTM37ekuyFZt2cGbEGd2+L0P8ov15J1/HUsUaqkXEQPNAWr4BtPPe1gI+FYfMHhEKfR8w==} + '@vitest/utils@3.0.5': resolution: {integrity: sha512-N9AX0NUoUtVwKwy21JtwzaqR5L5R5A99GAbrHfCCXK1lp593i/3AZAXhSP43wRQuxYsflrdzEfXZFo1reR1Nkg==} + '@vitest/utils@3.0.7': + resolution: {integrity: sha512-xePVpCRfooFX3rANQjwoditoXgWb1MaFbzmGuPP59MK6i13mrnDw/yEIyJudLeW6/38mCNcwCiJIGmpDPibAIg==} + '@vue/compiler-core@3.5.13': resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} @@ -3276,6 +3435,10 @@ packages: resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} engines: {node: '>=12'} + chai@5.2.0: + resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} + engines: {node: '>=12'} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -6080,6 +6243,19 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rsbuild-plugin-dts@0.5.3: + resolution: {integrity: sha512-NLy2oKyStcM89CwSdgQUu10BlNTpZieshGj7p7w/sge9VM7aADp8mUqo86bDKX4ITMMACLTO6Q/VQmp9B/1tMg==} + engines: {node: '>=16.7.0'} + peerDependencies: + '@microsoft/api-extractor': ^7 + '@rsbuild/core': 1.x + typescript: ^5 + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + typescript: + optional: true + rsbuild-plugin-dts@0.5.4: resolution: {integrity: sha512-8z4gC7/vj2acLb5zdkgQ4N6l4EnFqC16x3tcqkkpsv/C+2W2Jyr6SKHRWbfWrki/hiv9K5WansHlsmL7TKC+BQ==} engines: {node: '>=16.7.0'} @@ -6766,6 +6942,12 @@ packages: turbo-stream@2.4.0: resolution: {integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==} + turndown-plugin-gfm@1.0.2: + resolution: {integrity: sha512-vwz9tfvF7XN/jE0dGoBei3FXWuvll78ohzCZQuOb+ZjWrs3a0XhQVomJEb2Qh4VHTPNRO4GPZh0V7VRbiWwkRg==} + + turndown@7.2.0: + resolution: {integrity: sha512-eCZGBN4nNNqM9Owkv9HAtWRYfLA4h909E/WGAWWBpmB275ehNhZyk87/Tpvjbp0jjNl9XwCsbe6bm6CqFsgD+A==} + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -6813,6 +6995,11 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} + typescript@4.9.4: + resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==} + engines: {node: '>=4.2.0'} + hasBin: true + typescript@5.7.3: resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} engines: {node: '>=14.17'} @@ -6949,6 +7136,11 @@ packages: engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true + vite-node@3.0.7: + resolution: {integrity: sha512-2fX0QwX4GkkkpULXdT1Pf4q0tC1i1lFOyseKoonavXUNlQ77KpW2XqBGGNIm/J4Ows4KxgGJzDguYVPKwG/n5A==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + vite-tsconfig-paths@5.1.4: resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==} peerDependencies: @@ -7032,6 +7224,34 @@ packages: jsdom: optional: true + vitest@3.0.7: + resolution: {integrity: sha512-IP7gPK3LS3Fvn44x30X1dM9vtawm0aesAa2yBIZ9vQf+qB69NXC5776+Qmcr7ohUXIQuLhk7xQR0aSUIDPqavg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.0.7 + '@vitest/ui': 3.0.7 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/debug': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} @@ -7305,33 +7525,72 @@ snapshots: transitivePeerDependencies: - encoding + '@ast-grep/napi-darwin-arm64@0.35.0': + optional: true + '@ast-grep/napi-darwin-arm64@0.36.0': optional: true + '@ast-grep/napi-darwin-x64@0.35.0': + optional: true + '@ast-grep/napi-darwin-x64@0.36.0': optional: true + '@ast-grep/napi-linux-arm64-gnu@0.35.0': + optional: true + '@ast-grep/napi-linux-arm64-gnu@0.36.0': optional: true + '@ast-grep/napi-linux-arm64-musl@0.35.0': + optional: true + '@ast-grep/napi-linux-arm64-musl@0.36.0': optional: true + '@ast-grep/napi-linux-x64-gnu@0.35.0': + optional: true + '@ast-grep/napi-linux-x64-gnu@0.36.0': optional: true + '@ast-grep/napi-linux-x64-musl@0.35.0': + optional: true + '@ast-grep/napi-linux-x64-musl@0.36.0': optional: true + '@ast-grep/napi-win32-arm64-msvc@0.35.0': + optional: true + '@ast-grep/napi-win32-arm64-msvc@0.36.0': optional: true + '@ast-grep/napi-win32-ia32-msvc@0.35.0': + optional: true + '@ast-grep/napi-win32-ia32-msvc@0.36.0': optional: true + '@ast-grep/napi-win32-x64-msvc@0.35.0': + optional: true + '@ast-grep/napi-win32-x64-msvc@0.36.0': optional: true + '@ast-grep/napi@0.35.0': + optionalDependencies: + '@ast-grep/napi-darwin-arm64': 0.35.0 + '@ast-grep/napi-darwin-x64': 0.35.0 + '@ast-grep/napi-linux-arm64-gnu': 0.35.0 + '@ast-grep/napi-linux-arm64-musl': 0.35.0 + '@ast-grep/napi-linux-x64-gnu': 0.35.0 + '@ast-grep/napi-linux-x64-musl': 0.35.0 + '@ast-grep/napi-win32-arm64-msvc': 0.35.0 + '@ast-grep/napi-win32-ia32-msvc': 0.35.0 + '@ast-grep/napi-win32-x64-msvc': 0.35.0 + '@ast-grep/napi@0.36.0': optionalDependencies: '@ast-grep/napi-darwin-arm64': 0.36.0 @@ -8859,6 +9118,14 @@ snapshots: '@img/sharp-win32-x64@0.33.3': optional: true + '@inquirer/confirm@5.1.6(@types/node@20.14.8)': + dependencies: + '@inquirer/core': 10.1.7(@types/node@20.14.8) + '@inquirer/type': 3.0.4(@types/node@20.14.8) + optionalDependencies: + '@types/node': 20.14.8 + optional: true + '@inquirer/confirm@5.1.6(@types/node@20.17.17)': dependencies: '@inquirer/core': 10.1.7(@types/node@20.17.17) @@ -8866,6 +9133,20 @@ snapshots: optionalDependencies: '@types/node': 20.17.17 + '@inquirer/core@10.1.7(@types/node@20.14.8)': + dependencies: + '@inquirer/figures': 1.0.10 + '@inquirer/type': 3.0.4(@types/node@20.14.8) + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 20.14.8 + optional: true + '@inquirer/core@10.1.7(@types/node@20.17.17)': dependencies: '@inquirer/figures': 1.0.10 @@ -8881,6 +9162,11 @@ snapshots: '@inquirer/figures@1.0.10': {} + '@inquirer/type@3.0.4(@types/node@20.14.8)': + optionalDependencies: + '@types/node': 20.14.8 + optional: true + '@inquirer/type@3.0.4(@types/node@20.17.17)': optionalDependencies: '@types/node': 20.17.17 @@ -9348,6 +9634,8 @@ snapshots: zod: 3.24.2 zod-to-json-schema: 3.24.1(zod@3.24.2) + '@mixmark-io/domino@2.2.0': {} + '@module-federation/error-codes@0.8.4': {} '@module-federation/runtime-tools@0.8.4': @@ -9369,6 +9657,8 @@ snapshots: '@module-federation/runtime': 0.8.4 '@module-federation/sdk': 0.8.4 + '@mozilla/readability@0.5.0': {} + '@mswjs/interceptors@0.37.6': dependencies: '@open-draft/deferred-promise': 2.2.0 @@ -9587,6 +9877,16 @@ snapshots: transitivePeerDependencies: - '@rspack/tracing' + '@rslib/core@0.5.3(typescript@4.9.4)': + dependencies: + '@rsbuild/core': 1.2.17 + rsbuild-plugin-dts: 0.5.3(@rsbuild/core@1.2.17)(typescript@4.9.4) + tinyglobby: 0.2.12 + optionalDependencies: + typescript: 4.9.4 + transitivePeerDependencies: + - '@rspack/tracing' + '@rslib/core@0.5.4(typescript@5.7.3)': dependencies: '@rsbuild/core': 1.2.17 @@ -9702,7 +10002,7 @@ snapshots: '@types/appdmg@0.5.5': dependencies: - '@types/node': 20.17.17 + '@types/node': 20.14.8 optional: true '@types/aria-query@5.0.4': {} @@ -9738,12 +10038,12 @@ snapshots: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 20.17.17 + '@types/node': 20.14.8 '@types/responselike': 1.0.3 '@types/conventional-commits-parser@5.0.1': dependencies: - '@types/node': 20.17.17 + '@types/node': 20.14.8 '@types/cookie@0.6.0': {} @@ -9773,7 +10073,7 @@ snapshots: '@types/keyv@3.1.4': dependencies: - '@types/node': 20.17.17 + '@types/node': 20.14.8 '@types/lodash.mergewith@4.6.9': dependencies: @@ -9786,7 +10086,7 @@ snapshots: '@types/node-fetch@2.6.12': dependencies: - '@types/node': 20.17.17 + '@types/node': 20.14.8 form-data: 4.0.1 '@types/node@12.20.55': {} @@ -9797,6 +10097,10 @@ snapshots: dependencies: undici-types: 5.26.5 + '@types/node@20.14.8': + dependencies: + undici-types: 5.26.5 + '@types/node@20.17.17': dependencies: undici-types: 6.19.8 @@ -9816,7 +10120,7 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 20.17.17 + '@types/node': 20.14.8 '@types/retry@0.12.5': {} @@ -9826,9 +10130,11 @@ snapshots: '@types/tough-cookie@4.0.5': {} + '@types/turndown@5.0.5': {} + '@types/yauzl@2.10.3': dependencies: - '@types/node': 20.17.17 + '@types/node': 20.14.8 optional: true '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3)': @@ -10070,6 +10376,13 @@ snapshots: chai: 5.1.2 tinyrainbow: 2.0.0 + '@vitest/expect@3.0.7': + dependencies: + '@vitest/spy': 3.0.7 + '@vitest/utils': 3.0.7 + chai: 5.2.0 + tinyrainbow: 2.0.0 + '@vitest/mocker@3.0.5(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4))': dependencies: '@vitest/spy': 3.0.5 @@ -10079,31 +10392,69 @@ snapshots: msw: 2.7.0(@types/node@20.17.17)(typescript@5.7.3) vite: 5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4) + '@vitest/mocker@3.0.7(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(vite@5.4.14(@types/node@20.14.8)(sass-embedded@1.83.4))': + dependencies: + '@vitest/spy': 3.0.7 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + msw: 2.7.0(@types/node@20.14.8)(typescript@4.9.4) + vite: 5.4.14(@types/node@20.14.8)(sass-embedded@1.83.4) + '@vitest/pretty-format@3.0.5': dependencies: tinyrainbow: 2.0.0 + '@vitest/pretty-format@3.0.7': + dependencies: + tinyrainbow: 2.0.0 + + '@vitest/pretty-format@3.0.8': + dependencies: + tinyrainbow: 2.0.0 + '@vitest/runner@3.0.5': dependencies: '@vitest/utils': 3.0.5 pathe: 2.0.3 + '@vitest/runner@3.0.7': + dependencies: + '@vitest/utils': 3.0.7 + pathe: 2.0.3 + '@vitest/snapshot@3.0.5': dependencies: '@vitest/pretty-format': 3.0.5 magic-string: 0.30.17 pathe: 2.0.3 + '@vitest/snapshot@3.0.7': + dependencies: + '@vitest/pretty-format': 3.0.7 + magic-string: 0.30.17 + pathe: 2.0.3 + '@vitest/spy@3.0.5': dependencies: tinyspy: 3.0.2 + '@vitest/spy@3.0.7': + dependencies: + tinyspy: 3.0.2 + '@vitest/utils@3.0.5': dependencies: '@vitest/pretty-format': 3.0.5 loupe: 3.1.3 tinyrainbow: 2.0.0 + '@vitest/utils@3.0.7': + dependencies: + '@vitest/pretty-format': 3.0.7 + loupe: 3.1.3 + tinyrainbow: 2.0.0 + '@vue/compiler-core@3.5.13': dependencies: '@babel/parser': 7.26.8 @@ -10555,6 +10906,14 @@ snapshots: loupe: 3.1.3 pathval: 2.0.0 + chai@5.2.0: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.3 + pathval: 2.0.0 + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -11011,7 +11370,7 @@ snapshots: electron@30.5.1: dependencies: '@electron/get': 2.0.3 - '@types/node': 20.17.17 + '@types/node': 20.14.8 extract-zip: 2.0.1 transitivePeerDependencies: - supports-color @@ -12859,6 +13218,32 @@ snapshots: ms@2.1.3: {} + msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4): + dependencies: + '@bundled-es-modules/cookie': 2.0.1 + '@bundled-es-modules/statuses': 1.0.1 + '@bundled-es-modules/tough-cookie': 0.1.6 + '@inquirer/confirm': 5.1.6(@types/node@20.14.8) + '@mswjs/interceptors': 0.37.6 + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/until': 2.1.0 + '@types/cookie': 0.6.0 + '@types/statuses': 2.0.5 + graphql: 16.10.0 + headers-polyfill: 4.0.3 + is-node-process: 1.2.0 + outvariant: 1.4.3 + path-to-regexp: 6.3.0 + picocolors: 1.1.1 + strict-event-emitter: 0.5.1 + type-fest: 4.34.1 + yargs: 17.7.2 + optionalDependencies: + typescript: 4.9.4 + transitivePeerDependencies: + - '@types/node' + optional: true + msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3): dependencies: '@bundled-es-modules/cookie': 2.0.1 @@ -13689,6 +14074,17 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.34.6 fsevents: 2.3.3 + rsbuild-plugin-dts@0.5.3(@rsbuild/core@1.2.17)(typescript@4.9.4): + dependencies: + '@ast-grep/napi': 0.35.0 + '@rsbuild/core': 1.2.17 + magic-string: 0.30.17 + picocolors: 1.1.1 + tinyglobby: 0.2.12 + tsconfig-paths: 4.2.0 + optionalDependencies: + typescript: 4.9.4 + rsbuild-plugin-dts@0.5.4(@rsbuild/core@1.2.17)(typescript@5.7.3): dependencies: '@ast-grep/napi': 0.36.0 @@ -14324,6 +14720,24 @@ snapshots: ts-easing@0.2.0: {} + ts-node@10.9.2(@types/node@20.14.8)(typescript@4.9.4): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.14.8 + acorn: 8.14.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 4.9.4 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + ts-node@10.9.2(@types/node@20.17.17)(typescript@5.7.3): dependencies: '@cspotcode/source-map-support': 0.8.1 @@ -14381,6 +14795,12 @@ snapshots: turbo-stream@2.4.0: {} + turndown-plugin-gfm@1.0.2: {} + + turndown@7.2.0: + dependencies: + '@mixmark-io/domino': 2.2.0 + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -14436,6 +14856,8 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 + typescript@4.9.4: {} + typescript@5.7.3: {} uc.micro@2.1.0: {} @@ -14567,6 +14989,24 @@ snapshots: - supports-color - terser + vite-node@3.0.7(@types/node@20.14.8)(sass-embedded@1.83.4): + dependencies: + cac: 6.7.14 + debug: 4.4.0 + es-module-lexer: 1.6.0 + pathe: 2.0.3 + vite: 5.4.14(@types/node@20.14.8)(sass-embedded@1.83.4) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + vite-tsconfig-paths@5.1.4(typescript@5.7.3)(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)): dependencies: debug: 4.4.0 @@ -14578,6 +15018,16 @@ snapshots: - supports-color - typescript + vite@5.4.14(@types/node@20.14.8)(sass-embedded@1.83.4): + dependencies: + esbuild: 0.21.5 + postcss: 8.5.2 + rollup: 4.34.6 + optionalDependencies: + '@types/node': 20.14.8 + fsevents: 2.3.3 + sass-embedded: 1.83.4 + vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4): dependencies: esbuild: 0.21.5 @@ -14636,6 +15086,43 @@ snapshots: - supports-color - terser + vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4): + dependencies: + '@vitest/expect': 3.0.7 + '@vitest/mocker': 3.0.7(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(vite@5.4.14(@types/node@20.14.8)(sass-embedded@1.83.4)) + '@vitest/pretty-format': 3.0.8 + '@vitest/runner': 3.0.7 + '@vitest/snapshot': 3.0.7 + '@vitest/spy': 3.0.7 + '@vitest/utils': 3.0.7 + chai: 5.2.0 + debug: 4.4.0 + expect-type: 1.1.0 + magic-string: 0.30.17 + pathe: 2.0.3 + std-env: 3.8.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinypool: 1.0.2 + tinyrainbow: 2.0.0 + vite: 5.4.14(@types/node@20.14.8)(sass-embedded@1.83.4) + vite-node: 3.0.7(@types/node@20.14.8)(sass-embedded@1.83.4) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/debug': 4.1.12 + '@types/node': 20.14.8 + happy-dom: 17.1.1 + transitivePeerDependencies: + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + wcwidth@1.0.1: dependencies: defaults: 1.0.4 From 6a6072325b7f5c88e049a649d9a471d7c7757c7f Mon Sep 17 00:00:00 2001 From: chenhaoli Date: Sun, 16 Mar 2025 17:48:02 +0800 Subject: [PATCH 49/62] feat(agent-infra): init browser --- packages/agent-infra/browser/README.md | 74 +++ packages/agent-infra/browser/bot-detector.png | Bin 0 -> 168701 bytes .../browser/examples/bot-detector.ts | 19 + .../browser/examples/browser-search.ts | 91 ++++ .../browser/examples/screenshot-star.ts | 28 ++ packages/agent-infra/browser/package.json | 41 ++ packages/agent-infra/browser/rslib.config.ts | 39 ++ .../agent-infra/browser/src/base-browser.ts | 225 +++++++++ .../browser/src/browser-finder.test.ts | 136 ++++++ .../agent-infra/browser/src/browser-finder.ts | 216 +++++++++ packages/agent-infra/browser/src/index.ts | 21 + .../agent-infra/browser/src/local-browser.ts | 73 +++ .../agent-infra/browser/src/remote-browser.ts | 85 ++++ packages/agent-infra/browser/src/types.ts | 144 ++++++ packages/agent-infra/browser/tsconfig.json | 19 + .../agent-infra/browser/vitest.e2e.config.ts | 21 + packages/agent-infra/shared/README.md | 4 +- pnpm-lock.yaml | 446 ++++++++++++++++++ 18 files changed, 1680 insertions(+), 2 deletions(-) create mode 100644 packages/agent-infra/browser/README.md create mode 100644 packages/agent-infra/browser/bot-detector.png create mode 100644 packages/agent-infra/browser/examples/bot-detector.ts create mode 100644 packages/agent-infra/browser/examples/browser-search.ts create mode 100644 packages/agent-infra/browser/examples/screenshot-star.ts create mode 100644 packages/agent-infra/browser/package.json create mode 100644 packages/agent-infra/browser/rslib.config.ts create mode 100644 packages/agent-infra/browser/src/base-browser.ts create mode 100644 packages/agent-infra/browser/src/browser-finder.test.ts create mode 100644 packages/agent-infra/browser/src/browser-finder.ts create mode 100644 packages/agent-infra/browser/src/index.ts create mode 100644 packages/agent-infra/browser/src/local-browser.ts create mode 100644 packages/agent-infra/browser/src/remote-browser.ts create mode 100644 packages/agent-infra/browser/src/types.ts create mode 100644 packages/agent-infra/browser/tsconfig.json create mode 100644 packages/agent-infra/browser/vitest.e2e.config.ts diff --git a/packages/agent-infra/browser/README.md b/packages/agent-infra/browser/README.md new file mode 100644 index 000000000..906722c21 --- /dev/null +++ b/packages/agent-infra/browser/README.md @@ -0,0 +1,74 @@ +# @agent-infra/browser + +A tiny Browser Control library based on [puppeteer](https://github.com/puppeteer/puppeteer), built for **Agent Tars**. + +

    + npm version + downloads + node version + license +

    + +## Features + +- 🔍 **Browser Detection** - Auto-detects installed browsers across platforms +- 🔄 **Remote Browser Support** - Connect to remote browser instances +- 🛡️ **Type Safety** - Written in TypeScript with full type definitions + +## Architecture + +```mermaid +graph TD + A[Browser Interface] --> B[Local Browser] + A --> C[Remote Browser] + B --> D[Browser Finder] + B --> E[Browser Adapter] + C --> E + E --> F[Puppeteer Adapter] + F --> G[Browser Control] +``` + +## Installation + +```bash +npm install @agent-infra/browser +# or +yarn add @agent-infra/browser +# or +pnpm add @agent-infra/browser +``` + +## Quick Start + +```typescript +import { LocalBrowser } from '@agent-infra/browser'; + +async function main() { + // Initialize browser + const browser = new LocalBrowser(); + + try { + // Launch browser + await browser.launch({ headless: false }); + + // Create new page + const page = await browser.createPage(); + + // Navigate to URL + await page.goto('https://example.com'); + + // Take screenshot + await page.screenshot({ path: 'example.png' }); + } finally { + // Always close browser + await browser.close(); + } +} +``` + +## Credits + +Thanks to: + +- [EGOIST](https://github.com/egoist) for creating a great AI chatbot product [ChatWise](https://chatwise.app/) from which we draw a lot of inspiration for browser detection functionality. +- The [puppeteer](https://github.com/puppeteer/puppeteer) project which helps us operate the browser better. diff --git a/packages/agent-infra/browser/bot-detector.png b/packages/agent-infra/browser/bot-detector.png new file mode 100644 index 0000000000000000000000000000000000000000..df03fd6c45864536c6a18926bc14e6b4fa796bb9 GIT binary patch literal 168701 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 F{{o&Y;R*l% literal 0 HcmV?d00001 diff --git a/packages/agent-infra/browser/examples/bot-detector.ts b/packages/agent-infra/browser/examples/bot-detector.ts new file mode 100644 index 000000000..482a7b8e9 --- /dev/null +++ b/packages/agent-infra/browser/examples/bot-detector.ts @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { LocalBrowser } from '../src'; + +async function main() { + const browser = new LocalBrowser(); + await browser.launch({ headless: false }); + const page = await browser.createPage(); + await page.goto('https://bot-detector.rebrowser.net/', { + waitUntil: 'networkidle2', + }); + await page.screenshot({ path: 'bot-detector.png' }); + await page.close(); + await browser.close(); +} + +main(); diff --git a/packages/agent-infra/browser/examples/browser-search.ts b/packages/agent-infra/browser/examples/browser-search.ts new file mode 100644 index 000000000..70c853735 --- /dev/null +++ b/packages/agent-infra/browser/examples/browser-search.ts @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { READABILITY_SCRIPT, toMarkdown } from '@agent-infra/shared'; +import { LocalBrowser } from '../src'; + +function getSearchUrl(query: string) { + const searchParams = new URLSearchParams({ + q: query, + num: '10', + udm: '14', + }); + return `https://www.google.com/search?${searchParams.toString()}`; +} + +async function main() { + const url = getSearchUrl('ui-tars'); + const browser = new LocalBrowser(); + + try { + // 1. Launch browser + await browser.launch({ headless: false }); + + // 2. Get search links + const links = await browser.evaluateOnNewPage({ + url, + pageFunction: () => { + const results = Array.from(document.querySelectorAll('a')); + return results + .map((link) => ({ + href: link.href, + text: link.textContent?.trim() || '', + })) + .filter( + (item) => + item.href && + !item.href.includes('google') && + !item.href.startsWith('javascript:'), + ); + }, + pageFunctionParams: [], + }); + + if (!links?.length) { + console.log('No search results found'); + return; + } + + console.log('Found links:', links); + + // 3. Visit first link and extract content + const firstLink = links[0]; + + console.log('Navigate to:', firstLink.href); + + // 4. Extract content + const result = await browser.evaluateOnNewPage({ + url: firstLink.href, + pageFunction: (window, readabilityScript) => { + const Readability = new Function( + 'module', + `${readabilityScript}\nreturn module.exports`, + )({}); + + // Clean up page + const document = window.document; + document + .querySelectorAll( + 'script,noscript,style,link,svg,img,video,iframe,canvas,.reflist', + ) + .forEach((el) => el.remove()); + + // Parse content + const article = new Readability(document).parse(); + const content = article?.content || ''; + const title = document.title; + return { content, title: article?.title || title }; + }, + pageFunctionParams: [READABILITY_SCRIPT], + }); + + console.log('Result:', toMarkdown(result?.content)); + } catch (error) { + console.error('Error:', error); + } finally { + await browser.close(); + } +} + +main().catch(console.error); diff --git a/packages/agent-infra/browser/examples/screenshot-star.ts b/packages/agent-infra/browser/examples/screenshot-star.ts new file mode 100644 index 000000000..dc66855da --- /dev/null +++ b/packages/agent-infra/browser/examples/screenshot-star.ts @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { LocalBrowser } from '../src'; + +function sleep(time: number) { + return new Promise(function (resolve) { + setTimeout(resolve, time); + }); +} + +async function main() { + const browser = new LocalBrowser(); + await browser.launch({ headless: false }); + const page = await browser.createPage(); + await page.goto( + 'https://star-history.com/#bytedance/UI-TARS-desktop&bytedance/UI-TARS&Date', + { waitUntil: 'networkidle2' }, + ); + await page.waitForSelector('#capture'); + await sleep(2000); + await page.screenshot({ path: './UI-TARS-desktop-star-history.png' }); + await page.close(); + await browser.close(); +} + +main(); diff --git a/packages/agent-infra/browser/package.json b/packages/agent-infra/browser/package.json new file mode 100644 index 000000000..f542e5b77 --- /dev/null +++ b/packages/agent-infra/browser/package.json @@ -0,0 +1,41 @@ +{ + "name": "@agent-infra/browser", + "description": "A tiny Browser Control library, built for Agent Tars.", + "version": "0.0.1", + "main": "dist/index.js", + "module": "dist/index.mjs", + "types": "dist/index.d.ts", + "exports": { + ".": { + "import": "./dist/index.mjs", + "require": "./dist/index.js", + "types": "./dist/index.d.ts" + } + }, + "files": [ + "dist" + ], + "scripts": { + "dev": "rslib build --watch", + "build": "rslib build", + "prepare": "npm run build", + "prepublishOnly": "pnpm run build", + "test": "vitest run", + "test:watch": "vitest", + "test:e2e": "vitest --config vitest.e2e.config.ts", + "coverage": "vitest run --coverage", + "test:e2e:local": "vitest --config vitest.e2e.config.ts local-browser.e2e.test.ts" + }, + "dependencies": { + "puppeteer-core": "24.1.1", + "@agent-infra/logger": "workspace:*", + "@agent-infra/shared": "workspace:*" + }, + "devDependencies": { + "@types/node": "20.14.8", + "typescript": "^5.7.3", + "vitest": "3.0.7", + "@vitest/coverage-v8": "3.0.7", + "@rslib/core": "0.5.3" + } +} \ No newline at end of file diff --git a/packages/agent-infra/browser/rslib.config.ts b/packages/agent-infra/browser/rslib.config.ts new file mode 100644 index 000000000..1fc953b4c --- /dev/null +++ b/packages/agent-infra/browser/rslib.config.ts @@ -0,0 +1,39 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { defineConfig } from '@rslib/core'; + +const BANNER = `/** +* Copyright (c) 2025 Bytedance, Inc. and its affiliates. +* SPDX-License-Identifier: Apache-2.0 +*/`; + +export default defineConfig({ + source: { + entry: { + index: ['src/**/*.ts', '!src/**/*.{test,bench}.ts'], + }, + }, + lib: [ + { + format: 'esm', + syntax: 'es2021', + bundle: false, + dts: true, + banner: { js: BANNER }, + }, + { + format: 'cjs', + syntax: 'es2021', + bundle: false, + dts: true, + banner: { js: BANNER }, + }, + ], + output: { + target: 'web', + cleanDistPath: true, + sourceMap: true, + }, +}); diff --git a/packages/agent-infra/browser/src/base-browser.ts b/packages/agent-infra/browser/src/base-browser.ts new file mode 100644 index 000000000..aae4c6a8b --- /dev/null +++ b/packages/agent-infra/browser/src/base-browser.ts @@ -0,0 +1,225 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import * as puppeteer from 'puppeteer-core'; +import { Logger, defaultLogger } from '@agent-infra/logger'; +import { + BrowserInterface, + EvaluateOnNewPageOptions, + LaunchOptions, + Page, +} from './types'; + +/** + * Configuration options for the BaseBrowser class + * @interface BaseBrowserOptions + * @property {Logger} [logger] - Custom logger instance to use for browser logging + */ +export interface BaseBrowserOptions { + logger?: Logger; +} + +/** + * Abstract base class that implements common browser automation functionality + * Provides a foundation for specific browser implementations with shared capabilities + * @abstract + * @implements {BrowserInterface} + */ +export abstract class BaseBrowser implements BrowserInterface { + /** + * The underlying Puppeteer browser instance + * @protected + */ + protected browser: puppeteer.Browser | null = null; + + /** + * Logger instance for browser-related logging + * @protected + */ + protected logger: Logger; + + /** + * Reference to the currently active browser page + * @protected + */ + protected activePage: Page | null = null; + + /** + * Creates an instance of BaseBrowser + * @param {BaseBrowserOptions} [options] - Configuration options + */ + constructor(options?: BaseBrowserOptions) { + this.logger = options?.logger ?? defaultLogger; + this.logger.info('Browser Options:', options); + } + + /** + * Get the underlying Puppeteer browser instance + * @throws Error if browser is not launched + + * @returns {puppeteer.Browser} Puppeteer browser instance + */ + getBrowser(): puppeteer.Browser { + if (!this.browser) { + throw new Error('Browser not launched'); + } + return this.browser; + } + + /** + * Sets up listeners for browser page events + * Tracks page creation and updates active page reference + * @protected + */ + protected async setupPageListener() { + if (!this.browser) return; + + this.browser.on('targetcreated', async (target) => { + const page = await target.page(); + if (page) { + this.logger.info('New page created:', await page.url()); + this.activePage = page; + + page.once('close', () => { + if (this.activePage === page) { + this.activePage = null; + } + }); + + page.once('error', () => { + if (this.activePage === page) { + this.activePage = null; + } + }); + } + }); + } + + /** + * Launches the browser with specified options + * @abstract + * @param {LaunchOptions} [options] - Browser launch configuration options + * @returns {Promise} Promise that resolves when browser is launched + */ + abstract launch(options?: LaunchOptions): Promise; + + /** + * Closes the browser instance and cleans up resources + * @returns {Promise} Promise that resolves when browser is closed + * @throws {Error} If browser fails to close properly + */ + async close(): Promise { + this.logger.info('Closing browser'); + try { + await this.browser?.close(); + this.browser = null; + this.logger.success('Browser closed successfully'); + } catch (error) { + this.logger.error('Failed to close browser:', error); + throw error; + } + } + + /** + * Creates a new page, navigates to the specified URL, executes a function in the page context, and returns the result + * This method is inspired and modified from https://github.com/egoist/local-web-search/blob/04608ed09aa103e2fff6402c72ca12edfb692d19/src/browser.ts#L74 + * @template T - Type of parameters passed to the page function + * @template R - Return type of the page function + * @param {EvaluateOnNewPageOptions} options - Configuration options for the page evaluation + * @returns {Promise} Promise resolving to the result of the page function or null + * @throws {Error} If page creation or evaluation fails + */ + async evaluateOnNewPage( + options: EvaluateOnNewPageOptions, + ): Promise { + const { + url, + pageFunction, + pageFunctionParams, + beforePageLoad, + beforeSendResult, + } = options; + const page = await this.browser!.newPage(); + try { + await beforePageLoad?.(page); + await page.goto(url, { + waitUntil: 'networkidle2', + }); + const _window = await page.evaluateHandle(() => window); + const result = await page.evaluate( + pageFunction, + _window, + ...pageFunctionParams, + ); + await beforeSendResult?.(page, result); + await _window.dispose(); + await page.close(); + return result; + } catch (error) { + await page.close(); + throw error; + } + } + + /** + * Creates a new browser page + * @returns {Promise} Promise resolving to the newly created page + * @throws {Error} If browser is not launched or page creation fails + */ + async createPage(): Promise { + if (!this.browser) { + this.logger.error('No active browser'); + throw new Error('Browser not launched'); + } + const page = await this.browser.newPage(); + return page; + } + + /** + * Gets the currently active page or finds an active page if none is currently tracked + * If no active pages exist, creates a new page + * @returns {Promise} Promise resolving to the active page + * @throws {Error} If browser is not launched or no active page can be found/created + */ + async getActivePage(): Promise { + if (!this.browser) { + throw new Error('Browser not launched'); + } + + // If activePage exists and is still available, return directly + if (this.activePage) { + try { + // Verify that the page is still available + await this.activePage.evaluate(() => document.readyState); + return this.activePage; + } catch (e) { + this.logger.warn('Active page no longer available:', e); + this.activePage = null; + } + } + + // Get all pages and find the last active page + const pages = await this.browser.pages(); + + if (pages.length === 0) { + this.activePage = await this.createPage(); + return this.activePage; + } + + // Find the last responding page + for (let i = pages.length - 1; i >= 0; i--) { + const page = pages[i]; + try { + await page.evaluate(() => document.readyState); + this.activePage = page; + return page; + } catch (e) { + continue; + } + } + + throw new Error('No active page found'); + } +} diff --git a/packages/agent-infra/browser/src/browser-finder.test.ts b/packages/agent-infra/browser/src/browser-finder.test.ts new file mode 100644 index 000000000..f50476859 --- /dev/null +++ b/packages/agent-infra/browser/src/browser-finder.test.ts @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import * as fs from 'fs'; +import * as os from 'os'; +import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; +import { BrowserFinder } from './browser-finder'; + +// Mock fs and os modules +vi.mock('fs'); + +vi.mock('os', () => ({ + homedir: vi.fn(), +})); + +describe('BrowserFinder', () => { + const mockHomedir = '/mock/home'; + const CHROME_PATH = + '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'; + let browserFinder: BrowserFinder; + + beforeEach(() => { + // Reset all mocks before each test + vi.resetAllMocks(); + browserFinder = new BrowserFinder(); + + // Mock homedir with the correct way + vi.mocked(os.homedir).mockReturnValue(mockHomedir); + + // Mock platform + Object.defineProperty(process, 'platform', { + value: 'darwin', + }); + + vi.mocked(fs.existsSync).mockImplementation((path) => { + return path === CHROME_PATH; + }); + }); + + afterEach(() => { + vi.clearAllMocks(); + }); + + describe('findBrowser', () => { + it('should find Chrome when it exists', () => { + const result = browserFinder.findBrowser('Google Chrome'); + + expect(result).toEqual({ + executable: CHROME_PATH, + userDataDir: `${mockHomedir}/Library/Application Support/Google/Chrome`, + }); + }); + + it('should throw Error when specified browser not found', () => { + vi.mocked(fs.existsSync).mockReturnValue(false); + + expect(() => browserFinder.findBrowser('Google Chrome')).toThrow(Error); + }); + + it('should find first available browser when no name specified', () => { + vi.mocked(fs.existsSync).mockImplementation((path) => { + return path === CHROME_PATH; + }); + + const result = browserFinder.findBrowser(); + + expect(result).toEqual({ + executable: CHROME_PATH, + userDataDir: `${mockHomedir}/Library/Application Support/Google/Chrome`, + }); + }); + + it('should throw error for unsupported platform', () => { + Object.defineProperty(process, 'platform', { + value: 'android', + }); + + expect(() => browserFinder.findBrowser()).toThrow( + 'Unsupported platform: android', + ); + }); + }); + + describe('getBrowserProfiles', () => { + it('should return browser profiles when they exist', () => { + vi.mocked(fs.existsSync).mockReturnValue(true); + vi.mocked(fs.readFileSync).mockReturnValue( + JSON.stringify({ + profile: { + info_cache: { + 'Profile 1': { name: 'Default' }, + 'Profile 2': { name: 'Work' }, + }, + }, + }), + ); + + const profiles = browserFinder.getBrowserProfiles('Google Chrome'); + + expect(profiles).toEqual([ + { + displayName: 'Default', + path: expect.stringContaining('Profile 1'), + }, + { + displayName: 'Work', + path: expect.stringContaining('Profile 2'), + }, + ]); + }); + + it('should return empty array when profiles cannot be read', () => { + vi.mocked(fs.existsSync).mockReturnValue(true); + vi.mocked(fs.readFileSync).mockImplementation(() => { + throw new Error('File not found'); + }); + + const profiles = browserFinder.getBrowserProfiles('Google Chrome'); + expect(profiles).toEqual([]); + }); + }); + + describe('findChrome', () => { + it('should find Chrome executable path', () => { + const result = browserFinder.findChrome(); + expect(result).toBe(CHROME_PATH); + }); + + it('should return null when Chrome not found', () => { + vi.mocked(fs.existsSync).mockReturnValue(false); + const result = browserFinder.findChrome(); + expect(result).toBeNull(); + }); + }); +}); diff --git a/packages/agent-infra/browser/src/browser-finder.ts b/packages/agent-infra/browser/src/browser-finder.ts new file mode 100644 index 000000000..6a167496a --- /dev/null +++ b/packages/agent-infra/browser/src/browser-finder.ts @@ -0,0 +1,216 @@ +/** + * The following code is modified based on + * https://github.com/egoist/local-web-search/blob/main/src/find-browser.ts + * + * MIT Licensed + * Copyright (c) 2025 ChatWise (https://chatwise.app) + * https://github.com/egoist/local-web-search/blob/main/LICENSE + */ + +import * as fs from 'fs'; +import * as path from 'path'; +import * as os from 'os'; +import { Logger, defaultLogger } from '@agent-infra/logger'; + +/** + * Interface defining browser locations and configurations + * Contains paths and settings for different operating systems + * @interface Browser + */ +interface Browser { + /** + * Browser name identifier + */ + name: string; + + /** + * Executable paths by platform + * @property {string} win32 - Windows executable path + * @property {string} darwin - macOS executable path + * @property {string} linux - Linux executable path + */ + executable: { + win32: string; + darwin: string; + linux: string; + }; + + /** + * User data directory paths by platform + * @property {string} win32 - Windows user data directory + * @property {string} darwin - macOS user data directory + * @property {string} linux - Linux user data directory + */ + userDataDir: { + win32: string; + darwin: string; + linux: string; + }; +} + +/** + * Class responsible for finding and managing browser installations + * Detects installed browsers and their profiles across different platforms + */ +export class BrowserFinder { + /** + * Logger instance for diagnostic output + * @private + */ + private logger: Logger; + + /** + * Creates a new BrowserFinder instance + * @param {Logger} [logger] - Optional custom logger + */ + constructor(logger?: Logger) { + this.logger = logger ?? defaultLogger; + } + + /** + * Getter that returns the list of supported browsers with their platform-specific paths + * @returns {Browser[]} Array of browser configurations + * @private + */ + private get browsers(): Browser[] { + // Get HOME_DIR inside the getter to ensure it's always current + const HOME_DIR = os.homedir(); + const LOCAL_APP_DATA = process.env.LOCALAPPDATA; + + return [ + { + name: 'Chromium', + executable: { + win32: 'C:\\Program Files\\Chromium\\Application\\chrome.exe', + darwin: '/Applications/Chromium.app/Contents/MacOS/Chromium', + linux: '/usr/bin/chromium', + }, + userDataDir: { + win32: `${LOCAL_APP_DATA}\\Chromium\\User Data`, + darwin: `${HOME_DIR}/Library/Application Support/Chromium`, + linux: `${HOME_DIR}/.config/chromium`, + }, + }, + { + name: 'Google Chrome', + executable: { + win32: 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe', + darwin: + '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome', + linux: '/usr/bin/google-chrome', + }, + userDataDir: { + win32: `${LOCAL_APP_DATA}\\Google\\Chrome\\User Data`, + darwin: `${HOME_DIR}/Library/Application Support/Google/Chrome`, + linux: `${HOME_DIR}/.config/google-chrome`, + }, + }, + { + name: 'Google Chrome Canary', + executable: { + win32: + 'C:\\Program Files\\Google\\Chrome Canary\\Application\\chrome.exe', + darwin: + '/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary', + linux: '/usr/bin/google-chrome-canary', + }, + userDataDir: { + win32: `${LOCAL_APP_DATA}\\Google\\Chrome Canary\\User Data`, + darwin: `${HOME_DIR}/Library/Application Support/Google/Chrome Canary`, + linux: `${HOME_DIR}/.config/google-chrome-canary`, + }, + }, + ]; + } + + /** + * Find a specific browser or the first available browser + * @param {string} [name] - Optional browser name to find + * @returns {{ executable: string; userDataDir: string }} Browser executable and user data paths + * @throws {Error} If no supported browser is found or the platform is unsupported + */ + findBrowser(name?: string): { + executable: string; + userDataDir: string; + } { + const platform = process.platform; + this.logger.info('Finding browser on platform:', platform); + + if (platform !== 'darwin' && platform !== 'win32' && platform !== 'linux') { + const error = new Error(`Unsupported platform: ${platform}`); + this.logger.error(error.message); + throw error; + } + + const browser = name + ? this.browsers.find( + (b) => b.name === name && fs.existsSync(b.executable[platform]), + ) + : this.browsers.find((b) => fs.existsSync(b.executable[platform])); + + this.logger.log('browser', browser); + + if (!browser) { + const error = name + ? new Error(`Cannot find browser: ${name}`) + : new Error( + 'Cannot find a supported browser on your system. Please install Chrome, Edge, or Brave.', + ); + this.logger.error(error.message); + throw error; + } + + const result = { + executable: browser.executable[platform], + userDataDir: browser.userDataDir[platform], + }; + + this.logger.success(`Found browser: ${browser.name}`); + this.logger.info('Browser details:', result); + + return result; + } + + /** + * Get browser profiles for a specific browser + * Reads the Local State file to extract profile information + * @param {string} [browserName] - Optional browser name to get profiles for + * @returns {Array<{ displayName: string; path: string }>} Array of profile objects with display names and paths + */ + getBrowserProfiles( + browserName?: string, + ): Array<{ displayName: string; path: string }> { + const browser = this.findBrowser(browserName); + + try { + const localState = JSON.parse( + fs.readFileSync(path.join(browser.userDataDir, 'Local State'), 'utf8'), + ); + const profileInfo = localState.profile.info_cache; + + return Object.entries(profileInfo).map( + ([profileName, info]: [string, any]) => ({ + displayName: info.name, + path: path.join(browser.userDataDir, profileName), + }), + ); + } catch (error) { + return []; + } + } + + /** + * Legacy method for backwards compatibility + * Finds Chrome browser executable path + * @deprecated Use findBrowser instead + * @returns {string | null} Chrome executable path or null if not found + */ + findChrome(): string | null { + try { + const { executable } = this.findBrowser('Google Chrome'); + return executable; + } catch { + return null; + } + } +} diff --git a/packages/agent-infra/browser/src/index.ts b/packages/agent-infra/browser/src/index.ts new file mode 100644 index 000000000..6735b1467 --- /dev/null +++ b/packages/agent-infra/browser/src/index.ts @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @agent-infra/browser + * A browser automation library based on puppeteer-core + * + * Main exports: + * - types: Type definitions for browser interfaces + * - BrowserFinder: Utility to detect and locate installed browsers + * - LocalBrowser: Control locally installed browsers + * - RemoteBrowser: Connect to remote browser instances + * - BaseBrowser: Abstract base class for browser implementations + */ +export * from './types'; +export * from './browser-finder'; +export * from './local-browser'; +export * from './remote-browser'; +export * from './base-browser'; diff --git a/packages/agent-infra/browser/src/local-browser.ts b/packages/agent-infra/browser/src/local-browser.ts new file mode 100644 index 000000000..71f7cd5d6 --- /dev/null +++ b/packages/agent-infra/browser/src/local-browser.ts @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import * as puppeteer from 'puppeteer-core'; +import { LaunchOptions } from './types'; +import { BrowserFinder } from './browser-finder'; +import { BaseBrowser } from './base-browser'; + +/** + * LocalBrowser class for controlling locally installed browsers + * Extends the BaseBrowser with functionality specific to managing local browser instances + * @extends BaseBrowser + */ +export class LocalBrowser extends BaseBrowser { + /** + * Browser finder instance to detect and locate installed browsers + * @private + */ + private browserFinder = new BrowserFinder(); + + /** + * Launches a local browser instance with specified options + * Automatically detects installed browsers if no executable path is provided + * @param {LaunchOptions} options - Configuration options for launching the browser + * @returns {Promise} Promise that resolves when the browser is successfully launched + * @throws {Error} If the browser cannot be launched + */ + async launch(options: LaunchOptions = {}): Promise { + this.logger.info('Launching browser with options:', options); + + const executablePath = + options?.executablePath || this.browserFinder.findBrowser().executable; + + this.logger.info('Using executable path:', executablePath); + + const viewportWidth = options?.defaultViewport?.width ?? 1280; + const viewportHeight = options?.defaultViewport?.height ?? 800; + + const puppeteerLaunchOptions: puppeteer.LaunchOptions = { + executablePath, + headless: options?.headless ?? false, + defaultViewport: { + width: viewportWidth, + height: viewportHeight, + }, + args: [ + '--disable-blink-features=AutomationControlled', + `--window-size=${viewportWidth},${viewportHeight + 90}`, + options?.proxy ? `--proxy-server=${options.proxy}` : '', + options?.profilePath + ? `--profile-directory=${options.profilePath}` + : '', + ].filter(Boolean), + ignoreDefaultArgs: ['--enable-automation'], + timeout: options.timeout ?? 0, + downloadBehavior: { + policy: 'deny', + }, + }; + + this.logger.info('Launch options:', puppeteerLaunchOptions); + + try { + this.browser = await puppeteer.launch(puppeteerLaunchOptions); + await this.setupPageListener(); + this.logger.success('Browser launched successfully'); + } catch (error) { + this.logger.error('Failed to launch browser:', error); + throw error; + } + } +} diff --git a/packages/agent-infra/browser/src/remote-browser.ts b/packages/agent-infra/browser/src/remote-browser.ts new file mode 100644 index 000000000..4f6e54d96 --- /dev/null +++ b/packages/agent-infra/browser/src/remote-browser.ts @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import * as puppeteer from 'puppeteer-core'; +import { BaseBrowser, BaseBrowserOptions } from './base-browser'; +import { LaunchOptions } from './types'; + +/** + * Configuration options for RemoteBrowser + * @extends BaseBrowserOptions + * @interface RemoteBrowserOptions + * @property {string} [wsEndpoint] - WebSocket endpoint URL for direct connection + * @property {string} [host] - Remote host address (default: 'localhost') + * @property {number} [port] - Remote debugging port (default: 9222) + */ +export interface RemoteBrowserOptions extends BaseBrowserOptions { + wsEndpoint?: string; + host?: string; + port?: number; +} + +/** + * RemoteBrowser class for connecting to remote browser instances + * + * Currently, this RemoteBrowser is not production ready, + * mainly because it still relies on `puppeteer-core`, + * which can only run on Node.js. + * + * At the same time, Chrome instances built with + * `--remote-debugging-address` on Linux have security risks + * + * @see https://issues.chromium.org/issues/41487252 + * @see https://issues.chromium.org/issues/40261787 + * @see https://github.com/pyppeteer/pyppeteer/pull/379 + * @see https://stackoverflow.com/questions/72760355/chrome-remote-debugging-not-working-computer-to-computer + * + * @extends BaseBrowser + */ +export class RemoteBrowser extends BaseBrowser { + /** + * Creates a new RemoteBrowser instance + * @param {RemoteBrowserOptions} [options] - Configuration options for remote browser connection + */ + constructor(private options?: RemoteBrowserOptions) { + super(options); + } + + /** + * Connects to a remote browser instance using WebSocket + * If no WebSocket endpoint is provided, attempts to discover it using the DevTools Protocol + * @param {LaunchOptions} [options] - Launch configuration options + * @returns {Promise} Promise that resolves when connected to the remote browser + * @throws {Error} If connection to the remote browser fails + */ + async launch(options?: LaunchOptions): Promise { + this.logger.info('Browser Launch options:', options); + + let browserWSEndpoint = this.options?.wsEndpoint; + + if (!browserWSEndpoint) { + const host = this.options?.host || 'localhost'; + const port = this.options?.port || 9222; + const response = await fetch(`http://${host}:${port}/json/version`); + const { webSocketDebuggerUrl } = await response.json(); + browserWSEndpoint = webSocketDebuggerUrl; + } + + this.logger.info('Using WebSocket endpoint:', browserWSEndpoint); + + const puppeteerConnectOptions: puppeteer.ConnectOptions = { + browserWSEndpoint, + defaultViewport: options?.defaultViewport ?? { width: 1280, height: 800 }, + }; + + try { + this.browser = await puppeteer.connect(puppeteerConnectOptions); + await this.setupPageListener(); + this.logger.success('Connected to remote browser successfully'); + } catch (error) { + this.logger.error('Failed to connect to remote browser:', error); + throw error; + } + } +} diff --git a/packages/agent-infra/browser/src/types.ts b/packages/agent-infra/browser/src/types.ts new file mode 100644 index 000000000..b24ade2ee --- /dev/null +++ b/packages/agent-infra/browser/src/types.ts @@ -0,0 +1,144 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { Page } from 'puppeteer-core'; + +/** + * Options for launching a browser instance + * @interface LaunchOptions + */ +export interface LaunchOptions { + /** + * Whether to run browser in headless mode + * @default false + */ + headless?: boolean; + + /** + * Maximum time in milliseconds to wait for the browser to start + * @default 0 (no timeout) + */ + timeout?: number; + + /** + * The viewport dimensions + * @property {number} width - Viewport width in pixels + * @property {number} height - Viewport height in pixels + */ + defaultViewport?: { + width: number; + height: number; + }; + + /** + * Path to a browser executable to use instead of the automatically detected one + * If not provided, the system will attempt to find an installed browser + */ + executablePath?: string; + + /** + * Path to a specific browser profile to use + * Allows using existing browser profiles with cookies, extensions, etc. + */ + profilePath?: string; + + /** + * Proxy server URL, e.g. 'http://proxy.example.com:8080' + * Used to route browser traffic through a proxy server + */ + proxy?: string; +} + +/** + * Options for evaluating JavaScript in a new page + * @template T - Array of parameters to pass to the page function + * @template R - Return type of the page function + * @interface EvaluateOnNewPageOptions + */ +export interface EvaluateOnNewPageOptions { + /** + * URL to navigate to before evaluating the function + * The page will load this URL before executing the pageFunction + */ + url: string; + + /** + * Function to be evaluated in the page context + * This function runs in the context of the browser page, not Node.js + * @param {Window} window - The window object of the page + * @param {...T} args - Additional arguments passed to the function + * @returns {R} Result of the function execution + */ + pageFunction: (window: Window, ...args: T) => R; + + /** + * Parameters to pass to the page function + * These values will be serialized and passed to the pageFunction + */ + pageFunctionParams: T; + + /** + * Optional function to execute before page navigation + * Useful for setting up page configuration before loading the URL + * @param {Page} page - Puppeteer page instance + * @returns {void | Promise} + */ + beforePageLoad?: (page: Page) => void | Promise; + + /** + * Optional function to process the result before returning + * Can be used to transform or validate the result from page evaluation + * @param {Page} page - Puppeteer page instance + * @param {R} result - Result from page function evaluation + * @returns {R | Promise} Processed result + */ + beforeSendResult?: (page: Page, result: R) => R | Promise; +} + +/** + * Core browser interface that all browser implementations must implement + * Defines the standard API for browser automation + * @interface BrowserInterface + */ +export interface BrowserInterface { + /** + * Launch a new browser instance + * @param {LaunchOptions} [options] - Launch configuration options + * @returns {Promise} Promise resolving when browser is launched + */ + launch(options?: LaunchOptions): Promise; + + /** + * Close the browser instance and all its pages + * @returns {Promise} Promise resolving when browser is closed + */ + close(): Promise; + + /** + * Create a new page in the browser + * @returns {Promise} Promise resolving to the new page instance + */ + createPage(): Promise; + + /** + * Evaluate a function in a new page context + * Creates a new page, navigates to URL, executes function, and returns result + * @template T - Array of parameters to pass to the page function + * @template R - Return type of the page function + * @param {EvaluateOnNewPageOptions} options - Evaluation options + * @returns {Promise} Promise resolving to the function result or null + */ + evaluateOnNewPage( + options: EvaluateOnNewPageOptions, + ): Promise; + + /** + * Get the currently active page or create one if none exists + * @returns {Promise} Promise resolving to the active page instance + */ + getActivePage(): Promise; +} + +export { Page }; diff --git a/packages/agent-infra/browser/tsconfig.json b/packages/agent-infra/browser/tsconfig.json new file mode 100644 index 000000000..f39494ea7 --- /dev/null +++ b/packages/agent-infra/browser/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "commonjs", + "moduleResolution": "node", + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "outDir": "./dist", + "strict": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "isolatedModules": true, + "skipLibCheck": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/agent-infra/browser/vitest.e2e.config.ts b/packages/agent-infra/browser/vitest.e2e.config.ts new file mode 100644 index 000000000..73426cb36 --- /dev/null +++ b/packages/agent-infra/browser/vitest.e2e.config.ts @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { defineConfig } from 'vitest/config'; +import { resolve } from 'path'; + +export default defineConfig({ + test: { + include: ['**/__tests__/**/*.e2e.{test,spec}.ts'], + testTimeout: 30000, // Increased from default + hookTimeout: 30000, // Increased from default + globals: true, + environment: 'node', + }, + resolve: { + alias: { + '@': resolve(__dirname, './src'), + }, + }, +}); diff --git a/packages/agent-infra/shared/README.md b/packages/agent-infra/shared/README.md index 51e55341a..18b0d0a2b 100644 --- a/packages/agent-infra/shared/README.md +++ b/packages/agent-infra/shared/README.md @@ -1,9 +1,9 @@ -# @ai-infra/shared +# @agent-infra/shared Common utilities for AI infrastructure projects. ## Installation ```bash -pnpm add @ai-infra/shared +pnpm add @agent-infra/shared ``` diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fcedcff66..4f3ea8d84 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -347,6 +347,34 @@ importers: specifier: 34.1.1 version: 34.1.1 + packages/agent-infra/browser: + dependencies: + '@agent-infra/logger': + specifier: workspace:* + version: link:../logger + '@agent-infra/shared': + specifier: workspace:* + version: link:../shared + puppeteer-core: + specifier: 24.1.1 + version: 24.1.1 + devDependencies: + '@rslib/core': + specifier: 0.5.3 + version: 0.5.3(typescript@5.7.3) + '@types/node': + specifier: 20.14.8 + version: 20.14.8 + '@vitest/coverage-v8': + specifier: 3.0.7 + version: 3.0.7(vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4)) + typescript: + specifier: ^5.7.3 + version: 5.7.3 + vitest: + specifier: 3.0.7 + version: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4) + packages/agent-infra/logger: devDependencies: '@rslib/core': @@ -2483,6 +2511,11 @@ packages: '@popperjs/core@2.11.8': resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + '@puppeteer/browsers@2.7.0': + resolution: {integrity: sha512-bO61XnTuopsz9kvtfqhVbH6LTM1koxK0IlBR+yuVrM2LB7mk8+5o1w18l5zqd5cs8xlf+ntgambqRqGifMDjog==} + engines: {node: '>=18'} + hasBin: true + '@rollup/rollup-android-arm-eabi@4.34.6': resolution: {integrity: sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==} cpu: [arm] @@ -2704,6 +2737,9 @@ packages: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} + '@tootallnate/quickjs-emscripten@0.23.0': + resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + '@trivago/prettier-plugin-sort-imports@5.2.2': resolution: {integrity: sha512-fYDQA9e6yTNmA13TLVSA+WMQRc5Bn/c0EUBditUHNfMMxN7M82c38b1kEggVE3pLpZ0FwkwJkUEKMiOi52JXFA==} engines: {node: '>18.12'} @@ -3002,6 +3038,15 @@ packages: peerDependencies: vitest: 3.0.5 + '@vitest/coverage-v8@3.0.7': + resolution: {integrity: sha512-Av8WgBJLTrfLOer0uy3CxjlVuWK4CzcLBndW1Nm2vI+3hZ2ozHututkfc7Blu1u6waeQ7J8gzPK/AsBRnWA5mQ==} + peerDependencies: + '@vitest/browser': 3.0.7 + vitest: 3.0.7 + peerDependenciesMeta: + '@vitest/browser': + optional: true + '@vitest/coverage-v8@3.0.8': resolution: {integrity: sha512-y7SAKsQirsEJ2F8bulBck4DoluhI2EEgTimHd6EEUgJBGKy9tC25cpywh1MH4FvDGoG2Unt7+asVd1kj4qOSAw==} peerDependencies: @@ -3268,6 +3313,10 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} + ast-types@0.13.4: + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} + engines: {node: '>=4'} + async-function@1.0.0: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} engines: {node: '>= 0.4'} @@ -3303,6 +3352,9 @@ packages: axios@1.7.9: resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} + b4a@1.6.7: + resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + babel-plugin-macros@3.1.0: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} @@ -3310,12 +3362,41 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + bare-events@2.5.4: + resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} + + bare-fs@4.0.1: + resolution: {integrity: sha512-ilQs4fm/l9eMfWY2dY0WCIUplSUp7U0CT1vrqMg1MUdeZl4fypu5UP0XcDBK5WBQPJAKP1b7XEodISmekH/CEg==} + engines: {bare: '>=1.7.0'} + + bare-os@3.6.0: + resolution: {integrity: sha512-BUrFS5TqSBdA0LwHop4OjPJwisqxGy6JsWVqV6qaFoe965qqtaKfDzHY5T2YA1gUL0ZeeQeA+4BBc1FJTcHiPw==} + engines: {bare: '>=1.14.0'} + + bare-path@3.0.0: + resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} + + bare-stream@2.6.5: + resolution: {integrity: sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==} + peerDependencies: + bare-buffer: '*' + bare-events: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + bare-events: + optional: true + base32-encode@1.2.0: resolution: {integrity: sha512-cHFU8XeRyx0GgmoWi5qHMCVRiqU6J3MHWxVgun7jggCBUpVzm1Ir7M9dYr2whjSNc3tFeXfQ/oZjQu/4u55h9A==} base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + basic-ftp@5.0.5: + resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} + engines: {node: '>=10.0.0'} + before-after-hook@2.2.3: resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} @@ -3466,6 +3547,11 @@ packages: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} + chromium-bidi@1.1.0: + resolution: {integrity: sha512-HislCEczCuamWm3+55Lig9XKmMF13K+BGKum9rwtDAzgUAHT4h5jNwhDmD4U20VoVUG8ujnv9UZ89qiIf5uF8w==} + peerDependencies: + devtools-protocol: '*' + ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} @@ -3693,6 +3779,10 @@ packages: resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} engines: {node: '>=12'} + data-uri-to-buffer@6.0.2: + resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} + engines: {node: '>= 14'} + data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} @@ -3773,6 +3863,10 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} + degenerator@5.0.1: + resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} + engines: {node: '>= 14'} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -3806,6 +3900,9 @@ packages: detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + devtools-protocol@0.0.1380148: + resolution: {integrity: sha512-1CJABgqLxbYxVI+uJY/UDUHJtJ0KZTSjNYJYKqd9FRoXT33WDakDHNxRapMEgzeJ/C3rcs01+avshMnPmKQbvA==} + diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} @@ -4045,6 +4142,11 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + eslint-config-prettier@9.1.0: resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true @@ -4223,6 +4325,9 @@ packages: fast-diff@1.3.0: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} @@ -4486,6 +4591,10 @@ packages: get-tsconfig@4.10.0: resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} + get-uri@6.0.4: + resolution: {integrity: sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==} + engines: {node: '>= 14'} + gifwrap@0.10.1: resolution: {integrity: sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw==} @@ -5409,6 +5518,9 @@ packages: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -5490,6 +5602,10 @@ packages: resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} engines: {node: '>= 0.6'} + netmask@2.0.2: + resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + engines: {node: '>= 0.4.0'} + new-github-issue-url@0.2.1: resolution: {integrity: sha512-md4cGoxuT4T4d/HDOXbrUHkTKrp/vp+m3aOA7XXVYwNsUNMK49g3SQicTSeV5GIz/5QVGAeYRAOlyp9OvlgsYA==} engines: {node: '>=10'} @@ -5706,6 +5822,14 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + pac-proxy-agent@7.2.0: + resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} + engines: {node: '>= 14'} + + pac-resolver@7.0.1: + resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} + engines: {node: '>= 14'} + package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} @@ -5952,6 +6076,10 @@ packages: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} + proxy-agent@6.5.0: + resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} + engines: {node: '>= 14'} + proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} @@ -5969,6 +6097,10 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + puppeteer-core@24.1.1: + resolution: {integrity: sha512-7FF3gq6bpIsbq3I8mfbodXh3DCzXagoz3l2eGv1cXooYU4g0P4mcHQVHuBD4iSZPXNg8WjzlP5kmRwK9UvwF0A==} + engines: {node: '>=18'} + qs@6.13.0: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} @@ -6567,6 +6699,10 @@ packages: resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} engines: {node: '>= 10'} + socks-proxy-agent@8.0.5: + resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} + engines: {node: '>= 14'} + socks@2.8.4: resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} @@ -6645,6 +6781,9 @@ packages: resolution: {integrity: sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==} engines: {node: '>= 0.10.0'} + streamx@2.22.0: + resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} + strict-event-emitter@0.5.1: resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} @@ -6770,6 +6909,12 @@ packages: tailwind-merge@2.5.5: resolution: {integrity: sha512-0LXunzzAZzo0tEPxV3I297ffKZPlKDrjj7NXphC8V5ak9yHC5zRmxnOe2m/Rd/7ivsOMJe3JZ2JVocoDdQTRBA==} + tar-fs@3.0.8: + resolution: {integrity: sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==} + + tar-stream@3.1.7: + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + tar@6.2.1: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} @@ -6789,6 +6934,9 @@ packages: resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} engines: {node: '>=18'} + text-decoder@1.2.3: + resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + text-extensions@2.4.0: resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} engines: {node: '>=8'} @@ -6995,6 +7143,9 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} + typed-query-selector@2.12.0: + resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} + typescript@4.9.4: resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==} engines: {node: '>=4.2.0'} @@ -7016,6 +7167,9 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} + unbzip2-stream@1.4.3: + resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} @@ -7447,6 +7601,9 @@ packages: peerDependencies: zod: ^3.24.1 + zod@3.24.1: + resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} + zod@3.24.2: resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} @@ -9810,6 +9967,20 @@ snapshots: '@popperjs/core@2.11.8': {} + '@puppeteer/browsers@2.7.0': + dependencies: + debug: 4.4.0 + extract-zip: 2.0.1 + progress: 2.0.3 + proxy-agent: 6.5.0 + semver: 7.7.1 + tar-fs: 3.0.8 + unbzip2-stream: 1.4.3 + yargs: 17.7.2 + transitivePeerDependencies: + - bare-buffer + - supports-color + '@rollup/rollup-android-arm-eabi@4.34.6': optional: true @@ -9887,6 +10058,16 @@ snapshots: transitivePeerDependencies: - '@rspack/tracing' + '@rslib/core@0.5.3(typescript@5.7.3)': + dependencies: + '@rsbuild/core': 1.2.17 + rsbuild-plugin-dts: 0.5.3(@rsbuild/core@1.2.17)(typescript@5.7.3) + tinyglobby: 0.2.12 + optionalDependencies: + typescript: 5.7.3 + transitivePeerDependencies: + - '@rspack/tracing' + '@rslib/core@0.5.4(typescript@5.7.3)': dependencies: '@rsbuild/core': 1.2.17 @@ -9978,6 +10159,8 @@ snapshots: '@tootallnate/once@2.0.0': {} + '@tootallnate/quickjs-emscripten@0.23.0': {} + '@trivago/prettier-plugin-sort-imports@5.2.2(@vue/compiler-sfc@3.5.13)(prettier@3.5.0)': dependencies: '@babel/generator': 7.26.8 @@ -10352,6 +10535,24 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitest/coverage-v8@3.0.7(vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4))': + dependencies: + '@ampproject/remapping': 2.3.0 + '@bcoe/v8-coverage': 1.0.2 + debug: 4.4.0 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.1.7 + magic-string: 0.30.17 + magicast: 0.3.5 + std-env: 3.8.0 + test-exclude: 7.0.1 + tinyrainbow: 2.0.0 + vitest: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4) + transitivePeerDependencies: + - supports-color + '@vitest/coverage-v8@3.0.8': dependencies: '@ampproject/remapping': 2.3.0 @@ -10401,6 +10602,15 @@ snapshots: msw: 2.7.0(@types/node@20.14.8)(typescript@4.9.4) vite: 5.4.14(@types/node@20.14.8)(sass-embedded@1.83.4) + '@vitest/mocker@3.0.7(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(vite@5.4.14(@types/node@20.14.8)(sass-embedded@1.83.4))': + dependencies: + '@vitest/spy': 3.0.7 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + msw: 2.7.0(@types/node@20.14.8)(typescript@5.7.3) + vite: 5.4.14(@types/node@20.14.8)(sass-embedded@1.83.4) + '@vitest/pretty-format@3.0.5': dependencies: tinyrainbow: 2.0.0 @@ -10694,6 +10904,10 @@ snapshots: assertion-error@2.0.1: {} + ast-types@0.13.4: + dependencies: + tslib: 2.8.1 + async-function@1.0.0: {} async-retry@1.3.3: @@ -10728,6 +10942,8 @@ snapshots: transitivePeerDependencies: - debug + b4a@1.6.7: {} + babel-plugin-macros@3.1.0: dependencies: '@babel/runtime': 7.26.7 @@ -10736,6 +10952,33 @@ snapshots: balanced-match@1.0.2: {} + bare-events@2.5.4: + optional: true + + bare-fs@4.0.1: + dependencies: + bare-events: 2.5.4 + bare-path: 3.0.0 + bare-stream: 2.6.5(bare-events@2.5.4) + transitivePeerDependencies: + - bare-buffer + optional: true + + bare-os@3.6.0: + optional: true + + bare-path@3.0.0: + dependencies: + bare-os: 3.6.0 + optional: true + + bare-stream@2.6.5(bare-events@2.5.4): + dependencies: + streamx: 2.22.0 + optionalDependencies: + bare-events: 2.5.4 + optional: true + base32-encode@1.2.0: dependencies: to-data-view: 1.1.0 @@ -10743,6 +10986,8 @@ snapshots: base64-js@1.5.1: {} + basic-ftp@5.0.5: {} + before-after-hook@2.2.3: {} better-path-resolve@1.0.0: @@ -10931,6 +11176,12 @@ snapshots: chrome-trace-event@1.0.4: {} + chromium-bidi@1.1.0(devtools-protocol@0.0.1380148): + dependencies: + devtools-protocol: 0.0.1380148 + mitt: 3.0.1 + zod: 3.24.1 + ci-info@3.9.0: {} clean-stack@2.2.0: {} @@ -11141,6 +11392,8 @@ snapshots: dargs@8.1.0: {} + data-uri-to-buffer@6.0.2: {} + data-view-buffer@1.0.2: dependencies: call-bound: 1.0.3 @@ -11207,6 +11460,12 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + degenerator@5.0.1: + dependencies: + ast-types: 0.13.4 + escodegen: 2.1.0 + esprima: 4.0.1 + delayed-stream@1.0.0: {} depd@2.0.0: {} @@ -11226,6 +11485,8 @@ snapshots: detect-node@2.1.0: optional: true + devtools-protocol@0.0.1380148: {} + diff@4.0.2: {} dir-compare@4.2.0: @@ -11623,6 +11884,14 @@ snapshots: escape-string-regexp@4.0.0: {} + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + eslint-config-prettier@9.1.0(eslint@8.57.1): dependencies: eslint: 8.57.1 @@ -11903,6 +12172,8 @@ snapshots: fast-diff@1.3.0: {} + fast-fifo@1.3.2: {} + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -12204,6 +12475,14 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 + get-uri@6.0.4: + dependencies: + basic-ftp: 5.0.5 + data-uri-to-buffer: 6.0.2 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + gifwrap@0.10.1: dependencies: image-q: 4.0.0 @@ -13196,6 +13475,8 @@ snapshots: minipass: 3.3.6 yallist: 4.0.0 + mitt@3.0.1: {} + mkdirp@0.5.6: dependencies: minimist: 1.2.8 @@ -13244,6 +13525,32 @@ snapshots: - '@types/node' optional: true + msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3): + dependencies: + '@bundled-es-modules/cookie': 2.0.1 + '@bundled-es-modules/statuses': 1.0.1 + '@bundled-es-modules/tough-cookie': 0.1.6 + '@inquirer/confirm': 5.1.6(@types/node@20.14.8) + '@mswjs/interceptors': 0.37.6 + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/until': 2.1.0 + '@types/cookie': 0.6.0 + '@types/statuses': 2.0.5 + graphql: 16.10.0 + headers-polyfill: 4.0.3 + is-node-process: 1.2.0 + outvariant: 1.4.3 + path-to-regexp: 6.3.0 + picocolors: 1.1.1 + strict-event-emitter: 0.5.1 + type-fest: 4.34.1 + yargs: 17.7.2 + optionalDependencies: + typescript: 5.7.3 + transitivePeerDependencies: + - '@types/node' + optional: true + msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3): dependencies: '@bundled-es-modules/cookie': 2.0.1 @@ -13306,6 +13613,8 @@ snapshots: negotiator@0.6.4: {} + netmask@2.0.2: {} + new-github-issue-url@0.2.1: {} nice-try@1.0.5: {} @@ -13548,6 +13857,24 @@ snapshots: p-try@2.2.0: {} + pac-proxy-agent@7.2.0: + dependencies: + '@tootallnate/quickjs-emscripten': 0.23.0 + agent-base: 7.1.3 + debug: 4.4.0 + get-uri: 6.0.4 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + pac-resolver: 7.0.1 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + + pac-resolver@7.0.1: + dependencies: + degenerator: 5.0.1 + netmask: 2.0.2 + package-json-from-dist@1.0.1: {} package-manager-detector@0.2.9: {} @@ -13737,6 +14064,19 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 + proxy-agent@6.5.0: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + lru-cache: 7.18.3 + pac-proxy-agent: 7.2.0 + proxy-from-env: 1.1.0 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + proxy-from-env@1.1.0: {} psl@1.15.0: @@ -13752,6 +14092,20 @@ snapshots: punycode@2.3.1: {} + puppeteer-core@24.1.1: + dependencies: + '@puppeteer/browsers': 2.7.0 + chromium-bidi: 1.1.0(devtools-protocol@0.0.1380148) + debug: 4.4.0 + devtools-protocol: 0.0.1380148 + typed-query-selector: 2.12.0 + ws: 8.18.0 + transitivePeerDependencies: + - bare-buffer + - bufferutil + - supports-color + - utf-8-validate + qs@6.13.0: dependencies: side-channel: 1.1.0 @@ -14085,6 +14439,17 @@ snapshots: optionalDependencies: typescript: 4.9.4 + rsbuild-plugin-dts@0.5.3(@rsbuild/core@1.2.17)(typescript@5.7.3): + dependencies: + '@ast-grep/napi': 0.35.0 + '@rsbuild/core': 1.2.17 + magic-string: 0.30.17 + picocolors: 1.1.1 + tinyglobby: 0.2.12 + tsconfig-paths: 4.2.0 + optionalDependencies: + typescript: 5.7.3 + rsbuild-plugin-dts@0.5.4(@rsbuild/core@1.2.17)(typescript@5.7.3): dependencies: '@ast-grep/napi': 0.36.0 @@ -14409,6 +14774,14 @@ snapshots: transitivePeerDependencies: - supports-color + socks-proxy-agent@8.0.5: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0 + socks: 2.8.4 + transitivePeerDependencies: + - supports-color + socks@2.8.4: dependencies: ip-address: 9.0.5 @@ -14482,6 +14855,13 @@ snapshots: stream-buffers@2.2.0: optional: true + streamx@2.22.0: + dependencies: + fast-fifo: 1.3.2 + text-decoder: 1.2.3 + optionalDependencies: + bare-events: 2.5.4 + strict-event-emitter@0.5.1: {} string-argv@0.3.2: {} @@ -14620,6 +15000,22 @@ snapshots: tailwind-merge@2.5.5: {} + tar-fs@3.0.8: + dependencies: + pump: 3.0.2 + tar-stream: 3.1.7 + optionalDependencies: + bare-fs: 4.0.1 + bare-path: 3.0.0 + transitivePeerDependencies: + - bare-buffer + + tar-stream@3.1.7: + dependencies: + b4a: 1.6.7 + fast-fifo: 1.3.2 + streamx: 2.22.0 + tar@6.2.1: dependencies: chownr: 2.0.0 @@ -14645,6 +15041,10 @@ snapshots: glob: 10.4.5 minimatch: 9.0.5 + text-decoder@1.2.3: + dependencies: + b4a: 1.6.7 + text-extensions@2.4.0: {} text-table@0.2.0: {} @@ -14856,6 +15256,8 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 + typed-query-selector@2.12.0: {} + typescript@4.9.4: {} typescript@5.7.3: {} @@ -14871,6 +15273,11 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 + unbzip2-stream@1.4.3: + dependencies: + buffer: 5.7.1 + through: 2.3.8 + undici-types@5.26.5: {} undici-types@6.19.8: {} @@ -15123,6 +15530,43 @@ snapshots: - supports-color - terser + vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4): + dependencies: + '@vitest/expect': 3.0.7 + '@vitest/mocker': 3.0.7(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(vite@5.4.14(@types/node@20.14.8)(sass-embedded@1.83.4)) + '@vitest/pretty-format': 3.0.8 + '@vitest/runner': 3.0.7 + '@vitest/snapshot': 3.0.7 + '@vitest/spy': 3.0.7 + '@vitest/utils': 3.0.7 + chai: 5.2.0 + debug: 4.4.0 + expect-type: 1.1.0 + magic-string: 0.30.17 + pathe: 2.0.3 + std-env: 3.8.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinypool: 1.0.2 + tinyrainbow: 2.0.0 + vite: 5.4.14(@types/node@20.14.8)(sass-embedded@1.83.4) + vite-node: 3.0.7(@types/node@20.14.8)(sass-embedded@1.83.4) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/debug': 4.1.12 + '@types/node': 20.14.8 + happy-dom: 17.1.1 + transitivePeerDependencies: + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + wcwidth@1.0.1: dependencies: defaults: 1.0.4 @@ -15296,6 +15740,8 @@ snapshots: dependencies: zod: 3.24.2 + zod@3.24.1: {} + zod@3.24.2: {} zustand@5.0.3(@types/react@18.3.18)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)): From 0062cf918d02f5930477e288530e71cffa98cefe Mon Sep 17 00:00:00 2001 From: chenhaoli Date: Sun, 16 Mar 2025 19:16:42 +0800 Subject: [PATCH 50/62] feat(agent-infra): init search --- .gitignore | 1 + .../agent-infra/search/bing-search/README.md | 143 ++++++++++ .../search/bing-search/examples/default.ts | 29 ++ .../search/bing-search/package.json | 40 +++ .../search/bing-search/rslib.config.ts | 39 +++ .../search/bing-search/src/api-client.ts | 260 ++++++++++++++++++ .../search/bing-search/src/config.ts | 54 ++++ .../search/bing-search/src/index.ts | 10 + .../search/bing-search/tsconfig.json | 19 ++ .../search/browser-search/README.md | 186 +++++++++++++ .../benchmark-report-2025-03-13-18-10-20.md | 37 +++ .../browser-search/examples/baidu-search.ts | 37 +++ .../browser-search/examples/benchmark.ts | 225 +++++++++++++++ .../browser-search/examples/bing-search.ts | 36 +++ .../search/browser-search/examples/default.ts | 27 ++ .../browser-search/examples/github-search.ts | 42 +++ .../browser-search/examples/google-search.ts | 36 +++ .../browser-search/examples/headless.ts | 27 ++ .../browser-search/examples/multi-engine.ts | 34 +++ .../browser-search/examples/reuse-browser.ts | 47 ++++ .../search/browser-search/package.json | 42 +++ .../search/browser-search/rslib.config.ts | 39 +++ .../browser-search/src/browser-search.ts | 204 ++++++++++++++ .../src/engines/baidu-engine.ts | 93 +++++++ .../browser-search/src/engines/bing-engine.ts | 91 ++++++ .../src/engines/google-engine.ts | 92 +++++++ .../browser-search/src/engines/index.ts | 31 +++ .../search/browser-search/src/index.ts | 6 + .../search/browser-search/src/types.ts | 84 ++++++ .../search/browser-search/src/utils/misc.ts | 121 ++++++++ .../search/browser-search/src/utils/url.ts | 38 +++ .../search/browser-search/tsconfig.json | 19 ++ packages/agent-infra/search/search/README.md | 244 ++++++++++++++++ .../search/search/examples/bing-search.ts | 33 +++ .../search/search/examples/browser-search.ts | 31 +++ .../search/search/examples/default.ts | 17 ++ .../search/search/examples/reuse-browser.ts | 65 +++++ .../search/search/examples/tavily-search.ts | 32 +++ .../agent-infra/search/search/package.json | 45 +++ .../agent-infra/search/search/rslib.config.ts | 39 +++ .../agent-infra/search/search/src/index.ts | 194 +++++++++++++ .../agent-infra/search/search/src/tavily.ts | 16 ++ .../agent-infra/search/search/tsconfig.json | 19 ++ pnpm-lock.yaml | 145 ++++++++++ 44 files changed, 3069 insertions(+) create mode 100644 packages/agent-infra/search/bing-search/README.md create mode 100644 packages/agent-infra/search/bing-search/examples/default.ts create mode 100644 packages/agent-infra/search/bing-search/package.json create mode 100644 packages/agent-infra/search/bing-search/rslib.config.ts create mode 100644 packages/agent-infra/search/bing-search/src/api-client.ts create mode 100644 packages/agent-infra/search/bing-search/src/config.ts create mode 100644 packages/agent-infra/search/bing-search/src/index.ts create mode 100644 packages/agent-infra/search/bing-search/tsconfig.json create mode 100644 packages/agent-infra/search/browser-search/README.md create mode 100644 packages/agent-infra/search/browser-search/benchmark/benchmark-report-2025-03-13-18-10-20.md create mode 100644 packages/agent-infra/search/browser-search/examples/baidu-search.ts create mode 100644 packages/agent-infra/search/browser-search/examples/benchmark.ts create mode 100644 packages/agent-infra/search/browser-search/examples/bing-search.ts create mode 100644 packages/agent-infra/search/browser-search/examples/default.ts create mode 100644 packages/agent-infra/search/browser-search/examples/github-search.ts create mode 100644 packages/agent-infra/search/browser-search/examples/google-search.ts create mode 100644 packages/agent-infra/search/browser-search/examples/headless.ts create mode 100644 packages/agent-infra/search/browser-search/examples/multi-engine.ts create mode 100644 packages/agent-infra/search/browser-search/examples/reuse-browser.ts create mode 100644 packages/agent-infra/search/browser-search/package.json create mode 100644 packages/agent-infra/search/browser-search/rslib.config.ts create mode 100644 packages/agent-infra/search/browser-search/src/browser-search.ts create mode 100644 packages/agent-infra/search/browser-search/src/engines/baidu-engine.ts create mode 100644 packages/agent-infra/search/browser-search/src/engines/bing-engine.ts create mode 100644 packages/agent-infra/search/browser-search/src/engines/google-engine.ts create mode 100644 packages/agent-infra/search/browser-search/src/engines/index.ts create mode 100644 packages/agent-infra/search/browser-search/src/index.ts create mode 100644 packages/agent-infra/search/browser-search/src/types.ts create mode 100644 packages/agent-infra/search/browser-search/src/utils/misc.ts create mode 100644 packages/agent-infra/search/browser-search/src/utils/url.ts create mode 100644 packages/agent-infra/search/browser-search/tsconfig.json create mode 100644 packages/agent-infra/search/search/README.md create mode 100644 packages/agent-infra/search/search/examples/bing-search.ts create mode 100644 packages/agent-infra/search/search/examples/browser-search.ts create mode 100644 packages/agent-infra/search/search/examples/default.ts create mode 100644 packages/agent-infra/search/search/examples/reuse-browser.ts create mode 100644 packages/agent-infra/search/search/examples/tavily-search.ts create mode 100644 packages/agent-infra/search/search/package.json create mode 100644 packages/agent-infra/search/search/rslib.config.ts create mode 100644 packages/agent-infra/search/search/src/index.ts create mode 100644 packages/agent-infra/search/search/src/tavily.ts create mode 100644 packages/agent-infra/search/search/tsconfig.json diff --git a/.gitignore b/.gitignore index f47f3bf33..5f4c849fc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ node_modules dist out +.tmp .DS_Store *.log* .eslintcache diff --git a/packages/agent-infra/search/bing-search/README.md b/packages/agent-infra/search/bing-search/README.md new file mode 100644 index 000000000..ba4b1ece3 --- /dev/null +++ b/packages/agent-infra/search/bing-search/README.md @@ -0,0 +1,143 @@ +# @agent-infra/bing-search + +

    + npm version + downloads + node version + license +

    + +A lightweight TypeScript client for Bing Search API, designed for AI applications. + +## Features + +- **Type-safe**: Full TypeScript support with comprehensive type definitions +- **Configurable**: Customizable search parameters and API settings +- **Minimal**: Zero external runtime dependencies +- **Developer-friendly**: Clean API with Promise-based interface + +## Installation + +```bash +npm install @agent-infra/bing-search +# or +yarn add @agent-infra/bing-search +# or +pnpm add @agent-infra/bing-search +``` + +## Usage + +### Basic Search + +```typescript +import { BingSearchClient } from '@agent-infra/bing-search'; + +const client = new BingSearchClient({ + apiKey: 'YOUR_API_KEY', +}); + +const results = await client.search({ + q: 'climate change', + count: 5, +}); + +console.log(results.webPages?.value); +``` + +### With Environment Variables + +```typescript +// Set in your environment: +// BING_SEARCH_API_KEY=your-api-key + +import { BingSearchClient } from '@agent-infra/bing-search'; + +const client = new BingSearchClient(); +const results = await client.search({ q: 'renewable energy' }); +``` + +### With Custom Logger + +```typescript +import { ConsoleLogger } from '@agent-infra/logger'; +import { BingSearchClient } from '@agent-infra/bing-search'; + +const logger = new ConsoleLogger('[BingSearch]'); +const client = new BingSearchClient({ + apiKey: 'YOUR_API_KEY', + logger, +}); + +const results = await client.search({ q: 'machine learning' }); +``` + +## API Reference + +### BingSearchClient + +```typescript +constructor(config?: Partial) +``` + +Configuration options: + +```typescript +interface BingSearchConfig { + baseUrl?: string; // Default: 'https://api.bing.microsoft.com/v7.0' + apiKey?: string; // Bing API subscription key + headers?: Record; + logger?: Logger; +} +``` + +### Search Method + +```typescript +async search(params: BingSearchOptions): Promise +``` + +Search options: + +```typescript +interface BingSearchOptions { + q: string; // Search query (required) + count?: number; // Number of results to return + offset?: number; // Result offset for pagination + mkt?: string; // Market code (e.g., 'en-US') + safeSearch?: 'Off' | 'Moderate' | 'Strict'; + [key: string]: any; // Additional parameters +} +``` + +### Response Types + +```typescript +interface BingSearchResponse { + webPages?: { + value: WebPage[]; + totalEstimatedMatches?: number; + webSearchUrl?: string; + }; + images?: { + value: Image[]; + // ... + }; + videos?: { + value: Video[]; + // ... + }; + // Additional response fields +} +``` + +## Examples + +See [examples](./examples/). + + +## License + +Copyright (c) 2025 ByteDance, Inc. and its affiliates. + +Licensed under the Apache License, Version 2.0. diff --git a/packages/agent-infra/search/bing-search/examples/default.ts b/packages/agent-infra/search/bing-search/examples/default.ts new file mode 100644 index 000000000..06e8c1e37 --- /dev/null +++ b/packages/agent-infra/search/bing-search/examples/default.ts @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { ConsoleLogger } from '@agent-infra/logger'; +import { BingSearchClient } from '../src'; + +async function runExample() { + const logger = new ConsoleLogger('[BingSearch]'); + try { + const client = new BingSearchClient({ + baseUrl: process.env.BING_SEARCH_API_BASE_URL, + apiKey: process.env.BING_SEARCH_API_KEY, + logger, + }); + const results = await client.search({ + q: 'UI-TARS', + count: 5, + }); + console.log(JSON.stringify(results.webPages, null, 2)); + console.log(`Found ${results.webPages?.value.length || 0} results`); + } catch (error) { + console.error('Search with options failed:', error); + } +} + +if (require.main === module) { + runExample().catch(console.error); +} diff --git a/packages/agent-infra/search/bing-search/package.json b/packages/agent-infra/search/bing-search/package.json new file mode 100644 index 000000000..7abb7449f --- /dev/null +++ b/packages/agent-infra/search/bing-search/package.json @@ -0,0 +1,40 @@ +{ + "name": "@agent-infra/bing-search", + "version": "0.0.1", + "main": "dist/index.js", + "module": "dist/index.mjs", + "types": "dist/index.d.ts", + "exports": { + ".": { + "import": "./dist/index.mjs", + "require": "./dist/index.js", + "types": "./dist/index.d.ts" + } + }, + "files": [ + "dist" + ], + "scripts": { + "dev": "rslib build --watch", + "build": "rslib build", + "prepare": "npm run build", + "prepublishOnly": "pnpm run build", + "test": "vitest run", + "test:watch": "vitest", + "test:e2e": "vitest --config vitest.e2e.config.ts", + "coverage": "vitest run --coverage", + "run:example": "ts-node scripts/example.ts" + }, + "dependencies": { + "@agent-infra/logger": "workspace:*" + }, + "devDependencies": { + "@types/node": "20.14.8", + "rimraf": "4.1.0", + "typescript": "4.9.4", + "vitest": "3.0.7", + "@vitest/coverage-v8": "3.0.7", + "ts-node": "10.9.2", + "@rslib/core": "0.5.3" + } +} \ No newline at end of file diff --git a/packages/agent-infra/search/bing-search/rslib.config.ts b/packages/agent-infra/search/bing-search/rslib.config.ts new file mode 100644 index 000000000..1fc953b4c --- /dev/null +++ b/packages/agent-infra/search/bing-search/rslib.config.ts @@ -0,0 +1,39 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { defineConfig } from '@rslib/core'; + +const BANNER = `/** +* Copyright (c) 2025 Bytedance, Inc. and its affiliates. +* SPDX-License-Identifier: Apache-2.0 +*/`; + +export default defineConfig({ + source: { + entry: { + index: ['src/**/*.ts', '!src/**/*.{test,bench}.ts'], + }, + }, + lib: [ + { + format: 'esm', + syntax: 'es2021', + bundle: false, + dts: true, + banner: { js: BANNER }, + }, + { + format: 'cjs', + syntax: 'es2021', + bundle: false, + dts: true, + banner: { js: BANNER }, + }, + ], + output: { + target: 'web', + cleanDistPath: true, + sourceMap: true, + }, +}); diff --git a/packages/agent-infra/search/bing-search/src/api-client.ts b/packages/agent-infra/search/bing-search/src/api-client.ts new file mode 100644 index 000000000..64cc358f3 --- /dev/null +++ b/packages/agent-infra/search/bing-search/src/api-client.ts @@ -0,0 +1,260 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { Logger, defaultLogger } from '@agent-infra/logger'; +import { BingSearchConfig, getBingSearchConfig } from './config'; + +/** + * Options for performing a Bing search + */ +export interface BingSearchOptions { + /** + * Search query string + */ + q: string; + + /** + * Number of results to return + */ + count?: number; + + /** + * Result offset for pagination + */ + offset?: number; + + /** + * Market code (e.g., 'en-US') + */ + mkt?: string; + + /** + * Safe search filtering level + */ + safeSearch?: 'Off' | 'Moderate' | 'Strict'; + + /** + * Additional parameters supported by Bing Search API + */ + [key: string]: any; +} + +/** + * Represents a web page result from Bing Search + */ +export interface WebPage { + /** + * Title of the web page + */ + name: string; + + /** + * URL of the web page + */ + url: string; + + /** + * Text snippet from the web page + */ + snippet: string; + + /** + * Date the page was last crawled by Bing + */ + dateLastCrawled?: string; + + /** + * Display URL for the web page + */ + displayUrl?: string; + + /** + * Unique identifier for the result + */ + id?: string; + + /** + * Indicates if the content is family friendly + */ + isFamilyFriendly?: boolean; + + /** + * Indicates if the result is navigational + */ + isNavigational?: boolean; + + /** + * Language of the web page + */ + language?: string; + + /** + * Indicates if caching should be disabled + */ + noCache?: boolean; + + /** + * Name of the website + */ + siteName?: string; + + /** + * URL to a thumbnail image + */ + thumbnailUrl?: string; +} + +/** + * Represents an image result from Bing Search + */ +export interface Image { + contentSize: string; + contentUrl: string; + datePublished: string; + encodingFormat: string; + height: number; + width: number; + hostPageDisplayUrl: string; + hostPageUrl: string; + name: string; + thumbnail: { + height: number; + width: number; + }; + thumbnailUrl: string; + webSearchUrl: string; +} + +/** + * Represents a video result from Bing Search + */ +export interface Video { + allowHttpsEmbed: boolean; + allowMobileEmbed: boolean; + contentUrl: string; + creator?: { + name: string; + }; + datePublished: string; + description: string; + duration: string; + embedHtml: string; + encodingFormat: string; + height: number; + width: number; + hostPageDisplayUrl: string; + hostPageUrl: string; + name: string; + publisher?: { + name: string; + }[]; + thumbnail: { + height: number; + width: number; + }; + thumbnailUrl: string; + viewCount?: number; + webSearchUrl: string; +} + +export interface BingSearchResponse { + _type?: string; + queryContext?: { + originalQuery: string; + }; + webPages?: { + value: WebPage[]; + totalEstimatedMatches?: number; + someResultsRemoved?: boolean; + webSearchUrl?: string; + }; + images?: { + value: Image[]; + isFamilyFriendly?: boolean; + readLink?: string; + webSearchUrl?: string; + id?: string; + }; + videos?: { + value: Video[]; + isFamilyFriendly?: boolean; + readLink?: string; + webSearchUrl?: string; + id?: string; + scenario?: string; + }; + rankingResponse?: { + mainline?: { + items: { + answerType: string; + resultIndex?: number; + value: { + id: string; + }; + }[]; + }; + }; + [key: string]: any; // Allow other response fields +} + +/** + * Client for interacting with Bing Search API + */ +export class BingSearchClient { + private config: BingSearchConfig; + private logger: Logger; + + /** + * Creates a new instance of BingSearchClient + * + * @param config - Configuration options for the client + */ + constructor(config?: Partial) { + // Merge default config with user-provided config + this.config = getBingSearchConfig(config); + this.logger = config?.logger ?? defaultLogger; + this.logger.log('client config', this.config); + } + + /** + * Perform Bing search + * @param params Search parameters + * @returns Search results + */ + async search(params: BingSearchOptions): Promise { + this.logger.log('search params', params); + const { baseUrl, headers } = this.config; + + // Build query parameters + const queryParams = new URLSearchParams(); + Object.entries(params).forEach(([key, value]) => { + if (value !== undefined) { + queryParams.append(key, value.toString()); + } + }); + + try { + const response = await fetch(`${baseUrl}?${queryParams}`, { + method: 'GET', + headers: { + ...headers, + }, + }); + + if (!response.ok) { + throw new Error( + `Bing search failed: ${response.status} ${response.statusText}`, + ); + } + + return await response.json(); + } catch (error) { + console.error('Error performing Bing search:', error); + throw error; + } + } +} + +export const bingSearchClient = new BingSearchClient(); diff --git a/packages/agent-infra/search/bing-search/src/config.ts b/packages/agent-infra/search/bing-search/src/config.ts new file mode 100644 index 000000000..5d06dfac9 --- /dev/null +++ b/packages/agent-infra/search/bing-search/src/config.ts @@ -0,0 +1,54 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { Logger } from '@agent-infra/logger'; + +/** + * Bing Search API configuration interface + */ +export interface BingSearchConfig { + /** + * API base URL + */ + baseUrl?: string; + + /** + * API key + */ + apiKey?: string; + + /** + * Headers configuration + */ + headers?: Record; + + /** + * Logger + */ + logger?: Logger; +} + +/** + * Get Bing Search configuration + */ +export function getBingSearchConfig( + options?: Partial, +): BingSearchConfig { + const apiKey = options?.apiKey || process.env.BING_SEARCH_API_KEY || ''; + const baseUrl = + options?.baseUrl || + process.env.BING_SEARCH_API_BASE_URL || + 'https://api.bing.microsoft.com/v7.0'; + + return { + baseUrl, + apiKey, + headers: { + 'Ocp-Apim-Subscription-Key': apiKey, + ...options?.headers, + }, + }; +} + +export default getBingSearchConfig(); diff --git a/packages/agent-infra/search/bing-search/src/index.ts b/packages/agent-infra/search/bing-search/src/index.ts new file mode 100644 index 000000000..503b1cc2f --- /dev/null +++ b/packages/agent-infra/search/bing-search/src/index.ts @@ -0,0 +1,10 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +export { + BingSearchClient, + type BingSearchOptions, + type BingSearchResponse, +} from './api-client'; +export { getBingSearchConfig, type BingSearchConfig } from './config'; diff --git a/packages/agent-infra/search/bing-search/tsconfig.json b/packages/agent-infra/search/bing-search/tsconfig.json new file mode 100644 index 000000000..f39494ea7 --- /dev/null +++ b/packages/agent-infra/search/bing-search/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "commonjs", + "moduleResolution": "node", + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "outDir": "./dist", + "strict": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "isolatedModules": true, + "skipLibCheck": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/agent-infra/search/browser-search/README.md b/packages/agent-infra/search/browser-search/README.md new file mode 100644 index 000000000..38bdeb51c --- /dev/null +++ b/packages/agent-infra/search/browser-search/README.md @@ -0,0 +1,186 @@ +# @agent-infra/browser-search + +

    + npm version + downloads + node version + license +

    + +English | [简体中文](./README.zh-CN.md) + +A tiny stealth-mode web search and content extraction library built on top of Puppeteer, inspired by [EGOIST](https://github.com/egoist)'s [local-web-search](https://github.com/egoist/local-web-search). + +## Features + +- 🔍 **Multi-Engine Search** - Support for Google, Bing, and Baidu search engines +- 📑 **Content Extraction** - Extract readable content from web pages using Readability +- 🚀 **Concurrent Processing** - Built-in queue system for efficient parallel processing +- 🛡️ **Stealth Mode** - Advanced browser fingerprint spoofing +- 📝 **Markdown Output** - Automatically converts HTML content to clean Markdown +- ⚡ **Performance Optimized** - Smart request interception for faster page loads + +## Installation + +```bash +npm install @agent-infra/browser-search +# or +yarn add @agent-infra/browser-search +# or +pnpm add @agent-infra/browser-search +``` + +## Quick Start + +```typescript +import { BrowserSearch } from '@agent-infra/browser-search'; +import { ConsoleLogger } from '@agent-infra/logger'; + +// Create a logger (optional) +const logger = new ConsoleLogger('[BrowserSearch]'); + +// Initialize the search client +const browserSearch = new BrowserSearch({ + logger, + browserOptions: { + headless: true, + }, +}); + +// Perform a search +const results = await browserSearch.perform({ + query: 'climate change solutions', + count: 5, +}); + +console.log(`Found ${results.length} results`); +results.forEach((result) => { + console.log(`Title: ${result.title}`); + console.log(`URL: ${result.url}`); + console.log(`Content preview: ${result.content.substring(0, 150)}...`); +}); +``` + +## API Reference + +### BrowserSearch + +#### Constructor + +```typescript +constructor(config?: BrowserSearchConfig) +``` + +Configuration options: + +```typescript +interface BrowserSearchConfig { + logger?: Logger; // Custom logger + browser?: BrowserInterface; // Custom browser instance +} +``` + +#### perform(options) + +Performs a search and extracts content from result pages. + +```typescript +async perform(options: BrowserSearchOptions): Promise +``` + +Search options: + +```typescript +interface BrowserSearchOptions { + query: string | string[]; // Search query or array of queries + count?: number; // Maximum results to fetch + concurrency?: number; // Concurrent requests (default: 15) + excludeDomains?: string[]; // Domains to exclude + truncate?: number; // Truncate content length + browserOptions?: { + headless?: boolean; // Run in headless mode + proxy?: string; // Proxy server + executablePath?: string; // Custom browser path + profilePath?: string; // Browser profile path + }; +} +``` + +#### Response Type + +```typescript +interface SearchResult { + title: string; // Page title + url: string; // Page URL + content: string; // Extracted content in Markdown format +} +``` + +## Advanced Usage + +### Multiple Queries + +```typescript +const results = await browserSearch.perform({ + query: ['renewable energy', 'solar power technology'], + count: 10, // Will fetch approximately 5 results per query + concurrency: 5, +}); +``` + +### Domain Exclusion + +```typescript +const results = await browserSearch.perform({ + query: 'artificial intelligence', + excludeDomains: ['reddit.com', 'twitter.com', 'youtube.com'], + count: 10, +}); +``` + +### Content Truncation + +```typescript +const results = await browserSearch.perform({ + query: 'machine learning', + count: 5, + truncate: 1000, // Limit content to 1000 characters +}); +``` + +### Using with Custom Browser Instance + +```typescript +import { ChromeBrowser } from '@agent-infra/browser'; +import { BrowserSearch } from '@agent-infra/browser-search'; + +const browser = new ChromeBrowser({ + // Custom browser configuration +}); + +const browserSearch = new BrowserSearch({ + browser, +}); + +const results = await browserSearch.perform({ + query: 'typescript best practices', +}); +``` + +## Examples + +See [examples](./examples/). + + +## Credits + +Thanks to: + +- [EGOIST](https://github.com/egoist) for creating a great AI chatbot product [ChatWise](https://chatwise.app/) from which we draw a lot of inspiration for local-browser based search. +- The [puppeteer](https://github.com/puppeteer/puppeteer) project which helps us operate the browser better. + +## License + +Copyright (c) 2025 ByteDance, Inc. and its affiliates. + +Licensed under the Apache License, Version 2.0. diff --git a/packages/agent-infra/search/browser-search/benchmark/benchmark-report-2025-03-13-18-10-20.md b/packages/agent-infra/search/browser-search/benchmark/benchmark-report-2025-03-13-18-10-20.md new file mode 100644 index 000000000..e174c1246 --- /dev/null +++ b/packages/agent-infra/search/browser-search/benchmark/benchmark-report-2025-03-13-18-10-20.md @@ -0,0 +1,37 @@ +# Browser Search Benchmark Report + +- **Date:** 3/13/2025, 6:10:20 PM +- **System:** Darwin 24.3.0 (arm64) +- **CPU:** Apple M1 Max × 10 cores +- **Memory:** 64 GB +- **Node.js:** v20.13.1 + +## Benchmark Configuration + +- **Query:** "GUI Agent" +- **Runs per engine:** 10 +- **Results per run:** 5 +- **Headless mode:** true + +## Results + +| Engine | Total Results | Avg Results/Run | Total Time (ms) | Avg Time/Run (ms) | Min Time (ms) | Max Time (ms) | +| ------ | ------------: | --------------: | --------------: | ----------------: | ------------: | ------------: | +| BAIDU | 50 | 5.00 | 35081.60 | 3508.16 | 2396.97 | 6664.79 | +| BING | 200 | 20.00 | 52344.54 | 5234.45 | 4393.95 | 7213.10 | +| GOOGLE | 50 | 5.00 | 76994.49 | 7699.45 | 4276.44 | 15904.73 | + +## Performance Comparison + +The fastest engine was **BAIDU** with an average run time of 3508.16ms. + +- **BING** was 49.21% slower than BAIDU +- **GOOGLE** was 119.47% slower than BAIDU + +## Result Quality Comparison + +| Engine | Avg Results/Run | Notes | +| ------ | --------------: | ----- | +| BAIDU | 5.00 | Excellent result delivery rate | +| BING | 20.00 | Excellent result delivery rate | +| GOOGLE | 5.00 | Excellent result delivery rate | \ No newline at end of file diff --git a/packages/agent-infra/search/browser-search/examples/baidu-search.ts b/packages/agent-infra/search/browser-search/examples/baidu-search.ts new file mode 100644 index 000000000..a5a2bf05f --- /dev/null +++ b/packages/agent-infra/search/browser-search/examples/baidu-search.ts @@ -0,0 +1,37 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { ConsoleLogger } from '@agent-infra/logger'; +import { BrowserSearch } from '../src'; + +export async function baiduSearch() { + const logger = new ConsoleLogger('[BaiduSearch]'); + const browserSearch = new BrowserSearch({ + logger, + browserOptions: { + headless: false, + }, + }); + + try { + logger.info('Performing Baidu search'); + const results = await browserSearch.perform({ + query: 'GUI Agent', + count: 5, + engine: 'baidu', + }); + + logger.info(`Baidu search found ${results.length} results`); + logger.info(JSON.stringify(results, null, 2)); + + return results; + } finally { + await browserSearch.closeBrowser(); + } +} + +// Execute when this file is run directly +if (require.main === module) { + baiduSearch().catch(console.error); +} diff --git a/packages/agent-infra/search/browser-search/examples/benchmark.ts b/packages/agent-infra/search/browser-search/examples/benchmark.ts new file mode 100644 index 000000000..203df4f36 --- /dev/null +++ b/packages/agent-infra/search/browser-search/examples/benchmark.ts @@ -0,0 +1,225 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { ConsoleLogger, LogLevel } from '@agent-infra/logger'; +import { BrowserSearch } from '../src'; +import path from 'path'; +import fs from 'fs'; +import os from 'os'; +import { performance } from 'perf_hooks'; + +interface BenchmarkResult { + engine: string; + runs: number; + totalResults: number; + avgResultsPerRun: number; + totalTime: number; + avgTimePerRun: number; + minTime: number; + maxTime: number; +} + +async function runBenchmark() { + const logger = new ConsoleLogger('[BrowserSearch Benchmark]', LogLevel.INFO); + + // Configuration + const QUERY = 'GUI Agent'; + const RUNS = 10; + const COUNT_PER_RUN = 5; + const ENGINES = ['google', 'bing', 'baidu'] as const; + + // Create temp directory for results + const tmpDir = path.join(process.cwd(), '.tmp'); + if (!fs.existsSync(tmpDir)) { + fs.mkdirSync(tmpDir, { recursive: true }); + } + + logger.info(`Starting benchmark for query: "${QUERY}"`); + logger.info(`Runs per engine: ${RUNS}`); + logger.info(`Results per run: ${COUNT_PER_RUN}`); + logger.info(`Results will be saved to: ${tmpDir}`); + + const benchmarkResults: BenchmarkResult[] = []; + + for (const engine of ENGINES) { + logger.info(`\n=== Testing ${engine.toUpperCase()} search engine ===`); + + const browserSearch = new BrowserSearch({ + logger, + browserOptions: { + headless: true, + }, + defaultEngine: engine as any, + }); + + const runTimes: number[] = []; + let totalResults = 0; + + try { + for (let i = 0; i < RUNS; i++) { + logger.info(`Run ${i + 1}/${RUNS}`); + + const startTime = performance.now(); + + const results = await browserSearch.perform({ + query: QUERY, + count: COUNT_PER_RUN, + engine: engine as any, + keepBrowserOpen: i < RUNS - 1, // Keep browser open except for last run + }); + + const endTime = performance.now(); + const runTime = endTime - startTime; + runTimes.push(runTime); + + totalResults += results.length; + + // Save results to file + const resultsFileName = `${engine}-run-${i + 1}-${Date.now()}.json`; + const resultsFilePath = path.join(tmpDir, resultsFileName); + + fs.writeFileSync( + resultsFilePath, + JSON.stringify(results, null, 2), + 'utf8', + ); + + logger.info( + `Run ${i + 1} completed in ${runTime.toFixed(2)}ms with ${results.length} results`, + ); + logger.info(`Results saved to ${resultsFilePath}`); + } + + const totalTime = runTimes.reduce((sum, time) => sum + time, 0); + const avgTime = totalTime / RUNS; + const minTime = Math.min(...runTimes); + const maxTime = Math.max(...runTimes); + + benchmarkResults.push({ + engine, + runs: RUNS, + totalResults, + avgResultsPerRun: totalResults / RUNS, + totalTime, + avgTimePerRun: avgTime, + minTime, + maxTime, + }); + + logger.success(`${engine.toUpperCase()} benchmark completed`); + } catch (error) { + logger.error(`Error during ${engine} benchmark:`, error); + } finally { + await browserSearch.closeBrowser(); + } + } + + // Generate Markdown report + generateBenchmarkReport(benchmarkResults, QUERY, COUNT_PER_RUN, tmpDir); +} + +function generateBenchmarkReport( + results: BenchmarkResult[], + query: string, + countPerRun: number, + outputDir: string, +) { + const now = new Date(); + const dateStr = now.toISOString().split('T')[0]; + const timeStr = now.toTimeString().split(' ')[0].replace(/:/g, '-'); + + const reportFileName = `benchmark-report-${dateStr}-${timeStr}.md`; + const reportPath = path.join(outputDir, reportFileName); + + const report = [ + '# Browser Search Benchmark Report', + '', + `**Date:** ${now.toLocaleString()}`, + `**System:** ${os.type()} ${os.release()} (${os.arch()})`, + `**CPU:** ${os.cpus()[0].model} × ${os.cpus().length} cores`, + `**Memory:** ${Math.round(os.totalmem() / (1024 * 1024 * 1024))} GB`, + `**Node.js:** ${process.version}`, + '', + '## Benchmark Configuration', + '', + `- **Query:** "${query}"`, + `- **Runs per engine:** ${results[0]?.runs || 0}`, + `- **Results per run:** ${countPerRun}`, + `- **Headless mode:** true`, + '', + '## Results', + '', + '| Engine | Total Results | Avg Results/Run | Total Time (ms) | Avg Time/Run (ms) | Min Time (ms) | Max Time (ms) |', + '| ------ | ------------: | --------------: | --------------: | ----------------: | ------------: | ------------: |', + ]; + + // Sort results by average time (fastest first) + const sortedResults = [...results].sort( + (a, b) => a.avgTimePerRun - b.avgTimePerRun, + ); + + for (const result of sortedResults) { + report.push( + `| ${result.engine.toUpperCase()} | ${result.totalResults} | ${result.avgResultsPerRun.toFixed(2)} | ${result.totalTime.toFixed(2)} | ${result.avgTimePerRun.toFixed(2)} | ${result.minTime.toFixed(2)} | ${result.maxTime.toFixed(2)} |`, + ); + } + + // Add comparison section + if (results.length > 1) { + report.push( + '', + '## Performance Comparison', + '', + `The fastest engine was **${sortedResults[0].engine.toUpperCase()}** with an average run time of ${sortedResults[0].avgTimePerRun.toFixed(2)}ms.`, + '', + ); + + // Calculate relative performance + for (let i = 1; i < sortedResults.length; i++) { + const percentSlower = ( + ((sortedResults[i].avgTimePerRun - sortedResults[0].avgTimePerRun) / + sortedResults[0].avgTimePerRun) * + 100 + ).toFixed(2); + report.push( + `- **${sortedResults[i].engine.toUpperCase()}** was ${percentSlower}% slower than ${sortedResults[0].engine.toUpperCase()}`, + ); + } + + // Add result quality comparison + report.push( + '', + '## Result Quality Comparison', + '', + '| Engine | Avg Results/Run | Notes |', + '| ------ | --------------: | ----- |', + ); + + for (const result of sortedResults) { + const quality = + result.avgResultsPerRun >= countPerRun + ? 'Excellent' + : result.avgResultsPerRun >= countPerRun * 0.8 + ? 'Good' + : result.avgResultsPerRun >= countPerRun * 0.5 + ? 'Fair' + : 'Poor'; + + report.push( + `| ${result.engine.toUpperCase()} | ${result.avgResultsPerRun.toFixed(2)} | ${quality} result delivery rate |`, + ); + } + } + + // Write report to file + fs.writeFileSync(reportPath, report.join('\n'), 'utf8'); + + console.log(`\n✅ Benchmark report generated: ${reportPath}`); + console.log('\n' + report.join('\n')); +} + +if (require.main === module) { + runBenchmark().catch(console.error); +} diff --git a/packages/agent-infra/search/browser-search/examples/bing-search.ts b/packages/agent-infra/search/browser-search/examples/bing-search.ts new file mode 100644 index 000000000..02f0a7c41 --- /dev/null +++ b/packages/agent-infra/search/browser-search/examples/bing-search.ts @@ -0,0 +1,36 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { ConsoleLogger } from '@agent-infra/logger'; +import { BrowserSearch } from '../src'; + +export async function bingSearch() { + const logger = new ConsoleLogger('[BingSearch]'); + const browserSearch = new BrowserSearch({ + logger, + browserOptions: { + headless: false, + }, + }); + + try { + logger.info('Performing Bing search'); + const results = await browserSearch.perform({ + query: 'GUI Agent', + count: 3, + engine: 'bing', + }); + + logger.info(`Bing search found ${results.length} results`); + logger.info(JSON.stringify(results, null, 2)); + return results; + } finally { + await browserSearch.closeBrowser(); + } +} + +// Execute when this file is run directly +if (require.main === module) { + bingSearch().catch(console.error); +} diff --git a/packages/agent-infra/search/browser-search/examples/default.ts b/packages/agent-infra/search/browser-search/examples/default.ts new file mode 100644 index 000000000..949484f75 --- /dev/null +++ b/packages/agent-infra/search/browser-search/examples/default.ts @@ -0,0 +1,27 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { ConsoleLogger } from '@agent-infra/logger'; +import { BrowserSearch } from '../src'; + +async function browserSearch() { + const logger = new ConsoleLogger('[BrowserSearch]'); + const browserSearch = new BrowserSearch({ + logger, + browserOptions: { + headless: false, + }, + }); + + const results = await browserSearch.perform({ + query: 'ui-tars', + count: 3, + }); + + logger.info('Second search results:', JSON.stringify(results, null, 2)); +} + +if (require.main === module) { + browserSearch().catch(console.error); +} diff --git a/packages/agent-infra/search/browser-search/examples/github-search.ts b/packages/agent-infra/search/browser-search/examples/github-search.ts new file mode 100644 index 000000000..7c1ffb25f --- /dev/null +++ b/packages/agent-infra/search/browser-search/examples/github-search.ts @@ -0,0 +1,42 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { ConsoleLogger } from '@agent-infra/logger'; +import { BrowserSearch } from '../src'; + +/** + * We commmented github engine temporarily, + * since it does not work, + * we'll figure out later. + */ +export async function githubSearch() { + const logger = new ConsoleLogger('[GitHubSearch]'); + const browserSearch = new BrowserSearch({ + logger, + browserOptions: { + headless: false, + }, + }); + + try { + logger.info('Performing GitHub search'); + const results = await browserSearch.perform({ + query: 'GUI Agent', + count: 3, + // @ts-expect-error + engine: 'github', + }); + + logger.info(`GitHub search found ${results.length} results`); + logger.info(JSON.stringify(results, null, 2)); + return results; + } finally { + await browserSearch.closeBrowser(); + } +} + +// Execute when this file is run directly +if (require.main === module) { + githubSearch().catch(console.error); +} diff --git a/packages/agent-infra/search/browser-search/examples/google-search.ts b/packages/agent-infra/search/browser-search/examples/google-search.ts new file mode 100644 index 000000000..690012062 --- /dev/null +++ b/packages/agent-infra/search/browser-search/examples/google-search.ts @@ -0,0 +1,36 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { ConsoleLogger } from '@agent-infra/logger'; +import { BrowserSearch } from '../src'; + +export async function googleSearch() { + const logger = new ConsoleLogger('[GoogleSearch]'); + const browserSearch = new BrowserSearch({ + logger, + browserOptions: { + headless: false, + }, + }); + + try { + logger.info('Performing Google search'); + const results = await browserSearch.perform({ + query: 'GUI Agent', + count: 3, + engine: 'google', + }); + + logger.info(`Google search found ${results.length} results`); + logger.info(JSON.stringify(results, null, 2)); + return results; + } finally { + await browserSearch.closeBrowser(); + } +} + +// Execute when this file is run directly +if (require.main === module) { + googleSearch().catch(console.error); +} diff --git a/packages/agent-infra/search/browser-search/examples/headless.ts b/packages/agent-infra/search/browser-search/examples/headless.ts new file mode 100644 index 000000000..9fe7db94d --- /dev/null +++ b/packages/agent-infra/search/browser-search/examples/headless.ts @@ -0,0 +1,27 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { ConsoleLogger } from '@agent-infra/logger'; +import { BrowserSearch } from '../src'; + +async function headlessBrowserSearch() { + const logger = new ConsoleLogger('[BrowserSearch]'); + const browserSearch = new BrowserSearch({ + logger, + browserOptions: { + headless: true, + }, + }); + + const results = await browserSearch.perform({ + query: 'ui-tars', + count: 3, + }); + + logger.info('Second search results:', JSON.stringify(results, null, 2)); +} + +if (require.main === module) { + headlessBrowserSearch().catch(console.error); +} diff --git a/packages/agent-infra/search/browser-search/examples/multi-engine.ts b/packages/agent-infra/search/browser-search/examples/multi-engine.ts new file mode 100644 index 000000000..2f6d55063 --- /dev/null +++ b/packages/agent-infra/search/browser-search/examples/multi-engine.ts @@ -0,0 +1,34 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { ConsoleLogger } from '@agent-infra/logger'; +import { googleSearch } from './google-search'; +import { bingSearch } from './bing-search'; +import { githubSearch } from './github-search'; +import { baiduSearch } from './baidu-search'; + +async function multiEngineSearch() { + const logger = new ConsoleLogger('[BrowserSearch]'); + + try { + // Execute searches with different search engines + const googleResults = await googleSearch(); + const bingResults = await bingSearch(); + const githubResults = await githubSearch(); + const baiduResults = await baiduSearch(); + + // Compare results + logger.info('Search results comparison:'); + logger.info(`Google: ${googleResults.length} results`); + logger.info(`Bing: ${bingResults.length} results`); + logger.info(`GitHub: ${githubResults.length} results`); + logger.info(`Baidu: ${baiduResults.length} results`); + } catch (error) { + logger.error('Error during multi-engine search:', error); + } +} + +if (require.main === module) { + multiEngineSearch().catch(console.error); +} diff --git a/packages/agent-infra/search/browser-search/examples/reuse-browser.ts b/packages/agent-infra/search/browser-search/examples/reuse-browser.ts new file mode 100644 index 000000000..b4e458e71 --- /dev/null +++ b/packages/agent-infra/search/browser-search/examples/reuse-browser.ts @@ -0,0 +1,47 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { ConsoleLogger } from '@agent-infra/logger'; +import { BrowserSearch } from '../src'; + +async function main() { + const logger = new ConsoleLogger('[BrowserSearch]'); + const browserSearch = new BrowserSearch({ + logger, + browserOptions: { + headless: false, + }, + }); + + try { + // First search, keep browser open + logger.info('Performing first search'); + const results1 = await browserSearch.perform({ + query: 'ui-tars', + count: 3, + keepBrowserOpen: true, // Keep browser open + }); + + logger.info('First search results:', JSON.stringify(results1, null, 2)); + + // Second search, reuse browser instance + logger.info('Performing second search'); + const results2 = await browserSearch.perform({ + query: 'react hooks', + count: 3, + keepBrowserOpen: true, // Keep browser open + }); + + logger.info('Second search results:', JSON.stringify(results2, null, 2)); + + // Explicitly close browser after completion + await browserSearch.closeBrowser(); + } catch (error) { + logger.error('Error:', error); + // Ensure browser is closed even when an error occurs + await browserSearch.closeBrowser(); + } +} + +main(); diff --git a/packages/agent-infra/search/browser-search/package.json b/packages/agent-infra/search/browser-search/package.json new file mode 100644 index 000000000..acd5d1644 --- /dev/null +++ b/packages/agent-infra/search/browser-search/package.json @@ -0,0 +1,42 @@ +{ + "name": "@agent-infra/browser-search", + "version": "0.0.1", + "main": "dist/index.js", + "module": "dist/index.mjs", + "types": "dist/index.d.ts", + "exports": { + ".": { + "import": "./dist/index.mjs", + "require": "./dist/index.js", + "types": "./dist/index.d.ts" + } + }, + "files": [ + "dist" + ], + "scripts": { + "dev": "rslib build --watch", + "build": "rslib build", + "prepare": "npm run build", + "prepublishOnly": "pnpm run build", + "test": "vitest run", + "test:watch": "vitest", + "test:e2e": "vitest --config vitest.e2e.config.ts", + "coverage": "vitest run --coverage", + "benchmark": "ts-node examples/benchmark.ts" + }, + "dependencies": { + "@agent-infra/browser": "workspace:*", + "@agent-infra/logger": "workspace:*", + "@agent-infra/shared": "workspace:*" + }, + "devDependencies": { + "@types/node": "20.14.8", + "rimraf": "4.1.0", + "typescript": "4.9.4", + "vitest": "3.0.7", + "@vitest/coverage-v8": "3.0.7", + "ts-node": "10.9.2", + "@rslib/core": "0.5.3" + } +} \ No newline at end of file diff --git a/packages/agent-infra/search/browser-search/rslib.config.ts b/packages/agent-infra/search/browser-search/rslib.config.ts new file mode 100644 index 000000000..1fc953b4c --- /dev/null +++ b/packages/agent-infra/search/browser-search/rslib.config.ts @@ -0,0 +1,39 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { defineConfig } from '@rslib/core'; + +const BANNER = `/** +* Copyright (c) 2025 Bytedance, Inc. and its affiliates. +* SPDX-License-Identifier: Apache-2.0 +*/`; + +export default defineConfig({ + source: { + entry: { + index: ['src/**/*.ts', '!src/**/*.{test,bench}.ts'], + }, + }, + lib: [ + { + format: 'esm', + syntax: 'es2021', + bundle: false, + dts: true, + banner: { js: BANNER }, + }, + { + format: 'cjs', + syntax: 'es2021', + bundle: false, + dts: true, + banner: { js: BANNER }, + }, + ], + output: { + target: 'web', + cleanDistPath: true, + sourceMap: true, + }, +}); diff --git a/packages/agent-infra/search/browser-search/src/browser-search.ts b/packages/agent-infra/search/browser-search/src/browser-search.ts new file mode 100644 index 000000000..a361d3cfe --- /dev/null +++ b/packages/agent-infra/search/browser-search/src/browser-search.ts @@ -0,0 +1,204 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { LocalBrowser, type BrowserInterface } from '@agent-infra/browser'; +import { READABILITY_SCRIPT } from '@agent-infra/shared'; +import { Logger, defaultLogger } from '@agent-infra/logger'; +import { + PromiseQueue, + extractPageInformation, + toMarkdown, +} from '@agent-infra/shared'; +import { shouldSkipDomain } from './utils/url'; +import { interceptRequest } from './utils/misc'; +import { getSearchEngine } from './engines'; +import type { + SearchResult, + BrowserSearchOptions, + BrowserSearchConfig, + SearchEngine, +} from './types'; + +/** + * Service class for performing web searches and content extraction + */ +export class BrowserSearch { + private logger: Logger; + private browser: BrowserInterface; + private isBrowserOpen = false; + private defaultEngine: SearchEngine; + + constructor(private config: BrowserSearchConfig = {}) { + this.logger = config?.logger ?? defaultLogger; + this.browser = config.browser ?? new LocalBrowser({ logger: this.logger }); + this.defaultEngine = config.defaultEngine ?? 'google'; + } + + /** + * Search web and extract content from result pages + */ + async perform(options: BrowserSearchOptions) { + this.logger.info('Starting search with options:', options); + + const queries = Array.isArray(options.query) + ? options.query + : [options.query]; + const excludeDomains = options.excludeDomains || []; + const count = + options.count && Math.max(3, Math.floor(options.count / queries.length)); + const engine = options.engine || this.defaultEngine; + + try { + if (!this.isBrowserOpen) { + this.logger.info('Launching browser'); + await this.browser.launch(this.config.browserOptions); + this.isBrowserOpen = true; + } else { + this.logger.info('Using existing browser instance'); + } + + const queue = new PromiseQueue(options.concurrency || 15); + const visitedUrls = new Set(); + const results = await Promise.all( + queries.map((query) => + this.search(this.browser, { + query, + count, + queue, + visitedUrls, + excludeDomains, + truncate: options.truncate, + engine, + }), + ), + ); + + this.logger.success('Search completed successfully'); + return results.flat(); + } catch (error) { + this.logger.error('Search failed:', error); + throw error; + } finally { + if (!options.keepBrowserOpen && this.isBrowserOpen) { + await this.closeBrowser(); + } + } + } + + /** + * Explicitly close the browser instance + */ + async closeBrowser(): Promise { + if (this.isBrowserOpen) { + this.logger.info('Closing browser'); + await this.browser.close(); + this.isBrowserOpen = false; + } + } + + private async search( + browser: BrowserInterface, + options: { + query: string; + count?: number; + excludeDomains: string[]; + queue: PromiseQueue; + visitedUrls: Set; + truncate?: number; + engine: SearchEngine; + }, + ) { + const searchEngine = getSearchEngine(options.engine); + const url = searchEngine.getSearchUrl(options.query, { + count: options.count, + excludeDomains: options.excludeDomains, + }); + + this.logger.info(`Searching with ${options.engine} engine: ${url}`); + + let links = await browser.evaluateOnNewPage({ + url, + pageFunction: searchEngine.extractSearchResults, + pageFunctionParams: [], + beforePageLoad: async (page) => { + await interceptRequest(page); + }, + }); + + this.logger.info('Fetched links:', links); + + // Filter links + links = + links?.filter((link) => { + if (options.visitedUrls.has(link.url)) return false; + options.visitedUrls.add(link.url); + return !shouldSkipDomain(link.url); + }) || []; + + if (!links.length) { + this.logger.info('No valid links found'); + return []; + } + + // Visit each link and extract content + const results = await Promise.allSettled( + links.map((item) => + options.queue.add(() => this.visitLink(this.browser, item)), + ), + ); + + return results + .map((result) => { + if (result.status === 'rejected' || !result.value) return null; + + return { + ...result.value, + content: options.truncate + ? result.value.content.slice(0, options.truncate) + : result.value.content, + }; + }) + .filter((v): v is SearchResult => Boolean(v?.content)); + } + + private async visitLink( + browser: BrowserInterface, + item: SearchResult, + ): Promise { + try { + this.logger.info('Visiting link:', item.url); + + const result = await browser.evaluateOnNewPage({ + url: item.url, + pageFunction: extractPageInformation, + pageFunctionParams: [READABILITY_SCRIPT], + beforePageLoad: async (page) => { + await interceptRequest(page); + }, + }); + + if (result) { + const content = toMarkdown(result.content); + return { ...result, url: item.url, content }; + } + } catch (e) { + this.logger.error('Failed to visit link:', e); + } + } + + private isValidUrl(url: string) { + try { + new URL(url); + return true; + } catch { + return false; + } + } +} + +declare global { + interface Window { + Readability: any; + } +} diff --git a/packages/agent-infra/search/browser-search/src/engines/baidu-engine.ts b/packages/agent-infra/search/browser-search/src/engines/baidu-engine.ts new file mode 100644 index 000000000..2807036fb --- /dev/null +++ b/packages/agent-infra/search/browser-search/src/engines/baidu-engine.ts @@ -0,0 +1,93 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import type { SearchEngineAdapter, SearchResult } from '../types'; + +/** + * Baidu search engine adapter implementation. + * Provides functionality to generate Baidu search URLs and extract search results from Baidu search pages. + */ +export class BaiduSearchEngine implements SearchEngineAdapter { + /** + * Generates a Baidu search URL based on the provided query and options. + * + * @param query - The search query string + * @param options - Search configuration options + * @param options.count - Number of search results to request (default: 10) + * @param options.excludeDomains - Array of domain names to exclude from search results + * @returns Formatted Baidu search URL as a string + */ + getSearchUrl( + query: string, + options: { + count?: number; + excludeDomains?: string[]; + }, + ): string { + // Baidu doesn't support excluding domains in the same way as Google + // But we can add '-site:domain' to the query + const excludeDomainsQuery = + options.excludeDomains && options.excludeDomains.length > 0 + ? options.excludeDomains.map((domain) => `-site:${domain}`).join(' ') + : ''; + + const searchParams = new URLSearchParams({ + wd: excludeDomainsQuery ? `${excludeDomainsQuery} ${query}` : query, + rn: `${options.count || 10}`, // rn is the parameter for result count + }); + + return `https://www.baidu.com/s?${searchParams.toString()}`; + } + + /** + * Extracts search results from a Baidu search page. + * + * @param window - The browser window object containing the loaded Baidu search page + * @returns Array of search results extracted from the page + */ + extractSearchResults(window: Window): SearchResult[] { + const links: SearchResult[] = []; + const document = window.document; + + /** + * Validates if a string is a properly formatted URL. + * + * @param url - The URL string to validate + * @returns Boolean indicating if the URL is valid + */ + const isValidUrl = (url: string) => { + try { + new URL(url); + return true; + } catch (error) { + return false; + } + }; + + try { + // Baidu search results are in elements with class 'result' + const elements = document.querySelectorAll('.result'); + elements.forEach((element) => { + const titleEl = element.querySelector('.t a'); + const url = titleEl?.getAttribute('href'); + + if (!url) return; + + const item: SearchResult = { + title: titleEl?.textContent || '', + url, // Note: Baidu uses redirects, we'll need to follow them + content: '', + }; + + if (!item.title || !item.url) return; + + links.push(item); + }); + } catch (error) { + console.error(error); + } + + return links; + } +} diff --git a/packages/agent-infra/search/browser-search/src/engines/bing-engine.ts b/packages/agent-infra/search/browser-search/src/engines/bing-engine.ts new file mode 100644 index 000000000..8eee22edc --- /dev/null +++ b/packages/agent-infra/search/browser-search/src/engines/bing-engine.ts @@ -0,0 +1,91 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import type { SearchEngineAdapter, SearchResult } from '../types'; + +/** + * Bing search engine adapter implementation. + * Provides functionality to generate Bing search URLs and extract search results from Bing search pages. + */ +export class BingSearchEngine implements SearchEngineAdapter { + /** + * Generates a Bing search URL based on the provided query and options. + * + * @param query - The search query string + * @param options - Search configuration options + * @param options.count - Number of search results to request (default: 10) + * @param options.excludeDomains - Array of domain names to exclude from search results + * @returns Formatted Bing search URL as a string + */ + getSearchUrl( + query: string, + options: { + count?: number; + excludeDomains?: string[]; + }, + ): string { + const searchParams = new URLSearchParams({ + q: `${ + options.excludeDomains && options.excludeDomains.length > 0 + ? `${options.excludeDomains.map((domain) => `-site:${domain}`).join(' ')} ` + : '' + }${query}`, + count: `${options.count || 10}`, + }); + + return `https://www.bing.com/search?${searchParams.toString()}`; + } + + /** + * Extracts search results from a Bing search page. + * + * @param window - The browser window object containing the loaded Bing search page + * @returns Array of search results extracted from the page + */ + extractSearchResults(window: Window): SearchResult[] { + const links: SearchResult[] = []; + const document = window.document; + + /** + * Validates if a string is a properly formatted URL. + * + * @param url - The URL string to validate + * @returns Boolean indicating if the URL is valid + */ + const isValidUrl = (url: string) => { + try { + new URL(url); + return true; + } catch (error) { + return false; + } + }; + + try { + // Bing search results are in elements with class 'b_algo' + const elements = document.querySelectorAll('.b_algo'); + elements.forEach((element) => { + const titleEl = element.querySelector('h2'); + const urlEl = element.querySelector('h2 a'); + const url = urlEl?.getAttribute('href'); + + if (!url || !isValidUrl(url)) return; + + const item: SearchResult = { + title: titleEl?.textContent || '', + url, + content: '', + }; + + if (!item.title || !item.url) return; + + links.push(item); + }); + } catch (error) { + console.error(error); + } + + return links; + } +} diff --git a/packages/agent-infra/search/browser-search/src/engines/google-engine.ts b/packages/agent-infra/search/browser-search/src/engines/google-engine.ts new file mode 100644 index 000000000..4e31c4f9d --- /dev/null +++ b/packages/agent-infra/search/browser-search/src/engines/google-engine.ts @@ -0,0 +1,92 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import type { SearchEngineAdapter, SearchResult } from '../types'; + +/** + * Google search engine adapter implementation. + * Provides functionality to generate Google search URLs and extract search results from Google search pages. + */ +export class GoogleSearchEngine implements SearchEngineAdapter { + /** + * Generates a Google search URL based on the provided query and options. + * + * @param query - The search query string + * @param options - Search configuration options + * @param options.count - Number of search results to request (default: 10) + * @param options.excludeDomains - Array of domain names to exclude from search results + * @returns Formatted Google search URL as a string + */ + getSearchUrl( + query: string, + options: { + count?: number; + excludeDomains?: string[]; + }, + ): string { + const searchParams = new URLSearchParams({ + q: `${ + options.excludeDomains && options.excludeDomains.length > 0 + ? `${options.excludeDomains.map((domain) => `-site:${domain}`).join(' ')} ` + : '' + }${query}`, + num: `${options.count || 10}`, + }); + + searchParams.set('udm', '14'); + return `https://www.google.com/search?${searchParams.toString()}`; + } + + /** + * Extracts search results from a Google search page. + * + * @param window - The browser window object containing the loaded Google search page + * @returns Array of search results extracted from the page + */ + extractSearchResults(window: Window): SearchResult[] { + const links: SearchResult[] = []; + const document = window.document; + + /** + * Validates if a string is a properly formatted URL. + * + * @param url - The URL string to validate + * @returns Boolean indicating if the URL is valid + */ + const isValidUrl = (url: string) => { + try { + new URL(url); + return true; + } catch (error) { + return false; + } + }; + + try { + // Google search results are contained in elements with class 'g' + const elements = document.querySelectorAll('.g'); + elements.forEach((element) => { + const titleEl = element.querySelector('h3'); + const urlEl = element.querySelector('a'); + const url = urlEl?.getAttribute('href'); + + if (!url || !isValidUrl(url)) return; + + const item: SearchResult = { + title: titleEl?.textContent || '', + url, + content: '', + }; + + if (!item.title || !item.url) return; + + links.push(item); + }); + } catch (error) { + console.error(error); + } + + return links; + } +} diff --git a/packages/agent-infra/search/browser-search/src/engines/index.ts b/packages/agent-infra/search/browser-search/src/engines/index.ts new file mode 100644 index 000000000..337c39cc3 --- /dev/null +++ b/packages/agent-infra/search/browser-search/src/engines/index.ts @@ -0,0 +1,31 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { GoogleSearchEngine } from './google-engine'; +import { BingSearchEngine } from './bing-engine'; +import { BaiduSearchEngine } from './baidu-engine'; +import type { SearchEngine, SearchEngineAdapter } from '../types'; + +export * from './google-engine'; +export * from './bing-engine'; +export * from './baidu-engine'; + +/** + * Factory function to get the appropriate search engine adapter instance. + * + * @param engine - The search engine identifier ('google', 'bing', or 'baidu') + * @returns An instance of the requested search engine adapter + */ +export function getSearchEngine(engine: SearchEngine): SearchEngineAdapter { + switch (engine) { + case 'google': + return new GoogleSearchEngine(); + case 'bing': + return new BingSearchEngine(); + case 'baidu': + return new BaiduSearchEngine(); + default: + return new GoogleSearchEngine(); + } +} diff --git a/packages/agent-infra/search/browser-search/src/index.ts b/packages/agent-infra/search/browser-search/src/index.ts new file mode 100644 index 000000000..7c50c4fa7 --- /dev/null +++ b/packages/agent-infra/search/browser-search/src/index.ts @@ -0,0 +1,6 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +export * from './browser-search'; +export * from './types'; diff --git a/packages/agent-infra/search/browser-search/src/types.ts b/packages/agent-infra/search/browser-search/src/types.ts new file mode 100644 index 000000000..cb63a4770 --- /dev/null +++ b/packages/agent-infra/search/browser-search/src/types.ts @@ -0,0 +1,84 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { BrowserInterface, LaunchOptions } from '@agent-infra/browser'; +import { Logger } from '@agent-infra/logger'; + +export type SearchResult = { + title: string; + url: string; + content: string; +}; + +export type SearchEngine = 'google' | 'bing' | 'baidu'; + +export interface BrowserSearchOptions { + /** + * Search query + */ + query: string | string[]; + /** + * Max results length + */ + count?: number; + /** + * Concurrency search + */ + concurrency?: number; + /** + * Excluded domains + */ + excludeDomains?: string[]; + /** + * Max length to extract, rest content will be truncated + */ + truncate?: number; + /** + * Control whether to keep the browser open after search finished + */ + keepBrowserOpen?: boolean; + /** + * Search engine to use (default: 'google') + */ + engine?: SearchEngine; +} + +export interface BrowserSearchConfig { + /** + * Logger + */ + logger?: Logger; + /** + * Custom browser + */ + browser?: BrowserInterface; + /** + * Custom browser options + */ + browserOptions?: LaunchOptions; + /** + * Set default search engine + * + * @default {'github'} + */ + defaultEngine?: SearchEngine; +} + +export interface SearchEngineAdapter { + /** + * Get search URL for the specific engine + */ + getSearchUrl( + query: string, + options: { + count?: number; + excludeDomains?: string[]; + }, + ): string; + + /** + * Extract search results from the page + */ + extractSearchResults(window: Window): SearchResult[]; +} diff --git a/packages/agent-infra/search/browser-search/src/utils/misc.ts b/packages/agent-infra/search/browser-search/src/utils/misc.ts new file mode 100644 index 000000000..200392bd5 --- /dev/null +++ b/packages/agent-infra/search/browser-search/src/utils/misc.ts @@ -0,0 +1,121 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { Page } from '@agent-infra/browser'; +import { SearchResult } from '../types'; + +/** + * Applies various stealth techniques to make the browser appear more like a regular user browser + * @param page - Puppeteer page object + */ +export async function applyStealthScripts(page: Page) { + await page.setBypassCSP(true); + await page.setUserAgent( + `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/237.84.2.178 Safari/537.36`, + ); + + /** + * https://intoli.com/blog/not-possible-to-block-chrome-headless/chrome-headless-test.html + */ + await page.evaluate(() => { + /** + * Override the navigator.webdriver property + * The webdriver read-only property of the navigator interface indicates whether the user agent is controlled by automation. + * @see https://developer.mozilla.org/en-US/docs/Web/API/Navigator/webdriver + */ + Object.defineProperty(navigator, 'webdriver', { + get: () => undefined, + }); + + // Mock languages and plugins to mimic a real browser + Object.defineProperty(navigator, 'languages', { + get: () => ['en-US', 'en'], + }); + + Object.defineProperty(navigator, 'plugins', { + get: () => [{}, {}, {}, {}, {}], + }); + + // Redefine the headless property + Object.defineProperty(navigator, 'headless', { + get: () => false, + }); + + // Override the permissions API + const originalQuery = window.navigator.permissions.query; + window.navigator.permissions.query = (parameters) => + parameters.name === 'notifications' + ? Promise.resolve({ + state: Notification.permission, + } as PermissionStatus) + : originalQuery(parameters); + }); +} + +/** + * Extracts search result links from a Google search page + * @param window - Browser window object + * @returns Array of search results with title and URL + */ +export function getSearchPageLinks(window: Window): SearchResult[] { + const links: SearchResult[] = []; + const document = window.document; + + const isValidUrl = (url: string) => { + try { + new URL(url); + return true; + } catch (error) { + return false; + } + }; + + try { + const elements = document.querySelectorAll('.g'); + elements.forEach((element) => { + const titleEl = element.querySelector('h3'); + const urlEl = element.querySelector('a'); + const url = urlEl?.getAttribute('href'); + + if (!url || !isValidUrl(url)) return; + + const item: SearchResult = { + title: titleEl?.textContent || '', + url, + content: '', + }; + + if (!item.title || !item.url) return; + + links.push(item); + }); + } catch (error) { + console.error(error); + } + + return links; +} + +/** + * Sets up request interception to block unnecessary resources and apply stealth techniques + * @param page - Puppeteer page object + */ +export async function interceptRequest(page: Page) { + await applyStealthScripts(page); + await page.setRequestInterception(true); + + page.on('request', (request) => { + const resourceType = request.resourceType(); + + if (resourceType !== 'document') { + return request.abort(); + } + + if (request.isNavigationRequest()) { + return request.continue(); + } + + return request.abort(); + }); +} diff --git a/packages/agent-infra/search/browser-search/src/utils/url.ts b/packages/agent-infra/search/browser-search/src/utils/url.ts new file mode 100644 index 000000000..e7eabe63f --- /dev/null +++ b/packages/agent-infra/search/browser-search/src/utils/url.ts @@ -0,0 +1,38 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * Safely parses a URL string into a URL object + * @param url - The URL string to parse + * @returns URL object or null if invalid + */ +const parseUrl = (url: string) => { + try { + return new URL(url); + } catch { + return null; + } +}; + +/** + * Determines if a domain should be skipped based on a blocklist + * @param url - The URL to check + * @returns True if the domain should be skipped, false otherwise + */ +export const shouldSkipDomain = (url: string) => { + const parsed = parseUrl(url); + if (!parsed) return true; + + const { hostname } = parsed; + return [ + 'reddit.com', + 'www.reddit.com', + 'x.com', + 'twitter.com', + 'www.twitter.com', + 'youtube.com', + 'www.youtube.com', + ].includes(hostname); +}; diff --git a/packages/agent-infra/search/browser-search/tsconfig.json b/packages/agent-infra/search/browser-search/tsconfig.json new file mode 100644 index 000000000..f39494ea7 --- /dev/null +++ b/packages/agent-infra/search/browser-search/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "commonjs", + "moduleResolution": "node", + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "outDir": "./dist", + "strict": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "isolatedModules": true, + "skipLibCheck": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/agent-infra/search/search/README.md b/packages/agent-infra/search/search/README.md new file mode 100644 index 000000000..9c7c350e3 --- /dev/null +++ b/packages/agent-infra/search/search/README.md @@ -0,0 +1,244 @@ +# @agent-infra/search + +

    + npm version + downloads + node version + license +

    + +An isomorphic search client that unifies multiple search providers into a single API. + +## Features + +- **Multi-provider support**: Use **Browser Search**, **Bing Search**, or **Tavily** with the same interface +- **Unified API**: Consistent response format across all providers +- **Configurable**: Customize search parameters for each provider +- **Type-safe**: Full TypeScript support with comprehensive type definitions + +## Installation + +```bash +npm install @agent-infra/search +# or +yarn add @agent-infra/search +# or +pnpm add @agent-infra/search +``` + +## Usage + +### Basic Search + +```typescript +import { Search, SearchProvider } from '@agent-infra/search'; + +// Create a search client with your preferred provider +const client = new SearchClient({ + provider: SearchProvider.BingSearch, + providerConfig: { + apiKey: 'YOUR_API_KEY', + }, +}); + +// Perform a search +const results = await client.search({ + query: 'climate change', + limit: 5, +}); + +console.log(results); +``` + +### Switch Between Providers + +```typescript +import { Search, SearchProvider } from '@agent-infra/search'; + +// Create search instances for different providers +const bingSearch = new SearchClient({ + provider: SearchProvider.BingSearch, + providerConfig: { + apiKey: 'YOUR_BING_API_KEY', + }, +}); + +const tavilySearch = new SearchClient({ + provider: SearchProvider.Tavily, + providerConfig: { + apiKey: 'YOUR_TAVILY_API_KEY', + }, +}); + +// Use browser search in browser environments +const browserSearch = new SearchClient({ + provider: SearchProvider.BrowserSearch, + providerConfig: { + // ... browser search config + }, +}); + +// Use the appropriate client based on your needs +const results = await bingSearch.search({ + query: 'UI-TARS', +}); +``` + +### With Environment Variables + +```typescript +// Set in your `.zshrc` or `.bash_profile`: +// BING_SEARCH_API_KEY=your-api-key +// BING_SEARCH_API_BASE_URL=your-api-base-url + +import { Search, SearchProvider } from '@agent-infra/search'; + +const client = new SearchClient({ + provider: SearchProvider.BingSearch, +}); + +const results = await client.search({ + query: 'UI-TARS', +}); +``` + +## API Reference + +### `Search` Client + +```typescript +constructor(config: SearchConfig) +``` + +Configuration options: + +```typescript +interface SearchConfig { + provider: SearchProvider; + providerConfig?: { + [key: string]: any; + }; + logger?: Logger; +} + +enum SearchProvider { + BingSearch = 'bing', + Tavily = 'tavily', + BrowserSearch = 'browser', +} +``` + +### `search` Method + +```typescript + async search( + options: CommonSearchOptions, + originalOptions?: Partial, + ): Promise +``` + +Common search options: + +```typescript +export interface CommonSearchOptions { + /** + * Search query + */ + query: string; + /** + * Max search count + */ + count?: number; +} +``` + +### Response Type + +```typescript +export type PageResult = { + title: string; + url: string; + content: string; +}; + +export interface SearchResult { + pages: PageResult[]; +} +``` + +## Provider-Specific Options + +### Bing Search + +```typescript +const client = new SearchClient({ + provider: SearchProvider.BingSearch, + providerConfig: { + apiKey: 'YOUR_API_KEY', + mkt: 'en-US', + }, +}); + +const results = await client.search( + { + query: 'UI-TARS', + count: 5, + }, + // Pass Bing-specific parameter via 2nd parameter + { + mkt: 'zh-CN', // Market code + }, +); +``` + +### Tavily + +```typescript +const search = new SearchClient({ + provider: SearchProvider.Tavily, + providerConfig: { + apiKey: 'YOUR_API_KEY', + }, +}); + +const results = await search.search( + { + query: 'latest research papers', + }, + // Tavily-specific parameters + { + searchDepth: 'advanced', + includeRawContent: true, + }, +); +``` + +### Browser Search + +```typescript +// Only available in browser environments +const client = new SearchClient({ + provider: SearchProvider.BrowserSearch, +}); + +const results = await client.search( + { + query: 'UI-TARS', + count: 5, + }, + // BrowserSearch-specific parameters + { + concurrency: 3, + }, +); +``` + +## Examples + +See [examples](./examples/). + +## License + +Copyright (c) 2025 ByteDance, Inc. and its affiliates. + +Licensed under the Apache License, Version 2.0. diff --git a/packages/agent-infra/search/search/examples/bing-search.ts b/packages/agent-infra/search/search/examples/bing-search.ts new file mode 100644 index 000000000..31b50f431 --- /dev/null +++ b/packages/agent-infra/search/search/examples/bing-search.ts @@ -0,0 +1,33 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ + +import { SearchClient, SearchProvider } from '../src'; + +export async function bingSearch() { + const client = new SearchClient({ + provider: SearchProvider.BingSearch, + providerConfig: { + baseUrl: process.env.BING_SEARCH_API_BASE_URL, + apiKey: process.env.BING_SEARCH_API_KEY, + }, + }); + + const results = await client.search( + { + query: 'UI-TARS', + count: 5, + }, + { + mkt: 'zh-CN', + }, + ); + + console.log('Bing Search Results:'); + console.log(JSON.stringify(results, null, 2)); +} + +if (require.main === module) { + bingSearch().catch(console.error); +} diff --git a/packages/agent-infra/search/search/examples/browser-search.ts b/packages/agent-infra/search/search/examples/browser-search.ts new file mode 100644 index 000000000..857edeb62 --- /dev/null +++ b/packages/agent-infra/search/search/examples/browser-search.ts @@ -0,0 +1,31 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { SearchClient, SearchProvider } from '../src'; + +export async function browserSearch() { + const client = new SearchClient({ + provider: SearchProvider.BrowserSearch, + providerConfig: { + // browser search config + }, + }); + + const results = await client.search( + { + query: 'UI-TARS', + count: 10, + }, + { + concurrency: 3, + }, + ); + + console.log('Browser Search Results:'); + console.log(JSON.stringify(results, null, 2)); +} + +if (require.main === module) { + browserSearch().catch(console.error); +} diff --git a/packages/agent-infra/search/search/examples/default.ts b/packages/agent-infra/search/search/examples/default.ts new file mode 100644 index 000000000..01b086f5e --- /dev/null +++ b/packages/agent-infra/search/search/examples/default.ts @@ -0,0 +1,17 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { bingSearch } from './bing-search'; +import { browserSearch } from './browser-search'; +import { tavilySearch } from './tavily-search'; + +async function main() { + console.log('Running isomorphic search examples...'); + + await Promise.all([bingSearch(), browserSearch(), tavilySearch()]); +} + +if (require.main === module) { + main().catch(console.error); +} diff --git a/packages/agent-infra/search/search/examples/reuse-browser.ts b/packages/agent-infra/search/search/examples/reuse-browser.ts new file mode 100644 index 000000000..6c7d170b9 --- /dev/null +++ b/packages/agent-infra/search/search/examples/reuse-browser.ts @@ -0,0 +1,65 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { LocalBrowser } from '@agent-infra/browser'; +import { ConsoleLogger } from '@agent-infra/logger'; +import { SearchClient, SearchProvider } from '../src'; + +async function main() { + const logger = new ConsoleLogger('[Search]'); + const browser = new LocalBrowser({ logger }); + const client = new SearchClient({ + provider: SearchProvider.BrowserSearch, + providerConfig: { + browser: browser, + browserOptions: { + headless: false, + }, + }, + }); + + // First search + logger.info('Performing first search...'); + const firstResults = await client.search( + { + query: 'UI-TARS', + count: 5, + }, + { + concurrency: 3, + keepBrowserOpen: true, + }, + ); + + logger.info(''); + logger.info('----- First search results -----'); + console.log(''); + console.log(firstResults); + + // Second search, reusing the same browser instance + logger.info('Performing second search...'); + const secondResults = await client.search( + { + query: 'AI Agents development', + count: 3, + }, + { + concurrency: 2, + }, + ); + + logger.info(''); + logger.info('----- Second search results -----'); + console.log(''); + console.log(secondResults); + + // Close the browser after completion + await browser.close(); + logger.info('Browser has been closed'); +} + +main().catch((error) => { + console.error('Error during search:', error); + process.exit(1); +}); diff --git a/packages/agent-infra/search/search/examples/tavily-search.ts b/packages/agent-infra/search/search/examples/tavily-search.ts new file mode 100644 index 000000000..b6d2f6833 --- /dev/null +++ b/packages/agent-infra/search/search/examples/tavily-search.ts @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { SearchClient, SearchProvider } from '../src'; + +export async function tavilySearch() { + const client = new SearchClient({ + provider: SearchProvider.Tavily, + providerConfig: { + apiKey: process.env.TAVILY_API_KEY, + }, + }); + + const results = await client.search( + { + query: 'UI-TARS', + count: 5, + }, + { + searchDepth: 'advanced', // Tavily-specific parameter + includeRawContent: true, + }, + ); + + console.log('Tavily Search Results:'); + console.log(JSON.stringify(results, null, 2)); +} + +if (require.main === module) { + tavilySearch().catch(console.error); +} diff --git a/packages/agent-infra/search/search/package.json b/packages/agent-infra/search/search/package.json new file mode 100644 index 000000000..1f7c9e635 --- /dev/null +++ b/packages/agent-infra/search/search/package.json @@ -0,0 +1,45 @@ +{ + "name": "@agent-infra/search", + "description": "Isomorphic search client", + "version": "0.0.1", + "main": "dist/index.js", + "module": "dist/index.mjs", + "types": "dist/index.d.ts", + "exports": { + ".": { + "import": "./dist/index.mjs", + "require": "./dist/index.js", + "types": "./dist/index.d.ts" + } + }, + "files": [ + "dist" + ], + "scripts": { + "dev": "rslib build --watch", + "build": "rslib build", + "prepare": "npm run build", + "prepublishOnly": "pnpm run build", + "test": "vitest run", + "test:watch": "vitest", + "test:e2e": "vitest --config vitest.e2e.config.ts", + "coverage": "vitest run --coverage", + "run:example": "ts-node scripts/example.ts" + }, + "dependencies": { + "@tavily/core": "0.3.1", + "@agent-infra/browser-search": "workspace:*", + "@agent-infra/bing-search": "workspace:*", + "@agent-infra/logger": "workspace:*" + }, + "devDependencies": { + "@agent-infra/browser": "workspace:*", + "@types/node": "20.14.8", + "rimraf": "4.1.0", + "typescript": "4.9.4", + "vitest": "3.0.7", + "@vitest/coverage-v8": "3.0.7", + "ts-node": "10.9.2", + "@rslib/core": "0.5.3" + } +} \ No newline at end of file diff --git a/packages/agent-infra/search/search/rslib.config.ts b/packages/agent-infra/search/search/rslib.config.ts new file mode 100644 index 000000000..1fc953b4c --- /dev/null +++ b/packages/agent-infra/search/search/rslib.config.ts @@ -0,0 +1,39 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { defineConfig } from '@rslib/core'; + +const BANNER = `/** +* Copyright (c) 2025 Bytedance, Inc. and its affiliates. +* SPDX-License-Identifier: Apache-2.0 +*/`; + +export default defineConfig({ + source: { + entry: { + index: ['src/**/*.ts', '!src/**/*.{test,bench}.ts'], + }, + }, + lib: [ + { + format: 'esm', + syntax: 'es2021', + bundle: false, + dts: true, + banner: { js: BANNER }, + }, + { + format: 'cjs', + syntax: 'es2021', + bundle: false, + dts: true, + banner: { js: BANNER }, + }, + ], + output: { + target: 'web', + cleanDistPath: true, + sourceMap: true, + }, +}); diff --git a/packages/agent-infra/search/search/src/index.ts b/packages/agent-infra/search/search/src/index.ts new file mode 100644 index 000000000..188c7ad5f --- /dev/null +++ b/packages/agent-infra/search/search/src/index.ts @@ -0,0 +1,194 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { + BrowserSearchConfig, + BrowserSearchOptions, + BrowserSearch, + SearchResult as BrowserSearchResult, +} from '@agent-infra/browser-search'; +import { + BingSearchClient, + BingSearchConfig, + BingSearchOptions, +} from '@agent-infra/bing-search'; +import { TavilySearchConfig, TavilySearchOptions, tavily } from './tavily'; + +/** + * Supported search providers + */ +export enum SearchProvider { + /** + * Browser-based search using headless browser + */ + BrowserSearch, + /** + * Bing Search API + */ + BingSearch, + /** + * Tavily Search API + */ + Tavily, +} + +export interface SearchProviderConfigMap { + [SearchProvider.BrowserSearch]: BrowserSearchConfig; + [SearchProvider.BingSearch]: BingSearchConfig; + [SearchProvider.Tavily]: TavilySearchConfig; +} + +export type SearchProviderConfig = T extends SearchProvider + ? SearchProviderConfigMap[T] + : object; + +export interface SearchProviderSearchOptionsMap { + [SearchProvider.BrowserSearch]: BrowserSearchOptions; + [SearchProvider.BingSearch]: BingSearchOptions; + [SearchProvider.Tavily]: TavilySearchOptions; +} + +export type SearchProviderSearchOptions = T extends SearchProvider + ? SearchProviderSearchOptionsMap[T] + : object; + +/** + * Common search options shared by all providers + */ +export interface CommonSearchOptions { + /** + * Search query + */ + query: string; + /** + * Max search count + */ + count?: number; +} + +/** + * Standardized search result page + */ +export type PageResult = { + /** + * Page title + */ + title: string; + /** + * Page URL + */ + url: string; + /** + * Page content or snippet + */ + content: string; +}; + +/** + * Unified search result format + */ +export interface SearchResult { + /** + * List of page results + */ + pages: PageResult[]; +} + +/** + * Unified search client that works with multiple search providers + * @template T The search provider type + */ +export class SearchClient { + /** + * Creates a new search client + * @param config Client configuration + */ + constructor( + private config: { + /** + * Search provider to use + */ + provider: T; + /** + * Provider-specific configuration + */ + providerConfig: SearchProviderConfig; + }, + ) {} + + /** + * Performs a search using the configured provider + * @param options Common search options + * @param originalOptions Provider-specific search options + * @returns Standardized search results + */ + async search( + options: CommonSearchOptions, + originalOptions?: Partial>, + ): Promise { + switch (this.config.provider) { + case SearchProvider.BrowserSearch: { + const client = new BrowserSearch( + this.config.providerConfig as BrowserSearchConfig, + ); + const searchOptions: BrowserSearchOptions = { + ...((originalOptions as BrowserSearchOptions) || {}), + query: options.query, + count: options.count, + }; + + const results = await client.perform(searchOptions); + return { + pages: results.map((item: BrowserSearchResult) => ({ + title: item.title, + url: item.url, + content: item.content, + })), + }; + } + + case SearchProvider.BingSearch: { + const client = new BingSearchClient( + this.config.providerConfig as BingSearchConfig, + ); + const searchOptions: BingSearchOptions = { + count: options.count, + ...((originalOptions as Partial) || {}), + q: options.query, + }; + + const response = await client.search(searchOptions); + return { + pages: (response.webPages?.value || []).map((item) => ({ + title: item.name, + url: item.url, + content: item.snippet, + })), + }; + } + + case SearchProvider.Tavily: { + const client = tavily(this.config.providerConfig as TavilySearchConfig); + const searchOptions: TavilySearchOptions = { + maxResults: options.count, + ...((originalOptions as TavilySearchOptions) || {}), + }; + + const response = await client.search(options.query, searchOptions); + return { + pages: (response.results || []).map((item) => ({ + title: item.title || '', + url: item.url, + content: item.content, + })), + }; + } + + default: + throw new Error(`Unsupported search provider: ${this.config.provider}`); + } + } +} + +export * from './tavily'; diff --git a/packages/agent-infra/search/search/src/tavily.ts b/packages/agent-infra/search/search/src/tavily.ts new file mode 100644 index 000000000..0168b998b --- /dev/null +++ b/packages/agent-infra/search/search/src/tavily.ts @@ -0,0 +1,16 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { + tavily, + TavilyClientOptions, + TavilySearchOptions, + TavilySearchResponse, +} from '@tavily/core'; + +// rename to keep same naming style with other search providers. +export type TavilySearchConfig = TavilyClientOptions; +export type { TavilySearchOptions, TavilySearchResponse }; + +export { tavily }; diff --git a/packages/agent-infra/search/search/tsconfig.json b/packages/agent-infra/search/search/tsconfig.json new file mode 100644 index 000000000..f39494ea7 --- /dev/null +++ b/packages/agent-infra/search/search/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "commonjs", + "moduleResolution": "node", + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "outDir": "./dist", + "strict": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "isolatedModules": true, + "skipLibCheck": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4f3ea8d84..63923f3f6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -387,6 +387,108 @@ importers: specifier: 4.9.4 version: 4.9.4 + packages/agent-infra/search/bing-search: + dependencies: + '@agent-infra/logger': + specifier: workspace:* + version: link:../../logger + devDependencies: + '@rslib/core': + specifier: 0.5.3 + version: 0.5.3(typescript@4.9.4) + '@types/node': + specifier: 20.14.8 + version: 20.14.8 + '@vitest/coverage-v8': + specifier: 3.0.7 + version: 3.0.7(vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4)) + rimraf: + specifier: 4.1.0 + version: 4.1.0 + ts-node: + specifier: 10.9.2 + version: 10.9.2(@types/node@20.14.8)(typescript@4.9.4) + typescript: + specifier: 4.9.4 + version: 4.9.4 + vitest: + specifier: 3.0.7 + version: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4) + + packages/agent-infra/search/browser-search: + dependencies: + '@agent-infra/browser': + specifier: workspace:* + version: link:../../browser + '@agent-infra/logger': + specifier: workspace:* + version: link:../../logger + '@agent-infra/shared': + specifier: workspace:* + version: link:../../shared + devDependencies: + '@rslib/core': + specifier: 0.5.3 + version: 0.5.3(typescript@4.9.4) + '@types/node': + specifier: 20.14.8 + version: 20.14.8 + '@vitest/coverage-v8': + specifier: 3.0.7 + version: 3.0.7(vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4)) + rimraf: + specifier: 4.1.0 + version: 4.1.0 + ts-node: + specifier: 10.9.2 + version: 10.9.2(@types/node@20.14.8)(typescript@4.9.4) + typescript: + specifier: 4.9.4 + version: 4.9.4 + vitest: + specifier: 3.0.7 + version: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4) + + packages/agent-infra/search/search: + dependencies: + '@agent-infra/bing-search': + specifier: workspace:* + version: link:../bing-search + '@agent-infra/browser-search': + specifier: workspace:* + version: link:../browser-search + '@agent-infra/logger': + specifier: workspace:* + version: link:../../logger + '@tavily/core': + specifier: 0.3.1 + version: 0.3.1 + devDependencies: + '@agent-infra/browser': + specifier: workspace:* + version: link:../../browser + '@rslib/core': + specifier: 0.5.3 + version: 0.5.3(typescript@4.9.4) + '@types/node': + specifier: 20.14.8 + version: 20.14.8 + '@vitest/coverage-v8': + specifier: 3.0.7 + version: 3.0.7(vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4)) + rimraf: + specifier: 4.1.0 + version: 4.1.0 + ts-node: + specifier: 10.9.2 + version: 10.9.2(@types/node@20.14.8)(typescript@4.9.4) + typescript: + specifier: 4.9.4 + version: 4.9.4 + vitest: + specifier: 3.0.7 + version: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4) + packages/agent-infra/shared: dependencies: '@types/turndown': @@ -2720,6 +2822,9 @@ packages: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} + '@tavily/core@0.3.1': + resolution: {integrity: sha512-7jyvPWG4Zjst0s4v0FMLO1f/dfHqs4FnqvKm86zOGYzXxSfxHu0isbLzlwjJad0csYwF0kifdlECTuNouHfr5A==} + '@testing-library/dom@10.4.0': resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} engines: {node: '>=18'} @@ -5124,6 +5229,9 @@ packages: js-cookie@2.2.1: resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==} + js-tiktoken@1.0.19: + resolution: {integrity: sha512-XC63YQeEcS47Y53gg950xiZ4IWmkfMe4p2V9OSaBt26q+p47WHn18izuXzSclCI73B7yGqtfRsT6jcZQI0y08g==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -6361,6 +6469,12 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true + rimraf@4.1.0: + resolution: {integrity: sha512-ZJdkUR5/dRrRJHdcSKJLrpRn6tVjl9ALxd4yrTCxFsMpjQNzwHF6GLqMsuEzEYIXxHlFPDSk21Vr8VPuFBEz0g==} + engines: {node: '>=14'} + deprecated: Please upgrade to 4.3.1 or higher to fix a potentially damaging issue regarding symbolic link following. See https://github.com/isaacs/rimraf/issues/259 for details. + hasBin: true + rimraf@6.0.1: resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} engines: {node: 20 || >=22} @@ -10140,6 +10254,13 @@ snapshots: dependencies: defer-to-connect: 2.0.1 + '@tavily/core@0.3.1': + dependencies: + axios: 1.7.9 + js-tiktoken: 1.0.19 + transitivePeerDependencies: + - debug + '@testing-library/dom@10.4.0': dependencies: '@babel/code-frame': 7.26.2 @@ -10535,6 +10656,24 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitest/coverage-v8@3.0.7(vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4))': + dependencies: + '@ampproject/remapping': 2.3.0 + '@bcoe/v8-coverage': 1.0.2 + debug: 4.4.0 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.1.7 + magic-string: 0.30.17 + magicast: 0.3.5 + std-env: 3.8.0 + test-exclude: 7.0.1 + tinyrainbow: 2.0.0 + vitest: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4) + transitivePeerDependencies: + - supports-color + '@vitest/coverage-v8@3.0.7(vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4))': dependencies: '@ampproject/remapping': 2.3.0 @@ -13073,6 +13212,10 @@ snapshots: js-cookie@2.2.1: {} + js-tiktoken@1.0.19: + dependencies: + base64-js: 1.5.1 + js-tokens@4.0.0: {} js-yaml@3.14.1: @@ -14388,6 +14531,8 @@ snapshots: dependencies: glob: 7.2.3 + rimraf@4.1.0: {} + rimraf@6.0.1: dependencies: glob: 11.0.1 From cd11cff40fbd546871b63a9319097a89e6cf81a4 Mon Sep 17 00:00:00 2001 From: jinxin001 Date: Mon, 17 Mar 2025 16:50:13 +0800 Subject: [PATCH 51/62] feat: browser use and mcp client & servers (#186) --- .../browser-use/.vscode/launch.json | 34 + packages/agent-infra/browser-use/README.md | 11 + .../browser-use/assets/buildDomTree.js | 722 ++++++ packages/agent-infra/browser-use/package.json | 49 + .../agent-infra/browser-use/rslib.config.ts | 49 + .../browser-use/src/agent/actions/builder.ts | 509 ++++ .../src/agent/actions/json_gemini.ts | 240 ++ .../src/agent/actions/json_schema.ts | 289 +++ .../browser-use/src/agent/actions/schemas.ts | 161 ++ .../browser-use/src/agent/agents/base.ts | 243 ++ .../browser-use/src/agent/agents/errors.ts | 39 + .../browser-use/src/agent/agents/navigator.ts | 360 +++ .../browser-use/src/agent/agents/planner.ts | 117 + .../browser-use/src/agent/agents/validator.ts | 124 + .../browser-use/src/agent/event/manager.ts | 62 + .../browser-use/src/agent/event/types.ts | 90 + .../browser-use/src/agent/executor.ts | 343 +++ .../browser-use/src/agent/helper.ts | 64 + .../browser-use/src/agent/messages/service.ts | 441 ++++ .../browser-use/src/agent/messages/views.ts | 64 + .../browser-use/src/agent/prompts/base.ts | 121 + .../src/agent/prompts/navigator.ts | 175 ++ .../browser-use/src/agent/prompts/planner.ts | 63 + .../src/agent/prompts/validator.ts | 116 + .../browser-use/src/agent/service.ts | 82 + .../browser-use/src/agent/types.ts | 178 ++ .../browser-use/src/browser/context.ts | 313 +++ .../browser-use/src/browser/page.ts | 1272 ++++++++++ .../browser-use/src/browser/types.ts | 105 + .../agent-infra/browser-use/src/context.ts | 24 + .../browser-use/src/dom/history/views.ts | 29 + .../browser-use/src/dom/raw_types.ts | 41 + .../browser-use/src/dom/service.ts | 248 ++ .../agent-infra/browser-use/src/dom/views.ts | 392 +++ packages/agent-infra/browser-use/src/index.ts | 9 + .../agent-infra/browser-use/src/typings.d.ts | 1 + packages/agent-infra/browser-use/src/utils.ts | 68 + .../browser-use/test/azureBedrockChat.ts | 419 +++ packages/agent-infra/browser-use/test/test.ts | 30 + .../agent-infra/browser-use/tsconfig.json | 19 + .../browser-use/vitest.e2e.config.ts | 21 + packages/agent-infra/mcp-client/.gitignore | 4 + packages/agent-infra/mcp-client/README.md | 8 + packages/agent-infra/mcp-client/package.json | 41 + packages/agent-infra/mcp-client/src/index.ts | 444 ++++ packages/agent-infra/mcp-client/src/test.ts | 293 +++ packages/agent-infra/mcp-client/tsconfig.json | 16 + .../agent-infra/mcp-client/vitest.config.mts | 12 + .../mcp-servers/browser/Dockerfile | 25 + .../agent-infra/mcp-servers/browser/README.md | 4 + .../agent-infra/mcp-servers/browser/index.ts | 152 ++ .../mcp-servers/browser/package.json | 41 + .../agent-infra/mcp-servers/browser/server.ts | 899 +++++++ .../mcp-servers/browser/tsconfig.json | 17 + .../mcp-servers/browser/vitest.config.mts | 12 + .../mcp-servers/commands/.gitignore | 4 + .../mcp-servers/commands/CHANGELOG.md | 5 + .../mcp-servers/commands/README.md | 1 + .../agent-infra/mcp-servers/commands/TODO.md | 20 + .../mcp-servers/commands/package.json | 36 + .../mcp-servers/commands/src/exec-utils.ts | 86 + .../mcp-servers/commands/src/index.ts | 183 ++ .../mcp-servers/commands/src/server.ts | 237 ++ .../mcp-servers/commands/src/tests.md | 18 + .../tests/integration/exec-utils.test.ts | 121 + .../commands/tests/manual/exec-file-sync.cjs | 42 + .../tests/manual/exec-file-with-stdin.cjs | 46 + .../tests/manual/fish-exec-fail-repro.js | 71 + .../commands/tests/manual/fish-spawn.cjs | 29 + .../commands/tests/manual/fish-spawn3.cjs | 32 + .../commands/tests/manual/test-with-error.cjs | 39 + .../manual/test-without-error-handler.cjs | 19 + .../mcp-servers/commands/tests/manual/test.ts | 53 + .../mcp-servers/commands/tsconfig.json | 16 + .../mcp-servers/commands/vitest.config.mts | 12 + .../mcp-servers/filesystem/Dockerfile | 25 + .../mcp-servers/filesystem/README.md | 3 + .../mcp-servers/filesystem/index.ts | 72 + .../mcp-servers/filesystem/package.json | 39 + .../mcp-servers/filesystem/schema.ts | 64 + .../mcp-servers/filesystem/server.ts | 523 ++++ .../mcp-servers/filesystem/tsconfig.json | 17 + .../mcp-servers/filesystem/utils.ts | 153 ++ .../mcp-servers/filesystem/vitest.config.mts | 12 + pnpm-lock.yaml | 2260 ++++++++++++++++- 85 files changed, 13849 insertions(+), 94 deletions(-) create mode 100644 packages/agent-infra/browser-use/.vscode/launch.json create mode 100644 packages/agent-infra/browser-use/README.md create mode 100644 packages/agent-infra/browser-use/assets/buildDomTree.js create mode 100644 packages/agent-infra/browser-use/package.json create mode 100644 packages/agent-infra/browser-use/rslib.config.ts create mode 100644 packages/agent-infra/browser-use/src/agent/actions/builder.ts create mode 100644 packages/agent-infra/browser-use/src/agent/actions/json_gemini.ts create mode 100644 packages/agent-infra/browser-use/src/agent/actions/json_schema.ts create mode 100644 packages/agent-infra/browser-use/src/agent/actions/schemas.ts create mode 100644 packages/agent-infra/browser-use/src/agent/agents/base.ts create mode 100644 packages/agent-infra/browser-use/src/agent/agents/errors.ts create mode 100644 packages/agent-infra/browser-use/src/agent/agents/navigator.ts create mode 100644 packages/agent-infra/browser-use/src/agent/agents/planner.ts create mode 100644 packages/agent-infra/browser-use/src/agent/agents/validator.ts create mode 100644 packages/agent-infra/browser-use/src/agent/event/manager.ts create mode 100644 packages/agent-infra/browser-use/src/agent/event/types.ts create mode 100644 packages/agent-infra/browser-use/src/agent/executor.ts create mode 100644 packages/agent-infra/browser-use/src/agent/helper.ts create mode 100644 packages/agent-infra/browser-use/src/agent/messages/service.ts create mode 100644 packages/agent-infra/browser-use/src/agent/messages/views.ts create mode 100644 packages/agent-infra/browser-use/src/agent/prompts/base.ts create mode 100644 packages/agent-infra/browser-use/src/agent/prompts/navigator.ts create mode 100644 packages/agent-infra/browser-use/src/agent/prompts/planner.ts create mode 100644 packages/agent-infra/browser-use/src/agent/prompts/validator.ts create mode 100644 packages/agent-infra/browser-use/src/agent/service.ts create mode 100644 packages/agent-infra/browser-use/src/agent/types.ts create mode 100644 packages/agent-infra/browser-use/src/browser/context.ts create mode 100644 packages/agent-infra/browser-use/src/browser/page.ts create mode 100644 packages/agent-infra/browser-use/src/browser/types.ts create mode 100644 packages/agent-infra/browser-use/src/context.ts create mode 100644 packages/agent-infra/browser-use/src/dom/history/views.ts create mode 100644 packages/agent-infra/browser-use/src/dom/raw_types.ts create mode 100644 packages/agent-infra/browser-use/src/dom/service.ts create mode 100644 packages/agent-infra/browser-use/src/dom/views.ts create mode 100644 packages/agent-infra/browser-use/src/index.ts create mode 100644 packages/agent-infra/browser-use/src/typings.d.ts create mode 100644 packages/agent-infra/browser-use/src/utils.ts create mode 100644 packages/agent-infra/browser-use/test/azureBedrockChat.ts create mode 100644 packages/agent-infra/browser-use/test/test.ts create mode 100644 packages/agent-infra/browser-use/tsconfig.json create mode 100644 packages/agent-infra/browser-use/vitest.e2e.config.ts create mode 100644 packages/agent-infra/mcp-client/.gitignore create mode 100644 packages/agent-infra/mcp-client/README.md create mode 100644 packages/agent-infra/mcp-client/package.json create mode 100644 packages/agent-infra/mcp-client/src/index.ts create mode 100644 packages/agent-infra/mcp-client/src/test.ts create mode 100644 packages/agent-infra/mcp-client/tsconfig.json create mode 100644 packages/agent-infra/mcp-client/vitest.config.mts create mode 100644 packages/agent-infra/mcp-servers/browser/Dockerfile create mode 100644 packages/agent-infra/mcp-servers/browser/README.md create mode 100644 packages/agent-infra/mcp-servers/browser/index.ts create mode 100644 packages/agent-infra/mcp-servers/browser/package.json create mode 100644 packages/agent-infra/mcp-servers/browser/server.ts create mode 100644 packages/agent-infra/mcp-servers/browser/tsconfig.json create mode 100644 packages/agent-infra/mcp-servers/browser/vitest.config.mts create mode 100644 packages/agent-infra/mcp-servers/commands/.gitignore create mode 100644 packages/agent-infra/mcp-servers/commands/CHANGELOG.md create mode 100644 packages/agent-infra/mcp-servers/commands/README.md create mode 100644 packages/agent-infra/mcp-servers/commands/TODO.md create mode 100644 packages/agent-infra/mcp-servers/commands/package.json create mode 100644 packages/agent-infra/mcp-servers/commands/src/exec-utils.ts create mode 100644 packages/agent-infra/mcp-servers/commands/src/index.ts create mode 100644 packages/agent-infra/mcp-servers/commands/src/server.ts create mode 100644 packages/agent-infra/mcp-servers/commands/src/tests.md create mode 100644 packages/agent-infra/mcp-servers/commands/tests/integration/exec-utils.test.ts create mode 100644 packages/agent-infra/mcp-servers/commands/tests/manual/exec-file-sync.cjs create mode 100644 packages/agent-infra/mcp-servers/commands/tests/manual/exec-file-with-stdin.cjs create mode 100644 packages/agent-infra/mcp-servers/commands/tests/manual/fish-exec-fail-repro.js create mode 100644 packages/agent-infra/mcp-servers/commands/tests/manual/fish-spawn.cjs create mode 100644 packages/agent-infra/mcp-servers/commands/tests/manual/fish-spawn3.cjs create mode 100644 packages/agent-infra/mcp-servers/commands/tests/manual/test-with-error.cjs create mode 100644 packages/agent-infra/mcp-servers/commands/tests/manual/test-without-error-handler.cjs create mode 100644 packages/agent-infra/mcp-servers/commands/tests/manual/test.ts create mode 100644 packages/agent-infra/mcp-servers/commands/tsconfig.json create mode 100644 packages/agent-infra/mcp-servers/commands/vitest.config.mts create mode 100644 packages/agent-infra/mcp-servers/filesystem/Dockerfile create mode 100644 packages/agent-infra/mcp-servers/filesystem/README.md create mode 100644 packages/agent-infra/mcp-servers/filesystem/index.ts create mode 100644 packages/agent-infra/mcp-servers/filesystem/package.json create mode 100644 packages/agent-infra/mcp-servers/filesystem/schema.ts create mode 100644 packages/agent-infra/mcp-servers/filesystem/server.ts create mode 100644 packages/agent-infra/mcp-servers/filesystem/tsconfig.json create mode 100644 packages/agent-infra/mcp-servers/filesystem/utils.ts create mode 100644 packages/agent-infra/mcp-servers/filesystem/vitest.config.mts diff --git a/packages/agent-infra/browser-use/.vscode/launch.json b/packages/agent-infra/browser-use/.vscode/launch.json new file mode 100644 index 000000000..e9a5f0fbb --- /dev/null +++ b/packages/agent-infra/browser-use/.vscode/launch.json @@ -0,0 +1,34 @@ +{ + "configurations": [ + { + "name": "test.ts", + "type": "node", + "request": "launch", + + // Debug current file in VSCode + "program": "${workspaceFolder}/test/test.ts", + + /* + * Path to tsx binary + * Assuming locally installed + */ + "runtimeExecutable": "tsx", + + /* + * Open terminal when debugging starts (Optional) + * Useful to see console.logs + */ + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen", + + // Files to exclude from debugger (e.g. call stack) + "skipFiles": [ + // Node.js internal core modules + "/**", + + // Ignore all dependencies (optional) + "${workspaceFolder}/node_modules/**" + ] + } + ] +} diff --git a/packages/agent-infra/browser-use/README.md b/packages/agent-infra/browser-use/README.md new file mode 100644 index 000000000..99ce5942e --- /dev/null +++ b/packages/agent-infra/browser-use/README.md @@ -0,0 +1,11 @@ +# @agent-infra/browser-use + +A browser automation and interaction library for AI agents, providing structured DOM access and browser control capabilities. + +## Credits + +Thanks to: + +- The [browser-use](https://github.com/browser-use/browser-use) project which helps us operate the browser better. +- [alexchenzl](https://github.com/alexchenzl) for creating a great [nanobrowser](https://github.com/nanobrowser/nanobrowser) Chrome extension from which we draw a lot of inspiration for browser detection functionality. +- The [puppeteer](https://github.com/puppeteer/puppeteer) project which helps us operate the browser better. diff --git a/packages/agent-infra/browser-use/assets/buildDomTree.js b/packages/agent-infra/browser-use/assets/buildDomTree.js new file mode 100644 index 000000000..803a9dee8 --- /dev/null +++ b/packages/agent-infra/browser-use/assets/buildDomTree.js @@ -0,0 +1,722 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/public/buildDomTree.js + * https://github.com/browser-use/browser-use/blob/main/browser_use/dom/buildDomTree.js + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + * + * MIT License + * Copyright (c) 2024 Gregor Zunic + * https://github.com/browser-use/browser-use/blob/main/LICENSE + */ +window.buildDomTree = ( + args = { + doHighlightElements: true, + focusHighlightIndex: -1, + viewportExpansion: 0, + }, +) => { + const { doHighlightElements, focusHighlightIndex, viewportExpansion } = args; + let highlightIndex = 0; // Reset highlight index + + // Quick check to confirm the script receives focusHighlightIndex + console.log('focusHighlightIndex:', focusHighlightIndex); + + function highlightElement(element, index, parentIframe = null) { + // Create or get highlight container + let container = document.getElementById('playwright-highlight-container'); + if (!container) { + container = document.createElement('div'); + container.id = 'playwright-highlight-container'; + container.style.position = 'absolute'; + container.style.pointerEvents = 'none'; + container.style.top = '0'; + container.style.left = '0'; + container.style.width = '100%'; + container.style.height = '100%'; + container.style.zIndex = '2147483647'; // Maximum z-index value + document.body.appendChild(container); + } + + // Generate a color based on the index + const colors = [ + '#FF0000', + '#00FF00', + '#0000FF', + '#FFA500', + '#800080', + '#008080', + '#FF69B4', + '#4B0082', + '#FF4500', + '#2E8B57', + '#DC143C', + '#4682B4', + ]; + const colorIndex = index % colors.length; + const baseColor = colors[colorIndex]; + const backgroundColor = `${baseColor}1A`; // 10% opacity version of the color + + // Create highlight overlay + const overlay = document.createElement('div'); + overlay.style.position = 'absolute'; + overlay.style.border = `2px solid ${baseColor}`; + overlay.style.backgroundColor = backgroundColor; + overlay.style.pointerEvents = 'none'; + overlay.style.boxSizing = 'border-box'; + + // Position overlay based on element, including scroll position + const rect = element.getBoundingClientRect(); + let top = rect.top + window.scrollY; + let left = rect.left + window.scrollX; + + // Adjust position if element is inside an iframe + if (parentIframe) { + const iframeRect = parentIframe.getBoundingClientRect(); + top += iframeRect.top; + left += iframeRect.left; + } + + overlay.style.top = `${top}px`; + overlay.style.left = `${left}px`; + overlay.style.width = `${rect.width}px`; + overlay.style.height = `${rect.height}px`; + + // Create label + const label = document.createElement('div'); + label.className = 'playwright-highlight-label'; + label.style.position = 'absolute'; + label.style.background = baseColor; + label.style.color = 'white'; + label.style.padding = '1px 4px'; + label.style.borderRadius = '4px'; + label.style.fontSize = `${Math.min(12, Math.max(8, rect.height / 2))}px`; // Responsive font size + label.textContent = index; + + // Calculate label position + const labelWidth = 20; // Approximate width + const labelHeight = 16; // Approximate height + + // Default position (top-right corner inside the box) + let labelTop = top + 2; + let labelLeft = left + rect.width - labelWidth - 2; + + // Adjust if box is too small + if (rect.width < labelWidth + 4 || rect.height < labelHeight + 4) { + // Position outside the box if it's too small + labelTop = top - labelHeight - 2; + labelLeft = left + rect.width - labelWidth; + } + + label.style.top = `${labelTop}px`; + label.style.left = `${labelLeft}px`; + + // Add to container + container.appendChild(overlay); + container.appendChild(label); + + // Store reference for cleanup + element.setAttribute( + 'browser-user-highlight-id', + `playwright-highlight-${index}`, + ); + + return index + 1; + } + + // Helper function to generate XPath as a tree + function getXPathTree(element, stopAtBoundary = true) { + const segments = []; + let currentElement = element; + + while (currentElement && currentElement.nodeType === Node.ELEMENT_NODE) { + // Stop if we hit a shadow root or iframe + if ( + stopAtBoundary && + (currentElement.parentNode instanceof ShadowRoot || + currentElement.parentNode instanceof HTMLIFrameElement) + ) { + break; + } + + let index = 0; + let sibling = currentElement.previousSibling; + while (sibling) { + if ( + sibling.nodeType === Node.ELEMENT_NODE && + sibling.nodeName === currentElement.nodeName + ) { + index++; + } + sibling = sibling.previousSibling; + } + + const tagName = currentElement.nodeName.toLowerCase(); + const xpathIndex = index > 0 ? `[${index + 1}]` : ''; + segments.unshift(`${tagName}${xpathIndex}`); + + currentElement = currentElement.parentNode; + } + + return segments.join('/'); + } + + function getCssSelector(element) { + if (!element || element.nodeType !== Node.ELEMENT_NODE) return null; + + // if element has ID, use ID selector (most concise and effective) + if (element.id) { + return `#${element.id}`; + } + + let path = []; + while (element && element.nodeType === Node.ELEMENT_NODE) { + let selector = element.nodeName.toLowerCase(); + + // if element has ID, use ID selector + if (element.id) { + selector = `#${element.id}`; + path.unshift(selector); + break; + } + // if element has class name, use class selector (but be careful about multiple class names) + else if (element.className && typeof element.className === 'string') { + const classes = element.className.trim().split(/\s+/); + if (classes.length > 0 && classes[0]) { + selector += `.${classes[0]}`; + } + } + + // add nth-of-type to ensure the selector is unique + let sibling = element; + let nth = 1; + while ((sibling = sibling.previousElementSibling)) { + if (sibling.nodeName.toLowerCase() === element.nodeName.toLowerCase()) + nth++; + } + if (nth > 1) selector += `:nth-of-type(${nth})`; + + path.unshift(selector); + + // if we have reached an element with ID or body, stop + if ( + element.parentNode && + (element.parentNode.id || + element.parentNode.nodeName.toLowerCase() === 'body') + ) { + if (element.parentNode.id) { + path.unshift(`#${element.parentNode.id}`); + } else { + path.unshift('body'); + } + break; + } + + element = element.parentNode; + } + + return path.join(' > '); + } + // Helper function to check if element is accepted + function isElementAccepted(element) { + const leafElementDenyList = new Set([ + 'svg', + 'script', + 'style', + 'link', + 'meta', + ]); + return !leafElementDenyList.has(element.tagName.toLowerCase()); + } + + // Helper function to check if element is interactive + function isInteractiveElement(element) { + // Immediately return false for body tag + if (element.tagName.toLowerCase() === 'body') { + return false; + } + + // Base interactive elements and roles + const interactiveElements = new Set([ + 'a', + 'button', + 'details', + 'embed', + 'input', + 'label', + 'menu', + 'menuitem', + 'object', + 'select', + 'textarea', + 'summary', + ]); + + const interactiveRoles = new Set([ + 'button', + 'menu', + 'menuitem', + 'link', + 'checkbox', + 'radio', + 'slider', + 'tab', + 'tabpanel', + 'textbox', + 'combobox', + 'grid', + 'listbox', + 'option', + 'progressbar', + 'scrollbar', + 'searchbox', + 'switch', + 'tree', + 'treeitem', + 'spinbutton', + 'tooltip', + 'a-button-inner', + 'a-dropdown-button', + 'click', + 'menuitemcheckbox', + 'menuitemradio', + 'a-button-text', + 'button-text', + 'button-icon', + 'button-icon-only', + 'button-text-icon-only', + 'dropdown', + 'combobox', + ]); + + const tagName = element.tagName.toLowerCase(); + const role = element.getAttribute('role'); + const ariaRole = element.getAttribute('aria-role'); + const tabIndex = element.getAttribute('tabindex'); + + // Add check for specific class + const hasAddressInputClass = element.classList.contains( + 'address-input__container__input', + ); + + // Basic role/attribute checks + const hasInteractiveRole = + hasAddressInputClass || + interactiveElements.has(tagName) || + interactiveRoles.has(role) || + interactiveRoles.has(ariaRole) || + (tabIndex !== null && + tabIndex !== '-1' && + element.parentElement?.tagName.toLowerCase() !== 'body') || + element.getAttribute('data-action') === 'a-dropdown-select' || + element.getAttribute('data-action') === 'a-dropdown-button'; + + if (hasInteractiveRole) return true; + + // Get computed style + const style = window.getComputedStyle(element); + + // Check if element has click-like styling + // const hasClickStyling = style.cursor === 'pointer' || + // element.style.cursor === 'pointer' || + // style.pointerEvents !== 'none'; + + // Check for event listeners + const hasClickHandler = + element.onclick !== null || + element.getAttribute('onclick') !== null || + element.hasAttribute('ng-click') || + element.hasAttribute('@click') || + element.hasAttribute('v-on:click'); + + // Helper function to safely get event listeners + function getEventListeners(el) { + try { + // Try to get listeners using Chrome DevTools API + return window.getEventListeners?.(el) || {}; + } catch (e) { + // Fallback: check for common event properties + const listeners = {}; + + // List of common event types to check + const eventTypes = [ + 'click', + 'mousedown', + 'mouseup', + 'touchstart', + 'touchend', + 'keydown', + 'keyup', + 'focus', + 'blur', + ]; + + for (const type of eventTypes) { + const handler = el[`on${type}`]; + if (handler) { + listeners[type] = [ + { + listener: handler, + useCapture: false, + }, + ]; + } + } + + return listeners; + } + } + + // Check for click-related events on the element itself + const listeners = getEventListeners(element); + const hasClickListeners = + listeners && + (listeners.click?.length > 0 || + listeners.mousedown?.length > 0 || + listeners.mouseup?.length > 0 || + listeners.touchstart?.length > 0 || + listeners.touchend?.length > 0); + + // Check for ARIA properties that suggest interactivity + const hasAriaProps = + element.hasAttribute('aria-expanded') || + element.hasAttribute('aria-pressed') || + element.hasAttribute('aria-selected') || + element.hasAttribute('aria-checked'); + + // Check for form-related functionality + const isFormRelated = + element.form !== undefined || + element.hasAttribute('contenteditable') || + style.userSelect !== 'none'; + + // Check if element is draggable + const isDraggable = + element.draggable || element.getAttribute('draggable') === 'true'; + + // Additional check to prevent body from being marked as interactive + if ( + element.tagName.toLowerCase() === 'body' || + element.parentElement?.tagName.toLowerCase() === 'body' + ) { + return false; + } + + return ( + hasAriaProps || + // hasClickStyling || + hasClickHandler || + hasClickListeners || + // isFormRelated || + isDraggable + ); + } + + // Helper function to check if element is visible + function isElementVisible(element) { + const style = window.getComputedStyle(element); + return ( + element.offsetWidth > 0 && + element.offsetHeight > 0 && + style.visibility !== 'hidden' && + style.display !== 'none' + ); + } + + // Helper function to check if element is the top element at its position + function isTopElement(element) { + // Find the correct document context and root element + let doc = element.ownerDocument; + + // If we're in an iframe, elements are considered top by default + if (doc !== window.document) { + return true; + } + + // For shadow DOM, we need to check within its own root context + const shadowRoot = element.getRootNode(); + if (shadowRoot instanceof ShadowRoot) { + const rect = element.getBoundingClientRect(); + const point = { + x: rect.left + rect.width / 2, + y: rect.top + rect.height / 2, + }; + + try { + // Use shadow root's elementFromPoint to check within shadow DOM context + const topEl = shadowRoot.elementFromPoint(point.x, point.y); + if (!topEl) return false; + + // Check if the element or any of its parents match our target element + let current = topEl; + while (current && current !== shadowRoot) { + if (current === element) return true; + current = current.parentElement; + } + return false; + } catch (e) { + return true; // If we can't determine, consider it visible + } + } + + // Regular DOM elements + const rect = element.getBoundingClientRect(); + + // If viewportExpansion is -1, check if element is the top one at its position + if (viewportExpansion === -1) { + return true; // Consider all elements as top elements when expansion is -1 + } + + // Calculate expanded viewport boundaries including scroll position + const scrollX = window.scrollX; + const scrollY = window.scrollY; + const viewportTop = -viewportExpansion + scrollY; + const viewportLeft = -viewportExpansion + scrollX; + const viewportBottom = window.innerHeight + viewportExpansion + scrollY; + const viewportRight = window.innerWidth + viewportExpansion + scrollX; + + // Get absolute element position + const absTop = rect.top + scrollY; + const absLeft = rect.left + scrollX; + const absBottom = rect.bottom + scrollY; + const absRight = rect.right + scrollX; + + // Skip if element is completely outside expanded viewport + if ( + absBottom < viewportTop || + absTop > viewportBottom || + absRight < viewportLeft || + absLeft > viewportRight + ) { + return false; + } + + // For elements within expanded viewport, check if they're the top element + try { + const centerX = rect.left + rect.width / 2; + const centerY = rect.top + rect.height / 2; + + // Only clamp the point if it's outside the actual document + const point = { + x: centerX, + y: centerY, + }; + + if ( + point.x < 0 || + point.x >= window.innerWidth || + point.y < 0 || + point.y >= window.innerHeight + ) { + return true; // Consider elements with center outside viewport as visible + } + + const topEl = document.elementFromPoint(point.x, point.y); + if (!topEl) return false; + + let current = topEl; + while (current && current !== document.documentElement) { + if (current === element) return true; + current = current.parentElement; + } + return false; + } catch (e) { + return true; + } + } + + // Helper function to check if text node is visible + function isTextNodeVisible(textNode) { + const range = document.createRange(); + range.selectNodeContents(textNode); + const rect = range.getBoundingClientRect(); + + return ( + rect.width !== 0 && + rect.height !== 0 && + rect.top >= 0 && + rect.top <= window.innerHeight && + textNode.parentElement?.checkVisibility({ + checkOpacity: true, + checkVisibilityCSS: true, + }) + ); + } + + // Function to traverse the DOM and create nested JSON + function buildDomTree(node, parentIframe = null) { + if (!node) return null; + + // Special case for text nodes + if (node.nodeType === Node.TEXT_NODE) { + const textContent = node.textContent.trim(); + if (textContent && isTextNodeVisible(node)) { + return { + type: 'TEXT_NODE', + text: textContent, + isVisible: true, + }; + } + return null; + } + + // Check if element is accepted + if (node.nodeType === Node.ELEMENT_NODE && !isElementAccepted(node)) { + return null; + } + + const nodeData = { + tagName: node.tagName ? node.tagName.toLowerCase() : null, + attributes: {}, + xpath: + node.nodeType === Node.ELEMENT_NODE ? getXPathTree(node, true) : null, + cssSelector: + node.nodeType === Node.ELEMENT_NODE ? getCssSelector(node) : null, + children: [], + }; + + // Add coordinates for element nodes + if (node.nodeType === Node.ELEMENT_NODE) { + const rect = node.getBoundingClientRect(); + const scrollX = window.scrollX; + const scrollY = window.scrollY; + + // Viewport-relative coordinates (can be negative when scrolled) + nodeData.viewportCoordinates = { + topLeft: { + x: Math.round(rect.left), + y: Math.round(rect.top), + }, + topRight: { + x: Math.round(rect.right), + y: Math.round(rect.top), + }, + bottomLeft: { + x: Math.round(rect.left), + y: Math.round(rect.bottom), + }, + bottomRight: { + x: Math.round(rect.right), + y: Math.round(rect.bottom), + }, + center: { + x: Math.round(rect.left + rect.width / 2), + y: Math.round(rect.top + rect.height / 2), + }, + width: Math.round(rect.width), + height: Math.round(rect.height), + }; + + // Page-relative coordinates (always positive, relative to page origin) + nodeData.pageCoordinates = { + topLeft: { + x: Math.round(rect.left + scrollX), + y: Math.round(rect.top + scrollY), + }, + topRight: { + x: Math.round(rect.right + scrollX), + y: Math.round(rect.top + scrollY), + }, + bottomLeft: { + x: Math.round(rect.left + scrollX), + y: Math.round(rect.bottom + scrollY), + }, + bottomRight: { + x: Math.round(rect.right + scrollX), + y: Math.round(rect.bottom + scrollY), + }, + center: { + x: Math.round(rect.left + rect.width / 2 + scrollX), + y: Math.round(rect.top + rect.height / 2 + scrollY), + }, + width: Math.round(rect.width), + height: Math.round(rect.height), + }; + + // Add viewport and scroll information + nodeData.viewport = { + scrollX: Math.round(scrollX), + scrollY: Math.round(scrollY), + width: window.innerWidth, + height: window.innerHeight, + }; + } + + // Copy all attributes if the node is an element + if (node.nodeType === Node.ELEMENT_NODE && node.attributes) { + // Use getAttributeNames() instead of directly iterating attributes + const attributeNames = node.getAttributeNames?.() || []; + for (const name of attributeNames) { + nodeData.attributes[name] = node.getAttribute(name); + } + } + + if (node.nodeType === Node.ELEMENT_NODE) { + const isInteractive = isInteractiveElement(node); + const isVisible = isElementVisible(node); + const isTop = isTopElement(node); + + nodeData.isInteractive = isInteractive; + nodeData.isVisible = isVisible; + nodeData.isTopElement = isTop; + + // Highlight if element meets all criteria and highlighting is enabled + if (isInteractive && isVisible && isTop) { + nodeData.highlightIndex = highlightIndex++; + if (doHighlightElements) { + if (focusHighlightIndex >= 0) { + if (focusHighlightIndex === nodeData.highlightIndex) { + highlightElement(node, nodeData.highlightIndex, parentIframe); + } + } else { + highlightElement(node, nodeData.highlightIndex, parentIframe); + } + } + } + } + + // Only add iframeContext if we're inside an iframe + // if (parentIframe) { + // nodeData.iframeContext = `iframe[src="${parentIframe.src || ''}"]`; + // } + + // Only add shadowRoot field if it exists + if (node.shadowRoot) { + nodeData.shadowRoot = true; + } + + // Handle shadow DOM + if (node.shadowRoot) { + const shadowChildren = Array.from(node.shadowRoot.childNodes).map( + (child) => buildDomTree(child, parentIframe), + ); + nodeData.children.push(...shadowChildren); + } + + // Handle iframes + if (node.tagName === 'IFRAME') { + try { + const iframeDoc = node.contentDocument || node.contentWindow.document; + if (iframeDoc) { + const iframeChildren = Array.from(iframeDoc.body.childNodes).map( + (child) => buildDomTree(child, node), + ); + nodeData.children.push(...iframeChildren); + } + } catch (e) { + console.warn('Unable to access iframe:', node); + } + } else { + const children = Array.from(node.childNodes).map((child) => + buildDomTree(child, parentIframe), + ); + nodeData.children.push(...children); + } + + return nodeData; + } + + return buildDomTree(document.body); +}; diff --git a/packages/agent-infra/browser-use/package.json b/packages/agent-infra/browser-use/package.json new file mode 100644 index 000000000..0091b6d99 --- /dev/null +++ b/packages/agent-infra/browser-use/package.json @@ -0,0 +1,49 @@ +{ + "name": "@agent-infra/browser-use", + "version": "0.0.1", + "main": "dist/index.js", + "module": "dist/index.mjs", + "types": "dist/index.d.ts", + "exports": { + ".": { + "import": "./dist/index.mjs", + "require": "./dist/index.js", + "types": "./dist/index.d.ts" + } + }, + "files": [ + "dist", + "assets" + ], + "scripts": { + "dev": "rslib build --watch", + "build": "rslib build", + "prepare": "npm run build", + "prepublishOnly": "pnpm run build", + "test": "vitest run", + "test:watch": "vitest", + "test:e2e": "vitest --config vitest.e2e.config.ts", + "coverage": "vitest run --coverage", + "test:e2e:local": "vitest --config vitest.e2e.config.ts local-browser.e2e.test.ts" + }, + "dependencies": { + "zod": "^3.23.8", + "openai": "^4.87.3", + "jsonrepair": "3.12.0", + "@langchain/core": "0.3.42", + "puppeteer-core": "24.1.1", + "@agent-infra/browser": "workspace:*", + "@agent-infra/logger": "workspace:*", + "@agent-infra/shared": "workspace:*" + }, + "devDependencies": { + "@types/node": "20.14.8", + "@langchain/aws": "0.1.6", + "@langchain/openai": "0.4.4", + "typescript": "^5.7.3", + "tsx": "^4.19.3", + "vitest": "3.0.7", + "@vitest/coverage-v8": "3.0.7", + "@rslib/core": "0.5.3" + } +} diff --git a/packages/agent-infra/browser-use/rslib.config.ts b/packages/agent-infra/browser-use/rslib.config.ts new file mode 100644 index 000000000..5bf5cfd7e --- /dev/null +++ b/packages/agent-infra/browser-use/rslib.config.ts @@ -0,0 +1,49 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { defineConfig } from '@rslib/core'; +import path from 'path'; +import fs from 'fs'; + +const BANNER = `/** +* Copyright (c) 2025 Bytedance, Inc. and its affiliates. +* SPDX-License-Identifier: Apache-2.0 +*/`; + +export default defineConfig({ + source: { + entry: { + index: ['src/**/*.ts', '!src/**/*.{test,bench}.ts'], + }, + define: { + BUILD_DOM_TREE_SCRIPT: JSON.stringify( + fs.readFileSync( + path.join(__dirname, './assets/buildDomTree.js'), + 'utf8', + ), + ), + }, + }, + lib: [ + { + format: 'esm', + syntax: 'es2021', + bundle: false, + dts: true, + banner: { js: BANNER }, + }, + { + format: 'cjs', + syntax: 'es2021', + bundle: false, + dts: true, + banner: { js: BANNER }, + }, + ], + output: { + target: 'web', + cleanDistPath: true, + sourceMap: true, + }, +}); diff --git a/packages/agent-infra/browser-use/src/agent/actions/builder.ts b/packages/agent-infra/browser-use/src/agent/actions/builder.ts new file mode 100644 index 000000000..adc9374ba --- /dev/null +++ b/packages/agent-infra/browser-use/src/agent/actions/builder.ts @@ -0,0 +1,509 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/agent/actions/builder.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ +import { ActionResult, type AgentContext } from '../types'; +import { + clickElementActionSchema, + doneActionSchema, + extractContentActionSchema, + goBackActionSchema, + goToUrlActionSchema, + inputTextActionSchema, + openTabActionSchema, + searchGoogleActionSchema, + switchTabActionSchema, + type ActionSchema, + scrollDownActionSchema, + scrollUpActionSchema, + sendKeysActionSchema, + scrollToTextActionSchema, + cacheContentActionSchema, +} from './schemas'; +import { z } from 'zod'; +import { createLogger } from '../../utils'; +import { PromptTemplate } from '@langchain/core/prompts'; +import type { BaseChatModel } from '@langchain/core/language_models/chat_models'; +import { ExecutionState, Actors } from '../event/types'; + +const logger = createLogger('Action'); + +export class InvalidInputError extends Error { + constructor(message: string) { + super(message); + this.name = 'InvalidInputError'; + } +} + +/** + * An action is a function that takes an input and returns an ActionResult + */ +export class Action { + constructor( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + private readonly handler: (input: any) => Promise, + public readonly schema: ActionSchema, + ) {} + + async call(input: unknown): Promise { + // Validate input before calling the handler + const schema = this.schema.schema; + + // check if the schema is schema: z.object({}), if so, ignore the input + const isEmptySchema = + schema instanceof z.ZodObject && + Object.keys( + (schema as z.ZodObject>).shape || {}, + ).length === 0; + + if (isEmptySchema) { + return await this.handler({}); + } + + const parsedArgs = this.schema.schema.safeParse(input); + if (!parsedArgs.success) { + const errorMessage = parsedArgs.error.message; + throw new InvalidInputError(errorMessage); + } + return await this.handler(parsedArgs.data); + } + + name() { + return this.schema.name; + } + + /** + * Returns the prompt for the action + * @returns {string} The prompt for the action + */ + prompt() { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const schemaShape = (this.schema.schema as z.ZodObject).shape || {}; + const schemaProperties = Object.entries(schemaShape).map(([key, value]) => { + const zodValue = value as z.ZodTypeAny; + return `'${key}': {'type': '${zodValue.description}', ${zodValue.isOptional() ? "'optional': true" : "'required': true"}}`; + }); + + const schemaStr = + schemaProperties.length > 0 + ? `{${this.name()}: {${schemaProperties.join(', ')}}}` + : `{${this.name()}: {}}`; + + return `${this.schema.description}:\n${schemaStr}`; + } +} + +// TODO: can not make every action optional, don't know why +export function buildDynamicActionSchema(actions: Action[]): z.ZodType { + let schema = z.object({}); + for (const action of actions) { + // create a schema for the action, it could be action.schema.schema or null + // but don't use default: null as it causes issues with Google Generative AI + const actionSchema = action.schema.schema.nullable(); + schema = schema.extend({ + [action.name()]: actionSchema, + }); + } + return schema.partial().nullable(); +} + +export class ActionBuilder { + private readonly context: AgentContext; + private readonly extractorLLM: BaseChatModel; + + constructor(context: AgentContext, extractorLLM: BaseChatModel) { + this.context = context; + this.extractorLLM = extractorLLM; + } + + buildDefaultActions() { + const actions = []; + + const done = new Action( + async (input: z.infer) => { + this.context.emitEvent( + Actors.NAVIGATOR, + ExecutionState.ACT_START, + doneActionSchema.name, + ); + this.context.emitEvent( + Actors.NAVIGATOR, + ExecutionState.ACT_OK, + input.text, + ); + return new ActionResult({ + isDone: true, + extractedContent: input.text, + }); + }, + doneActionSchema, + ); + actions.push(done); + + const searchGoogle = new Action(async (input: { query: string }) => { + const msg = `Searching for "${input.query}" in Google`; + this.context.emitEvent(Actors.NAVIGATOR, ExecutionState.ACT_START, msg); + + const page = await this.context.browserContext.getCurrentPage(); + await page.navigateTo(`https://www.google.com/search?q=${input.query}`); + + const msg2 = `Searched for "${input.query}" in Google`; + this.context.emitEvent(Actors.NAVIGATOR, ExecutionState.ACT_OK, msg2); + return new ActionResult({ + extractedContent: msg2, + includeInMemory: true, + }); + }, searchGoogleActionSchema); + actions.push(searchGoogle); + + const goToUrl = new Action(async (input: { url: string }) => { + const msg = `Navigating to ${input.url}`; + this.context.emitEvent(Actors.NAVIGATOR, ExecutionState.ACT_START, msg); + + await this.context.browserContext.navigateTo(input.url); + const msg2 = `Navigated to ${input.url}`; + this.context.emitEvent(Actors.NAVIGATOR, ExecutionState.ACT_OK, msg2); + return new ActionResult({ + extractedContent: msg2, + includeInMemory: true, + }); + }, goToUrlActionSchema); + actions.push(goToUrl); + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const goBack = new Action(async (_input = {}) => { + const msg = 'Navigating back'; + this.context.emitEvent(Actors.NAVIGATOR, ExecutionState.ACT_START, msg); + + const page = await this.context.browserContext.getCurrentPage(); + await page.goBack(); + const msg2 = 'Navigated back'; + this.context.emitEvent(Actors.NAVIGATOR, ExecutionState.ACT_OK, msg2); + return new ActionResult({ + extractedContent: msg2, + includeInMemory: true, + }); + }, goBackActionSchema); + actions.push(goBack); + + // Element Interaction Actions + const clickElement = new Action( + async (input: z.infer) => { + const todo = input.desc || `Click element with index ${input.index}`; + this.context.emitEvent( + Actors.NAVIGATOR, + ExecutionState.ACT_START, + todo, + ); + + const page = await this.context.browserContext.getCurrentPage(); + const state = await page.getState(); + + const elementNode = state?.selectorMap.get(input.index); + if (!elementNode) { + throw new Error( + `Element with index ${input.index} does not exist - retry or use alternative actions`, + ); + } + + // Check if element is a file uploader + if (await page.isFileUploader(elementNode)) { + const msg = `Index ${input.index} - has an element which opens file upload dialog. To upload files please use a specific function to upload files`; + logger.info(msg); + return new ActionResult({ + extractedContent: msg, + includeInMemory: true, + }); + } + + try { + // const initialTabIds = + // await this.context.browserContext.getAllTabIds(); + console.log('elementNode', elementNode); + await page.clickElementNode( + this.context.options.useVision, + elementNode, + ); + const msg = `Clicked button with index ${input.index}: ${elementNode.getAllTextTillNextClickableElement(2)}`; + logger.info(msg); + + // TODO: could be optimized by chrome extension tab api + // const currentTabIds = + // await this.context.browserContext.getAllTabIds(); + // if (currentTabIds.size > initialTabIds.size) { + // const newTabMsg = 'New tab opened - switching to it'; + // msg += ` - ${newTabMsg}`; + // logger.info(newTabMsg); + // // find the tab id that is not in the initial tab ids + // const newTabId = Array.from(currentTabIds).find( + // (id) => !initialTabIds.has(id), + // ); + // if (newTabId) { + // await this.context.browserContext.switchTab(newTabId); + // } + // } + this.context.emitEvent(Actors.NAVIGATOR, ExecutionState.ACT_OK, msg); + return new ActionResult({ + extractedContent: msg, + includeInMemory: true, + }); + } catch (error) { + const msg = `Element no longer available with index ${input.index} - most likely the page changed`; + this.context.emitEvent( + Actors.NAVIGATOR, + ExecutionState.ACT_FAIL, + msg, + ); + return new ActionResult({ + error: error instanceof Error ? error.message : String(error), + }); + } + }, + clickElementActionSchema, + ); + actions.push(clickElement); + + const inputText = new Action( + async (input: z.infer) => { + const todo = input.desc || `Input text into index ${input.index}`; + this.context.emitEvent( + Actors.NAVIGATOR, + ExecutionState.ACT_START, + todo, + ); + + const page = await this.context.browserContext.getCurrentPage(); + const state = await page.getState(); + + const elementNode = state?.selectorMap.get(input.index); + if (!elementNode) { + throw new Error( + `Element with index ${input.index} does not exist - retry or use alternative actions`, + ); + } + + await page.inputTextElementNode( + this.context.options.useVision, + elementNode, + input.text, + ); + const msg = `Input ${input.text} into index ${input.index}`; + this.context.emitEvent(Actors.NAVIGATOR, ExecutionState.ACT_OK, msg); + return new ActionResult({ + extractedContent: msg, + includeInMemory: true, + }); + }, + inputTextActionSchema, + ); + actions.push(inputText); + + // Tab Management Actions + const switchTab = new Action( + async (input: z.infer) => { + this.context.emitEvent( + Actors.NAVIGATOR, + ExecutionState.ACT_START, + `Switching to tab ${input.tab_id}`, + ); + await this.context.browserContext.switchTab(input.tab_id); + const msg = `Switched to tab ${input.tab_id}`; + this.context.emitEvent(Actors.NAVIGATOR, ExecutionState.ACT_OK, msg); + return new ActionResult({ + extractedContent: msg, + includeInMemory: true, + }); + }, + switchTabActionSchema, + ); + actions.push(switchTab); + + const openTab = new Action( + async (input: z.infer) => { + this.context.emitEvent( + Actors.NAVIGATOR, + ExecutionState.ACT_START, + `Opening ${input.url} in new tab`, + ); + await this.context.browserContext.openTab(input.url); + const msg = `Opened ${input.url} in new tab`; + this.context.emitEvent(Actors.NAVIGATOR, ExecutionState.ACT_OK, msg); + return new ActionResult({ + extractedContent: msg, + includeInMemory: true, + }); + }, + openTabActionSchema, + ); + actions.push(openTab); + + // Content Actions + // TODO: this is not used currently, need to improve on input size + const extractContent = new Action( + async (input: z.infer) => { + const goal = input.goal; + const page = await this.context.browserContext.getCurrentPage(); + const content = await page.getReadabilityContent(); + const promptTemplate = PromptTemplate.fromTemplate( + 'Your task is to extract the content of the page. You will be given a page and a goal and you should extract all relevant information around this goal from the page. If the goal is vague, summarize the page. Respond in json format. Extraction goal: {goal}, Page: {page}', + ); + const prompt = await promptTemplate.invoke({ + goal, + page: content?.content, + }); + + try { + const output = await this.extractorLLM.invoke(prompt); + const msg = `📄 Extracted from page\n: ${output.content}\n`; + return new ActionResult({ + extractedContent: msg, + includeInMemory: true, + }); + } catch (error) { + logger.error( + `Error extracting content: ${error instanceof Error ? error.message : String(error)}`, + ); + const msg = + 'Failed to extract content from page, you need to extract content from the current state of the page and store it in the memory. Then scroll down if you still need more information.'; + return new ActionResult({ + extractedContent: msg, + includeInMemory: true, + }); + } + }, + extractContentActionSchema, + ); + actions.push(extractContent); + + // cache content for future use + const cacheContent = new Action( + async (input: z.infer) => { + this.context.emitEvent( + Actors.NAVIGATOR, + ExecutionState.ACT_START, + cacheContentActionSchema.name, + ); + + const msg = `Cached findings: ${input.content}`; + this.context.emitEvent(Actors.NAVIGATOR, ExecutionState.ACT_OK, msg); + return new ActionResult({ + extractedContent: msg, + includeInMemory: true, + }); + }, + cacheContentActionSchema, + ); + actions.push(cacheContent); + + const scrollDown = new Action( + async (input: z.infer) => { + const todo = input.desc || 'Scroll down the page'; + this.context.emitEvent( + Actors.NAVIGATOR, + ExecutionState.ACT_START, + todo, + ); + + const page = await this.context.browserContext.getCurrentPage(); + await page.scrollDown(input.amount); + const amount = + input.amount !== undefined ? `${input.amount} pixels` : 'one page'; + const msg = `Scrolled down the page by ${amount}`; + this.context.emitEvent(Actors.NAVIGATOR, ExecutionState.ACT_OK, msg); + return new ActionResult({ + extractedContent: msg, + includeInMemory: true, + }); + }, + scrollDownActionSchema, + ); + actions.push(scrollDown); + + const scrollUp = new Action( + async (input: z.infer) => { + const todo = input.desc || 'Scroll up the page'; + this.context.emitEvent( + Actors.NAVIGATOR, + ExecutionState.ACT_START, + todo, + ); + + const page = await this.context.browserContext.getCurrentPage(); + await page.scrollUp(input.amount); + const amount = + input.amount !== undefined ? `${input.amount} pixels` : 'one page'; + const msg = `Scrolled up the page by ${amount}`; + this.context.emitEvent(Actors.NAVIGATOR, ExecutionState.ACT_OK, msg); + return new ActionResult({ + extractedContent: msg, + includeInMemory: true, + }); + }, + scrollUpActionSchema, + ); + actions.push(scrollUp); + + // Keyboard Actions + const sendKeys = new Action( + async (input: z.infer) => { + const todo = input.desc || `Send keys: ${input.keys}`; + this.context.emitEvent( + Actors.NAVIGATOR, + ExecutionState.ACT_START, + todo, + ); + + const page = await this.context.browserContext.getCurrentPage(); + await page.sendKeys(input.keys); + const msg = `Sent keys: ${input.keys}`; + this.context.emitEvent(Actors.NAVIGATOR, ExecutionState.ACT_OK, msg); + return new ActionResult({ + extractedContent: msg, + includeInMemory: true, + }); + }, + sendKeysActionSchema, + ); + actions.push(sendKeys); + + const scrollToText = new Action( + async (input: z.infer) => { + const todo = input.desc || `Scroll to text: ${input.text}`; + this.context.emitEvent( + Actors.NAVIGATOR, + ExecutionState.ACT_START, + todo, + ); + + const page = await this.context.browserContext.getCurrentPage(); + try { + const scrolled = await page.scrollToText(input.text); + const msg = scrolled + ? `Scrolled to text: ${input.text}` + : `Text '${input.text}' not found or not visible on page`; + this.context.emitEvent(Actors.NAVIGATOR, ExecutionState.ACT_OK, msg); + return new ActionResult({ + extractedContent: msg, + includeInMemory: true, + }); + } catch (error) { + const msg = `Failed to scroll to text: ${error instanceof Error ? error.message : String(error)}`; + this.context.emitEvent( + Actors.NAVIGATOR, + ExecutionState.ACT_FAIL, + msg, + ); + return new ActionResult({ error: msg, includeInMemory: true }); + } + }, + scrollToTextActionSchema, + ); + actions.push(scrollToText); + + return actions; + } +} diff --git a/packages/agent-infra/browser-use/src/agent/actions/json_gemini.ts b/packages/agent-infra/browser-use/src/agent/actions/json_gemini.ts new file mode 100644 index 000000000..0b1727c69 --- /dev/null +++ b/packages/agent-infra/browser-use/src/agent/actions/json_gemini.ts @@ -0,0 +1,240 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/agent/actions/json_gemini.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ +// TODO: don't know why zod can not generate the same schema, need to fix it +export const geminiNavigatorOutputSchema = { + type: 'object', + properties: { + current_state: { + type: 'object', + description: 'Current state of the agent', + properties: { + page_summary: { + type: 'string', + }, + evaluation_previous_goal: { + type: 'string', + }, + memory: { + type: 'string', + }, + next_goal: { + type: 'string', + }, + }, + required: [ + 'page_summary', + 'evaluation_previous_goal', + 'memory', + 'next_goal', + ], + }, + action: { + type: 'array', + items: { + type: 'object', + properties: { + done: { + type: 'object', + properties: { + text: { + type: 'string', + }, + }, + required: ['text'], + nullable: true, + }, + search_google: { + type: 'object', + properties: { + query: { + type: 'string', + }, + }, + required: ['query'], + nullable: true, + }, + go_to_url: { + type: 'object', + properties: { + url: { + type: 'string', + }, + }, + required: ['url'], + nullable: true, + }, + go_back: { + type: 'string', + nullable: true, + description: + 'Accepts absolutely anything in the incoming data\nand discards it, so the final parsed model is empty.', + }, + click_element: { + type: 'object', + properties: { + desc: { + type: 'string', + description: + 'Very short explanation of the intent or purpose for calling this action', + }, + index: { + type: 'integer', + }, + xpath: { + type: 'string', + nullable: true, + }, + }, + required: ['desc', 'index'], + nullable: true, + }, + input_text: { + type: 'object', + properties: { + desc: { + type: 'string', + description: + 'Very short explanation of the intent or purpose for calling this action', + }, + index: { + type: 'integer', + }, + text: { + type: 'string', + }, + xpath: { + type: 'string', + nullable: true, + }, + }, + required: ['desc', 'index', 'text'], + nullable: true, + }, + switch_tab: { + type: 'object', + properties: { + tab_id: { + type: 'integer', + }, + }, + required: ['tab_id'], + nullable: true, + }, + open_tab: { + type: 'object', + properties: { + url: { + type: 'string', + }, + }, + required: ['url'], + nullable: true, + }, + cache_content: { + type: 'object', + properties: { + content: { + type: 'string', + }, + }, + required: ['content'], + nullable: true, + }, + scroll_down: { + type: 'object', + properties: { + desc: { + type: 'string', + description: + 'Very short explanation of the intent or purpose for calling this action', + }, + amount: { + type: 'integer', + nullable: true, + }, + }, + required: ['desc'], + nullable: true, + }, + scroll_up: { + type: 'object', + properties: { + desc: { + type: 'string', + description: + 'Very short explanation of the intent or purpose for calling this action', + }, + amount: { + type: 'integer', + nullable: true, + }, + }, + required: ['desc'], + nullable: true, + }, + send_keys: { + type: 'object', + properties: { + desc: { + type: 'string', + description: + 'Very short explanation of the intent or purpose for calling this action', + }, + keys: { + type: 'string', + }, + }, + required: ['desc', 'keys'], + nullable: true, + }, + scroll_to_text: { + type: 'object', + properties: { + desc: { + type: 'string', + description: + 'Very short explanation of the intent or purpose for calling this action', + }, + text: { + type: 'string', + }, + }, + required: ['desc', 'text'], + nullable: true, + }, + get_dropdown_options: { + type: 'object', + properties: { + index: { + type: 'integer', + }, + }, + required: ['index'], + nullable: true, + }, + select_dropdown_option: { + type: 'object', + properties: { + index: { + type: 'integer', + }, + text: { + type: 'string', + }, + }, + required: ['index', 'text'], + nullable: true, + }, + }, + required: [], + }, + }, + }, + required: ['current_state', 'action'], +}; diff --git a/packages/agent-infra/browser-use/src/agent/actions/json_schema.ts b/packages/agent-infra/browser-use/src/agent/actions/json_schema.ts new file mode 100644 index 000000000..59a00c067 --- /dev/null +++ b/packages/agent-infra/browser-use/src/agent/actions/json_schema.ts @@ -0,0 +1,289 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/agent/actions/json_schema.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ +// This is the json schema exported from browser-use, change page_id to tab_id +// TODO: don't know why zod can not generate the same schema, need to fix it +export const jsonNavigatorOutputSchema = { + properties: { + current_state: { + description: 'Current state of the agent', + properties: { + page_summary: { + title: 'Page Summary', + type: 'string', + }, + evaluation_previous_goal: { + title: 'Evaluation Previous Goal', + type: 'string', + }, + memory: { + title: 'Memory', + type: 'string', + }, + next_goal: { + title: 'Next Goal', + type: 'string', + }, + }, + required: [ + 'page_summary', + 'evaluation_previous_goal', + 'memory', + 'next_goal', + ], + title: 'AgentBrain', + type: 'object', + }, + action: { + items: { + properties: { + done: { + properties: { + text: { + title: 'Text', + type: 'string', + }, + }, + required: ['text'], + title: 'DoneAction', + type: 'object', + nullable: true, + }, + search_google: { + properties: { + query: { + title: 'Query', + type: 'string', + }, + }, + required: ['query'], + title: 'SearchGoogleAction', + type: 'object', + nullable: true, + }, + go_to_url: { + properties: { + url: { + title: 'Url', + type: 'string', + }, + }, + required: ['url'], + title: 'GoToUrlAction', + type: 'object', + nullable: true, + }, + go_back: { + additionalProperties: true, + description: + 'Accepts absolutely anything in the incoming data\nand discards it, so the final parsed model is empty.', + properties: {}, + title: 'NoParamsAction', + type: 'object', + nullable: true, + }, + click_element: { + properties: { + desc: { + title: 'Intent', + type: 'string', + description: + 'Very short explanation of the intent or purpose for calling this action', + }, + index: { + title: 'Index', + type: 'integer', + }, + xpath: { + title: 'XPath', + type: 'string', + nullable: true, + }, + }, + required: ['desc', 'index'], + title: 'ClickElementAction', + type: 'object', + nullable: true, + }, + input_text: { + properties: { + desc: { + title: 'Intent', + type: 'string', + description: + 'Very short explanation of the intent or purpose for calling this action', + }, + index: { + title: 'Index', + type: 'integer', + }, + text: { + title: 'Text', + type: 'string', + }, + xpath: { + title: 'XPath', + type: 'string', + nullable: true, + }, + }, + required: ['desc', 'index', 'text'], + title: 'InputTextAction', + type: 'object', + nullable: true, + }, + switch_tab: { + properties: { + tab_id: { + title: 'Page Id', + type: 'integer', + }, + }, + required: ['tab_id'], + title: 'SwitchTabAction', + type: 'object', + nullable: true, + }, + open_tab: { + properties: { + url: { + title: 'Url', + type: 'string', + }, + }, + required: ['url'], + title: 'OpenTabAction', + type: 'object', + nullable: true, + }, + cache_content: { + properties: { + content: { + title: 'Content', + type: 'string', + }, + }, + required: ['content'], + title: 'cache_content_parameters', + type: 'object', + nullable: true, + }, + scroll_down: { + properties: { + desc: { + title: 'Intent', + type: 'string', + description: + 'Very short explanation of the intent or purpose for calling this action', + }, + amount: { + title: 'Amount', + type: 'integer', + nullable: true, + }, + }, + required: ['desc'], + title: 'ScrollAction', + type: 'object', + nullable: true, + }, + scroll_up: { + properties: { + desc: { + title: 'Intent', + type: 'string', + description: + 'Very short explanation of the intent or purpose for calling this action', + }, + amount: { + title: 'Amount', + type: 'integer', + nullable: true, + }, + }, + required: ['desc'], + title: 'ScrollAction', + type: 'object', + nullable: true, + }, + send_keys: { + properties: { + desc: { + title: 'Intent', + type: 'string', + description: + 'Very short explanation of the intent or purpose for calling this action', + }, + keys: { + title: 'Keys', + type: 'string', + }, + }, + required: ['desc', 'keys'], + title: 'SendKeysAction', + type: 'object', + nullable: true, + }, + scroll_to_text: { + properties: { + desc: { + title: 'Intent', + type: 'string', + description: + 'Very short explanation of the intent or purpose for calling this action', + }, + text: { + title: 'Text', + type: 'string', + }, + }, + required: ['desc', 'text'], + title: 'scroll_to_text_parameters', + type: 'object', + nullable: true, + }, + get_dropdown_options: { + properties: { + index: { + title: 'Index', + type: 'integer', + }, + }, + required: ['index'], + title: 'get_dropdown_options_parameters', + type: 'object', + nullable: true, + }, + select_dropdown_option: { + properties: { + index: { + title: 'Index', + type: 'integer', + }, + text: { + title: 'Text', + type: 'string', + }, + }, + required: ['index', 'text'], + title: 'select_dropdown_option_parameters', + type: 'object', + nullable: true, + }, + }, + title: 'ActionModel', + type: 'object', + }, + title: 'Action', + type: 'array', + }, + }, + required: ['current_state', 'action'], + title: 'AgentOutput', + type: 'object', +}; diff --git a/packages/agent-infra/browser-use/src/agent/actions/schemas.ts b/packages/agent-infra/browser-use/src/agent/actions/schemas.ts new file mode 100644 index 000000000..226683080 --- /dev/null +++ b/packages/agent-infra/browser-use/src/agent/actions/schemas.ts @@ -0,0 +1,161 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/agent/actions/schemas.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ +import { z } from 'zod'; + +export interface ActionSchema { + name: string; + description: string; + schema: z.ZodType; +} + +export const doneActionSchema: ActionSchema = { + name: 'done', + description: 'Complete task', + schema: z.object({ + text: z.string(), + }), +}; + +// Basic Navigation Actions +export const searchGoogleActionSchema: ActionSchema = { + name: 'search_google', + description: 'Search Google in the current tab', + schema: z.object({ + query: z.string(), + }), +}; + +export const goToUrlActionSchema: ActionSchema = { + name: 'go_to_url', + description: 'Navigate to URL in the current tab', + schema: z.object({ + url: z.string(), + }), +}; + +export const goBackActionSchema: ActionSchema = { + name: 'go_back', + description: 'Go back to the previous page', + schema: z.object({}), +}; + +export const clickElementActionSchema: ActionSchema = { + name: 'click_element', + description: 'Click element', + schema: z.object({ + desc: z.string().optional(), // some small LLM can not generate a description, so let it be optional (but it's still makred as required in json schema) + index: z.number(), + xpath: z.string().optional(), + }), +}; + +export const inputTextActionSchema: ActionSchema = { + name: 'input_text', + description: 'Input text into an interactive input element', + schema: z.object({ + desc: z.string().optional(), + index: z.number(), + text: z.string(), + xpath: z.string().optional(), + }), +}; + +// Tab Management Actions +export const switchTabActionSchema: ActionSchema = { + name: 'switch_tab', + description: 'Switch to tab by id', + schema: z.object({ + tab_id: z.number(), + }), +}; + +export const openTabActionSchema: ActionSchema = { + name: 'open_tab', + description: 'Open URL in new tab', + schema: z.object({ + url: z.string(), + }), +}; + +// Content Actions +export const extractContentActionSchema: ActionSchema = { + name: 'extract_content', + description: + 'Extract page content to retrieve specific information from the page, e.g. all company names, a specifc description, all information about, links with companies in structured format or simply links', + schema: z.object({ + goal: z.string(), + }), +}; + +// Cache Actions +export const cacheContentActionSchema: ActionSchema = { + name: 'cache_content', + description: 'Cache the extracted content of the page', + schema: z.object({ + content: z.string(), + }), +}; + +export const scrollDownActionSchema: ActionSchema = { + name: 'scroll_down', + description: + 'Scroll down the page by pixel amount - if no amount is specified, scroll down one page', + schema: z.object({ + desc: z.string().optional(), + amount: z.number().optional(), + }), +}; + +export const scrollUpActionSchema: ActionSchema = { + name: 'scroll_up', + description: + 'Scroll up the page by pixel amount - if no amount is specified, scroll up one page', + schema: z.object({ + desc: z.string().optional(), + amount: z.number().optional(), + }), +}; + +export const sendKeysActionSchema: ActionSchema = { + name: 'send_keys', + description: + 'Send strings of special keys like Backspace, Insert, PageDown, Delete, Enter. Shortcuts such as `Control+o`, `Control+Shift+T` are supported as well. This gets used in keyboard press. Be aware of different operating systems and their shortcuts', + schema: z.object({ + desc: z.string().optional(), + keys: z.string(), + }), +}; + +export const scrollToTextActionSchema: ActionSchema = { + name: 'scroll_to_text', + description: + 'If you dont find something which you want to interact with, scroll to it', + schema: z.object({ + desc: z.string().optional(), + text: z.string(), + }), +}; + +export const getDropdownOptionsActionSchema: ActionSchema = { + name: 'get_dropdown_options', + description: 'Get all options from a native dropdown', + schema: z.object({ + index: z.number(), + }), +}; + +export const selectDropdownOptionActionSchema: ActionSchema = { + name: 'select_dropdown_option', + description: + 'Select dropdown option for interactive element index by the text of the option you want to select', + schema: z.object({ + index: z.number(), + text: z.string(), + }), +}; diff --git a/packages/agent-infra/browser-use/src/agent/agents/base.ts b/packages/agent-infra/browser-use/src/agent/agents/base.ts new file mode 100644 index 000000000..d3d98a0a3 --- /dev/null +++ b/packages/agent-infra/browser-use/src/agent/agents/base.ts @@ -0,0 +1,243 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/agent/agents/base.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ +import type { z } from 'zod'; +import { jsonrepair } from 'jsonrepair'; +import type { + BaseChatModel, + BaseChatModelCallOptions, +} from '@langchain/core/language_models/chat_models'; +import type { AgentContext, AgentOutput } from '../types'; +import type { BasePrompt } from '../prompts/base'; +import { + type BaseMessage, + AIMessage, + ToolMessage, +} from '@langchain/core/messages'; +import { createLogger } from '../../utils'; +import type { Action } from '../actions/builder'; + +const logger = createLogger('agent'); + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export type CallOptions = BaseChatModelCallOptions; + +// Update options to use Zod schema +export interface BaseAgentOptions { + chatLLM: BaseChatModel; + context: AgentContext; + prompt: BasePrompt; +} +export interface ExtraAgentOptions { + id?: string; + toolCallingMethod?: string; + callOptions?: Partial; +} + +const THINK_TAGS = /[\s\S]*?<\/think>/; + +/** + * Base class for all agents + * @param T - The Zod schema for the model output + * @param M - The type of the result field of the agent output + */ +export abstract class BaseAgent { + protected id: string; + protected chatLLM: BaseChatModel; + protected prompt: BasePrompt; + protected context: AgentContext; + protected actions: Record = {}; + protected modelOutputSchema: T; + protected toolCallingMethod: string | null; + protected chatModelLibrary: string; + protected modelName: string; + protected withStructuredOutput: boolean; + protected callOptions?: CallOptions; + protected modelOutputToolName: string; + declare ModelOutput: z.infer; + + constructor( + modelOutputSchema: T, + options: BaseAgentOptions, + extraOptions?: Partial, + ) { + // base options + this.modelOutputSchema = modelOutputSchema; + this.chatLLM = options.chatLLM; + this.prompt = options.prompt; + this.context = options.context; + this.chatModelLibrary = this.chatLLM.constructor.name; + this.modelName = this.setModelNames(); + this.withStructuredOutput = this.setWithStructuredOutput(); + // extra options + this.id = extraOptions?.id || 'agent'; + this.toolCallingMethod = this.setToolCallingMethod( + extraOptions?.toolCallingMethod, + ); + this.callOptions = extraOptions?.callOptions; + this.modelOutputToolName = `${this.id}_output`; + } + + // Set the model name + private setModelNames(): string { + if ('model_name' in this.chatLLM) { + return this.chatLLM.model_name as string; + } + if ('model' in this.chatLLM) { + return this.chatLLM.model as string; + } + return 'Unknown'; + } + + // Set the tool calling method + private setToolCallingMethod(toolCallingMethod?: string): string | null { + if (toolCallingMethod === 'auto') { + switch (this.chatModelLibrary) { + case 'ChatGoogleGenerativeAI': + return null; + case 'ChatOpenAI': + case 'AzureChatOpenAI': + return 'function_calling'; + default: + return null; + } + } + return toolCallingMethod || null; + } + + // Set whether to use structured output based on the model name + private setWithStructuredOutput(): boolean { + if ( + this.modelName === 'deepseek-reasoner' || + this.modelName === 'deepseek-r1' || + this.modelName.includes('claude') + ) { + return false; + } + return true; + } + + // Remove think tags from the model output + protected removeThinkTags(text: string): string { + return text.replace(THINK_TAGS, ''); + } + + async invoke(inputMessages: BaseMessage[]): Promise { + // Use structured output + if (this.withStructuredOutput) { + const structuredLlm = this.chatLLM.withStructuredOutput( + this.modelOutputSchema, + { + includeRaw: true, + name: this.modelOutputToolName, + strict: true, + }, + ); + + const response = await structuredLlm.invoke(inputMessages, { + ...this.callOptions, + }); + if (response.parsed) { + return response.parsed; + } + throw new Error('Could not parse response'); + } + + // Without structured output support, need to extract JSON from model output manually + const response = await this.chatLLM.invoke(inputMessages, { + ...this.callOptions, + }); + if (typeof response.content === 'string') { + response.content = this.removeThinkTags(response.content); + try { + const extractedJson = this.extractJsonFromModelOutput(response.content); + const parsed = this.validateModelOutput(extractedJson); + if (parsed) { + return parsed; + } + } catch (error) { + logger.error('Could not parse response', response); + throw new Error('Could not parse response'); + } + } + throw new Error('Could not parse response'); + } + + // Execute the agent and return the result + abstract execute(): Promise>; + + // Helper method to validate metadata + protected validateModelOutput( + data: unknown, + ): this['ModelOutput'] | undefined { + if (!this.modelOutputSchema || !data) return undefined; + return this.modelOutputSchema.parse(data); + } + + // Add the model output to the memory + protected addModelOutputToMemory(modelOutput: this['ModelOutput']): void { + const messageManager = this.context.messageManager; + const toolCallId = String(messageManager.nextToolId()); + const toolCalls = [ + { + name: this.modelOutputToolName, + args: modelOutput, + id: toolCallId, + type: 'tool_call' as const, + }, + ]; + + const toolCallMessage = new AIMessage({ + content: 'tool call', + tool_calls: toolCalls, + }); + messageManager.addMessageWithTokens(toolCallMessage); + + const toolMessage = new ToolMessage({ + content: 'tool call response placeholder', + tool_call_id: toolCallId, + }); + messageManager.addMessageWithTokens(toolMessage); + } + + /** + * Extract JSON from raw string model output, handling both plain JSON and code-block-wrapped JSON. + * + * some models not supporting tool calls well like deepseek-reasoner, so we need to extract the JSON from the output + * @param content - The content of the model output + * @returns The JSON object + */ + protected extractJsonFromModelOutput(content: string): unknown { + try { + let cleanedContent = content; + // If content is wrapped in code blocks, extract just the JSON part + if (content.includes('```')) { + // Find the JSON content between code blocks + cleanedContent = cleanedContent.split('```')[1]; + // Remove language identifier if present (e.g., 'json\n') + if (cleanedContent.includes('\n')) { + cleanedContent = cleanedContent.split('\n', 2)[1]; + } + } else { + const jsonRegex = /(\{(?:[^{}]|(?:\{(?:[^{}]|(?:\{[^{}]*\}))*\}))*\})/; + const match = cleanedContent.match(jsonRegex); + if (match && match[1]) { + cleanedContent = match[1]; + } + } + + cleanedContent = jsonrepair(cleanedContent); + + // Parse the cleaned content + return JSON.parse(cleanedContent); + } catch (e) { + logger.warning(`Failed to parse model output: ${content} ${e}`); + throw new Error('Could not parse response.'); + } + } +} diff --git a/packages/agent-infra/browser-use/src/agent/agents/errors.ts b/packages/agent-infra/browser-use/src/agent/agents/errors.ts new file mode 100644 index 000000000..00159679c --- /dev/null +++ b/packages/agent-infra/browser-use/src/agent/agents/errors.ts @@ -0,0 +1,39 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/agent/agents/errors.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ + +/** + * Custom error class for chat model authentication errors + */ +export class ChatModelAuthError extends Error { + /** + * Creates a new ChatModelAuthError + * + * @param message - The error message + * @param cause - The original error that caused this error + */ + constructor( + message: string, + public readonly cause?: unknown, + ) { + super(message); + this.name = 'ChatModelAuthError'; + + // Maintains proper stack trace for where our error was thrown + if (Error.captureStackTrace) { + Error.captureStackTrace(this, ChatModelAuthError); + } + } + + /** + * Returns a string representation of the error + */ + toString(): string { + return `${this.name}: ${this.message}${this.cause ? ` (Caused by: ${this.cause})` : ''}`; + } +} diff --git a/packages/agent-infra/browser-use/src/agent/agents/navigator.ts b/packages/agent-infra/browser-use/src/agent/agents/navigator.ts new file mode 100644 index 000000000..68ce80290 --- /dev/null +++ b/packages/agent-infra/browser-use/src/agent/agents/navigator.ts @@ -0,0 +1,360 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/agent/agents/navigator.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ +import { z } from 'zod'; +import { + BaseAgent, + type BaseAgentOptions, + type ExtraAgentOptions, +} from './base'; +import { ActionResult, type AgentOutput } from '../types'; +import type { Action } from '../actions/builder'; +import { buildDynamicActionSchema } from '../actions/builder'; +import { agentBrainSchema } from '../types'; +import { type BaseMessage, HumanMessage } from '@langchain/core/messages'; +import { Actors, ExecutionState } from '../event/types'; +import { isAuthenticationError, createLogger } from '../../utils'; +import { ChatModelAuthError } from './errors'; +import { jsonNavigatorOutputSchema } from '../actions/json_schema'; +import { geminiNavigatorOutputSchema } from '../actions/json_gemini'; +import { jsonrepair } from 'jsonrepair'; +const logger = createLogger('NavigatorAgent'); + +export class NavigatorActionRegistry { + private actions: Record = {}; + + constructor(actions: Action[]) { + for (const action of actions) { + this.registerAction(action); + } + } + + registerAction(action: Action): void { + this.actions[action.name()] = action; + } + + unregisterAction(name: string): void { + delete this.actions[name]; + } + + getAction(name: string): Action | undefined { + return this.actions[name]; + } + + setupModelOutputSchema(): z.ZodType { + const actionSchema = buildDynamicActionSchema(Object.values(this.actions)); + return z.object({ + current_state: agentBrainSchema, + action: z.array(actionSchema), + }); + } +} + +export interface NavigatorResult { + done: boolean; +} + +export class NavigatorAgent extends BaseAgent { + private actionRegistry: NavigatorActionRegistry; + + constructor( + actionRegistry: NavigatorActionRegistry, + options: BaseAgentOptions, + extraOptions?: Partial, + ) { + super(actionRegistry.setupModelOutputSchema(), options, { + ...extraOptions, + id: 'navigator', + }); + + this.actionRegistry = actionRegistry; + } + + async invoke(inputMessages: BaseMessage[]): Promise { + logger.info('invoke this.chatLLM', this.withStructuredOutput); + // Use structured output + if (this.withStructuredOutput) { + // For Google Generative AI, we need to use the modelOutputSchema directly + // but make sure it doesn't have any 'default' properties that cause issues + + const schema = + this.chatModelLibrary === 'ChatGoogleGenerativeAI' + ? geminiNavigatorOutputSchema + : jsonNavigatorOutputSchema; + + // TODO: don't know why zod can not generate the same schema. Use the json schema exported from browser-use as a workaround for now, need to fix it + const structuredLlm = this.chatLLM.withStructuredOutput(schema, { + includeRaw: true, + }); + + console.log('structuredLlm', structuredLlm); + + const response = await structuredLlm.invoke(inputMessages, { + ...this.callOptions, + }); + logger.info('invoke structuredLlm response', response); + + if (response.parsed) { + return response.parsed; + } else { + return response.raw; + } + // throw new Error('Could not parse response'); + } + + // Without structured output support, need to extract JSON from model output manually + const response = await this.chatLLM.invoke(inputMessages, { + ...this.callOptions, + }); + logger.info('invoke response', response); + if (typeof response.content === 'string') { + response.content = this.removeThinkTags(response.content); + try { + const extractedJson = this.extractJsonFromModelOutput(response.content); + const parsed = this.validateModelOutput(extractedJson); + if (parsed) { + return parsed; + } + } catch (error) { + logger.error('Could not parse response', response); + throw new Error('Could not parse response'); + } + } + throw new Error('Could not parse response'); + } + + async execute(): Promise> { + const agentOutput: AgentOutput = { + id: this.id, + }; + + let cancelled = false; + + try { + this.context.emitEvent( + Actors.NAVIGATOR, + ExecutionState.STEP_START, + 'Navigating...', + ); + + const messageManager = this.context.messageManager; + // add the browser state message + await this.addStateMessageToMemory(); + // check if the task is paused or stopped + if (this.context.paused || this.context.stopped) { + cancelled = true; + return agentOutput; + } + + // call the model to get the actions to take + const inputMessages = messageManager.getMessages(); + const modelOutput = await this.invoke(inputMessages); + logger.info('modelOutput', modelOutput); + + // check if the task is paused or stopped + if (this.context.paused || this.context.stopped) { + cancelled = true; + return agentOutput; + } + // remove the last state message from memory before adding the model output + this.removeLastStateMessageFromMemory(); + this.addModelOutputToMemory(modelOutput); + + logger.info('modelOutput.action', modelOutput.action); + + // take the actions + const actionResults = await this.doMultiAction(modelOutput); + logger.info('actionResults', actionResults); + this.context.actionResults = actionResults; + + // check if the task is paused or stopped + if (this.context.paused || this.context.stopped) { + cancelled = true; + return agentOutput; + } + // emit event + this.context.emitEvent( + Actors.NAVIGATOR, + ExecutionState.STEP_OK, + 'Navigation done', + ); + let done = false; + if ( + actionResults.length > 0 && + actionResults[actionResults.length - 1].isDone + ) { + done = true; + } + agentOutput.result = { done }; + return agentOutput; + } catch (error) { + logger.error('execute error', error); + this.removeLastStateMessageFromMemory(); + // Check if this is an authentication error + if (isAuthenticationError(error)) { + throw new ChatModelAuthError( + 'Navigator API Authentication failed. Please verify your API key', + error, + ); + } + + const errorMessage = + error instanceof Error ? error.message : String(error); + const errorString = `Navigation failed: ${errorMessage}`; + logger.error(errorString); + this.context.emitEvent( + Actors.NAVIGATOR, + ExecutionState.STEP_FAIL, + errorString, + ); + agentOutput.error = errorMessage; + return agentOutput; + } finally { + // if the task is cancelled, remove the last state message from memory and emit event + if (cancelled) { + this.removeLastStateMessageFromMemory(); + this.context.emitEvent( + Actors.NAVIGATOR, + ExecutionState.STEP_CANCEL, + 'Navigation cancelled', + ); + } + } + } + + /** + * Add the state message to the memory + */ + public async addStateMessageToMemory() { + if (this.context.stateMessageAdded) { + return; + } + + const messageManager = this.context.messageManager; + const options = this.context.options; + // Handle results that should be included in memory + if (this.context.actionResults.length > 0) { + let index = 0; + for (const r of this.context.actionResults) { + if (r.includeInMemory) { + if (r.extractedContent) { + const msg = new HumanMessage( + `Action result: ${r.extractedContent}`, + ); + // logger.info('Adding action result to memory', msg.content); + messageManager.addMessageWithTokens(msg); + } + if (r.error) { + const msg = new HumanMessage( + `Action error: ${r.error.toString().slice(-options.maxErrorLength)}`, + ); + logger.info('Adding action error to memory', msg.content); + messageManager.addMessageWithTokens(msg); + } + // reset this action result to empty, we dont want to add it again in the state message + this.context.actionResults[index] = new ActionResult(); + } + index++; + } + } + + const state = await this.prompt.getUserMessage(this.context); + messageManager.addStateMessage(state); + this.context.stateMessageAdded = true; + } + + /** + * Remove the last state message from the memory + */ + protected async removeLastStateMessageFromMemory() { + if (!this.context.stateMessageAdded) return; + const messageManager = this.context.messageManager; + messageManager.removeLastStateMessage(); + this.context.stateMessageAdded = false; + } + + private async doMultiAction( + response: this['ModelOutput'], + ): Promise { + const results: ActionResult[] = []; + let errCount = 0; + + logger.info('doMultiAction_Actions', response.action); + // sometimes response.action is a string, but not an array as expected, so we need to parse it as an array + let actions: Record[] = []; + if (Array.isArray(response.action)) { + // if the item is null, skip it + actions = response.action.filter((item: unknown) => item !== null); + if (actions.length === 0) { + logger.warning('No valid actions found', response.action); + } + } else if (typeof response.action === 'string') { + try { + logger.warning('Unexpected action format', response.action); + const repaired = jsonrepair(response.action); + // try to parse the action as an JSON object + actions = JSON.parse(repaired); + } catch (error) { + logger.error('Invalid action format', response.action); + throw new Error('Invalid action output format'); + } + } else { + // if the action is neither an array nor a string, it should be an object + actions = [response.action]; + } + + for (const action of actions) { + const actionName = Object.keys(action)[0]; + const actionArgs = action[actionName]; + try { + // check if the task is paused or stopped + if (this.context.paused || this.context.stopped) { + return results; + } + + const result = await this.actionRegistry + .getAction(actionName) + ?.call(actionArgs); + if (result === undefined) { + throw new Error( + `Action ${actionName} not exists or returned undefined`, + ); + } + results.push(result); + // check if the task is paused or stopped + if (this.context.paused || this.context.stopped) { + return results; + } + // TODO: wait for 1 second for now, need to optimize this to avoid unnecessary waiting + await new Promise((resolve) => setTimeout(resolve, 1000)); + } catch (error) { + const errorMessage = + error instanceof Error ? error.message : String(error); + logger.error('doAction error', errorMessage); + // unexpected error, emit event + this.context.emitEvent( + Actors.NAVIGATOR, + ExecutionState.ACT_FAIL, + errorMessage, + ); + errCount++; + if (errCount > 3) { + throw new Error('Too many errors in actions'); + } + results.push( + new ActionResult({ + error: errorMessage, + isDone: false, + includeInMemory: true, + }), + ); + } + } + return results; + } +} diff --git a/packages/agent-infra/browser-use/src/agent/agents/planner.ts b/packages/agent-infra/browser-use/src/agent/agents/planner.ts new file mode 100644 index 000000000..eb1836f04 --- /dev/null +++ b/packages/agent-infra/browser-use/src/agent/agents/planner.ts @@ -0,0 +1,117 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/agent/agents/planner.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ +import { + BaseAgent, + type BaseAgentOptions, + type ExtraAgentOptions, +} from './base'; +import { createLogger, isAuthenticationError } from '../../utils'; +import { z } from 'zod'; +import type { AgentOutput } from '../types'; +import { HumanMessage } from '@langchain/core/messages'; +import { Actors, ExecutionState } from '../event/types'; +import { ChatModelAuthError } from './errors'; +const logger = createLogger('PlannerAgent'); + +// Define Zod schema for planner output +export const plannerOutputSchema = z.object({ + observation: z.string(), + challenges: z.string(), + done: z.boolean(), + next_steps: z.string(), + reasoning: z.string(), + web_task: z.boolean(), +}); + +export type PlannerOutput = z.infer; + +export class PlannerAgent extends BaseAgent< + typeof plannerOutputSchema, + PlannerOutput +> { + constructor( + options: BaseAgentOptions, + extraOptions?: Partial, + ) { + super(plannerOutputSchema, options, { ...extraOptions, id: 'planner' }); + } + + async execute(): Promise> { + try { + this.context.emitEvent( + Actors.PLANNER, + ExecutionState.STEP_START, + 'Planning...', + ); + // get all messages from the message manager, state message should be the last one + const messages = this.context.messageManager.getMessages(); + // Use full message history except the first one + const plannerMessages = [ + this.prompt.getSystemMessage(), + ...messages.slice(1), + ]; + + // Remove images from last message if vision is not enabled for planner but vision is enabled + if ( + !this.context.options.useVisionForPlanner && + this.context.options.useVision + ) { + const lastStateMessage = plannerMessages[plannerMessages.length - 1]; + let newMsg = ''; + + if (Array.isArray(lastStateMessage.content)) { + for (const msg of lastStateMessage.content) { + if (msg.type === 'text') { + newMsg += msg.text; + } + // Skip image_url messages + } + } else { + newMsg = lastStateMessage.content; + } + + plannerMessages[plannerMessages.length - 1] = new HumanMessage(newMsg); + } + + const modelOutput = await this.invoke(plannerMessages); + if (!modelOutput) { + throw new Error('Failed to validate planner output'); + } + this.context.emitEvent( + Actors.PLANNER, + ExecutionState.STEP_OK, + modelOutput.next_steps, + ); + + return { + id: this.id, + result: modelOutput, + }; + } catch (error) { + // Check if this is an authentication error + if (isAuthenticationError(error)) { + throw new ChatModelAuthError( + 'Planner API Authentication failed. Please verify your API key', + error, + ); + } + const errorMessage = + error instanceof Error ? error.message : String(error); + this.context.emitEvent( + Actors.PLANNER, + ExecutionState.STEP_FAIL, + `Planning failed: ${errorMessage}`, + ); + return { + id: this.id, + error: errorMessage, + }; + } + } +} diff --git a/packages/agent-infra/browser-use/src/agent/agents/validator.ts b/packages/agent-infra/browser-use/src/agent/agents/validator.ts new file mode 100644 index 000000000..331fade2c --- /dev/null +++ b/packages/agent-infra/browser-use/src/agent/agents/validator.ts @@ -0,0 +1,124 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/agent/agents/validator.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ +import { + BaseAgent, + type BaseAgentOptions, + type ExtraAgentOptions, +} from './base'; +import { z } from 'zod'; +import { ActionResult, type AgentOutput } from '../types'; +import { Actors, ExecutionState } from '../event/types'; +import { HumanMessage } from '@langchain/core/messages'; +import { isAuthenticationError, createLogger } from '../../utils'; +import { ChatModelAuthError } from './errors'; +const logger = createLogger('ValidatorAgent'); + +// Define Zod schema for validator output +export const validatorOutputSchema = z.object({ + is_valid: z.boolean(), // indicates if the output is correct + reason: z.string(), // explains why it is valid or not + answer: z.string(), // the final answer to the task if it is valid +}); + +export type ValidatorOutput = z.infer; + +export class ValidatorAgent extends BaseAgent< + typeof validatorOutputSchema, + ValidatorOutput +> { + // sometimes we need to validate the output against both the current browser state and the plan + private plan: string | null = null; + constructor( + options: BaseAgentOptions, + extraOptions?: Partial, + ) { + super(validatorOutputSchema, options, { ...extraOptions, id: 'validator' }); + } + + /** + * Set the plan for the validator agent + * @param plan - The plan to set + */ + setPlan(plan: string | null): void { + this.plan = plan; + } + + /** + * Executes the validator agent + * @returns AgentOutput + */ + async execute(): Promise> { + try { + this.context.emitEvent( + Actors.VALIDATOR, + ExecutionState.STEP_START, + 'Validating...', + ); + + let stateMessage = await this.prompt.getUserMessage(this.context); + if (this.plan) { + // merge the plan and the state message + const mergedMessage = new HumanMessage( + `${stateMessage.content}\n\nThe current plan is: \n${this.plan}`, + ); + stateMessage = mergedMessage; + } + const systemMessage = this.prompt.getSystemMessage(); + const inputMessages = [systemMessage, stateMessage]; + + const modelOutput = await this.invoke(inputMessages); + if (!modelOutput) { + throw new Error('Failed to validate task result'); + } + + logger.info('validator output', JSON.stringify(modelOutput, null, 2)); + + if (!modelOutput.is_valid) { + // need to update the action results so that other agents can see the error + const msg = `The answer is not yet correct. ${modelOutput.reason}.`; + this.context.emitEvent(Actors.VALIDATOR, ExecutionState.STEP_FAIL, msg); + this.context.actionResults = [ + new ActionResult({ extractedContent: msg, includeInMemory: true }), + ]; + } else { + this.context.emitEvent( + Actors.VALIDATOR, + ExecutionState.STEP_OK, + modelOutput.answer, + ); + } + + return { + id: this.id, + result: modelOutput, + }; + } catch (error) { + // Check if this is an authentication error + if (isAuthenticationError(error)) { + throw new ChatModelAuthError( + 'Validator API Authentication failed. Please verify your API key', + error, + ); + } + + const errorMessage = + error instanceof Error ? error.message : String(error); + logger.error(`Validation failed: ${errorMessage}`); + this.context.emitEvent( + Actors.VALIDATOR, + ExecutionState.STEP_FAIL, + `Validation failed: ${errorMessage}`, + ); + return { + id: this.id, + error: `Validation failed: ${errorMessage}`, + }; + } + } +} diff --git a/packages/agent-infra/browser-use/src/agent/event/manager.ts b/packages/agent-infra/browser-use/src/agent/event/manager.ts new file mode 100644 index 000000000..d5fbce9bc --- /dev/null +++ b/packages/agent-infra/browser-use/src/agent/event/manager.ts @@ -0,0 +1,62 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/agent/event/manager.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ +import type { AgentEvent, EventType, EventCallback } from './types'; +import { createLogger } from '../../utils'; + +const logger = createLogger('event-manager'); + +export class EventManager { + private _subscribers: Map; + + constructor() { + this._subscribers = new Map(); + } + + subscribe(eventType: EventType, callback: EventCallback): void { + if (!this._subscribers.has(eventType)) { + this._subscribers.set(eventType, []); + } + + const callbacks = this._subscribers.get(eventType); + if (callbacks && !callbacks.includes(callback)) { + callbacks.push(callback); + } + } + + unsubscribe(eventType: EventType, callback: EventCallback): void { + if (this._subscribers.has(eventType)) { + const callbacks = this._subscribers.get(eventType); + if (callbacks) { + this._subscribers.set( + eventType, + callbacks.filter((cb) => cb !== callback), + ); + } + } + } + + clearSubscribers(eventType: EventType): void { + if (this._subscribers.has(eventType)) { + this._subscribers.set(eventType, []); + } + } + + async emit(event: AgentEvent): Promise { + const callbacks = this._subscribers.get(event.type); + if (callbacks) { + try { + await Promise.all( + callbacks.map(async (callback) => await callback(event)), + ); + } catch (error) { + logger.error('Error executing event callbacks:', error); + } + } + } +} diff --git a/packages/agent-infra/browser-use/src/agent/event/types.ts b/packages/agent-infra/browser-use/src/agent/event/types.ts new file mode 100644 index 000000000..a9954c61b --- /dev/null +++ b/packages/agent-infra/browser-use/src/agent/event/types.ts @@ -0,0 +1,90 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/agent/event/types.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ +import { BrowserState, PageState } from '../../browser/types'; + +export enum Actors { + SYSTEM = 'system', + USER = 'user', + PLANNER = 'planner', + NAVIGATOR = 'navigator', + VALIDATOR = 'validator', +} + +export enum EventType { + /** + * Type of events that can be subscribed to. + * + * For now, only execution events are supported. + */ + EXECUTION = 'execution', +} + +export enum ExecutionState { + /** + * States representing different phases in the execution lifecycle. + * + * Format: . + * Scopes: task, step, act + * Statuses: start, ok, fail, cancel + * + * Examples: + * TASK_OK = "task.ok" // Task completed successfully + * STEP_FAIL = "step.fail" // Step failed + * ACT_START = "act.start" // Action started + */ + // Task level states + TASK_START = 'task.start', + TASK_OK = 'task.ok', + TASK_FAIL = 'task.fail', + TASK_PAUSE = 'task.pause', + TASK_RESUME = 'task.resume', + TASK_CANCEL = 'task.cancel', + + // Step level states + STEP_START = 'step.start', + STEP_OK = 'step.ok', + STEP_FAIL = 'step.fail', + STEP_CANCEL = 'step.cancel', + + // Action/Tool level states + ACT_START = 'act.start', + ACT_OK = 'act.ok', + ACT_FAIL = 'act.fail', +} + +export interface EventData { + /** Data associated with an event */ + taskId: string; + /** step is the step number of the task where the event occurred */ + step: number; + /** max_steps is the maximum number of steps in the task */ + maxSteps: number; + /** details is the content of the event */ + details: string; + /** browserState is the browser state of the task where the event occurred */ + browserState?: BrowserState; +} + +export class AgentEvent { + /** + * Represents a state change event in the task execution system. + * Each event has a type, a specific state that changed, + * the actor that triggered the change, and associated data. + */ + constructor( + public actor: Actors, + public state: ExecutionState, + public data: EventData, + public timestamp: number = Date.now(), + public type: EventType = EventType.EXECUTION, + ) {} +} + +// The type of callback for event subscribers +export type EventCallback = (event: AgentEvent) => Promise; diff --git a/packages/agent-infra/browser-use/src/agent/executor.ts b/packages/agent-infra/browser-use/src/agent/executor.ts new file mode 100644 index 000000000..c3bdcb516 --- /dev/null +++ b/packages/agent-infra/browser-use/src/agent/executor.ts @@ -0,0 +1,343 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/agent/executor.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ +import type { BaseChatModel } from '@langchain/core/language_models/chat_models'; +import { AgentContext, type AgentOptions } from './types'; +import { NavigatorAgent, NavigatorActionRegistry } from './agents/navigator'; +import { PlannerAgent } from './agents/planner'; +import { ValidatorAgent } from './agents/validator'; +import { NavigatorPrompt } from './prompts/navigator'; +import { PlannerPrompt } from './prompts/planner'; +import { ValidatorPrompt } from './prompts/validator'; +import { createLogger } from '../utils'; +import MessageManager from './messages/service'; +import type BrowserContext from '../browser/context'; +import { ActionBuilder } from './actions/builder'; +import { EventManager } from './event/manager'; +import { + Actors, + type EventCallback, + EventType, + ExecutionState, +} from './event/types'; +import { ChatModelAuthError } from './agents/errors'; +const logger = createLogger('Executor'); + +export interface ExecutorExtraArgs { + plannerLLM?: BaseChatModel; + validatorLLM?: BaseChatModel; + extractorLLM?: BaseChatModel; + agentOptions?: Partial; +} + +export class Executor { + private readonly navigator: NavigatorAgent; + private readonly planner: PlannerAgent; + private readonly validator: ValidatorAgent; + private readonly context: AgentContext; + private readonly plannerPrompt: PlannerPrompt; + private readonly navigatorPrompt: NavigatorPrompt; + private readonly validatorPrompt: ValidatorPrompt; + private tasks: string[] = []; + constructor( + task: string, + taskId: string, + browserContext: BrowserContext, + navigatorLLM: BaseChatModel, + extraArgs?: Partial, + ) { + const messageManager = new MessageManager({}); + + const plannerLLM = extraArgs?.plannerLLM ?? navigatorLLM; + const validatorLLM = extraArgs?.validatorLLM ?? navigatorLLM; + const extractorLLM = extraArgs?.extractorLLM ?? navigatorLLM; + const eventManager = new EventManager(); + const context = new AgentContext( + taskId, + browserContext, + messageManager, + eventManager, + extraArgs?.agentOptions ?? {}, + ); + + this.tasks.push(task); + this.navigatorPrompt = new NavigatorPrompt( + context.options.maxActionsPerStep, + ); + this.plannerPrompt = new PlannerPrompt(); + this.validatorPrompt = new ValidatorPrompt(task); + + const actionBuilder = new ActionBuilder(context, extractorLLM); + const navigatorActionRegistry = new NavigatorActionRegistry( + actionBuilder.buildDefaultActions(), + ); + + // Initialize agents with their respective prompts + this.navigator = new NavigatorAgent(navigatorActionRegistry, { + chatLLM: navigatorLLM, + context: context, + prompt: this.navigatorPrompt, + }); + this.planner = new PlannerAgent({ + chatLLM: plannerLLM, + context: context, + prompt: this.plannerPrompt, + }); + + this.validator = new ValidatorAgent({ + chatLLM: validatorLLM, + context: context, + prompt: this.validatorPrompt, + }); + + this.context = context; + // Initialize message history + this.context.messageManager.initTaskMessages( + this.navigatorPrompt.getSystemMessage(), + task, + ); + } + + subscribeExecutionEvents(callback: EventCallback): void { + this.context.eventManager.subscribe(EventType.EXECUTION, callback); + } + + clearExecutionEvents(): void { + // Clear all execution event listeners + this.context.eventManager.clearSubscribers(EventType.EXECUTION); + } + + addFollowUpTask(task: string): void { + this.tasks.push(task); + this.context.messageManager.addNewTask(task); + // update validator prompt + this.validatorPrompt.addFollowUpTask(task); + + // need to reset previous action results that are not included in memory + this.context.actionResults = this.context.actionResults.filter( + (result) => result.includeInMemory, + ); + } + + /** + * Execute the task + * + * @returns {Promise} + */ + async execute(): Promise { + logger.info(`🚀 Executing task: ${this.tasks[this.tasks.length - 1]}`); + // reset the step counter + const context = this.context; + context.nSteps = 0; + const allowedMaxSteps = this.context.options.maxSteps; + const browserState = await this.context.browserContext.getState(); + + try { + this.context.emitEvent( + Actors.SYSTEM, + ExecutionState.TASK_START, + this.context.taskId, + browserState, + ); + + let done = false; + let step = 0; + let validatorFailed = false; + + for (step = 0; step < allowedMaxSteps; step++) { + context.stepInfo = { + stepNumber: context.nSteps, + maxSteps: context.options.maxSteps, + }; + + logger.info(`🔄 Step ${step + 1} / ${allowedMaxSteps}`); + if (await this.shouldStop()) { + break; + } + + // Run planner if configured + if ( + this.planner && + (context.nSteps % context.options.planningInterval === 0 || + validatorFailed) + ) { + validatorFailed = false; + // The first planning step is special, we don't want to add the browser state message to memory + if (this.tasks.length > 1 || step > 0) { + await this.navigator.addStateMessageToMemory(); + } + + const planOutput = await this.planner.execute(); + if (planOutput.result) { + logger.info( + `🔄 Planner output: ${JSON.stringify(planOutput.result, null, 2)}`, + ); + this.context.messageManager.addPlan( + JSON.stringify(planOutput.result), + this.context.messageManager.length() - 1, + ); + if (planOutput.result.done) { + // task is complete, skip navigation + done = true; + this.validator.setPlan(planOutput.result.next_steps); + } else { + // task is not complete, let's navigate + this.validator.setPlan(null); + done = false; + } + + if (!planOutput.result.web_task && planOutput.result.done) { + break; + } + } + } + + // execute the navigation step + if (!done) { + done = await this.navigate(); + } + + // validate the output + if ( + done && + this.context.options.validateOutput && + !this.context.stopped && + !this.context.paused + ) { + const validatorOutput = await this.validator.execute(); + if (validatorOutput.result?.is_valid) { + logger.info('✅ Task completed successfully'); + break; + } + validatorFailed = true; + } + } + + if (done) { + this.context.emitEvent( + Actors.SYSTEM, + ExecutionState.TASK_OK, + this.context.taskId, + browserState, + ); + } else if (step >= allowedMaxSteps) { + logger.info('❌ Task failed: Max steps reached'); + this.context.emitEvent( + Actors.SYSTEM, + ExecutionState.TASK_FAIL, + 'Task failed: Max steps reached', + browserState, + ); + } else if (this.context.stopped) { + this.context.emitEvent( + Actors.SYSTEM, + ExecutionState.TASK_CANCEL, + 'Task cancelled', + browserState, + ); + } else { + this.context.emitEvent( + Actors.SYSTEM, + ExecutionState.TASK_PAUSE, + 'Task paused', + browserState, + ); + } + } catch (error) { + const errorMessage = + error instanceof Error ? error.message : String(error); + this.context.emitEvent( + Actors.SYSTEM, + ExecutionState.TASK_FAIL, + `Task failed: ${errorMessage}`, + browserState, + ); + } + } + + private async navigate(): Promise { + const context = this.context; + try { + // Get and execute navigation action + // check if the task is paused or stopped + if (context.paused || context.stopped) { + return false; + } + const navOutput = await this.navigator.execute(); + // check if the task is paused or stopped + if (context.paused || context.stopped) { + return false; + } + context.nSteps++; + if (navOutput.error) { + throw new Error(navOutput.error); + } + context.consecutiveFailures = 0; + if (navOutput.result?.done) { + return true; + } + } catch (error) { + if (error instanceof ChatModelAuthError) { + throw error; + } + context.consecutiveFailures++; + logger.error(`Failed to execute step: ${error}`); + if (context.consecutiveFailures >= context.options.maxFailures) { + throw new Error('Max failures reached'); + } + } + return false; + } + + private async shouldStop(): Promise { + if (this.context.stopped) { + logger.info('Agent stopped'); + return true; + } + + while (this.context.paused) { + await new Promise((resolve) => setTimeout(resolve, 200)); + if (this.context.stopped) { + return true; + } + } + + if (this.context.consecutiveFailures >= this.context.options.maxFailures) { + logger.error( + `Stopping due to ${this.context.options.maxFailures} consecutive failures`, + ); + return true; + } + + return false; + } + + async cancel(): Promise { + this.context.stop(); + } + + async resume(): Promise { + this.context.resume(); + } + + async pause(): Promise { + this.context.pause(); + } + + async cleanup(): Promise { + try { + await this.context.browserContext.cleanup(); + } catch (error) { + logger.error(`Failed to cleanup browser context: ${error}`); + } + } + + async getCurrentTaskId(): Promise { + return this.context.taskId; + } +} diff --git a/packages/agent-infra/browser-use/src/agent/helper.ts b/packages/agent-infra/browser-use/src/agent/helper.ts new file mode 100644 index 000000000..025876c6b --- /dev/null +++ b/packages/agent-infra/browser-use/src/agent/helper.ts @@ -0,0 +1,64 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/agent/helper.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ +import { + type ProviderConfig, + LLMProviderEnum, + AgentNameEnum, +} from '../context'; +import { AzureChatOpenAI } from '@langchain/openai'; +import type { BaseChatModel } from '@langchain/core/language_models/chat_models'; +import { createLogger } from '../utils'; + +const logger = createLogger('agent_helper'); + +// create a chat model based on the agent name, the model name and provider +export function createChatModel( + agentName: string, + providerName: LLMProviderEnum, + providerConfig: ProviderConfig, + modelName: string, +): BaseChatModel { + const maxTokens = 2000; + const maxCompletionTokens = 5000; + let temperature = 0; + const topP = 0.001; + switch (providerName) { + case LLMProviderEnum.AzureOpenAI: { + if (agentName === AgentNameEnum.Planner) { + temperature = 0.02; + } + const args: any = { + model: modelName, + apiKey: providerConfig.apiKey, + configuration: {}, + }; + if (providerConfig.baseUrl) { + args.configuration = { + baseURL: providerConfig.baseUrl, + }; + } + + // O series models have different parameters + if (modelName.startsWith('o')) { + args.modelKwargs = { + max_completion_tokens: maxCompletionTokens, + }; + } else { + args.topP = topP; + args.temperature = temperature; + args.maxTokens = maxTokens; + } + logger.info('azure args', args); + return new AzureChatOpenAI(args); + } + default: { + throw new Error(`Provider ${providerName} not supported yet`); + } + } +} diff --git a/packages/agent-infra/browser-use/src/agent/messages/service.ts b/packages/agent-infra/browser-use/src/agent/messages/service.ts new file mode 100644 index 000000000..ca4d4c71a --- /dev/null +++ b/packages/agent-infra/browser-use/src/agent/messages/service.ts @@ -0,0 +1,441 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/agent/messages/service.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ +import { + type BaseMessage, + AIMessage, + HumanMessage, + SystemMessage, + ToolMessage, +} from '@langchain/core/messages'; +import { zodToJsonSchema } from 'zod-to-json-schema'; +import { z } from 'zod'; +import { + MessageHistory, + type MessageMetadata, + type ManagedMessage, +} from './views'; +import { createLogger } from '../../utils'; +import { ToolCall } from '@langchain/core/dist/messages/tool'; + +const logger = createLogger('MessageManager'); + +export default class MessageManager { + private maxInputTokens: number; + private history: MessageHistory; + private estimatedCharactersPerToken: number; + private readonly IMG_TOKENS: number; + private sensitiveData?: Record; + private toolId: number; + + constructor({ + maxInputTokens = 128000, + estimatedCharactersPerToken = 3, + imageTokens = 800, + sensitiveData, + }: { + maxInputTokens?: number; + estimatedCharactersPerToken?: number; + imageTokens?: number; + sensitiveData?: Record; + } = {}) { + this.maxInputTokens = maxInputTokens; + this.history = new MessageHistory(); + this.estimatedCharactersPerToken = estimatedCharactersPerToken; + this.IMG_TOKENS = imageTokens; + this.sensitiveData = sensitiveData; + this.toolId = 1; + } + + public initTaskMessages( + systemMessage: SystemMessage, + task: string, + messageContext?: string, + ): void { + // Add system message + this.addMessageWithTokens(systemMessage); + + // Add context message if provided + if (messageContext && messageContext.length > 0) { + const contextMessage = new HumanMessage({ + content: `Context for the task: ${messageContext}`, + }); + this.addMessageWithTokens(contextMessage); + } + + // Add task instructions + const taskMessage = MessageManager.taskInstructions(task); + this.addMessageWithTokens(taskMessage); + + // Add sensitive data info if sensitive data is provided + if (this.sensitiveData) { + const info = `Here are placeholders for sensitive data: ${Object.keys(this.sensitiveData)}`; + const infoMessage = new HumanMessage({ + content: `${info}\nTo use them, write the placeholder name`, + }); + this.addMessageWithTokens(infoMessage); + } + + // Add example output + const placeholderMessage = new HumanMessage({ + content: 'Example output:', + }); + this.addMessageWithTokens(placeholderMessage); + + const toolCallId = this.nextToolId(); + const toolCalls: ToolCall[] = [ + { + name: 'navigator_output', + // @ts-ignore + description: 'Navigate to the page and click on the element', + parameters: zodToJsonSchema( + z.object({ + current_state: z.object({ + page_summary: z.string(), + evaluation_previous_goal: z.string(), + memory: z.string(), + next_goal: z.string(), + }), + action: z.array( + z.object({ + click_element: z.object({ + index: z.number(), + }), + }), + ), + }), + ), + args: { + current_state: { + page_summary: + 'On the page are company a,b,c wtih their revenue 1,2,3.', + evaluation_previous_goal: 'Success - I opend the first page', + memory: 'Starting with the new task. I have completed 1/10 steps', + next_goal: 'Click on company a', + }, + action: [{ click_element: { index: 0 } }], + }, + + id: String(toolCallId), + type: 'tool_call' as const, + }, + ]; + + const exampleToolCall = new AIMessage({ + content: 'example tool call', + tool_calls: toolCalls, + }); + this.addMessageWithTokens(exampleToolCall); + + const toolMessage = new ToolMessage({ + content: 'Browser started', + tool_call_id: String(toolCallId), + }); + this.addMessageWithTokens(toolMessage); + + // Add history start marker + const historyStartMessage = new HumanMessage({ + content: '[Your task history memory starts here]', + }); + this.addMessageWithTokens(historyStartMessage); + } + + public nextToolId(): number { + const id = this.toolId; + this.toolId += 1; + return id; + } + + /** + * Createthe task instructions + * @param task - The raw description of the task + * @returns A HumanMessage object containing the task instructions + */ + private static taskInstructions(task: string): HumanMessage { + const content = `Your ultimate task is: """${task}""". If you achieved your ultimate task, stop everything and use the done action in the next step to complete the task. If not, continue as usual.`; + return new HumanMessage({ content }); + } + + /** + * Returns the number of messages in the history + * @returns The number of messages in the history + */ + public length(): number { + return this.history.messages.length; + } + + /** + * Adds a new task to execute, it will be executed based on the history + * @param newTask - The raw description of the new task + */ + public addNewTask(newTask: string): void { + const content = `Your new ultimate task is: """${newTask}""". Take the previous context into account and finish your new ultimate task. `; + const msg = new HumanMessage({ content }); + this.addMessageWithTokens(msg); + } + + /** + * Adds a plan message to the history + * @param plan - The raw description of the plan + * @param position - The position to add the plan + */ + public addPlan(plan?: string, position?: number): void { + if (plan) { + const msg = new AIMessage({ content: plan }); + this.addMessageWithTokens(msg, position); + } + } + + /** + * Adds a state message to the history + * @param stateMessage - The HumanMessage object containing the state + */ + public addStateMessage(stateMessage: HumanMessage): void { + this.addMessageWithTokens(stateMessage); + } + + /** + * Removes the last state message from the history + */ + public removeLastStateMessage(): void { + this.history.removeLastHumanMessage(); + } + + public getMessages(): BaseMessage[] { + const messages = this.history.messages.map((m) => m.message); + + let totalInputTokens = 0; + logger.debug(`Messages in history: ${this.history.messages.length}:`); + + for (const m of this.history.messages) { + totalInputTokens += m.metadata.inputTokens; + // logger.debug( + // `${m.message.constructor.name} - Token count: ${m.metadata.inputTokens}`, + // ); + } + + // logger.debug(`Total input tokens: ${totalInputTokens}`); + return messages; + } + + public getMessagesWithTokens(): ManagedMessage[] { + return this.history.messages; + } + + /** + * Adds a message to the history with the token count metadata + * @param message - The BaseMessage object to add + * @param position - The optional position to add the message, if not provided, the message will be added to the end of the history + */ + public addMessageWithTokens(message: BaseMessage, position?: number): void { + let filteredMessage = message; + // filter out sensitive data if provided + if (this.sensitiveData) { + filteredMessage = this._filterSensitiveData(message); + } + + const tokenCount = this._countTokens(filteredMessage); + const metadata: MessageMetadata = { inputTokens: tokenCount }; + this.history.addMessage(filteredMessage, metadata, position); + } + + /** + * Filters out sensitive data from the message + * @param message - The BaseMessage object to filter + * @returns The filtered BaseMessage object + */ + private _filterSensitiveData(message: BaseMessage): BaseMessage { + const replaceSensitive = (value: string): string => { + let filteredValue = value; + if (!this.sensitiveData) return filteredValue; + + for (const [key, val] of Object.entries(this.sensitiveData)) { + filteredValue = filteredValue.replace(val, `${key}`); + } + return filteredValue; + }; + + if (typeof message.content === 'string') { + message.content = replaceSensitive(message.content); + } else if (Array.isArray(message.content)) { + message.content = message.content.map((item) => { + if (typeof item === 'object' && 'text' in item) { + return { ...item, text: replaceSensitive(item.text) }; + } + return item; + }); + } + + return message; + } + + /** + * Counts the tokens in the message + * @param message - The BaseMessage object to count the tokens + * @returns The number of tokens in the message + */ + private _countTokens(message: BaseMessage): number { + let tokens = 0; + + if (Array.isArray(message.content)) { + for (const item of message.content) { + if ('image_url' in item) { + tokens += this.IMG_TOKENS; + } else if (typeof item === 'object' && 'text' in item) { + tokens += this._countTextTokens(item.text); + } + } + } else { + let msg = message.content; + // Check if it's an AIMessage with tool_calls + if ('tool_calls' in message) { + msg += JSON.stringify(message.tool_calls); + } + tokens += this._countTextTokens(msg); + } + + return tokens; + } + + /** + * Counts the tokens in the text + * Rough estimate, no tokenizer provided for now + * @param text - The text to count the tokens + * @returns The number of tokens in the text + */ + private _countTextTokens(text: string): number { + return Math.floor(text.length / this.estimatedCharactersPerToken); + } + + /** + * Cuts the last message if the total tokens exceed the max input tokens + * + * Get current message list, potentially trimmed to max tokens + */ + public cutMessages(): void { + let diff = this.history.totalTokens - this.maxInputTokens; + if (diff <= 0) return; + + const lastMsg = this.history.messages[this.history.messages.length - 1]; + + // if list with image remove image + if (Array.isArray(lastMsg.message.content)) { + let text = ''; + lastMsg.message.content = lastMsg.message.content.filter((item) => { + if ('image_url' in item) { + diff -= this.IMG_TOKENS; + lastMsg.metadata.inputTokens -= this.IMG_TOKENS; + this.history.totalTokens -= this.IMG_TOKENS; + logger.debug( + `Removed image with ${this.IMG_TOKENS} tokens - total tokens now: ${this.history.totalTokens}/${this.maxInputTokens}`, + ); + return false; + } + if ('text' in item) { + text += item.text; + } + return true; + }); + lastMsg.message.content = text; + this.history.messages[this.history.messages.length - 1] = lastMsg; + } + + if (diff <= 0) return; + + // if still over, remove text from state message proportionally to the number of tokens needed with buffer + // Calculate the proportion of content to remove + const proportionToRemove = diff / lastMsg.metadata.inputTokens; + if (proportionToRemove > 0.99) { + throw new Error( + `Max token limit reached - history is too long - reduce the system prompt or task. proportion_to_remove: ${proportionToRemove}`, + ); + } + logger.debug( + `Removing ${(proportionToRemove * 100).toFixed(2)}% of the last message (${(proportionToRemove * lastMsg.metadata.inputTokens).toFixed(2)} / ${lastMsg.metadata.inputTokens.toFixed(2)} tokens)`, + ); + + const content = lastMsg.message.content as string; + const charactersToRemove = Math.floor(content.length * proportionToRemove); + const newContent = content.slice(0, -charactersToRemove); + + this.history.removeMessage(-1); + + const msg = new HumanMessage({ content: newContent }); + this.addMessageWithTokens(msg); + + const finalMsg = this.history.messages[this.history.messages.length - 1]; + logger.debug( + `Added message with ${finalMsg.metadata.inputTokens} tokens - total tokens now: ${this.history.totalTokens}/${this.maxInputTokens} - total messages: ${this.history.messages.length}`, + ); + } + + /** + * Converts messages for non-function-calling models + * @param inputMessages - The BaseMessage objects to convert + * @returns The converted BaseMessage objects + */ + public convertMessagesForNonFunctionCallingModels( + inputMessages: BaseMessage[], + ): BaseMessage[] { + return inputMessages.map((message) => { + if (message instanceof HumanMessage || message instanceof SystemMessage) { + return message; + } + if (message instanceof ToolMessage) { + return new HumanMessage({ content: message.content }); + } + if (message instanceof AIMessage) { + // if it's an AIMessage with tool_calls, convert it to a normal AIMessage + if ('tool_calls' in message) { + const toolCalls = JSON.stringify(message.tool_calls); + return new AIMessage({ content: toolCalls }); + } + return message; + } + throw new Error(`Unknown message type: ${message.constructor.name}`); + }); + } + + /** + * Some models like deepseek-reasoner dont allow multiple human messages in a row. This function merges them into one." + * @param messages - The BaseMessage objects to merge + * @param classToMerge - The class of the messages to merge + * @returns The merged BaseMessage objects + */ + public mergeSuccessiveMessages( + messages: BaseMessage[], + classToMerge: typeof BaseMessage, + ): BaseMessage[] { + const mergedMessages: BaseMessage[] = []; + let streak = 0; + + for (const message of messages) { + if (message instanceof classToMerge) { + streak += 1; + if (streak > 1) { + const lastMessage = mergedMessages[mergedMessages.length - 1]; + if (Array.isArray(message.content)) { + const firstContent = message.content[0]; + if ('text' in firstContent) { + lastMessage.content += firstContent.text; + } + } else { + lastMessage.content += message.content; + } + } else { + mergedMessages.push(message); + } + } else { + mergedMessages.push(message); + streak = 0; + } + } + + return mergedMessages; + } +} diff --git a/packages/agent-infra/browser-use/src/agent/messages/views.ts b/packages/agent-infra/browser-use/src/agent/messages/views.ts new file mode 100644 index 000000000..aab3dd3ef --- /dev/null +++ b/packages/agent-infra/browser-use/src/agent/messages/views.ts @@ -0,0 +1,64 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/agent/messages/views.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ +import { type BaseMessage, HumanMessage } from '@langchain/core/messages'; + +export interface MessageMetadata { + inputTokens: number; +} + +export interface ManagedMessage { + message: BaseMessage; + metadata: MessageMetadata; +} + +export class MessageHistory { + messages: ManagedMessage[] = []; + totalTokens = 0; + + addMessage( + message: BaseMessage, + metadata: MessageMetadata = { inputTokens: 0 }, + position?: number, + ): void { + const managedMessage: ManagedMessage = { + message, + metadata, + }; + + if (position === undefined) { + this.messages.push(managedMessage); + } else { + this.messages.splice(position, 0, managedMessage); + } + this.totalTokens += metadata.inputTokens; + } + + removeMessage(index = -1): void { + if (this.messages.length > 0) { + const msg = this.messages.splice(index, 1)[0]; + this.totalTokens -= msg.metadata.inputTokens; + } + } + + /** + * Removes the last message from the history if it is a human message. + * This is used to remove the state message from the history. + */ + removeLastHumanMessage(): void { + if ( + this.messages.length > 2 && + this.messages[this.messages.length - 1].message instanceof HumanMessage + ) { + const msg = this.messages.pop(); + if (msg) { + this.totalTokens -= msg.metadata.inputTokens; + } + } + } +} diff --git a/packages/agent-infra/browser-use/src/agent/prompts/base.ts b/packages/agent-infra/browser-use/src/agent/prompts/base.ts new file mode 100644 index 000000000..9f5f1f275 --- /dev/null +++ b/packages/agent-infra/browser-use/src/agent/prompts/base.ts @@ -0,0 +1,121 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/agent/prompts/base.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ +import { HumanMessage, type SystemMessage } from '@langchain/core/messages'; +import type { AgentContext } from '../types'; +import { createLogger } from '../../utils'; + +const logger = createLogger('agent/prompts/base'); + +/** + * Abstract base class for all prompt types + */ +abstract class BasePrompt { + /** + * Returns the system message that defines the AI's role and behavior + * @returns SystemMessage from LangChain + */ + abstract getSystemMessage(): SystemMessage; + + /** + * Returns the user message for the specific prompt type + * @param context - Optional context data needed for generating the user message + * @returns HumanMessage from LangChain + */ + abstract getUserMessage(context: AgentContext): Promise; + + /** + * Builds the user message containing the browser state + * @param context - The agent context + * @returns HumanMessage from LangChain + */ + async buildBrowserStateUserMessage( + context: AgentContext, + ): Promise { + const browserState = await context.browserContext.getState(); + const elementsText = browserState.elementTree.clickableElementsToString( + context.options.includeAttributes, + ); + + const hasContentAbove = (browserState.pixelsAbove || 0) > 0; + const hasContentBelow = (browserState.pixelsBelow || 0) > 0; + + let formattedElementsText = ''; + if (elementsText !== '') { + if (hasContentAbove) { + formattedElementsText = `... ${browserState.pixelsAbove} pixels above - scroll up to see more ...\n${elementsText}`; + } else { + formattedElementsText = `[Start of page]\n${elementsText}`; + } + + if (hasContentBelow) { + formattedElementsText = `${formattedElementsText}\n... ${browserState.pixelsBelow} pixels below - scroll down to see more ...`; + } else { + formattedElementsText = `${formattedElementsText}\n[End of page]`; + } + } else { + formattedElementsText = 'empty page'; + } + + let stepInfoDescription = ''; + if (context.stepInfo) { + stepInfoDescription = `Current step: ${context.stepInfo.stepNumber + 1}/${context.stepInfo.maxSteps}`; + } + + const timeStr = new Date().toISOString().slice(0, 16).replace('T', ' '); // Format: YYYY-MM-DD HH:mm + stepInfoDescription += `Current date and time: ${timeStr}`; + + let actionResultsDescription = ''; + if (context.actionResults.length > 0) { + for (let i = 0; i < context.actionResults.length; i++) { + const result = context.actionResults[i]; + if (result.extractedContent) { + actionResultsDescription += `\nAction result ${i + 1}/${context.actionResults.length}: ${result.extractedContent}`; + } + if (result.error) { + // only use last 300 characters of error + const error = result.error.slice(-300); + actionResultsDescription += `\nAction error ${i + 1}/${context.actionResults.length}: ...${error}`; + } + } + } + + const stateDescription = ` + [Task history memory ends here] + [Current state starts here] + You will see the following only once - if you need to remember it and you dont know it yet, write it down in the memory: + Current page: {url: ${browserState.url}, title: ${browserState.title}} + Other available pages: + ${browserState.pages + ?.filter((page) => page.url !== browserState.url) + .map((page) => ` - {url: ${page.url}, title: ${page.title}}`) + .join('\n')} + Interactive elements from current page: + ${formattedElementsText} + ${stepInfoDescription} + ${actionResultsDescription}`; + + if (browserState.screenshot && context.options.useVision) { + return new HumanMessage({ + content: [ + { type: 'text', text: stateDescription }, + { + type: 'image_url', + image_url: { + url: `data:image/jpeg;base64,${browserState.screenshot}`, + }, + }, + ], + }); + } + + return new HumanMessage(stateDescription); + } +} + +export { BasePrompt }; diff --git a/packages/agent-infra/browser-use/src/agent/prompts/navigator.ts b/packages/agent-infra/browser-use/src/agent/prompts/navigator.ts new file mode 100644 index 000000000..f2b7812cb --- /dev/null +++ b/packages/agent-infra/browser-use/src/agent/prompts/navigator.ts @@ -0,0 +1,175 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/agent/prompts/navigator.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ +/* eslint-disable @typescript-eslint/no-unused-vars */ +import { BasePrompt } from './base'; +import { type HumanMessage, SystemMessage } from '@langchain/core/messages'; +import type { AgentContext } from '../types'; + +export class NavigatorPrompt extends BasePrompt { + private readonly default_action_description = + 'A placeholder action description'; + + constructor(private readonly maxActionsPerStep = 10) { + super(); + } + + importantRules(): string { + const text = ` +1. RESPONSE FORMAT: You must ALWAYS respond with valid JSON in this exact format: + { + "current_state": { + "page_summary": "Quick detailed summary of new information from the current page which is not yet in the task history memory. Be specific with details which are important for the task. This is not on the meta level, but should be facts. If all the information is already in the task history memory, leave this empty.", + "evaluation_previous_goal": "Success|Failed|Unknown - Analyze the current elements and the image to check if the previous goals/actions are successful like intended by the task. Ignore the action result. The website is the ground truth. Also mention if something unexpected happened like new suggestions in an input field. Shortly state why/why not", + "memory": "Description of what has been done and what you need to remember. Be very specific. Count here ALWAYS how many times you have done something and how many remain. E.g. 0 out of 10 websites analyzed. Continue with abc and xyz", + "next_goal": "What needs to be done with the next actions" + }, + "action": [ + { + "one_action_name": { + // action-specific parameter + } + }, + // ... more actions in sequence + ] + } + +2. ACTIONS: You can specify multiple actions in the list to be executed in sequence. But always specify only one action name per item. + + Common action sequences: + - Form filling: [ + {"input_text": {"desc": "Fill title", "index": 1, "text": "example title"}}, + {"input_text": {"desc": "Fill comment", "index": 2, "text": "example comment"}}, + {"click_element": {"desc": "Click submit button", "index": 3}} + ] + - Navigation: [ + {"open_tab": {"url": "https://example.com"}}, + {"go_to_url": {"url": "https://example.com"}}, + ] + + +3. ELEMENT INTERACTION: + - Only use indexes that exist in the provided element list + - Each element has a unique index number (e.g., "[33] +[] Non-interactive text + + +Notes: +- Only elements with numeric indexes inside [] are interactive +- [] elements provide context but cannot be interacted with +`; + } + + getSystemMessage(): SystemMessage { + /** + * Get the system prompt for the agent. + * + * @returns SystemMessage containing the formatted system prompt + */ + const AGENT_PROMPT = `You are a precise browser automation agent that interacts with websites through structured commands. Your role is to: +1. Analyze the provided webpage elements and structure +2. Use the given information to accomplish the ultimate task +3. Respond with valid JSON containing your next action sequence and state assessment +4. If the webpage is asking for login credentials, never try to fill it by yourself. Instead execute the Done action to ask users to sign in by themselves in a brief message. Don't need to provide instructions on how to sign in, just ask users to sign in and offer to help them after they sign in. + +${this.inputFormat()} + +${this.importantRules()} + +Functions: +${this.default_action_description} + +Remember: Your responses must be valid JSON matching the specified format. Each action in the sequence must be valid.`; + + return new SystemMessage(AGENT_PROMPT); + } + + async getUserMessage(context: AgentContext): Promise { + return await this.buildBrowserStateUserMessage(context); + } +} diff --git a/packages/agent-infra/browser-use/src/agent/prompts/planner.ts b/packages/agent-infra/browser-use/src/agent/prompts/planner.ts new file mode 100644 index 000000000..d436ab3f3 --- /dev/null +++ b/packages/agent-infra/browser-use/src/agent/prompts/planner.ts @@ -0,0 +1,63 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/agent/prompts/planner.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ +/* eslint-disable @typescript-eslint/no-unused-vars */ +import { BasePrompt } from './base'; +import { HumanMessage, SystemMessage } from '@langchain/core/messages'; +import type { AgentContext } from '../types'; + +export class PlannerPrompt extends BasePrompt { + getSystemMessage(): SystemMessage { + return new SystemMessage(`You are a helpful assistant. + +RESPONSIBILITIES: +1. Judge whether the ultimate task is related to web browsing or not first and set the "web_task" field. +2. If web_task is false, then just answer the task directly as a helpful assistant + - Output the answer into "next_steps" field in the JSON object. + - Set "done" field to true + - Set these fields in the JSON object to empty string: "observation", "challenges", "reasoning" + - Be kind and helpful when answering the task + - Do NOT offer anything that users don't explicitly ask for. + - Do NOT make up anything, if you don't know the answer, just say "I don't know" + +3. If web_task is true, then helps break down tasks into smaller steps and reason about the current state + - Analyze the current state and history + - Evaluate progress towards the ultimate goal + - Identify potential challenges or roadblocks + - Suggest the next high-level steps to take + - If you know the direct URL, use it directly instead of searching for it (e.g. github.com, www.espn.com). Search it if you don't know the direct URL. + - Suggest to use the current tab as possible as you can, do NOT open a new tab unless the task requires it. + - IMPORTANT: + - Always prioritize working with content visible in the current viewport first: + - Focus on elements that are immediately visible without scrolling + - Only suggest scrolling if the required content is confirmed to not be in the current view + - Scrolling is your LAST resort unless you are explicitly required to do so by the task + - NEVER suggest scrolling through the entire page, only scroll ONE PAGE at a time. + +RESPONSE FORMAT: Your must always respond with a valid JSON object with the following fields: +{ + "observation": "Brief analysis of the current state and what has been done so far", + "done": "true or false, whether further steps are needed to complete the ultimate task", + "challenges": "List any potential challenges or roadblocks", + "next_steps": "List 2-3 high-level next steps to take, each step should start with a new line", + "reasoning": "Explain your reasoning for the suggested next steps", + "web_task": "true or false, whether the ultimate task is related to browsing the web" +} + +NOTE: + - Inside the messages you receive, there will be other AI messages from other agents with different formats. + - Ignore the output structures of other AI messages. + +REMEMBER: + - Keep your responses concise and focused on actionable insights.`); + } + + async getUserMessage(context: AgentContext): Promise { + return new HumanMessage(''); + } +} diff --git a/packages/agent-infra/browser-use/src/agent/prompts/validator.ts b/packages/agent-infra/browser-use/src/agent/prompts/validator.ts new file mode 100644 index 000000000..b732e74e1 --- /dev/null +++ b/packages/agent-infra/browser-use/src/agent/prompts/validator.ts @@ -0,0 +1,116 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/agent/prompts/validator.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ +import { BasePrompt } from './base'; +import { type HumanMessage, SystemMessage } from '@langchain/core/messages'; +import type { AgentContext } from '../types'; + +export class ValidatorPrompt extends BasePrompt { + private tasks: string[] = []; + + constructor(task: string) { + super(); + this.tasks.push(task); + } + + private tasksToValidate(): string { + if (this.tasks.length === 1) { + return this.tasks[0]; + } + + const lastTask = this.tasks[this.tasks.length - 1]; + const previousTasks = this.tasks + .slice(0, -1) + .map((task, index) => `${index + 1}. ${task}`) + .join('\n'); + const tasksString = ` +${lastTask} + +The above task is a follow up task of the following tasks, please take the previous context into account when validating the task. + +Previous tasks: +${previousTasks} +`; + return tasksString; + } + + getSystemMessage(): SystemMessage { + return new SystemMessage(`You are a validator of an agent who interacts with a browser. +YOUR ROLE: +1. Validate if the agent's last action matches the user's request and if the task is completed. +2. Determine if the task is fully completed +3. Answer the task based on the provided context if the task is completed + +RULES of ANSWERING THE TASK: + - Read the task description carefully, neither miss any detailed requirements nor make up any requirements + - Compile the final answer from provided context, do NOT make up any information not provided in the context + - Make answers concise and easy to read + - Include relevant numerical data when available, but do NOT make up any numbers + - Include exact urls when available, but do NOT make up any urls + - Format the final answer in a user-friendly way + +SPECIAL CASES: +1. If the task is unclear defined, you can let it pass. But if something is missing or the image does not show what was requested, do NOT let it pass +2. Try to understand the page and help the model with suggestions like scroll, do x, ... to get the solution right +3. If the webpage is asking for username or password, you should respond with: + - is_valid: true + - reason: describe the reason why it is valid although the task is not completed yet + - answer: ask the user to sign in by themselves +4. If the output is correct and the task is completed, you should respond with + - is_valid: true + - reason: "Task completed" + - answer: The final answer to the task + +RESPONSE FORMAT: You must ALWAYS respond with valid JSON in this exact format: +{ + "is_valid": boolean, // true if task is completed correctly + "reason": string // clear explanation of validation result + "answer": string // empty string if is_valid is false; human-readable final answer and should not be empty if is_valid is true +} + +ANSWER FORMATTING GUIDELINES: +- Start with an emoji "✅" if is_valid is true +- Use markdown formatting if required by the task description +- By default use plain text +- Use bullet points for multiple items if needed +- Use line breaks for better readability +- Use indentations for nested lists + + +{ + "is_valid": false, + "reason": "The user wanted to search for \\"cat photos\\", but the agent searched for \\"dog photos\\" instead.", + "answer": "" +} + + + +{ + "is_valid": true, + "reason": "The task is completed", + "answer": "✅ Successfully followed @nanobrowser_ai on X." +} + + +TASK TO VALIDATE: +${this.tasksToValidate()}`); + } + + /** + * Get the user message for the validator prompt + * @param context - The agent context + * @returns The user message + */ + async getUserMessage(context: AgentContext): Promise { + return await this.buildBrowserStateUserMessage(context); + } + + addFollowUpTask(task: string): void { + this.tasks.push(task); + } +} diff --git a/packages/agent-infra/browser-use/src/agent/service.ts b/packages/agent-infra/browser-use/src/agent/service.ts new file mode 100644 index 000000000..4ea04b7fd --- /dev/null +++ b/packages/agent-infra/browser-use/src/agent/service.ts @@ -0,0 +1,82 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/agent/service.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ +import { BaseChatModel } from '@langchain/core/language_models/chat_models'; +import { v4 as uuidv4 } from 'uuid'; + +import BrowserContext from '../browser/context'; +import { BrowserContextConfig } from '../browser/types'; +import { Executor } from './executor'; +import { AgentEvent, ExecutionState } from './event/types'; + +type RegisterNewStepCallback = (event: AgentEvent) => Promise; +// type RegisterDoneCallback = (history: any) => Promise; + +export class Agent { + private browserContext: BrowserContext; + private registerNewStepCallback?: RegisterNewStepCallback; + // private registerDoneCallback?: RegisterDoneCallback; + private executor?: Executor; + + constructor( + private llm: BaseChatModel, + options?: { + browserContextConfig?: BrowserContextConfig; + registerNewStepCallback?: RegisterNewStepCallback; + // registerDoneCallback?: RegisterDoneCallback; + }, + ) { + this.browserContext = new BrowserContext( + options?.browserContextConfig || {}, + ); + + this.registerNewStepCallback = options?.registerNewStepCallback; + } + + private subscribeToExecutorEvents(executor: Executor) { + // Clear previous event listeners to prevent multiple subscriptions + executor.clearExecutionEvents(); + + // Subscribe to new events + executor.subscribeExecutionEvents(async (event) => { + try { + this.registerNewStepCallback?.(event); + } catch (error) { + console.error('Failed to send message to side panel:', error); + } + + if ( + event.state === ExecutionState.TASK_OK || + event.state === ExecutionState.TASK_FAIL || + event.state === ExecutionState.TASK_CANCEL + ) { + await this.executor?.cleanup(); + } + }); + } + + async run(task: string) { + // this.registerDoneCallback = options?.registerDoneCallback; + + this.executor = new Executor( + task, + `${uuidv4()}`, + this.browserContext, + this.llm, + { + plannerLLM: this.llm, + validatorLLM: this.llm, + }, + ); + + this.subscribeToExecutorEvents(this.executor); + + const result = await this.executor.execute(); + console.info('new_task execution result', result); + } +} diff --git a/packages/agent-infra/browser-use/src/agent/types.ts b/packages/agent-infra/browser-use/src/agent/types.ts new file mode 100644 index 000000000..05d0373eb --- /dev/null +++ b/packages/agent-infra/browser-use/src/agent/types.ts @@ -0,0 +1,178 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/agent/types.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ +import { z } from 'zod'; +import type BrowserContext from '../browser/context'; +import type MessageManager from './messages/service'; +import type { EventManager } from './event/manager'; +import { type Actors, type ExecutionState, AgentEvent } from './event/types'; +import { BrowserState, PageState } from '../browser/types'; + +export interface AgentOptions { + maxSteps: number; + maxActionsPerStep: number; + maxFailures: number; + retryDelay: number; + maxInputTokens: number; + maxErrorLength: number; + useVision: boolean; + useVisionForPlanner: boolean; + validateOutput: boolean; + includeAttributes: string[]; + planningInterval: number; +} + +export const DEFAULT_AGENT_OPTIONS: AgentOptions = { + maxSteps: 100, + maxActionsPerStep: 10, + maxFailures: 3, + retryDelay: 10, + maxInputTokens: 128000, + maxErrorLength: 400, + useVision: false, + useVisionForPlanner: false, + validateOutput: true, + includeAttributes: [ + 'title', + 'type', + 'name', + 'role', + 'tabindex', + 'aria-label', + 'placeholder', + 'value', + 'alt', + 'aria-expanded', + ], + planningInterval: 3, +}; + +export class AgentContext { + taskId: string; + browserContext: BrowserContext; + messageManager: MessageManager; + eventManager: EventManager; + options: AgentOptions; + paused: boolean; + stopped: boolean; + consecutiveFailures: number; + nSteps: number; + stepInfo: AgentStepInfo | null; + actionResults: ActionResult[]; + stateMessageAdded: boolean; + constructor( + taskId: string, + browserContext: BrowserContext, + messageManager: MessageManager, + eventManager: EventManager, + options: Partial, + ) { + this.taskId = taskId; + this.browserContext = browserContext; + this.messageManager = messageManager; + this.eventManager = eventManager; + this.options = { ...DEFAULT_AGENT_OPTIONS, ...options }; + + this.paused = false; + this.stopped = false; + this.nSteps = 0; + this.consecutiveFailures = 0; + this.stepInfo = null; + this.actionResults = []; + this.stateMessageAdded = false; + } + + async emitEvent( + actor: Actors, + state: ExecutionState, + eventDetails: string, + browserState?: BrowserState, + ) { + const event = new AgentEvent(actor, state, { + taskId: this.taskId, + step: this.nSteps, + maxSteps: this.options.maxSteps, + details: eventDetails, + browserState, + }); + await this.eventManager.emit(event); + } + + async pause() { + this.paused = true; + } + + async resume() { + this.paused = false; + } + + async stop() { + this.stopped = true; + } +} + +export class AgentStepInfo { + stepNumber: number; + maxSteps: number; + + constructor(params: { stepNumber: number; maxSteps: number }) { + this.stepNumber = params.stepNumber; + this.maxSteps = params.maxSteps; + } +} + +interface ActionResultParams { + isDone?: boolean; + extractedContent?: string | null; + error?: string | null; + includeInMemory?: boolean; +} + +export class ActionResult { + isDone: boolean; + extractedContent: string | null; + error: string | null; + includeInMemory: boolean; + + constructor(params: ActionResultParams = {}) { + this.isDone = params.isDone ?? false; + this.extractedContent = params.extractedContent ?? null; + this.error = params.error ?? null; + this.includeInMemory = params.includeInMemory ?? false; + } +} + +export type WrappedActionResult = ActionResult & { + toolCallId: string; +}; + +export const agentBrainSchema = z.object({ + page_summary: z.string(), + evaluation_previous_goal: z.string(), + memory: z.string(), + next_goal: z.string(), +}); + +export type AgentBrain = z.infer; + +// Make AgentOutput generic with Zod schema +export interface AgentOutput { + /** + * The unique identifier for the agent + */ + id: string; + + /** + * The result of the agent's step + */ + result?: T; + /** + * The error that occurred during the agent's action + */ + error?: string; +} diff --git a/packages/agent-infra/browser-use/src/browser/context.ts b/packages/agent-infra/browser-use/src/browser/context.ts new file mode 100644 index 000000000..9520a9a64 --- /dev/null +++ b/packages/agent-infra/browser-use/src/browser/context.ts @@ -0,0 +1,313 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/browser/context.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ +import { + type BrowserContextConfig, + type BrowserState, + DEFAULT_BROWSER_CONTEXT_CONFIG, +} from './types'; +import Page, { build_initial_state } from './page'; +import { createLogger } from '../utils'; + +const logger = createLogger('BrowserContext'); +export default class BrowserContext { + private readonly _config: BrowserContextConfig; + private _currentTabId: string | null = null; + private _attachedPages: Map = new Map(); + + constructor(config: Partial) { + this._config = { ...DEFAULT_BROWSER_CONTEXT_CONFIG, ...config }; + } + + public getConfig(): BrowserContextConfig { + return this._config; + } + + public updateCurrentTabId(url: string): void { + // only update tab id, but don't attach it. + this._currentTabId = url; + } + + private async _getOrCreatePage( + url: string, + forceUpdate = false, + ): Promise { + const existingPage = this._attachedPages.get(url); + if (existingPage) { + logger.info('getOrCreatePage', url, 'already attached'); + if (!forceUpdate) { + return existingPage; + } + // detach the page and remove it from the attached pages if forceUpdate is true + await existingPage.detachPuppeteer(); + this._attachedPages.delete(url); + } + logger.info('getOrCreatePage', url, 'creating new page'); + return new Page(url || '', '', this._config); + } + + public async cleanup(): Promise { + const currentPage = await this.getCurrentPage(); + currentPage?.removeHighlight(); + // detach all pages + for (const page of this._attachedPages.values()) { + await page.detachPuppeteer(); + } + this._attachedPages.clear(); + this._currentTabId = null; + } + + public async attachPage(page: Page): Promise { + // check if page is already attached + if (this._attachedPages.has(page.url())) { + logger.info('attachPage_has', page.url(), 'already attached'); + return true; + } + + if (await page.attachPuppeteer()) { + logger.info('attachPage', page.url(), 'attached'); + // add page to managed pages + this._attachedPages.set(page.url(), page); + return true; + } + return false; + } + + public async detachPage(url: string): Promise { + // detach page + const page = this._attachedPages.get(url); + if (page) { + await page.detachPuppeteer(); + // remove page from managed pages + this._attachedPages.delete(url); + } + } + + public async getCurrentPage(): Promise { + // 1. If _currentTabId not set, query the active tab and attach it + if (!this._currentTabId) { + const page = await this._getOrCreatePage(''); + await this.attachPage(page); + this._currentTabId = page.url(); + return page; + } + + // 2. If _currentTabId is set but not in attachedPages, attach the tab + const existingPage = this._attachedPages.get(this._currentTabId); + if (!existingPage) { + const page = await this._getOrCreatePage(this._currentTabId); + // set current tab id to null if the page is not attached successfully + await this.attachPage(page); + return page; + } + + // 3. Return existing page from attachedPages + return existingPage; + } + + /** + * Get all tab IDs from the browser and the current window. + * @returns A set of tab IDs. + */ + public async getAllTabIds(): Promise> { + const currentPage = await this.getCurrentPage(); + + if (!currentPage || !currentPage.attached) { + logger.warning('No attached page found'); + return new Set(); + } + + const pages = await currentPage.browser?.pages(); + const tabs = + pages?.map((page) => ({ + url: page.url(), + })) || []; + return new Set( + tabs.map((tab) => tab.url).filter((url) => url !== undefined), + ); + } + + private async waitForPageEvents( + url: string, + options: { + waitForNavigation?: boolean; + waitForLoad?: boolean; + timeoutMs?: number; + } = {}, + ): Promise { + const { + waitForNavigation = true, + waitForLoad = true, + timeoutMs = 5000, + } = options; + + const page = this._attachedPages.get(url); + if (!page || !page.attached || !page.puppeteerPage) { + logger.warning(`waitForPageEvents failed, page ${url} is not attached`); + return; + } + + const puppeteerPage = page.puppeteerPage; + const promises: Promise[] = []; + + if (waitForNavigation) { + // wait for navigation to complete + const navPromise = puppeteerPage + .waitForNavigation({ + timeout: timeoutMs, + waitUntil: 'domcontentloaded', + }) + .catch((err) => { + logger.debug( + `waitForPageEvents failed, navigation error: ${err.message}`, + ); + }); + promises.push(navPromise); + } + + if (waitForLoad) { + // wait for page to load + const loadPromise = puppeteerPage + .waitForNavigation({ + timeout: timeoutMs, + waitUntil: 'load', + }) + .catch((err) => { + logger.debug(`waitForPageEvents failed, load error: ${err.message}`); + }); + promises.push(loadPromise); + + const networkPromise = puppeteerPage + .waitForNavigation({ + timeout: timeoutMs, + waitUntil: 'networkidle0', + }) + .catch((err) => { + logger.debug( + `waitForPageEvents failed, network idle error: ${err.message}`, + ); + }); + promises.push(networkPromise); + } + + // set timeout + const timeoutPromise = new Promise((_, reject) => + setTimeout( + () => + reject(new Error(`page operation timeout, waited ${timeoutMs} ms`)), + timeoutMs, + ), + ); + + // wait for any navigation to complete or timeout + await Promise.race([Promise.all(promises), timeoutPromise]).catch( + (error) => { + // if timeout error, throw + if (error.message.includes('page operation timeout')) { + throw error; + } + // other errors may be because navigation is complete, we can continue + logger.debug(`navigation error: ${error.message}`); + }, + ); + + // 确认页面内容已加载 + try { + // 等待页面中的 body 元素出现,确保 DOM 已加载 + await puppeteerPage.waitForSelector('body', { timeout: timeoutMs / 2 }); + } catch (error) { + logger.warning(`waitForPageEvents failed, body not found: ${error}`); + } + } + + public async switchTab(url: string): Promise { + logger.info('switchTab', url); + + const page = await this._getOrCreatePage(url); + await this.attachPage(page); + this._currentTabId = url; + return page; + } + + public async navigateTo(url: string): Promise { + const page = await this.getCurrentPage(); + if (!page) { + await this.openTab(url); + return; + } + // if page is attached, use puppeteer to navigate to the url + if (page.attached) { + await page.navigateTo(url); + return; + } + + // Reattach the page after navigation completes + const updatedPage = await this._getOrCreatePage(url, true); + await this.attachPage(updatedPage); + this._currentTabId = url; + } + + public async openTab(url: string): Promise { + // Create and attach the page after tab is fully loaded and activated + const page = await this._getOrCreatePage(url); + await this.attachPage(page); + this._currentTabId = url; + + return page; + } + + public async closeTab(url: string): Promise { + await this.detachPage(url); + // update current tab id if needed + if (this._currentTabId === url) { + this._currentTabId = null; + } + } + + /** + * Remove a tab from the attached pages map. This will not run detachPuppeteer. + * @param tabId - The ID of the tab to remove. + */ + public removeAttachedPage(url: string): void { + this._attachedPages.delete(url); + // update current tab id if needed + if (this._currentTabId === url) { + this._currentTabId = null; + } + } + + public async getState(): Promise { + const currentPage = await this.getCurrentPage(); + + const pageState = !currentPage + ? build_initial_state() + : await currentPage.getState(); + + const pages = await currentPage.browser?.pages(); + const pageInfos = await Promise.all( + pages?.map(async (page) => ({ + id: page.url(), + url: page.url(), + title: await page.title(), + })) || [], + ); + + const browserState: BrowserState = { + ...pageState, + pages: pageInfos, + }; + return browserState; + } + + public async removeHighlight(): Promise { + const page = await this.getCurrentPage(); + if (page) { + await page.removeHighlight(); + } + } +} diff --git a/packages/agent-infra/browser-use/src/browser/page.ts b/packages/agent-infra/browser-use/src/browser/page.ts new file mode 100644 index 000000000..3cc903110 --- /dev/null +++ b/packages/agent-infra/browser-use/src/browser/page.ts @@ -0,0 +1,1272 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/browser/page.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ +import { + type HTTPRequest, + type HTTPResponse, + type KeyInput, +} from 'puppeteer-core/lib/esm/puppeteer/puppeteer-core-browser.js'; +import { LocalBrowser } from '@agent-infra/browser'; +import { + Browser, + Page as PuppeteerPage, + ElementHandle, + Frame, +} from 'puppeteer-core'; +import { + getClickableElements as _getClickableElements, + removeHighlights as _removeHighlights, + getScrollInfo as _getScrollInfo, + getMarkdownContent as _getMarkdownContent, + getReadabilityContent as _getReadabilityContent, + ReadabilityResult, +} from '../dom/service'; +import { DOMElementNode, type DOMState } from '../dom/views'; +import { + type BrowserContextConfig, + DEFAULT_BROWSER_CONTEXT_CONFIG, + type PageState, +} from './types'; +import { createLogger, getBuildDomTreeScript } from '../utils'; + +const logger = createLogger('Page'); + +declare global { + interface Window { + turn2Markdown: (selector?: string) => string; + } +} + +export function build_initial_state(url?: string, title?: string): PageState { + return { + elementTree: new DOMElementNode({ + tagName: 'root', + isVisible: true, + parent: null, + xpath: '', + cssSelector: '', + attributes: {}, + children: [], + }), + selectorMap: new Map(), + tabId: 0, + url: url || '', + title: title || '', + screenshot: null, + pixelsAbove: 0, + pixelsBelow: 0, + }; +} + +export default class Page { + private _browser: Browser | null = null; + private _puppeteerPage: PuppeteerPage | null = null; + private _config: BrowserContextConfig; + private _state: PageState; + private _validWebPage = false; + + constructor( + url: string, + title: string, + config: Partial = {}, + ) { + this._config = { ...DEFAULT_BROWSER_CONTEXT_CONFIG, ...config }; + this._state = build_initial_state(url, title); + // chrome://newtab/, chrome://newtab/extensions are not valid web pages, can't be attached + this._validWebPage = (url && url.startsWith('http')) || false; + } + + get browser(): Browser | null { + return this._browser; + } + + get puppeteerPage(): PuppeteerPage | null { + return this._puppeteerPage; + } + + get validWebPage(): boolean { + return this._validWebPage; + } + + get attached(): boolean { + return this._validWebPage && this._puppeteerPage !== null; + } + + async executeScript( + page: PuppeteerPage, + options: { + contents?: string[]; + }, + ): Promise { + if (!page) { + throw new Error('Puppeteer页面未连接'); + } + + if (options.contents && options.contents.length > 0) { + for (const content of options.contents) { + await page.evaluateOnNewDocument(content); + logger.info(`已注入脚本文件`); + } + } + } + + async attachPuppeteer(): Promise { + if (!this._validWebPage) { + return false; + } + + if (this._puppeteerPage) { + return true; + } + + logger.info('attaching puppeteer'); + // const browser = await connect({ + // transport: await ExtensionTransport.connectTab(this._tabId), + // defaultViewport: null, + // protocol: 'cdp' as ProtocolType, + // }); + const localBrowser = new LocalBrowser(); + await localBrowser.launch(); + + const browser = await localBrowser.getBrowser(); + + this._browser = browser; + + const [page] = await browser.pages(); + + await this.executeScript(page, { + contents: [getBuildDomTreeScript()], + }); + + await page.goto(this._state.url); + this._puppeteerPage = page; + + // Add anti-detection scripts + await this._addAntiDetectionScripts(); + + return true; + } + + private async _addAntiDetectionScripts(): Promise { + if (!this._puppeteerPage) { + return; + } + + await this._puppeteerPage.evaluateOnNewDocument(` + // Webdriver property + Object.defineProperty(navigator, 'webdriver', { + get: () => undefined + }); + + // Languages + // Object.defineProperty(navigator, 'languages', { + // get: () => ['en-US', 'zh-CN'] + // }); + + // Plugins + // Object.defineProperty(navigator, 'plugins', { + // get: () => [1, 2, 3, 4, 5] + // }); + + // Chrome runtime + window.chrome = { runtime: {} }; + + // Permissions + const originalQuery = window.navigator.permissions.query; + window.navigator.permissions.query = (parameters) => ( + parameters.name === 'notifications' ? + Promise.resolve({ state: Notification.permission }) : + originalQuery(parameters) + ); + + // Shadow DOM + (function () { + const originalAttachShadow = Element.prototype.attachShadow; + Element.prototype.attachShadow = function attachShadow(options) { + return originalAttachShadow.call(this, { ...options, mode: "open" }); + }; + })(); + `); + } + + async detachPuppeteer(): Promise { + if (this._browser) { + await this._browser.disconnect(); + this._browser = null; + this._puppeteerPage = null; + // reset the state + this._state = build_initial_state(); + } + } + + async removeHighlight(): Promise { + if (this._config.highlightElements && this._validWebPage) { + await _removeHighlights(this._puppeteerPage!); + } + } + + async getClickableElements(focusElement: number): Promise { + if (!this._validWebPage) { + return null; + } + return _getClickableElements( + this._puppeteerPage!, + this._config.highlightElements, + focusElement, + this._config.viewportExpansion, + ); + } + + // Get scroll position information for the current page. + async getScrollInfo(): Promise<[number, number]> { + if (!this._validWebPage) { + return [0, 0]; + } + return _getScrollInfo(this._puppeteerPage!); + } + + async getContent(): Promise { + if (!this._puppeteerPage) { + throw new Error('Puppeteer page is not connected'); + } + return await this._puppeteerPage.content(); + } + + async getMarkdownContent(selector?: string): Promise { + if (!this._validWebPage) { + return ''; + } + return _getMarkdownContent(this._puppeteerPage!, selector); + } + + async getReadabilityContent(): Promise { + if (!this._validWebPage) { + return null; + } + return _getReadabilityContent(this._puppeteerPage!); + } + + async getState(): Promise { + if (!this._validWebPage) { + // return the initial state + return build_initial_state(); + } + await this.waitForPageAndFramesLoad(); + const state = await this._updateState(); + return state; + } + + async _updateState(useVision = true, focusElement = -1): Promise { + try { + // Test if page is still accessible + // @ts-expect-error - puppeteerPage is not null, already checked before calling this function + await this._puppeteerPage.evaluate('1'); + } catch (error) { + logger.warning('Current page is no longer accessible:', error); + if (this._browser) { + const pages = await this._browser.pages(); + if (pages.length > 0) { + this._puppeteerPage = pages[0]; + } else { + throw new Error('Browser closed: no valid pages available'); + } + } + } + + try { + await this.removeHighlight(); + + // Get DOM content (equivalent to dom_service.get_clickable_elements) + // This part would need to be implemented based on your DomService logic + const content = await this.getClickableElements(focusElement); + if (!content) { + logger.warning('Failed to get clickable elements'); + // Return last known good state if available + return this._state; + } + // log the attributes of content object + if ('selectorMap' in content) { + logger.debug('content.selectorMap:', content.selectorMap.size); + } else { + logger.debug('content.selectorMap: not found'); + } + if ('elementTree' in content) { + logger.debug('content.elementTree:', content.elementTree?.tagName); + } else { + logger.debug('content.elementTree: not found'); + } + + // Take screenshot if needed + const screenshot = useVision ? await this.takeScreenshot() : null; + const [pixelsAbove, pixelsBelow] = await this.getScrollInfo(); + + // update the state + this._state.elementTree = content.elementTree; + this._state.selectorMap = content.selectorMap; + this._state.url = this._puppeteerPage?.url() || ''; + this._state.title = (await this._puppeteerPage?.title()) || ''; + this._state.screenshot = screenshot; + this._state.pixelsAbove = pixelsAbove; + this._state.pixelsBelow = pixelsBelow; + return this._state; + } catch (error) { + logger.error('Failed to update state:', error); + // Return last known good state if available + return this._state; + } + } + + async takeScreenshot(fullPage = false): Promise { + if (!this._puppeteerPage) { + throw new Error('Puppeteer page is not connected'); + } + + try { + // First disable animations/transitions + await this._puppeteerPage.evaluate(() => { + const styleId = 'puppeteer-disable-animations'; + if (!document.getElementById(styleId)) { + const style = document.createElement('style'); + style.id = styleId; + style.textContent = ` + *, *::before, *::after { + animation: none !important; + transition: none !important; + } + `; + document.head.appendChild(style); + } + }); + + // Take the screenshot using JPEG format with 80% quality + const screenshot = await this._puppeteerPage.screenshot({ + fullPage: fullPage, + encoding: 'base64', + type: 'jpeg', + quality: 80, // Good balance between quality and file size + }); + + // Clean up the style element + await this._puppeteerPage.evaluate(() => { + const style = document.getElementById('puppeteer-disable-animations'); + if (style) { + style.remove(); + } + }); + + return screenshot as string; + } catch (error) { + logger.error('Failed to take screenshot:', error); + throw error; + } + } + + url(): string { + if (this._puppeteerPage) { + return this._puppeteerPage.url(); + } + return this._state.url; + } + + async title(): Promise { + if (this._puppeteerPage) { + return await this._puppeteerPage.title(); + } + return this._state.title; + } + + async navigateTo(url: string): Promise { + if (!this._puppeteerPage) { + return; + } + logger.info('navigateTo', url); + + try { + await Promise.all([ + this.waitForPageAndFramesLoad(), + this._puppeteerPage.goto(url), + ]); + logger.info('navigateTo complete'); + } catch (error) { + // Check if it's a timeout error + if (error instanceof Error && error.message.includes('timeout')) { + logger.warning( + 'Navigation timeout, but page might still be usable:', + error, + ); + // You might want to check if the page is actually loaded despite the timeout + } else { + logger.error('NavigationTo failed:', error); + throw error; // Re-throw non-timeout errors + } + } + } + + async refreshPage(): Promise { + if (!this._puppeteerPage) return; + + try { + await Promise.all([ + this.waitForPageAndFramesLoad(), + this._puppeteerPage.reload(), + ]); + logger.info('Page refresh complete'); + } catch (error) { + if (error instanceof Error && error.message.includes('timeout')) { + logger.warning( + 'Refresh timeout, but page might still be usable:', + error, + ); + } else { + logger.error('Page refresh failed:', error); + throw error; + } + } + } + + async goBack(): Promise { + if (!this._puppeteerPage) return; + + try { + await Promise.all([ + this.waitForPageAndFramesLoad(), + this._puppeteerPage.goBack(), + ]); + logger.info('Navigation back completed'); + } catch (error) { + if (error instanceof Error && error.message.includes('timeout')) { + logger.warning( + 'Back navigation timeout, but page might still be usable:', + error, + ); + } else { + logger.error('Could not navigate back:', error); + throw error; + } + } + } + + async goForward(): Promise { + if (!this._puppeteerPage) return; + + try { + await Promise.all([ + this.waitForPageAndFramesLoad(), + this._puppeteerPage.goForward(), + ]); + logger.info('Navigation forward completed'); + } catch (error) { + if (error instanceof Error && error.message.includes('timeout')) { + logger.warning( + 'Forward navigation timeout, but page might still be usable:', + error, + ); + } else { + logger.error('Could not navigate forward:', error); + throw error; + } + } + } + + async scrollDown(amount?: number): Promise { + if (this._puppeteerPage) { + if (amount) { + await this._puppeteerPage?.evaluate(`window.scrollBy(0, ${amount});`); + } else { + await this._puppeteerPage?.evaluate( + 'window.scrollBy(0, window.innerHeight);', + ); + } + } + } + + async scrollUp(amount?: number): Promise { + if (this._puppeteerPage) { + if (amount) { + await this._puppeteerPage?.evaluate(`window.scrollBy(0, -${amount});`); + } else { + await this._puppeteerPage?.evaluate( + 'window.scrollBy(0, -window.innerHeight);', + ); + } + } + } + + async sendKeys(keys: string): Promise { + if (!this._puppeteerPage) { + throw new Error('Puppeteer page is not connected'); + } + + // Split combination keys (e.g., "Control+A" or "Shift+ArrowLeft") + const keyParts = keys.split('+'); + const modifiers = keyParts.slice(0, -1); + const mainKey = keyParts[keyParts.length - 1]; + + // Press modifiers and main key, ensure modifiers are released even if an error occurs. + try { + // Press all modifier keys (e.g., Control, Shift, etc.) + for (const modifier of modifiers) { + await this._puppeteerPage.keyboard.down(this._convertKey(modifier)); + } + // Press the main key + // also wait for stable state + await Promise.all([ + this._puppeteerPage.keyboard.press(this._convertKey(mainKey)), + this.waitForPageAndFramesLoad(), + ]); + logger.info('sendKeys complete', keys); + } catch (error) { + logger.error('Failed to send keys:', error); + throw new Error( + `Failed to send keys: ${error instanceof Error ? error.message : String(error)}`, + ); + } finally { + // Release all modifier keys in reverse order regardless of any errors in key press. + for (const modifier of [...modifiers].reverse()) { + try { + await this._puppeteerPage.keyboard.up(this._convertKey(modifier)); + } catch (releaseError) { + logger.error('Failed to release modifier:', modifier, releaseError); + } + } + } + } + + private _convertKey(key: string): KeyInput { + const lowerKey = key.trim().toLowerCase(); + const keyMap: { [key: string]: string } = { + // Letters + a: 'KeyA', + b: 'KeyB', + c: 'KeyC', + d: 'KeyD', + e: 'KeyE', + f: 'KeyF', + g: 'KeyG', + h: 'KeyH', + i: 'KeyI', + j: 'KeyJ', + k: 'KeyK', + l: 'KeyL', + m: 'KeyM', + n: 'KeyN', + o: 'KeyO', + p: 'KeyP', + q: 'KeyQ', + r: 'KeyR', + s: 'KeyS', + t: 'KeyT', + u: 'KeyU', + v: 'KeyV', + w: 'KeyW', + x: 'KeyX', + y: 'KeyY', + z: 'KeyZ', + + // Numbers + '0': 'Digit0', + '1': 'Digit1', + '2': 'Digit2', + '3': 'Digit3', + '4': 'Digit4', + '5': 'Digit5', + '6': 'Digit6', + '7': 'Digit7', + '8': 'Digit8', + '9': 'Digit9', + + // Special keys + control: 'Control', + shift: 'Shift', + alt: 'Alt', + meta: 'Meta', + enter: 'Enter', + backspace: 'Backspace', + delete: 'Delete', + arrowleft: 'ArrowLeft', + arrowright: 'ArrowRight', + arrowup: 'ArrowUp', + arrowdown: 'ArrowDown', + escape: 'Escape', + tab: 'Tab', + space: 'Space', + }; + + const convertedKey = keyMap[lowerKey] || key; + logger.info('convertedKey', convertedKey); + return convertedKey as KeyInput; + } + + async scrollToText(text: string): Promise { + if (!this._puppeteerPage) { + throw new Error('Puppeteer is not connected'); + } + + try { + // Try different locator strategies + const selectors = [ + // Using text selector (equivalent to get_by_text) + `::-p-text(${text})`, + // Using XPath selector (contains text) - case insensitive + `::-p-xpath(//*[contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), '${text.toLowerCase()}')])`, + ]; + + for (const selector of selectors) { + try { + const element = await this._puppeteerPage.$(selector); + if (element) { + // Check if element is visible + const isVisible = await element.evaluate((el) => { + const style = window.getComputedStyle(el); + return ( + style.display !== 'none' && + style.visibility !== 'hidden' && + style.opacity !== '0' + ); + }); + + if (isVisible) { + await this._scrollIntoViewIfNeeded(element); + await new Promise((resolve) => setTimeout(resolve, 500)); // Wait for scroll to complete + return true; + } + } + } catch (e) { + logger.debug(`Locator attempt failed: ${e}`); + } + } + return false; + } catch (error) { + throw new Error(error instanceof Error ? error.message : String(error)); + } + } + + async getDropdownOptions( + index: number, + ): Promise> { + const selectorMap = this.getSelectorMap(); + const element = selectorMap?.get(index); + + if (!element || !this._puppeteerPage) { + throw new Error('Element not found or puppeteer is not connected'); + } + + try { + // Get the element handle using the element's selector + const elementHandle = await this.locateElement(element); + if (!elementHandle) { + throw new Error('Dropdown element not found'); + } + + // Evaluate the select element to get all options + const options = await elementHandle.evaluate((select) => { + if (!(select instanceof HTMLSelectElement)) { + throw new Error('Element is not a select element'); + } + + return Array.from(select.options).map((option) => ({ + index: option.index, + text: option.text, // Not trimming to maintain exact match for selection + value: option.value, + })); + }); + + if (!options.length) { + throw new Error('No options found in dropdown'); + } + + return options; + } catch (error) { + throw new Error( + `Failed to get dropdown options: ${error instanceof Error ? error.message : String(error)}`, + ); + } + } + + async selectDropdownOption(index: number, text: string): Promise { + const selectorMap = this.getSelectorMap(); + const element = selectorMap?.get(index); + + if (!element || !this._puppeteerPage) { + throw new Error('Element not found or puppeteer is not connected'); + } + + logger.debug(`Attempting to select '${text}' from dropdown`); + logger.debug(`Element attributes: ${JSON.stringify(element.attributes)}`); + logger.debug(`Element tag: ${element.tagName}`); + + // Validate that we're working with a select element + if (element.tagName?.toLowerCase() !== 'select') { + const msg = `Cannot select option: Element with index ${index} is a ${element.tagName}, not a SELECT`; + logger.error(msg); + throw new Error(msg); + } + + try { + // Get the element handle using the element's selector + const elementHandle = await this.locateElement(element); + if (!elementHandle) { + throw new Error(`Dropdown element with index ${index} not found`); + } + + // Verify dropdown and select option in one call + const result = await elementHandle.evaluate( + (select, optionText, elementIndex) => { + if (!(select instanceof HTMLSelectElement)) { + return { + found: false, + message: `Element with index ${elementIndex} is not a SELECT`, + }; + } + + const options = Array.from(select.options); + const option = options.find((opt) => opt.text.trim() === optionText); + + if (!option) { + const availableOptions = options + .map((o) => o.text.trim()) + .join('", "'); + return { + found: false, + message: `Option "${optionText}" not found in dropdown element with index ${elementIndex}. Available options: "${availableOptions}"`, + }; + } + + // Set the value and dispatch events + const previousValue = select.value; + select.value = option.value; + + // Only dispatch events if the value actually changed + if (previousValue !== option.value) { + select.dispatchEvent(new Event('change', { bubbles: true })); + select.dispatchEvent(new Event('input', { bubbles: true })); + } + + return { + found: true, + message: `Selected option "${optionText}" with value "${option.value}"`, + }; + }, + text, + index, + ); + + logger.debug('Selection result:', result); + // whether found or not, return the message + return result.message; + } catch (error) { + const errorMessage = `${error instanceof Error ? error.message : String(error)}`; + logger.error(errorMessage); + throw new Error(errorMessage); + } + } + + async locateElement(element: DOMElementNode): Promise { + if (!this._puppeteerPage) { + // throw new Error('Puppeteer page is not connected'); + logger.warning('Puppeteer is not connected'); + return null; + } + let currentFrame: PuppeteerPage | Frame = this._puppeteerPage; + + // Start with the target element and collect all parents + const parents: DOMElementNode[] = []; + let current = element; + while (current.parent) { + parents.push(current.parent); + current = current.parent; + } + + // Process all iframe parents in sequence (in reverse order - top to bottom) + const iframes = parents + .reverse() + .filter((item) => item.tagName === 'iframe'); + for (const parent of iframes) { + const cssSelector = parent.enhancedCssSelectorForElement( + this._config.includeDynamicAttributes, + ); + const frameElement: ElementHandle | null = + await currentFrame.$(cssSelector); + if (!frameElement) { + // throw new Error(`Could not find iframe with selector: ${cssSelector}`); + logger.warning(`Could not find iframe with selector: ${cssSelector}`); + return null; + } + const frame: Frame | null = await frameElement.contentFrame(); + if (!frame) { + // throw new Error(`Could not access frame content for selector: ${cssSelector}`); + logger.warning( + `Could not access frame content for selector: ${cssSelector}`, + ); + return null; + } + currentFrame = frame; + } + + const cssSelector = element.enhancedCssSelectorForElement( + this._config.includeDynamicAttributes, + ); + + try { + const elementHandle: ElementHandle | null = + await currentFrame.$(cssSelector); + if (elementHandle) { + // Scroll element into view if needed + await this._scrollIntoViewIfNeeded(elementHandle); + return elementHandle; + } + } catch (error) { + logger.error('Failed to locate element:', error); + } + + return null; + } + + async inputTextElementNode( + useVision: boolean, + elementNode: DOMElementNode, + text: string, + ): Promise { + if (!this._puppeteerPage) { + throw new Error('Puppeteer is not connected'); + } + + try { + // Highlight before typing + if (elementNode.highlightIndex !== undefined) { + await this._updateState(useVision, elementNode.highlightIndex); + } + + const element = await this.locateElement(elementNode); + if (!element) { + throw new Error(`Element: ${elementNode} not found`); + } + + // Scroll element into view if needed + await this._scrollIntoViewIfNeeded(element); + + // Clear the input field (equivalent to fill('')) + await element.evaluate((el) => { + if ( + el instanceof HTMLInputElement || + el instanceof HTMLTextAreaElement + ) { + el.value = ''; + el.dispatchEvent(new Event('input', { bubbles: true })); + el.dispatchEvent(new Event('change', { bubbles: true })); + } + }); + + // Type the text + await element.type(text); + // Wait for stable state ? + } catch (error) { + throw new Error( + `Failed to input text into element: ${elementNode}. Error: ${error instanceof Error ? error.message : String(error)}`, + ); + } + } + + private async _scrollIntoViewIfNeeded( + element: ElementHandle, + timeout = 2500, + ): Promise { + const startTime = Date.now(); + + // eslint-disable-next-line no-constant-condition + while (true) { + // Check if element is in viewport + const isVisible = await element.evaluate((el) => { + const rect = el.getBoundingClientRect(); + + // Check if element has size + if (rect.width === 0 || rect.height === 0) return false; + + // Check if element is hidden + const style = window.getComputedStyle(el); + if ( + style.visibility === 'hidden' || + style.display === 'none' || + style.opacity === '0' + ) { + return false; + } + + // Check if element is in viewport + const isInViewport = + rect.top >= 0 && + rect.left >= 0 && + rect.bottom <= + (window.innerHeight || document.documentElement.clientHeight) && + rect.right <= + (window.innerWidth || document.documentElement.clientWidth); + + if (!isInViewport) { + // Scroll into view if not visible + el.scrollIntoView({ + behavior: 'auto', + block: 'center', + inline: 'center', + }); + return false; + } + + return true; + }); + + if (isVisible) break; + + // Check timeout + if (Date.now() - startTime > timeout) { + throw new Error('Timed out while trying to scroll element into view'); + } + + // Small delay before next check + await new Promise((resolve) => setTimeout(resolve, 100)); + } + } + + async clickElementNode( + useVision: boolean, + elementNode: DOMElementNode, + ): Promise { + if (!this._puppeteerPage) { + throw new Error('Puppeteer is not connected'); + } + + try { + // Highlight before clicking + if (elementNode.highlightIndex !== undefined) { + await this._updateState(useVision, elementNode.highlightIndex); + } + + const element = await this.locateElement(elementNode); + if (!element) { + throw new Error(`Element: ${elementNode} not found`); + } + + // Scroll element into view if needed + await this._scrollIntoViewIfNeeded(element); + + try { + // First attempt: Use Puppeteer's click method with timeout + await Promise.race([ + element.click(), + new Promise((_, reject) => + setTimeout(() => reject(new Error('Click timeout')), 2000), + ), + ]); + } catch (error) { + // Second attempt: Use evaluate to perform a direct click + logger.info('Failed to click element, trying again', error); + try { + await element.evaluate((el) => (el as HTMLElement).click()); + } catch (secondError) { + throw new Error( + `Failed to click element: ${secondError instanceof Error ? secondError.message : String(secondError)}`, + ); + } + } + } catch (error) { + throw new Error( + `Failed to click element: ${elementNode}. Error: ${error instanceof Error ? error.message : String(error)}`, + ); + } + } + + getSelectorMap(): Map { + return this._state.selectorMap; + } + + async getElementByIndex(index: number): Promise { + const selectorMap = this.getSelectorMap(); + const element = selectorMap.get(index); + if (!element) return null; + return await this.locateElement(element); + } + + getDomElementByIndex(index: number): DOMElementNode | null { + const selectorMap = this.getSelectorMap(); + return selectorMap.get(index) || null; + } + + isFileUploader( + elementNode: DOMElementNode, + maxDepth = 3, + currentDepth = 0, + ): boolean { + if (currentDepth > maxDepth) { + return false; + } + + // Check current element + if (elementNode.tagName === 'input') { + // Check for file input attributes + const attributes = elementNode.attributes; + // biome-ignore lint/complexity/useLiteralKeys: + if ( + attributes['type']?.toLowerCase() === 'file' || + !!attributes['accept'] + ) { + return true; + } + } + + // Recursively check children + if (elementNode.children && currentDepth < maxDepth) { + for (const child of elementNode.children) { + if ('tagName' in child) { + // DOMElementNode type guard + if ( + this.isFileUploader( + child as DOMElementNode, + maxDepth, + currentDepth + 1, + ) + ) { + return true; + } + } + } + } + + return false; + } + + async waitForPageLoadState(timeout?: number) { + const timeoutValue = timeout || 8000; + await this._puppeteerPage?.waitForNavigation({ timeout: timeoutValue }); + } + + private async _waitForStableNetwork() { + if (!this._puppeteerPage) { + throw new Error('Puppeteer page is not connected'); + } + + const RELEVANT_RESOURCE_TYPES = new Set([ + 'document', + 'stylesheet', + 'image', + 'font', + 'script', + 'iframe', + ]); + + const RELEVANT_CONTENT_TYPES = new Set([ + 'text/html', + 'text/css', + 'application/javascript', + 'image/', + 'font/', + 'application/json', + ]); + + const IGNORED_URL_PATTERNS = new Set([ + // Analytics and tracking + 'analytics', + 'tracking', + 'telemetry', + 'beacon', + 'metrics', + // Ad-related + 'doubleclick', + 'adsystem', + 'adserver', + 'advertising', + // Social media widgets + 'facebook.com/plugins', + 'platform.twitter', + 'linkedin.com/embed', + // Live chat and support + 'livechat', + 'zendesk', + 'intercom', + 'crisp.chat', + 'hotjar', + // Push notifications + 'push-notifications', + 'onesignal', + 'pushwoosh', + // Background sync/heartbeat + 'heartbeat', + 'ping', + 'alive', + // WebRTC and streaming + 'webrtc', + 'rtmp://', + 'wss://', + // Common CDNs + 'cloudfront.net', + 'fastly.net', + ]); + + const pendingRequests = new Set(); + let lastActivity = Date.now(); + + const onRequest = (request: HTTPRequest) => { + // Filter by resource type + const resourceType = request.resourceType(); + if (!RELEVANT_RESOURCE_TYPES.has(resourceType)) { + return; + } + + // Filter out streaming, websocket, and other real-time requests + if ( + ['websocket', 'media', 'eventsource', 'manifest', 'other'].includes( + resourceType, + ) + ) { + return; + } + + // Filter out by URL patterns + const url = request.url().toLowerCase(); + if ( + Array.from(IGNORED_URL_PATTERNS).some((pattern) => + url.includes(pattern), + ) + ) { + return; + } + + // Filter out data URLs and blob URLs + if (url.startsWith('data:') || url.startsWith('blob:')) { + return; + } + + // Filter out requests with certain headers + const headers = request.headers(); + if ( + // biome-ignore lint/complexity/useLiteralKeys: + headers['purpose'] === 'prefetch' || + headers['sec-fetch-dest'] === 'video' || + headers['sec-fetch-dest'] === 'audio' + ) { + return; + } + + pendingRequests.add(request); + lastActivity = Date.now(); + }; + + const onResponse = (response: HTTPResponse) => { + const request = response.request(); + if (!pendingRequests.has(request)) { + return; + } + + // Filter by content type + const contentType = + response.headers()['content-type']?.toLowerCase() || ''; + + // Skip streaming content + if ( + [ + 'streaming', + 'video', + 'audio', + 'webm', + 'mp4', + 'event-stream', + 'websocket', + 'protobuf', + ].some((t) => contentType.includes(t)) + ) { + pendingRequests.delete(request); + return; + } + + // Only process relevant content types + if ( + !Array.from(RELEVANT_CONTENT_TYPES).some((ct) => + contentType.includes(ct), + ) + ) { + pendingRequests.delete(request); + return; + } + + // Skip large responses + const contentLength = response.headers()['content-length']; + if (contentLength && Number.parseInt(contentLength) > 5 * 1024 * 1024) { + // 5MB + pendingRequests.delete(request); + return; + } + + pendingRequests.delete(request); + lastActivity = Date.now(); + }; + + // Add event listeners + this._puppeteerPage.on('request', onRequest as any); + this._puppeteerPage.on('response', onResponse as any); + + try { + const startTime = Date.now(); + + // eslint-disable-next-line no-constant-condition + while (true) { + await new Promise((resolve) => setTimeout(resolve, 100)); + + const now = Date.now(); + const timeSinceLastActivity = (now - lastActivity) / 1000; // Convert to seconds + + if ( + pendingRequests.size === 0 && + timeSinceLastActivity >= this._config.waitForNetworkIdlePageLoadTime + ) { + break; + } + + const elapsedTime = (now - startTime) / 1000; // Convert to seconds + if (elapsedTime > this._config.maximumWaitPageLoadTime) { + console.debug( + `Network timeout after ${this._config.maximumWaitPageLoadTime}s with ${pendingRequests.size} pending requests:`, + Array.from(pendingRequests).map((r) => (r as HTTPRequest).url()), + ); + break; + } + } + } finally { + // Clean up event listeners + this._puppeteerPage.off('request', onRequest as any); + this._puppeteerPage.off('response', onResponse as any); + } + console.debug( + `Network stabilized for ${this._config.waitForNetworkIdlePageLoadTime} seconds`, + ); + } + + async waitForPageAndFramesLoad(timeoutOverwrite?: number): Promise { + // Start timing + const startTime = Date.now(); + + // Wait for page load + try { + await this._waitForStableNetwork(); + } catch (error) { + console.warn('Page load failed, continuing...'); + } + + // Calculate remaining time to meet minimum wait time + const elapsed = (Date.now() - startTime) / 1000; // Convert to seconds + const minWaitTime = + timeoutOverwrite || this._config.minimumWaitPageLoadTime; + const remaining = Math.max(minWaitTime - elapsed, 0); + + console.debug( + `--Page loaded in ${elapsed.toFixed(2)} seconds, waiting for additional ${remaining.toFixed(2)} seconds`, + ); + + // Sleep remaining time if needed + if (remaining > 0) { + await new Promise((resolve) => setTimeout(resolve, remaining * 1000)); // Convert seconds to milliseconds + } + } +} diff --git a/packages/agent-infra/browser-use/src/browser/types.ts b/packages/agent-infra/browser-use/src/browser/types.ts new file mode 100644 index 000000000..600107003 --- /dev/null +++ b/packages/agent-infra/browser-use/src/browser/types.ts @@ -0,0 +1,105 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/browser/types.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ +import type { DOMState } from '../dom/views'; + +export interface BrowserContextWindowSize { + width: number; + height: number; +} + +export interface BrowserContextConfig { + /** + * Minimum time to wait before getting page state for LLM input + * @default 0.5 + */ + minimumWaitPageLoadTime: number; + + /** + * Time to wait for network requests to finish before getting page state. + * Lower values may result in incomplete page loads. + * @default 1.0 + */ + waitForNetworkIdlePageLoadTime: number; + + /** + * Maximum time to wait for page load before proceeding anyway + * @default 5.0 + */ + maximumWaitPageLoadTime: number; + + /** + * Time to wait between multiple per step actions + * @default 1.0 + */ + waitBetweenActions: number; + + /** + * Default browser window size + * @default { width: 1280, height: 1100 } + */ + browserWindowSize: BrowserContextWindowSize; + + /** + * Highlight elements in the DOM on the screen + * @default true + */ + highlightElements: boolean; + + /** + * Viewport expansion in pixels. This amount will increase the number of elements + * which are included in the state what the LLM will see. + * If set to -1, all elements will be included (this leads to high token usage). + * If set to 0, only the elements which are visible in the viewport will be included. + * @default 500 + */ + viewportExpansion: number; + + /** + * Include dynamic attributes in the CSS selector. If you want to reuse the css_selectors, it might be better to set this to False. + * @default true + */ + includeDynamicAttributes: boolean; + + /** + * Home page url + * @default 'https://www.google.com' + */ + homePageUrl: string; +} + +export const DEFAULT_BROWSER_CONTEXT_CONFIG: BrowserContextConfig = { + minimumWaitPageLoadTime: 0.5, + waitForNetworkIdlePageLoadTime: 1.0, + maximumWaitPageLoadTime: 5.0, + waitBetweenActions: 1.0, + browserWindowSize: { width: 1280, height: 1100 }, + highlightElements: true, + viewportExpansion: 500, + includeDynamicAttributes: true, + homePageUrl: 'https://www.google.com', +}; + +export interface PageState extends DOMState { + tabId: number; + url: string; + title: string; + screenshot: string | null; + pixelsAbove: number; + pixelsBelow: number; +} + +export interface PageInfo { + id: string; + url: string; + title: string; +} + +export interface BrowserState extends PageState { + pages?: PageInfo[]; +} diff --git a/packages/agent-infra/browser-use/src/context.ts b/packages/agent-infra/browser-use/src/context.ts new file mode 100644 index 000000000..149d252f0 --- /dev/null +++ b/packages/agent-infra/browser-use/src/context.ts @@ -0,0 +1,24 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/packages/storage/lib/settings/types.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ +export enum AgentNameEnum { + Planner = 'planner', + Navigator = 'navigator', + Validator = 'validator', +} + +// Enum for supported LLM providers +export enum LLMProviderEnum { + AzureOpenAI = 'azure_openai', +} + +export interface ProviderConfig { + apiKey: string; + baseUrl?: string; + endpoint?: string; +} diff --git a/packages/agent-infra/browser-use/src/dom/history/views.ts b/packages/agent-infra/browser-use/src/dom/history/views.ts new file mode 100644 index 000000000..1b4b9dc77 --- /dev/null +++ b/packages/agent-infra/browser-use/src/dom/history/views.ts @@ -0,0 +1,29 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/dom/history/views.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ +export interface Coordinates { + x: number; + y: number; +} + +export interface CoordinateSet { + topLeft: Coordinates; + topRight: Coordinates; + bottomLeft: Coordinates; + bottomRight: Coordinates; + center: Coordinates; + width: number; + height: number; +} + +export interface ViewportInfo { + scrollX: number; + scrollY: number; + width: number; + height: number; +} diff --git a/packages/agent-infra/browser-use/src/dom/raw_types.ts b/packages/agent-infra/browser-use/src/dom/raw_types.ts new file mode 100644 index 000000000..09f21ba56 --- /dev/null +++ b/packages/agent-infra/browser-use/src/dom/raw_types.ts @@ -0,0 +1,41 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/dom/raw_types.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ +import type { CoordinateSet, ViewportInfo } from './history/views'; +// define the raw types used in pure javascript files that are injected into the page + +export type RawDomTextNode = { + type: string; + text: string; + isVisible: boolean; +}; + +export type RawDomElementNode = { + // Element node doesn't have a type field + tagName: string | null; + xpath: string | null; + cssSelector: string | null; + attributes: Record; + children: (RawDomTreeNode | null)[]; + isVisible?: boolean; + isInteractive?: boolean; + isTopElement?: boolean; + highlightIndex?: number; + viewportCoordinates?: CoordinateSet; + pageCoordinates?: CoordinateSet; + viewportInfo?: ViewportInfo; + shadowRoot?: boolean; +}; + +export type RawDomTreeNode = RawDomTextNode | RawDomElementNode; + +export interface BuildDomTreeArgs { + doHighlightElements: boolean; + focusHighlightIndex: number; + viewportExpansion: number; +} diff --git a/packages/agent-infra/browser-use/src/dom/service.ts b/packages/agent-infra/browser-use/src/dom/service.ts new file mode 100644 index 000000000..7aa6d3867 --- /dev/null +++ b/packages/agent-infra/browser-use/src/dom/service.ts @@ -0,0 +1,248 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/dom/service.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ +import { createLogger } from '../utils'; +import type { BuildDomTreeArgs, RawDomTreeNode } from './raw_types'; +import { + type DOMState, + type DOMBaseNode, + DOMElementNode, + DOMTextNode, +} from './views'; +import { Page } from 'puppeteer-core'; + +const logger = createLogger('DOMService'); + +export interface ReadabilityResult { + title: string; + content: string; + textContent: string; + length: number; + excerpt: string; + byline: string; + dir: string; + siteName: string; + lang: string; + publishedTime: string; +} + +declare global { + interface Window { + buildDomTree: (args: BuildDomTreeArgs) => RawDomTreeNode | null; + turn2Markdown: (selector?: string) => string; + parserReadability: () => ReadabilityResult | null; + } +} + +/** + * Get the scroll information for the current page. + * @returns A tuple containing the number of pixels above and below the current scroll position. + */ +export async function getScrollInfo(page: Page): Promise<[number, number]> { + const result = await page.evaluate(() => { + const scroll_y = window.scrollY; + const viewport_height = window.innerHeight; + const total_height = document.documentElement.scrollHeight; + return { + pixels_above: scroll_y, + pixels_below: total_height - (scroll_y + viewport_height), + }; + }); + + if (!result) { + throw new Error('Failed to get scroll information'); + } + return [result.pixels_above, result.pixels_below]; +} + +/** + * Get the markdown content for the current page. + * @param tabId - The ID of the tab to get the markdown content for. + * @param selector - The selector to get the markdown content for. If not provided, the body of the entire page will be converted to markdown. + * @returns The markdown content for the selected element on the current page. + */ +export async function getMarkdownContent( + page: Page, + selector?: string, +): Promise { + const result = await page.evaluate((sel) => { + return window.turn2Markdown(sel); + }, selector || ''); + + if (!result) { + throw new Error('Failed to get markdown content'); + } + return result as string; +} + +/** + * Get the readability content for the current page. + * @param tabId - The ID of the tab to get the readability content for. + * @returns The readability content for the current page. + */ +export async function getReadabilityContent( + page: Page, +): Promise { + const result = await page.evaluate(() => { + return window.parserReadability(); + }); + if (!result) { + throw new Error('Failed to get readability content'); + } + return result as ReadabilityResult; +} + +/** +/** + * Get the clickable elements for the current page. + * @param tabId - The ID of the tab to get the clickable elements for. + * @param highlightElements - Whether to highlight the clickable elements. + * @param focusElement - The element to focus on. + * @param viewportExpansion - The viewport expansion to use. + * @returns A DOMState object containing the clickable elements for the current page. + */ +export async function getClickableElements( + page: Page, + highlightElements = true, + focusElement = -1, + viewportExpansion = 0, +): Promise { + try { + const elementTree = await _buildDomTree( + page, + highlightElements, + focusElement, + viewportExpansion, + ); + const selectorMap = createSelectorMap(elementTree); + return { elementTree, selectorMap }; + } catch (error) { + logger.error('Failed to build DOM tree:', error); + return null; + } +} + +export function createSelectorMap( + elementTree: DOMElementNode, +): Map { + const selectorMap = new Map(); + + function processNode(node: DOMBaseNode): void { + if (node instanceof DOMElementNode) { + if (node.highlightIndex != null) { + // console.log('createSelectorMap node.highlightIndex:', node.highlightIndex); + selectorMap.set(node.highlightIndex, node); + } + node.children.forEach(processNode); + } + } + + processNode(elementTree); + return selectorMap; +} + +async function _buildDomTree( + page: Page, + highlightElements = true, + focusElement = -1, + viewportExpansion = 0, +): Promise { + const rawDomTree = await page.evaluate( + (args) => { + // Access buildDomTree from the window context of the target page + return window.buildDomTree(args); + }, + { + doHighlightElements: highlightElements, + focusHighlightIndex: focusElement, + viewportExpansion, + }, + ); + + if (rawDomTree !== null) { + const elementTree = parseNode(rawDomTree as RawDomTreeNode); + if (elementTree !== null && elementTree instanceof DOMElementNode) { + return elementTree; + } + } + throw new Error('Failed to build DOM tree: Invalid or empty tree structure'); +} + +export function parseNode( + nodeData: RawDomTreeNode, + parent: DOMElementNode | null = null, +): DOMBaseNode | null { + if (!nodeData) return null; + + if ('type' in nodeData) { + // && nodeData.type === 'TEXT_NODE' + return new DOMTextNode(nodeData.text, nodeData.isVisible, parent); + } + + const tagName = nodeData.tagName; + + // Parse coordinates if they exist + const viewportCoordinates = nodeData.viewportCoordinates; + const pageCoordinates = nodeData.pageCoordinates; + const viewportInfo = nodeData.viewportInfo; + + // Element node (possible other kinds of nodes, but we don't care about them for now) + const elementNode = new DOMElementNode({ + tagName: tagName, + xpath: nodeData.xpath, + cssSelector: nodeData.cssSelector, + attributes: nodeData.attributes ?? {}, + children: [], + isVisible: nodeData.isVisible ?? false, + isInteractive: nodeData.isInteractive ?? false, + isTopElement: nodeData.isTopElement ?? false, + highlightIndex: nodeData.highlightIndex, + viewportCoordinates: viewportCoordinates ?? undefined, + pageCoordinates: pageCoordinates ?? undefined, + viewportInfo: viewportInfo ?? undefined, + shadowRoot: nodeData.shadowRoot ?? false, + parent, + }); + + const children: DOMBaseNode[] = []; + for (const child of nodeData.children || []) { + if (child !== null) { + const childNode = parseNode(child, elementNode); + if (childNode !== null) { + children.push(childNode); + } + } + } + + elementNode.children = children; + return elementNode; +} + +export async function removeHighlights(page: Page): Promise { + try { + await page.evaluate(() => { + // Remove the highlight container and all its contents + const container = document.getElementById( + 'playwright-highlight-container', + ); + if (container) { + container.remove(); + } + + // Remove highlight attributes from elements + const highlightedElements = document.querySelectorAll( + '[browser-user-highlight-id^="playwright-highlight-"]', + ); + for (const el of Array.from(highlightedElements)) { + el.removeAttribute('browser-user-highlight-id'); + } + }); + } catch (error) { + logger.error('Failed to remove highlights:', error); + } +} diff --git a/packages/agent-infra/browser-use/src/dom/views.ts b/packages/agent-infra/browser-use/src/dom/views.ts new file mode 100644 index 000000000..728dc8e02 --- /dev/null +++ b/packages/agent-infra/browser-use/src/dom/views.ts @@ -0,0 +1,392 @@ +/** + * The following code is modified based on + * https://github.com/nanobrowser/nanobrowser/blob/master/chrome-extension/src/background/dom/views.ts + * + * Apache-2.0 License + * Copyright (c) 2024 alexchenzl + * https://github.com/nanobrowser/nanobrowser/blob/master/LICENSE + */ +import type { ViewportInfo, CoordinateSet } from './history/views'; + +export abstract class DOMBaseNode { + isVisible: boolean; + parent?: DOMElementNode | null; + + constructor(isVisible: boolean, parent?: DOMElementNode | null) { + this.isVisible = isVisible; + // Use None as default and set parent later to avoid circular reference issues + this.parent = parent; + } +} + +export class DOMTextNode extends DOMBaseNode { + type = 'TEXT_NODE' as const; + text: string; + + constructor( + text: string, + isVisible: boolean, + parent?: DOMElementNode | null, + ) { + super(isVisible, parent); + this.text = text; + } + + hasParentWithHighlightIndex(): boolean { + let current = this.parent; + while (current != null) { + if (current.highlightIndex !== undefined) { + return true; + } + current = current.parent; + } + return false; + } +} + +export class DOMElementNode extends DOMBaseNode { + /** + * xpath: the xpath of the element from the last root node (shadow root or iframe OR document if no shadow root or iframe). + * To properly reference the element we need to recursively switch the root node until we find the element (work you way up the tree with `.parent`) + */ + tagName: string | null; + xpath: string | null; + cssSelector: string | null; + attributes: Record; + children: DOMBaseNode[]; + isInteractive: boolean; + isTopElement: boolean; + shadowRoot: boolean; + highlightIndex?: number; + viewportCoordinates?: CoordinateSet; + pageCoordinates?: CoordinateSet; + viewportInfo?: ViewportInfo; + + constructor(params: { + tagName: string | null; + xpath: string | null; + cssSelector: string | null; + attributes: Record; + children: DOMBaseNode[]; + isVisible: boolean; + isInteractive?: boolean; + isTopElement?: boolean; + shadowRoot?: boolean; + highlightIndex?: number; + viewportCoordinates?: CoordinateSet; + pageCoordinates?: CoordinateSet; + viewportInfo?: ViewportInfo; + parent?: DOMElementNode | null; + }) { + super(params.isVisible, params.parent); + this.tagName = params.tagName; + this.xpath = params.xpath; + this.cssSelector = params.cssSelector; + this.attributes = params.attributes; + this.children = params.children; + this.isInteractive = params.isInteractive ?? false; + this.isTopElement = params.isTopElement ?? false; + this.shadowRoot = params.shadowRoot ?? false; + this.highlightIndex = params.highlightIndex; + this.viewportCoordinates = params.viewportCoordinates; + this.pageCoordinates = params.pageCoordinates; + this.viewportInfo = params.viewportInfo; + } + + getAllTextTillNextClickableElement(maxDepth = -1): string { + const textParts: string[] = []; + + const collectText = (node: DOMBaseNode, currentDepth: number): void => { + if (maxDepth !== -1 && currentDepth > maxDepth) { + return; + } + + // Skip this branch if we hit a highlighted element (except for the current node) + if ( + node instanceof DOMElementNode && + node !== this && + node.highlightIndex !== undefined + ) { + return; + } + + if (node instanceof DOMTextNode) { + textParts.push(node.text); + } else if (node instanceof DOMElementNode) { + for (const child of node.children) { + collectText(child, currentDepth + 1); + } + } + }; + + collectText(this, 0); + return textParts.join('\n').trim(); + } + + clickableElementsToString(includeAttributes: string[] = []): string { + const formattedText: string[] = []; + + const processNode = (node: DOMBaseNode, depth: number): void => { + if (node instanceof DOMElementNode) { + // Add element with highlight_index + if (node.highlightIndex !== undefined) { + let attributesStr = ''; + if (includeAttributes.length) { + attributesStr = ` ${includeAttributes + .map((key) => + node.attributes[key] ? `${key}="${node.attributes[key]}"` : '', + ) + .filter(Boolean) + .join(' ')}`; + } + + formattedText.push( + `[${node.highlightIndex}]<${node.tagName}${attributesStr}>${node.getAllTextTillNextClickableElement()}`, + ); + } + // Process children regardless + for (const child of node.children) { + processNode(child, depth + 1); + } + } else if (node instanceof DOMTextNode) { + // Add text node only if it doesn't have a highlighted parent + if (!node.hasParentWithHighlightIndex()) { + formattedText.push(`[]${node.text}`); + } + } + }; + + processNode(this, 0); + return formattedText.join('\n'); + } + + getFileUploadElement(checkSiblings = true): DOMElementNode | null { + // biome-ignore lint/complexity/useLiteralKeys: + if (this.tagName === 'input' && this.attributes['type'] === 'file') { + return this; + } + + for (const child of this.children) { + if (child instanceof DOMElementNode) { + const result = child.getFileUploadElement(false); + if (result) return result; + } + } + + if (checkSiblings && this.parent) { + for (const sibling of this.parent.children) { + if (sibling !== this && sibling instanceof DOMElementNode) { + const result = sibling.getFileUploadElement(false); + if (result) return result; + } + } + } + + return null; + } + + getAdvancedCssSelector(): string { + return this.enhancedCssSelectorForElement(); + } + + convertSimpleXPathToCssSelector(xpath: string): string { + if (!xpath) { + return ''; + } + + // Remove leading slash if present + const cleanXpath = xpath.replace(/^\//, ''); + + // Split into parts + const parts = cleanXpath.split('/'); + const cssParts: string[] = []; + + for (const part of parts) { + if (!part) { + continue; + } + + // Handle index notation [n] + if (part.includes('[')) { + const bracketIndex = part.indexOf('['); + let basePart = part.substring(0, bracketIndex); + const indexPart = part.substring(bracketIndex); + + // Handle multiple indices + const indices = indexPart + .split(']') + .slice(0, -1) + .map((i) => i.replace('[', '')); + + for (const idx of indices) { + // Handle numeric indices + if (/^\d+$/.test(idx)) { + try { + const index = Number.parseInt(idx, 10) - 1; + basePart += `:nth-of-type(${index + 1})`; + } catch (error) { + // continue + } + } + // Handle last() function + else if (idx === 'last()') { + basePart += ':last-of-type'; + } + // Handle position() functions + else if (idx.includes('position()')) { + if (idx.includes('>1')) { + basePart += ':nth-of-type(n+2)'; + } + } + } + + cssParts.push(basePart); + } else { + cssParts.push(part); + } + } + + const baseSelector = cssParts.join(' > '); + return baseSelector; + } + + enhancedCssSelectorForElement(includeDynamicAttributes = true): string { + try { + if (!this.xpath) { + return ''; + } + + // Get base selector from XPath + let cssSelector = this.convertSimpleXPathToCssSelector(this.xpath); + + // Handle class attributes + // biome-ignore lint/complexity/useLiteralKeys: + if (this.attributes['class'] && includeDynamicAttributes) { + // Define a regex pattern for valid class names in CSS + const validClassNamePattern = /^[a-zA-Z_][a-zA-Z0-9_-]*$/; + + // Iterate through the class attribute values + // biome-ignore lint/complexity/useLiteralKeys: s + const classes = this.attributes['class'].split(/\s+/); + for (const className of classes) { + // Skip empty class names + if (!className.trim()) { + continue; + } + + // Check if the class name is valid + if (validClassNamePattern.test(className)) { + // Append the valid class name to the CSS selector + cssSelector += `.${className}`; + } + } + } + + // Expanded set of safe attributes that are stable and useful for selection + const SAFE_ATTRIBUTES = new Set([ + // Data attributes (if they're stable in your application) + 'id', + // Standard HTML attributes + 'name', + 'type', + 'value', + 'placeholder', + // Accessibility attributes + 'aria-label', + 'aria-labelledby', + 'aria-describedby', + 'role', + // Common form attributes + 'for', + 'autocomplete', + 'required', + 'readonly', + // Media attributes + 'alt', + 'title', + 'src', + // Custom stable attributes + 'href', + 'target', + ]); + + // Handle other attributes + if (includeDynamicAttributes) { + SAFE_ATTRIBUTES.add('data-id'); + SAFE_ATTRIBUTES.add('data-qa'); + SAFE_ATTRIBUTES.add('data-cy'); + SAFE_ATTRIBUTES.add('data-testid'); + } + + // Handle other attributes + for (const [attribute, value] of Object.entries(this.attributes)) { + if (attribute === 'class') { + continue; + } + + // Skip invalid attribute names + if (!attribute.trim()) { + continue; + } + + if (!SAFE_ATTRIBUTES.has(attribute)) { + continue; + } + + // Escape special characters in attribute names + const safeAttribute = attribute.replace(':', '\\:'); + + // Handle different value cases + if (value === '') { + cssSelector += `[${safeAttribute}]`; + } else if (/["'<>`\n\r\t]/.test(value)) { + // Use contains for values with special characters + // Regex-substitute any whitespace with a single space, then trim + const collapsedValue = value.replace(/\s+/g, ' ').trim(); + // Escape embedded double-quotes + const safeValue = collapsedValue.replace(/"/g, '\\"'); + cssSelector += `[${safeAttribute}*="${safeValue}"]`; + } else { + cssSelector += `[${safeAttribute}="${value}"]`; + } + } + + return cssSelector; + } catch (error) { + // Fallback to a more basic selector if something goes wrong + const tagName = this.tagName || '*'; + return `${tagName}[highlight-index='${this.highlightIndex}']`; + } + } +} + +export interface DOMState { + elementTree: DOMElementNode; + selectorMap: Map; +} + +// biome-ignore lint/suspicious/noExplicitAny: +export function domElementNodeToDict(elementTree: DOMBaseNode): any { + // biome-ignore lint/suspicious/noExplicitAny: + function nodeToDict(node: DOMBaseNode): any { + if (node instanceof DOMTextNode) { + return { + type: 'text', + text: node.text, + }; + } + if (node instanceof DOMElementNode) { + return { + type: 'element', + tagName: node.tagName, // Note: using camelCase to match TypeScript conventions + attributes: node.attributes, + highlightIndex: node.highlightIndex, + children: node.children.map((child) => nodeToDict(child)), + }; + } + + return {}; + } + + return nodeToDict(elementTree); +} diff --git a/packages/agent-infra/browser-use/src/index.ts b/packages/agent-infra/browser-use/src/index.ts new file mode 100644 index 000000000..fc340d370 --- /dev/null +++ b/packages/agent-infra/browser-use/src/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +export { Agent } from './agent/service'; +export { getBuildDomTreeScript } from './utils'; +export { createSelectorMap, parseNode, removeHighlights } from './dom/service'; +export type { RawDomTreeNode } from './dom/raw_types'; +export { DOMElementNode } from './dom/views'; diff --git a/packages/agent-infra/browser-use/src/typings.d.ts b/packages/agent-infra/browser-use/src/typings.d.ts new file mode 100644 index 000000000..bc115dbc7 --- /dev/null +++ b/packages/agent-infra/browser-use/src/typings.d.ts @@ -0,0 +1 @@ +declare const BUILD_DOM_TREE_SCRIPT: string | undefined; diff --git a/packages/agent-infra/browser-use/src/utils.ts b/packages/agent-infra/browser-use/src/utils.ts new file mode 100644 index 000000000..52be43101 --- /dev/null +++ b/packages/agent-infra/browser-use/src/utils.ts @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import fs from 'fs'; +import path from 'path'; + +export function sleep(seconds: number) { + return new Promise((resolve) => setTimeout(resolve, seconds * 1000)); +} + +export function createLogger(name: string) { + const prefix = `[${name}]`; + return { + info: (...args: any[]) => console.log(prefix, ...args), + error: (...args: any[]) => console.error(prefix, ...args), + warning: (...args: any[]) => console.warn(prefix, ...args), + debug: (...args: any[]) => console.debug(prefix, ...args), + }; +} + +/** + * Checks if an error is related to API authentication + * + * @param error - The error to check + * @returns boolean indicating if it's an authentication error + */ +export function isAuthenticationError(error: unknown): boolean { + if (!(error instanceof Error)) return false; + + // Get the error message + const errorMessage = error.message || ''; + + // Get error name - sometimes error.name just returns "Error" for custom errors + let errorName = error.name || ''; + + // Try to extract the constructor name, which often contains the actual error type + // This works better than error.name for many custom errors + const constructorName = error.constructor?.name; + if (constructorName && constructorName !== 'Error') { + errorName = constructorName; + } + + // Check if the error name indicates an authentication error + if (errorName === 'AuthenticationError') { + return true; + } + + // Fallback: check the message for authentication-related indicators + return ( + errorMessage.toLowerCase().includes('authentication') || + errorMessage.includes('401') || + errorMessage.toLowerCase().includes('api key') + ); +} + +export const getBuildDomTreeScript = () => { + const injectedScript = BUILD_DOM_TREE_SCRIPT; + + if (injectedScript) { + return injectedScript; + } + + return fs.readFileSync( + path.join(__dirname, '../assets/buildDomTree.js'), + 'utf8', + ); +}; diff --git a/packages/agent-infra/browser-use/test/azureBedrockChat.ts b/packages/agent-infra/browser-use/test/azureBedrockChat.ts new file mode 100644 index 000000000..311f65576 --- /dev/null +++ b/packages/agent-infra/browser-use/test/azureBedrockChat.ts @@ -0,0 +1,419 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { + _convertMessagesToOpenAIParams, + AzureChatOpenAI, + messageToOpenAIRole, +} from '@langchain/openai'; +import { BedrockToolChoice, ChatBedrockConverseToolType } from '@langchain/aws'; +import type { Tool as BedrockTool } from '@aws-sdk/client-bedrock-runtime'; +import { + BaseLanguageModelInput, + isOpenAITool, + StructuredOutputMethodOptions, + ToolDefinition, +} from '@langchain/core/language_models/base'; +import type { ToolConfiguration } from '@aws-sdk/client-bedrock-runtime'; +import { zodToJsonSchema } from 'zod-to-json-schema'; +import { isLangChainTool } from '@langchain/core/utils/function_calling'; +import { + AIMessage, + AIMessageChunk, + BaseMessage, + BaseMessageFields, + isAIMessage, + ToolMessage, + UsageMetadata, +} from '@langchain/core/messages'; +import { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager'; +import { + ChatGeneration, + ChatGenerationChunk, + ChatResult, +} from '@langchain/core/outputs'; +import { NewTokenIndices } from '@langchain/core/callbacks/base'; +import { ToolCall } from '@langchain/core/messages/tool'; +import { convertLangChainToolCallToOpenAI } from '@langchain/core/output_parsers/openai_tools'; +import { + Runnable, + RunnableLambda, + RunnablePassthrough, + RunnableSequence, +} from '@langchain/core/runnables'; +import { z } from 'zod'; +import { isZodSchema } from '@langchain/core/utils/types'; + +type BedrockConverseToolChoice = 'any' | 'auto' | string | BedrockToolChoice; + +function isBedrockTool(tool: unknown): tool is BedrockTool { + if (typeof tool === 'object' && tool && 'toolSpec' in tool) { + return true; + } + return false; +} + +function convertToConverseTools( + tools: ChatBedrockConverseToolType[], +): BedrockTool[] { + if (tools.every(isOpenAITool)) { + return tools.map((tool) => ({ + toolSpec: { + name: tool.function.name, + description: tool.function.description, + inputSchema: { + json: tool.function.parameters as any, + }, + }, + })); + } else if (tools.every(isLangChainTool)) { + return tools.map((tool) => ({ + toolSpec: { + name: tool.name, + description: tool.description, + inputSchema: { + json: zodToJsonSchema(tool.schema) as any, + }, + }, + })); + } else if (tools.every(isBedrockTool)) { + return tools; + } + + throw new Error( + 'Invalid tools passed. Must be an array of StructuredToolInterface, ToolDefinition, or BedrockTool.', + ); +} + +function convertToBedrockToolChoice( + toolChoice: BedrockConverseToolChoice, + tools: BedrockTool[], + fields: { + model: string; + supportsToolChoiceValues?: Array<'auto' | 'any' | 'tool'>; + }, +): BedrockToolChoice { + const supportsToolChoiceValues = fields.supportsToolChoiceValues ?? []; + + let bedrockToolChoice: BedrockToolChoice; + if (typeof toolChoice === 'string') { + switch (toolChoice) { + case 'any': + bedrockToolChoice = { + any: {}, + }; + break; + case 'auto': + bedrockToolChoice = { + auto: {}, + }; + break; + default: { + const foundTool = tools.find( + (tool) => tool.toolSpec?.name === toolChoice, + ); + if (!foundTool) { + throw new Error( + `Tool with name ${toolChoice} not found in tools list.`, + ); + } + bedrockToolChoice = { + tool: { + name: toolChoice, + }, + }; + } + } + } else { + bedrockToolChoice = toolChoice; + } + + const toolChoiceType = Object.keys(bedrockToolChoice)[0] as + | 'auto' + | 'any' + | 'tool'; + if (!supportsToolChoiceValues.includes(toolChoiceType)) { + let supportedTxt = ''; + if (supportsToolChoiceValues.length) { + supportedTxt = + `Model ${fields.model} does not currently support 'tool_choice' ` + + `of type ${toolChoiceType}. The following 'tool_choice' types ` + + `are supported: ${supportsToolChoiceValues.join(', ')}.`; + } else { + supportedTxt = `Model ${fields.model} does not currently support 'tool_choice'.`; + } + + throw new Error( + `${supportedTxt} Please see` + + 'https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ToolChoice.html' + + 'for the latest documentation on models that support tool choice.', + ); + } + + return bedrockToolChoice; +} + +export class AzureBedrockChat extends AzureChatOpenAI { + override async _generate( + messages: BaseMessage[], + options: this['ParsedCallOptions'], + runManager?: CallbackManagerForLLMRun, + ): Promise { + const usageMetadata = {} as UsageMetadata; + const params = this.invocationParams(options); + const messagesMapped: any[] = _convertMessagesToOpenAIParams( + messages, + this.model, + ); + if (params.stream) { + const stream = this._streamResponseChunks(messages, options, runManager); + const finalChunks: Record = {}; + for await (const chunk of stream) { + chunk.message.response_metadata = { + ...chunk.generationInfo, + ...chunk.message.response_metadata, + }; + const index = + (chunk.generationInfo as NewTokenIndices)?.completion ?? 0; + if (finalChunks[index] === undefined) { + finalChunks[index] = chunk; + } else { + finalChunks[index] = finalChunks[index].concat(chunk); + } + } + const generations = Object.entries(finalChunks) + .sort(([aKey], [bKey]) => parseInt(aKey, 10) - parseInt(bKey, 10)) + .map(([_, value]) => value); + const { functions, function_call } = this.invocationParams(options); + // OpenAI does not support token usage report under stream mode, + // fallback to estimation. + // @ts-ignore + const promptTokenUsage = await this.getEstimatedTokenCountFromPrompt( + messages, + functions, + function_call, + ); + const completionTokenUsage = + // @ts-ignore + await this.getNumTokensFromGenerations(generations); + usageMetadata.input_tokens = promptTokenUsage; + usageMetadata.output_tokens = completionTokenUsage; + usageMetadata.total_tokens = promptTokenUsage + completionTokenUsage; + return { + generations, + llmOutput: { + estimatedTokenUsage: { + promptTokens: usageMetadata.input_tokens, + completionTokens: usageMetadata.output_tokens, + totalTokens: usageMetadata.total_tokens, + }, + }, + }; + } else { + let data; + const toolCalls: any[] = [ + ...messages.flatMap((m) => { + if (isAIMessage(m) && !!m.tool_calls?.length) { + return m.tool_calls.map((tc) => { + // @ts-ignore + if (tc.name && tc.description && tc.parameters) { + return { + type: 'function', + function: { + name: tc.name, + // @ts-ignore + description: tc.description, + // @ts-ignore + parameters: tc.parameters, + }, + }; + } + return null; + }); + } + return null; + }), + ...(options.tools ?? []), + ].filter(Boolean); + + // console.log('toolCallstoolCalls', JSON.stringify(toolCalls)); + // // console.log('paramsparamsparams', JSON.stringify(params)); + // console.log('messagesMapped', JSON.stringify(messagesMapped, null, 2)); + // console.log('options', options); + + if ( + options.response_format && + options.response_format.type === 'json_schema' + ) { + // const { + // name, + // description, + // schema, + // strict = true, + // ...restSchemaParams + // } = options.response_format.json_schema; + // const toolsWithSchema = [ + // ...toolCalls, + // { + // type: 'function' as const, + // function: { + // ...restSchemaParams, + // strict, + // name: name || 'extract', + // description: description || 'extract a json object from the text', + // parameters: schema, + // }, + // }, + // ]; + // console.log('toolsWithSchema', toolsWithSchema); + + const responseFormat = { + ...options.response_format, + // @ts-ignore + json_schema: { + strict: true, + ...options.response_format.json_schema, + schema: isZodSchema(options.response_format.json_schema.schema) + ? zodToJsonSchema(options.response_format.json_schema.schema) + : options.response_format.json_schema.schema, + }, + }; + + data = await this.completionWithRetry( + { + ...params, + stream: false, + tools: toolCalls, + // @ts-ignore + response_format: responseFormat, + messages: messagesMapped, + }, + { + signal: options?.signal, + ...options?.options, + }, + ); + + console.log( + 'typeof data.choices[0]?.message?.content', + typeof data.choices[0]?.message?.content, + ); + + // if (data.choices[0]?.message?.content) { + // console.log( + // 'data.choices[0]!.message.content', + // data.choices[0]!.message.content, + // ); + // try { + // data.choices[0]!.message.parsed = JSON.parse( + // data.choices[0]!.message.content, + // ); + // console.log( + // 'choices[0]!.messagechoices[0]!.parsed', + // data.choices[0]!.message.parsed, + // ); + // } catch (error) { + // console.error('Error parsing JSON:', error); + // } + // } + } else { + data = await this.completionWithRetry( + { + ...params, + stream: false, + tools: toolCalls, + messages: messagesMapped, + }, + { + signal: options?.signal, + ...options?.options, + }, + ); + } + const { + completion_tokens: completionTokens, + prompt_tokens: promptTokens, + total_tokens: totalTokens, + prompt_tokens_details: promptTokensDetails, + completion_tokens_details: completionTokensDetails, + } = data?.usage ?? {}; + if (completionTokens) { + usageMetadata.output_tokens = + (usageMetadata.output_tokens ?? 0) + completionTokens; + } + if (promptTokens) { + usageMetadata.input_tokens = + (usageMetadata.input_tokens ?? 0) + promptTokens; + } + if (totalTokens) { + usageMetadata.total_tokens = + (usageMetadata.total_tokens ?? 0) + totalTokens; + } + if ( + promptTokensDetails?.audio_tokens !== null || + promptTokensDetails?.cached_tokens !== null + ) { + usageMetadata.input_token_details = { + ...(promptTokensDetails?.audio_tokens !== null && { + audio: promptTokensDetails?.audio_tokens, + }), + ...(promptTokensDetails?.cached_tokens !== null && { + cache_read: promptTokensDetails?.cached_tokens, + }), + }; + } + if ( + completionTokensDetails?.audio_tokens !== null || + completionTokensDetails?.reasoning_tokens !== null + ) { + usageMetadata.output_token_details = { + ...(completionTokensDetails?.audio_tokens !== null && { + audio: completionTokensDetails?.audio_tokens, + }), + ...(completionTokensDetails?.reasoning_tokens !== null && { + reasoning: completionTokensDetails?.reasoning_tokens, + }), + }; + } + const generations: ChatGeneration[] = []; + for (const part of data?.choices ?? []) { + const text = part.message?.content ?? ''; + const generation: ChatGeneration = { + text, + message: this._convertOpenAIChatCompletionMessageToBaseMessage( + part.message ?? { role: 'assistant' }, + data, + ), + }; + generation.generationInfo = { + ...(part.finish_reason ? { finish_reason: part.finish_reason } : {}), + ...(part.logprobs ? { logprobs: part.logprobs } : {}), + }; + if (isAIMessage(generation.message)) { + generation.message.usage_metadata = usageMetadata; + } + // Fields are not serialized unless passed to the constructor + // Doing this ensures all fields on the message are serialized + generation.message = new AIMessage( + Object.fromEntries( + Object.entries(generation.message).filter( + ([key]) => !key.startsWith('lc_'), + ), + ) as BaseMessageFields, + ); + generations.push(generation); + } + return { + generations, + llmOutput: { + tokenUsage: { + promptTokens: usageMetadata.input_tokens, + completionTokens: usageMetadata.output_tokens, + totalTokens: usageMetadata.total_tokens, + }, + }, + }; + } + } +} diff --git a/packages/agent-infra/browser-use/test/test.ts b/packages/agent-infra/browser-use/test/test.ts new file mode 100644 index 000000000..456903549 --- /dev/null +++ b/packages/agent-infra/browser-use/test/test.ts @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { Agent } from '../src/agent/service'; +import { AzureBedrockChat } from './azureBedrockChat'; + +async function main() { + const agent = new Agent( + new AzureBedrockChat({ + azureOpenAIEndpoint: process.env.AZURE_OPENAI_ENDPOINT, + azureOpenAIApiVersion: process.env.AZURE_OPENAI_API_VERSION, + model: process.env.AZURE_OPENAI_MODEL, + azureOpenAIApiDeploymentName: process.env.AZURE_OPENAI_MODEL, + azureOpenAIApiKey: process.env.AZURE_OPENAI_API_KEY, + temperature: 0.1, + }), + { + registerNewStepCallback: async (event) => { + console.log('new step', event); + }, + }, + ); + + await agent.run( + 'Open https://news.ycombinator.com/ then find the latest post.', + ); +} + +main(); diff --git a/packages/agent-infra/browser-use/tsconfig.json b/packages/agent-infra/browser-use/tsconfig.json new file mode 100644 index 000000000..f39494ea7 --- /dev/null +++ b/packages/agent-infra/browser-use/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "commonjs", + "moduleResolution": "node", + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "outDir": "./dist", + "strict": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "isolatedModules": true, + "skipLibCheck": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/agent-infra/browser-use/vitest.e2e.config.ts b/packages/agent-infra/browser-use/vitest.e2e.config.ts new file mode 100644 index 000000000..73426cb36 --- /dev/null +++ b/packages/agent-infra/browser-use/vitest.e2e.config.ts @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { defineConfig } from 'vitest/config'; +import { resolve } from 'path'; + +export default defineConfig({ + test: { + include: ['**/__tests__/**/*.e2e.{test,spec}.ts'], + testTimeout: 30000, // Increased from default + hookTimeout: 30000, // Increased from default + globals: true, + environment: 'node', + }, + resolve: { + alias: { + '@': resolve(__dirname, './src'), + }, + }, +}); diff --git a/packages/agent-infra/mcp-client/.gitignore b/packages/agent-infra/mcp-client/.gitignore new file mode 100644 index 000000000..7f106e9fa --- /dev/null +++ b/packages/agent-infra/mcp-client/.gitignore @@ -0,0 +1,4 @@ +node_modules/ +build/ +*.log +.env* \ No newline at end of file diff --git a/packages/agent-infra/mcp-client/README.md b/packages/agent-infra/mcp-client/README.md new file mode 100644 index 000000000..8cb38e623 --- /dev/null +++ b/packages/agent-infra/mcp-client/README.md @@ -0,0 +1,8 @@ +## MCP Client + +## Credits + +Thanks to: + +- [kangfenmao](https://github.com/kangfenmao) for creating a great AI chatbot product [Cherry Studio](https://github.com/CherryHQ/cherry-studio) from which we draw a lot of inspiration for browser detection functionality. +- The [@modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/typescript-sdk) project which helps us develop and use the agent tools better. diff --git a/packages/agent-infra/mcp-client/package.json b/packages/agent-infra/mcp-client/package.json new file mode 100644 index 000000000..a5639476c --- /dev/null +++ b/packages/agent-infra/mcp-client/package.json @@ -0,0 +1,41 @@ +{ + "name": "@agent-infra/mcp-client", + "version": "0.4.2", + "description": "An MCP Client to run servers for Electron apps, support same-process approaching", + "private": false, + "type": "module", + "types": "./build/index.d.ts", + "main": "./build/index.js", + "bin": { + "mcp-client": "./build/index.js" + }, + "files": [ + "build" + ], + "scripts": { + "dev": "tsx src/test.ts", + "clean": "rm -rf build", + "build": "tsc", + "prepare": "npm run build", + "watch": "npm run build && tsc --watch", + "test": "vitest run", + "test:watch": "vitest --watch", + "test:integration": "vitest tests/integration" + }, + "dependencies": { + "@modelcontextprotocol/sdk": "^1.6.1", + "zod": "^3.23.8", + "uuid": "^11.1.0" + }, + "devDependencies": { + "tsx": "^4.19.3", + "vitest": "^3.0.7", + "@types/uuid": "^10.0.0", + "@agent-infra/mcp-server-filesystem": "workspace:*", + "@agent-infra/mcp-server-commands": "workspace:*", + "@agent-infra/mcp-server-browser": "workspace:*", + "@types/node": "^20.11.24", + "typescript": "^5.7.3", + "openai": "^4.86.2" + } +} diff --git a/packages/agent-infra/mcp-client/src/index.ts b/packages/agent-infra/mcp-client/src/index.ts new file mode 100644 index 000000000..689cec78b --- /dev/null +++ b/packages/agent-infra/mcp-client/src/index.ts @@ -0,0 +1,444 @@ +/** + * The following code is modified based on + * https://github.com/CherryHQ/cherry-studio/blob/main/src/main/services/MCPService.ts + * + * Apache-2.0 License + * Copyright (c) 2024 Cherry Studio + * https://github.com/CherryHQ/cherry-studio/blob/main/LICENSE + */ +import { EventEmitter } from 'node:events'; +import { v4 as uuidv4 } from 'uuid'; +import { type Client } from '@modelcontextprotocol/sdk/client/index.js'; +import { type StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js'; +import { + type Tool, + CallToolResultSchema, + CompatibilityCallToolResultSchema, +} from '@modelcontextprotocol/sdk/types.js'; +import { z } from 'zod'; + +export interface MCPTool extends Tool { + id: string; + serverName: string; +} + +export type MCPServer = { + name: ServerNames; + status: 'activate' | 'error'; + description?: string; + env?: Record; + /** local mode, same as function call */ + localClient?: Pick; + /** Stdio server */ + command?: string; + args?: string[]; +}; + +export class MCPClient< + ServerNames extends string = string, +> extends EventEmitter { + private activeServers: Map< + ServerNames, + { + client: Client; + server: MCPServer; + } + > = new Map(); + private clients: { + [key in ServerNames]?: Client; + } = {}; + private Client!: typeof Client; + private Transport!: typeof StdioClientTransport; + private initialized = false; + private initPromise: Promise | null = null; + private store: Map = new Map(); + private isDebug: boolean; + + constructor( + servers: Array & { name: ServerNames }>, + options?: { isDebug?: boolean }, + ) { + super(); + this.isDebug = options?.isDebug || process.env.DEBUG === 'mcp' || false; + this.store.set( + 'mcp.servers', + servers.map((s) => ({ + ...s, + status: 'activate', + })), + ); + + this.init().catch((err) => { + this.log('error', '[MCP] Failed to initialize MCP service:', err); + }); + } + + private log(level: 'info' | 'error' | 'warn' | 'debug', ...args: any[]) { + if (!this.isDebug && level !== 'error') return; + console[level](...args); + } + + private getServersFromStore() { + return (this.store.get('mcp.servers') || []) as MCPServer[]; + } + + async init() { + if (this.initialized) return; + + if (this.initPromise) { + return this.initPromise; + } + + this.initPromise = (async () => { + try { + this.log('info', '[MCP] Starting initialization'); + this.Client = await this.importClient(); + this.Transport = await this.importStdioClientTransport(); + + this.initialized = true; + + await this.load(this.getServersFromStore()); + this.log('info', '[MCP] Initialization completed successfully'); + } catch (err) { + this.initialized = false; + this.log('error', '[MCP] Failed to initialize:', err); + throw err; + } finally { + this.initPromise = null; + } + })(); + + return this.initPromise; + } + + private async importClient() { + try { + const { Client } = await import( + '@modelcontextprotocol/sdk/client/index.js' + ); + return Client; + } catch (err) { + console.error('[MCP] Failed to import Client:', err); + throw err; + } + } + + private async importStdioClientTransport() { + try { + const { StdioClientTransport } = await import( + '@modelcontextprotocol/sdk/client/stdio.js' + ); + return StdioClientTransport; + } catch (err) { + console.error('[MCP] Failed to import Transport:', err); + throw err; + } + } + + private async ensureInitialized() { + if (!this.initialized) { + this.log('debug', '[MCP] Ensuring initialization'); + await this.init(); + } + } + + async activate(server: MCPServer): Promise { + await this.ensureInitialized(); + try { + const { name, command, localClient, args, env } = server; + + if (this.clients[name]) { + this.log('info', `[MCP] Server ${name} is already running`); + return; + } + + if (!command && localClient) { + // @ts-ignore + this.clients[name] = localClient; + // @ts-ignore + this.activeServers.set(name, { client: localClient, server }); + + this.log('info', `[MCP] Server ${name} started successfully`); + this.emit('server-started', { name }); + return; + } + + let cmd: string = command!; + if (process.platform === 'win32') { + if (command === 'npx') { + cmd = `${command}.cmd`; + } else if (command === 'node') { + cmd = `${command}.exe`; + } + } + + const mergedEnv = { + ...env, + PATH: process.env.PATH, + }; + + const client = new this.Client( + { + name: name, + version: '1.0.0', + }, + { + capabilities: {}, + }, + ); + + const transport = new this.Transport({ + command: cmd, + args, + stderr: process.platform === 'win32' ? 'pipe' : 'inherit', + env: mergedEnv as Record, + }); + + await client.connect(transport); + this.clients[name] = client; + this.activeServers.set(name, { client, server }); + + this.log('info', `[MCP] Server ${name} started successfully`); + this.emit('server-started', { name }); + } catch (error) { + this.log('error', '[MCP] Error activating server:', error); + throw error; + } + } + + async load(servers: MCPServer[]): Promise { + this.log('info', `[MCP] Loading ${servers.length} servers`); + + const activeServers = servers.filter( + (server) => server.status === 'activate', + ); + + if (activeServers.length === 0) { + this.log('info', '[MCP] No active servers to load'); + return; + } + + for (const server of activeServers) { + this.log('info', `[MCP] Activating server: ${server.name}`); + try { + await this.activate(server); + this.log('info', `[MCP] Successfully activated server: ${server.name}`); + } catch (error) { + this.log( + 'error', + `[MCP] Failed to activate server ${server.name}:`, + error, + ); + this.emit('server-error', { name: server.name, error }); + } + } + + this.log( + 'info', + `[MCP] Loaded and activated ${Object.keys(this.clients).length} servers`, + ); + } + + public async listAvailableServices(): Promise[]> { + await this.ensureInitialized(); + return this.getServersFromStore(); + } + + public async addServer(server: MCPServer): Promise { + await this.ensureInitialized(); + try { + const servers = this.getServersFromStore(); + if (servers.some((s) => s.name === server.name)) { + throw new Error(`Server with name ${server.name} already exists`); + } + + servers.push(server); + this.store.set('mcp.servers', servers); + + if (server.status === 'activate') { + await this.activate(server); + } + } catch (error) { + console.error('Failed to add MCP server:', error); + throw error; + } + } + + public async deactivate(name: ServerNames): Promise { + await this.ensureInitialized(); + try { + if (this.clients[name]) { + this.log('info', `[MCP] Stopping server: ${name}`); + await this.clients[name].close(); + delete this.clients[name]; + this.activeServers.delete(name); + this.emit('server-stopped', { name }); + } else { + this.log('warn', `[MCP] Server ${name} is not running`); + } + } catch (error) { + this.log('error', '[MCP] Error deactivating server:', error); + throw error; + } + } + + public async updateServer(server: MCPServer): Promise { + await this.ensureInitialized(); + try { + const servers = this.getServersFromStore(); + const index = servers.findIndex((s) => s.name === server.name); + + if (index === -1) { + throw new Error(`Server ${server.name} not found`); + } + + const wasActive = servers[index].status === 'activate'; + if (wasActive && !(server.status === 'activate')) { + await this.deactivate(server.name as ServerNames); + } else if (!wasActive && server.status === 'activate') { + await this.activate(server); + } + + servers[index] = server; + this.store.set('mcp.servers', servers); + } catch (error) { + this.log('error', 'Failed to update MCP server:', error); + throw error; + } + } + + public async deleteServer(serverName: ServerNames): Promise { + await this.ensureInitialized(); + try { + if (this.clients[serverName]) { + await this.deactivate(serverName); + } + + const servers = this.getServersFromStore(); + const filteredServers = servers.filter((s) => s.name !== serverName); + this.store.set('mcp.servers', filteredServers); + } catch (error) { + this.log('error', 'Failed to delete MCP server:', error); + throw error; + } + } + + public async setServerActive(params: { + name: ServerNames; + isActive: boolean; + }): Promise { + await this.ensureInitialized(); + try { + const { name, isActive } = params; + const servers = this.getServersFromStore(); + const server = servers.find((s) => s.name === name); + + if (!server) { + throw new Error(`Server ${name} not found`); + } + + server.status = isActive ? 'activate' : 'error'; + this.store.set('mcp.servers', servers); + + if (isActive) { + await this.activate(server); + } else { + await this.deactivate(name); + } + } catch (error) { + this.log('error', 'Failed to set MCP server active status:', error); + throw error; + } + } + + public async listTools(serverName?: ServerNames): Promise { + await this.ensureInitialized(); + try { + if (serverName) { + if (!this.clients[serverName]) { + throw new Error(`MCP Client ${serverName} not found`); + } + const { tools } = await this.clients[serverName].listTools(); + return tools.map((tool: Tool) => { + tool.serverName = serverName; + tool.id = 'f' + uuidv4().replace(/-/g, ''); + return tool as MCPTool; + }); + } else { + let allTools: MCPTool[] = []; + for (const clientName in this.clients) { + try { + this.log('info', `[MCP] Listing tools for ${clientName}`); + + const { tools } = await this.clients[clientName]!.listTools(); + + this.log('info', `[MCP] Tools for ${clientName}:`, tools); + allTools = allTools.concat( + tools.map((tool: Tool) => { + tool.serverName = clientName; + tool.id = 'f' + uuidv4().replace(/-/g, ''); + return tool as MCPTool; + }), + ); + } catch (error) { + this.log( + 'error', + `[MCP] Error listing tools for ${clientName}:`, + error, + ); + } + } + this.log('info', `[MCP] Total tools listed: ${allTools.length}`); + return allTools; + } + } catch (error) { + this.log('error', '[MCP] Error listing tools:', error); + return []; + } + } + + public async callTool(params: { + client: ServerNames; + name: string; + args: any; + }): Promise> { + await this.ensureInitialized(); + try { + const { client, name, args } = params; + if (!this.clients[client]) { + throw new Error(`MCP Client ${client} not found`); + } + + this.log('info', '[MCP] Calling:', client, name, args); + const result = await this.clients[client].callTool({ + name, + arguments: args, + }); + this.log('info', '[MCP] Call Tool Result:', result); + return result; + } catch (error) { + this.log( + 'error', + `[MCP] Error calling tool ${params.name} on ${params.client}:`, + error, + ); + throw error; + } + } + + public async cleanup(): Promise { + try { + for (const name in this.clients) { + await this.deactivate(name as ServerNames).catch((err) => { + this.log('error', `[MCP] Error during cleanup of ${name}:`, err); + }); + } + this.clients = {}; + this.activeServers.clear(); + this.log('info', '[MCP] All servers cleaned up'); + } catch (error) { + this.log('error', '[MCP] Failed to clean up servers:', error); + throw error; + } + } +} diff --git a/packages/agent-infra/mcp-client/src/test.ts b/packages/agent-infra/mcp-client/src/test.ts new file mode 100644 index 000000000..263be5aea --- /dev/null +++ b/packages/agent-infra/mcp-client/src/test.ts @@ -0,0 +1,293 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { AzureOpenAI } from 'openai'; +import { MCPClient, MCPTool } from './index.js'; +import { + ChatCompletionMessageParam, + ChatCompletionTool, +} from 'openai/resources/index.mjs'; +import { + client as mcpBrowserClient, + // setInitialBrowser, +} from '@agent-infra/mcp-server-browser'; +import { client as mcpCommandsClient } from '@agent-infra/mcp-server-commands'; +import { + client as mcpFilesystemClient, + setAllowedDirectories, +} from '@agent-infra/mcp-server-filesystem'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const currentDir = path.join(__dirname, '../'); +const PLANNING_SYSTEM_PROMPT = ` +You are an expert Planning Agent tasked with solving problems efficiently through structured plans. +Your job is: +1. Analyze requests to understand the task scope +2. Create a clear, actionable plan that makes meaningful progress with the \`planning\` tool +3. Execute steps using available tools as needed +4. Track progress and adapt plans when necessary +5. Use \`finish\` to conclude immediately when the task is complete + + +Available tools will vary by task but may include: +- \`planning\`: Create, update, and track plans (commands: create, update, mark_step, etc.) +- \`finish\`: End the task when complete +Break tasks into logical steps with clear outcomes. Avoid excessive detail or sub-steps. +Think about dependencies and verification methods. +Know when to conclude - don't continue thinking once objectives are met. +`; + +const NEXT_STEP_PROMPT = ` +Based on the current state, what's your next action? +Choose the most efficient path forward: +1. Is the plan sufficient, or does it need refinement? +2. Can you execute the next step immediately? +3. Is the task complete? If so, use \`finish\` right away. + +Be concise in your reasoning, then select the appropriate tool or action. +`; + +const supportedAttributes = [ + 'type', + 'nullable', + 'required', + // 'format', + 'description', + 'properties', + 'items', + 'enum', + 'anyOf', +]; +function filterPropertieAttributes(tool: MCPTool) { + const roperties = tool.inputSchema.properties; + const getSubMap = (obj: Record, keys: string[]) => { + return Object.fromEntries( + Object.entries(obj).filter(([key]) => keys.includes(key)), + ); + }; + + for (const [key, val] of Object.entries(roperties as any)) { + // @ts-ignore + roperties[key] = getSubMap(val as any, supportedAttributes); + } + return roperties; +} + +function mcpToolsToOpenAITools(mcpTools: MCPTool[]): Array { + return mcpTools.map((tool) => ({ + type: 'function', + function: { + name: tool.name, + description: tool.description, + parameters: { + type: 'object', + properties: filterPropertieAttributes(tool), + }, + }, + })); +} + +function mcpToolsToAnthropicTools(mcpTools: MCPTool[]): Array { + return mcpTools.map((tool) => { + const t = { + name: tool.id, + description: tool.description, + // @ts-ignore no check + input_schema: tool.inputSchema, + }; + return t; + }); +} + +function mcpToolsToAzureTools(mcpTools: MCPTool[]): Array { + return mcpTools.map((tool) => { + const t = { + type: 'function', + function: { + name: tool.name, + description: tool.description, + // @ts-ignore no check + parameters: tool.inputSchema, + }, + }; + return t; + }); +} + +function toolUseToMcpTool( + mcpTools: MCPTool[] | undefined, + toolUse: any, +): MCPTool | undefined { + if (!mcpTools) return undefined; + const tool = mcpTools.find((tool) => tool.name === toolUse.function.name); + if (!tool) { + return undefined; + } + // @ts-ignore ignore type as it it unknow + tool.inputSchema = JSON.parse(toolUse.function.arguments); + return tool; +} + +(async () => { + const client = new MCPClient([ + { + name: 'browser', + description: 'web browser tools', + localClient: mcpBrowserClient, + }, + { + name: 'filesystem', + description: 'filesystem tools', + localClient: mcpFilesystemClient, + }, + // { + // name: 'filesystem', + // command: 'npx', + // args: [ + // '-y', + // '@agent-infra/mcp-server-filesystem', + // path.join(__dirname, '../'), + // ], + // }, + { + name: 'commands', + description: 'commands tools', + localClient: mcpCommandsClient, + }, + // { + // name: 'browser', + // command: 'npx', + // args: ['-y', '@agent-infra/mcp-server-browser'], + // }, + ]); + + setAllowedDirectories([currentDir]); + + // setInitialBrowser(your_browser, your_page); + + const tools = await client.listTools(); + console.log('toolstools', tools); + + const openai = new AzureOpenAI({ + endpoint: process.env.AZURE_OPENAI_ENDPOINT, + apiVersion: process.env.AZURE_OPENAI_API_VERSION, + apiKey: process.env.AZURE_OPENAI_API_KEY, + }); + + const azureTools = mcpToolsToAzureTools(tools); + console.log('azureTools', azureTools); + + const messages: ChatCompletionMessageParam[] = [ + { + role: 'system', + content: PLANNING_SYSTEM_PROMPT, + }, + { + role: 'user', + content: `将 \"hello world\" 写入到文件 todo.md 中,用户当前目录是 ${currentDir}`, + }, + ]; + + const pcScreenshotName = 'pc_screenshot'; + + while (true) { + if (messages.length > 0) { + if (messages[messages.length - 1].role === 'tool') { + const screenshotResule = await client.callTool({ + client: 'browser', + name: 'browser_screenshot', + args: { + name: pcScreenshotName, + }, + }); + messages.push({ + role: 'user', + content: [ + ...((screenshotResule.content as any).map((item: any) => { + if (item.type === 'image') { + return { + type: 'image_url', + image_url: { + url: `data:image/png;base64,aaaa`, + }, + }; + } + return item; + }) || []), + { + type: 'text', + text: NEXT_STEP_PROMPT, + }, + ], + }); + } else if (messages[messages.length - 1].role === 'assistant') { + messages.push({ + role: 'user', + content: NEXT_STEP_PROMPT, + }); + } + } + + console.log('messages', JSON.stringify(messages, null, 4)); + + const response = await openai.chat.completions.create({ + model: process.env.AZURE_OPENAI_MODEL || '', + messages, + tools: azureTools, + tool_choice: 'auto', + max_tokens: 5120, + stream: false, + }); + + console.log('response.choices', response.choices); + + const choice = response.choices[0]; + if (!choice.message) continue; + + const responseMessage = response.choices[0].message; + messages.push({ + role: responseMessage.role, + content: responseMessage.content, + }); + + console.log('choice.message', choice.message.tool_calls); + + if (response.choices.length > 0) { + const toolResults = []; + for (const responseChoice of response.choices) { + for (const toolCall of responseChoice.message?.tool_calls || []) { + console.log( + `调用函数${toolCall.id}: ${toolCall.function.name}(${toolCall.function.arguments})`, + ); + const mcpTool = toolUseToMcpTool(tools, toolCall); + if (mcpTool) { + const result = await client.callTool({ + client: mcpTool?.serverName as 'commands' | 'browser', + name: mcpTool?.name, + args: mcpTool?.inputSchema, + }); + console.log('result', result); + const { content } = result as any; + console.log('content', content); + toolResults.push({ + name: mcpTool?.name, + role: 'tool' as const, + tool_call_id: toolCall.id, + content: JSON.stringify(content), + }); + } + } + } + + messages.push(...toolResults); + console.log('messages_after_tool_call', messages); + } + } + + await client.cleanup(); +})(); diff --git a/packages/agent-infra/mcp-client/tsconfig.json b/packages/agent-infra/mcp-client/tsconfig.json new file mode 100644 index 000000000..89e9bef7e --- /dev/null +++ b/packages/agent-infra/mcp-client/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "Node16", + "moduleResolution": "Node16", + "outDir": "./build", + "declaration": true, + "rootDir": "./src", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/packages/agent-infra/mcp-client/vitest.config.mts b/packages/agent-infra/mcp-client/vitest.config.mts new file mode 100644 index 000000000..9e1a00225 --- /dev/null +++ b/packages/agent-infra/mcp-client/vitest.config.mts @@ -0,0 +1,12 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + environment: 'node', + include: ['**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], + }, +}); diff --git a/packages/agent-infra/mcp-servers/browser/Dockerfile b/packages/agent-infra/mcp-servers/browser/Dockerfile new file mode 100644 index 000000000..418b14005 --- /dev/null +++ b/packages/agent-infra/mcp-servers/browser/Dockerfile @@ -0,0 +1,25 @@ +FROM node:22.12-alpine AS builder + +WORKDIR /app + +COPY src/filesystem /app +COPY tsconfig.json /tsconfig.json + +RUN --mount=type=cache,target=/root/.npm npm install + +RUN --mount=type=cache,target=/root/.npm-production npm ci --ignore-scripts --omit-dev + + +FROM node:22-alpine AS release + +WORKDIR /app + +COPY --from=builder /app/dist /app/dist +COPY --from=builder /app/package.json /app/package.json +COPY --from=builder /app/package-lock.json /app/package-lock.json + +ENV NODE_ENV=production + +RUN npm ci --ignore-scripts --omit-dev + +ENTRYPOINT ["node", "/app/dist/index.js"] \ No newline at end of file diff --git a/packages/agent-infra/mcp-servers/browser/README.md b/packages/agent-infra/mcp-servers/browser/README.md new file mode 100644 index 000000000..495a1ddd5 --- /dev/null +++ b/packages/agent-infra/mcp-servers/browser/README.md @@ -0,0 +1,4 @@ +# Browser Use MCP Server + +Node.js server implementing Model Context Protocol (MCP) for browser-use operations. + diff --git a/packages/agent-infra/mcp-servers/browser/index.ts b/packages/agent-infra/mcp-servers/browser/index.ts new file mode 100644 index 000000000..ead933b6d --- /dev/null +++ b/packages/agent-infra/mcp-servers/browser/index.ts @@ -0,0 +1,152 @@ +#!/usr/bin/env node +/** + * The following code is modified based on + * https://github.com/modelcontextprotocol/servers/blob/main/src/puppeteer/index.ts + * + * MIT License + * Copyright (c) 2024 Anthropic, PBC + * https://github.com/modelcontextprotocol/servers/blob/main/LICENSE + */ +import { Server } from '@modelcontextprotocol/sdk/server/index.js'; +import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; +import { + CallToolRequestSchema, + ListResourcesRequestSchema, + ListToolsRequestSchema, + ReadResourceRequestSchema, + CallToolResult, +} from '@modelcontextprotocol/sdk/types.js'; +import { + client as mcpBrowserClient, + getBrowser, + getScreenshots, +} from './server.js'; + +let initialBrowserSetup = false; + +const consoleLogs: string[] = []; + +declare global { + interface Window { + mcpHelper: { + logs: string[]; + originalConsole: Partial; + }; + } +} + +async function handleToolCall(name: string, args: any) { + const result = await mcpBrowserClient.callTool({ + name, + arguments: args, + }); + const { page } = getBrowser(); + + if (page && !initialBrowserSetup) { + page.on('console', (msg) => { + const logEntry = `[${msg.type()}] ${msg.text()}`; + consoleLogs.push(logEntry); + server.notification({ + method: 'notifications/resources/updated', + params: { uri: 'console://logs' }, + }); + }); + initialBrowserSetup = true; + } + + switch (name) { + case 'browser_screenshot': + server.notification({ + method: 'notifications/resources/list_changed', + }); + break; + } + return result; +} + +const server = new Server( + { + name: 'example-servers/puppeteer', + version: '0.1.0', + }, + { + capabilities: { + resources: {}, + tools: {}, + }, + }, +); + +// Setup request handlers +server.setRequestHandler(ListResourcesRequestSchema, async () => { + const screenshots = getScreenshots(); + return { + resources: [ + { + uri: 'console://logs', + mimeType: 'text/plain', + name: 'Browser console logs', + }, + ...Array.from(screenshots.keys()).map((name) => ({ + uri: `screenshot://${name}`, + mimeType: 'image/png', + name: `Screenshot: ${name}`, + })), + ], + }; +}); + +server.setRequestHandler(ReadResourceRequestSchema, async (request) => { + const uri = request.params.uri.toString(); + + if (uri === 'console://logs') { + return { + contents: [ + { + uri, + mimeType: 'text/plain', + text: consoleLogs.join('\n'), + }, + ], + }; + } + + if (uri.startsWith('screenshot://')) { + const screenshots = getScreenshots(); + const name = uri.split('://')[1]; + const screenshot = screenshots.get(name); + if (screenshot) { + return { + contents: [ + { + uri, + mimeType: 'image/png', + blob: screenshot, + }, + ], + }; + } + } + + throw new Error(`Resource not found: ${uri}`); +}); + +server.setRequestHandler(ListToolsRequestSchema, mcpBrowserClient.listTools); + +server.setRequestHandler(CallToolRequestSchema, async (request) => + handleToolCall(request.params.name, request.params.arguments ?? {}), +); + +async function runServer() { + const transport = new StdioServerTransport(); + await server.connect(transport); +} + +runServer().catch(console.error); + +process.stdin.on('close', () => { + const { browser } = getBrowser(); + console.error('Puppeteer MCP Server closed'); + browser?.close(); + server.close(); +}); diff --git a/packages/agent-infra/mcp-servers/browser/package.json b/packages/agent-infra/mcp-servers/browser/package.json new file mode 100644 index 000000000..1839e137f --- /dev/null +++ b/packages/agent-infra/mcp-servers/browser/package.json @@ -0,0 +1,41 @@ +{ + "name": "@agent-infra/mcp-server-browser", + "version": "0.0.1", + "description": "MCP server for browser use access", + "license": "MIT", + "homepage": "https://modelcontextprotocol.io", + "bugs": "https://github.com/modelcontextprotocol/servers/issues", + "type": "module", + "bin": { + "mcp-server-browser": "dist/index.js" + }, + "main": "dist/server.js", + "module": "dist/server.js", + "files": [ + "dist" + ], + "scripts": { + "build": "rm -rf dist && tsc && shx chmod +x dist/*.js", + "dev": "npx -y @modelcontextprotocol/inspector tsx index.ts", + "prepare": "npm run build", + "watch": "tsc --watch" + }, + "dependencies": { + "@modelcontextprotocol/sdk": "^1.6.1", + "turndown": "^7.2.0", + "@agent-infra/browser": "workspace:*", + "@agent-infra/browser-use": "workspace:*", + "puppeteer-core": "^24.1.1", + "zod-to-json-schema": "^3.23.5" + }, + "devDependencies": { + "zod": "^3.23.8", + "tsx": "^4.19.3", + "vitest": "^3.0.7", + "@types/diff": "^5.0.9", + "@types/minimatch": "^5.1.2", + "@types/node": "^22", + "shx": "^0.3.4", + "typescript": "^5.7.3" + } +} diff --git a/packages/agent-infra/mcp-servers/browser/server.ts b/packages/agent-infra/mcp-servers/browser/server.ts new file mode 100644 index 000000000..070436a36 --- /dev/null +++ b/packages/agent-infra/mcp-servers/browser/server.ts @@ -0,0 +1,899 @@ +/** + * The following code is modified based on + * https://github.com/modelcontextprotocol/servers/blob/main/src/puppeteer/index.ts + * + * MIT License + * Copyright (c) 2024 Anthropic, PBC + * https://github.com/modelcontextprotocol/servers/blob/main/LICENSE + */ +import { + CallToolResult, + ImageContent, + TextContent, +} from '@modelcontextprotocol/sdk/types.js'; +import { z } from 'zod'; +import { ToolSchema } from '@modelcontextprotocol/sdk/types.js'; +import { zodToJsonSchema } from 'zod-to-json-schema'; +import { LocalBrowser, Page } from '@agent-infra/browser'; +import { + getBuildDomTreeScript, + parseNode, + type RawDomTreeNode, + DOMElementNode, + createSelectorMap, + removeHighlights, +} from '@agent-infra/browser-use'; +import { Client } from '@modelcontextprotocol/sdk/client/index.js'; +import TurndownService from 'turndown'; + +const ToolInputSchema = ToolSchema.shape.inputSchema; +type ToolInput = z.infer; + +// Global state +let globalBrowser: LocalBrowser['browser'] | undefined; +let globalPage: Page | undefined; +let selectorMap: Map | undefined; +const screenshots = new Map(); + +export const getScreenshots = () => screenshots; + +const getCurrentPage = async (browser: LocalBrowser['browser']) => { + const pages = await browser?.pages(); + if (!pages?.length) return { activePage: undefined, activePageId: -1 }; + + for (let i = 0; i < pages.length; i++) { + try { + const isVisible = await pages[i].evaluate( + () => document.visibilityState === 'visible', + ); + if (isVisible) { + return { + activePage: pages[i], + activePageId: i, + }; + } + } catch (error) { + continue; + } + } + + return { + activePage: pages[0], + activePageId: 0, + }; +}; + +export async function setInitialBrowser( + _browser?: LocalBrowser['browser'], + _page?: Page, +) { + if (globalBrowser) { + try { + await globalBrowser.pages(); + } catch (error) { + console.log('detected browser session closed, will reinitialize browser'); + globalBrowser = undefined; + globalPage = undefined; + } + } + + // priority 1: use provided browser and page + if (_browser) { + globalBrowser = _browser; + } + if (_page) { + globalPage = _page; + } + + // priority 2: create new browser and page + if (!globalBrowser) { + const localBrowser = new LocalBrowser(); + await localBrowser.launch({ + headless: false, + }); + globalBrowser = localBrowser.getBrowser(); + } + let currTabsIdx = 0; + + if (!globalPage) { + const pages = await globalBrowser.pages(); + globalPage = pages[0]; + currTabsIdx = 0; + } else { + const { activePage, activePageId } = await getCurrentPage(globalBrowser); + globalPage = activePage || globalPage; + currTabsIdx = activePageId || currTabsIdx; + } + + // inject the script to the page + const injectScriptContent = getBuildDomTreeScript(); + await globalPage.evaluateOnNewDocument(injectScriptContent); + + return { + browser: globalBrowser, + page: globalPage, + currTabsIdx, + }; +} + +const getTabList = async (browser: LocalBrowser['browser']) => { + const pages = await browser?.pages(); + return await Promise.all( + pages?.map(async (page, idx) => ({ + index: idx, + title: await page.title(), + url: await page.url(), + })) || [], + ); +}; + +export const getBrowser = () => { + return { browser: globalBrowser, page: globalPage }; +}; + +declare global { + interface Window { + // @ts-ignore + buildDomTree: (args: any) => any | null; + } +} + +export const toolsMap = { + browser_navigate: { + description: 'Navigate to a URL', + inputSchema: z.object({ + url: z.string(), + }), + }, + browser_screenshot: { + name: 'browser_screenshot', + description: 'Take a screenshot of the current page or a specific element', + inputSchema: z.object({ + name: z.string().describe('Name for the screenshot'), + selector: z + .string() + .optional() + .describe('CSS selector for element to screenshot'), + width: z.number().optional().describe('Width in pixels (default: 800)'), + height: z.number().optional().describe('Height in pixels (default: 600)'), + highlight: z + .boolean() + .optional() + .default(false) + .describe('Highlight the element'), + }), + }, + browser_click: { + name: 'browser_click', + description: 'Click an element on the page', + inputSchema: z + .object({ + // selector: z + // .string() + // .optional() + // .describe('CSS selector for element to click'), + index: z.number().optional().describe('Index of the element to click'), + }) + .refine((obj) => Object.keys(obj).length > 0, { + message: + 'clickable element must have at least one of selector or index', + }), + }, + browser_form_input_fill: { + name: 'browser_form_input_fill', + description: 'Fill out an input field', + inputSchema: z.object({ + selector: z.string().describe('CSS selector for input field'), + value: z.string().describe('Value to fill'), + }), + }, + browser_select: { + name: 'browser_select', + description: 'Select an element on the page with Select tag', + inputSchema: z.object({ + selector: z.string().describe('CSS selector for element to select'), + value: z.string().describe('Value to select'), + }), + }, + browser_hover: { + name: 'browser_hover', + description: 'Hover an element on the page', + inputSchema: z.object({ + selector: z.string().describe('CSS selector for element to hover'), + }), + }, + browser_evaluate: { + name: 'browser_evaluate', + description: 'Execute JavaScript in the browser console', + inputSchema: z.object({ + script: z.string().describe('JavaScript code to execute'), + }), + }, + // new tools + browser_get_html: { + name: 'browser_get_html', + description: 'Get the HTML content of the current page', + inputSchema: z.object({}), + }, + browser_get_clickable_elements: { + name: 'browser_get_clickable_elements', + description: 'Get the clickable elements on the current page', + inputSchema: z.object({}), + }, + browser_get_text: { + name: 'browser_get_text', + description: 'Get the text content of the current page', + inputSchema: z.object({}), + }, + browser_get_markdown: { + name: 'browser_get_markdown', + description: 'Get the markdown content of the current page', + inputSchema: z.object({}), + }, + browser_read_links: { + name: 'browser_read_links', + description: 'Get all links on the current page', + inputSchema: z.object({}), + }, + browser_scroll: { + name: 'browser_scroll', + description: 'Scroll the page', + inputSchema: z.object({ + amount: z + .number() + .describe('Pixels to scroll (positive for down, negative for up)'), + }), + }, + browser_go_back: { + name: 'browser_go_back', + description: 'Go back to the previous page', + inputSchema: z.object({}), + }, + browser_go_forward: { + name: 'browser_go_forward', + description: 'Go forward to the next page', + inputSchema: z.object({}), + }, + browser_tab_list: { + name: 'browser_tab_list', + description: 'Get the list of tabs', + inputSchema: z.object({}), + }, + browser_new_tab: { + name: 'browser_new_tab', + description: 'Open a new tab', + inputSchema: z.object({ + url: z.string().describe('URL to open in the new tab'), + }), + }, + browser_close_tab: { + name: 'browser_close_tab', + description: 'Close the current tab', + inputSchema: z.object({}), + }, + browser_switch_tab: { + name: 'browser_switch_tab', + description: 'Switch to a specific tab', + inputSchema: z.object({ + index: z.number().describe('Tab index to switch to'), + }), + }, +}; + +type ToolNames = keyof typeof toolsMap; +type ToolInputMap = { + [K in ToolNames]: z.infer<(typeof toolsMap)[K]['inputSchema']>; +}; + +const listTools: Client['listTools'] = async () => { + const mcpTools = Object.keys(toolsMap || {}).map((key) => { + const name = key as ToolNames; + const tool = toolsMap[name]; + return { + // @ts-ignore + name: tool?.name || name, + description: tool.description, + inputSchema: zodToJsonSchema(tool.inputSchema) as ToolInput, + }; + }); + + return { + tools: mcpTools, + }; +}; + +async function buildDomTree(page: Page) { + try { + const rawDomTree = await page.evaluate(() => { + // Access buildDomTree from the window context of the target page + return window.buildDomTree({ + doHighlightElements: true, + focusHighlightIndex: -1, + viewportExpansion: 0, + }); + }); + if (rawDomTree !== null) { + const elementTree = parseNode(rawDomTree as RawDomTreeNode); + if (elementTree !== null && elementTree instanceof DOMElementNode) { + const clickableElements = elementTree.clickableElementsToString(); + selectorMap = createSelectorMap(elementTree); + + return { + clickableElements, + elementTree, + selectorMap, + }; + } + } + return null; + } catch (error) { + console.error('Error building DOM tree:', error); + return null; + } +} + +const handleToolCall: Client['callTool'] = async ({ + name, + arguments: toolArgs, +}): Promise => { + let { browser, page } = await setInitialBrowser(); + + if (!page) { + return { + content: [{ type: 'text', text: 'Page not found' }], + isError: true, + }; + } + + const handlers: { + [K in ToolNames]: (args: ToolInputMap[K]) => Promise; + } = { + browser_go_back: async (args) => { + await page.goBack(); + return { + content: [{ type: 'text', text: 'Navigated back' }], + isError: false, + }; + }, + browser_go_forward: async (args) => { + await page.goForward(); + return { + content: [{ type: 'text', text: 'Navigated forward' }], + isError: false, + }; + }, + browser_navigate: async (args) => { + // need to wait for the page to load + await page.goto(args.url); + const { clickableElements } = (await buildDomTree(page)) || {}; + return { + content: [ + { + type: 'text', + text: `Navigated to ${args.url}\nclickable elements: ${clickableElements}`, + }, + ], + isError: false, + }; + }, + browser_screenshot: async (args) => { + // if highlight is true, build the dom tree with highlights + if (args.highlight) { + await page.evaluate(() => { + return window.buildDomTree({ + doHighlightElements: true, + focusHighlightIndex: -1, + viewportExpansion: 0, + }); + }); + } else { + await removeHighlights(page); + } + const width = args.width ?? page.viewport()?.width ?? 800; + const height = args.height ?? page.viewport()?.height ?? 600; + await page.setViewport({ width, height }); + + const screenshot = await (args.selector + ? (await page.$(args.selector))?.screenshot({ encoding: 'base64' }) + : page.screenshot({ encoding: 'base64', fullPage: false })); + + if (!screenshot) { + return { + content: [ + { + type: 'text', + text: args.selector + ? `Element not found: ${args.selector}` + : 'Screenshot failed', + }, + ], + isError: true, + }; + } + + screenshots.set(args.name, screenshot as string); + + return { + content: [ + { + type: 'text', + text: `Screenshot '${args.name}' taken at ${width}x${height}`, + } as TextContent, + { + type: 'image', + data: screenshot, + mimeType: 'image/png', + } as ImageContent, + ], + isError: false, + }; + }, + browser_get_clickable_elements: async (args) => { + if (!page) { + return { + content: [{ type: 'text', text: 'Page not found' }], + isError: true, + }; + } + + try { + const { clickableElements } = (await buildDomTree(page)) || {}; + if (clickableElements) { + return { + content: [ + { + type: 'text', + text: clickableElements, + }, + ], + isError: false, + }; + } + return { + content: [ + { + type: 'text', + text: 'Failed to parse DOM tree', + }, + ], + isError: false, + }; + } catch (error) { + return { + content: [{ type: 'text', text: (error as Error).message }], + isError: true, + }; + } + }, + browser_click: async (args) => { + if (!args.index) { + return { + content: [{ type: 'text', text: 'No index provided' }], + isError: true, + }; + } + + try { + const cssSelectorWithIndex = selectorMap?.get( + Number(args?.index), + )?.cssSelector; + await page.click(cssSelectorWithIndex!); + + return { + content: [ + { + type: 'text', + text: `Clicked: index ${args.index}`, + }, + ], + isError: false, + }; + } catch (error) { + return { + content: [ + { + type: 'text', + text: `Failed to click index ${args.index}`, + }, + ], + isError: true, + }; + } + }, + browser_form_input_fill: async (args) => { + try { + await page.waitForSelector(args.selector); + await page.type(args.selector, args.value); + return { + content: [ + { + type: 'text', + text: `Filled ${args.selector} with: ${args.value}`, + }, + ], + isError: false, + }; + } catch (error) { + return { + content: [ + { + type: 'text', + text: `Failed to fill ${args.selector}: ${(error as Error).message}`, + }, + ], + isError: true, + }; + } + }, + browser_select: async (args) => { + try { + await page.waitForSelector(args.selector); + await page.select(args.selector, args.value); + return { + content: [ + { + type: 'text', + text: `Selected ${args.selector} with: ${args.value}`, + }, + ], + isError: false, + }; + } catch (error) { + return { + content: [ + { + type: 'text', + text: `Failed to select ${args.selector}: ${(error as Error).message}`, + }, + ], + isError: true, + }; + } + }, + browser_hover: async (args) => { + try { + await page.waitForSelector(args.selector); + await page.hover(args.selector); + return { + content: [ + { + type: 'text', + text: `Hovered ${args.selector}`, + }, + ], + isError: false, + }; + } catch (error) { + return { + content: [ + { + type: 'text', + text: `Failed to hover ${args.selector}: ${(error as Error).message}`, + }, + ], + isError: true, + }; + } + }, + browser_evaluate: async (args) => { + try { + await page.evaluate(() => { + window.mcpHelper = { + logs: [], + originalConsole: { ...console }, + }; + + ['log', 'info', 'warn', 'error'].forEach((method) => { + (console as any)[method] = (...args: any[]) => { + window.mcpHelper.logs.push(`[${method}] ${args.join(' ')}`); + (window.mcpHelper.originalConsole as any)[method](...args); + }; + }); + }); + + const result = await page.evaluate(args.script); + + const logs = await page.evaluate(() => { + Object.assign(console, window.mcpHelper.originalConsole); + const logs = window.mcpHelper.logs; + delete (window as any).mcpHelper; + return logs; + }); + + return { + content: [ + { + type: 'text', + text: `Execution result:\n${JSON.stringify(result, null, 2)}\n`, + }, + ], + isError: false, + }; + } catch (error) { + return { + content: [ + { + type: 'text', + text: `Script execution failed: ${(error as Error).message}`, + }, + ], + isError: true, + }; + } + }, + browser_get_html: async (args) => { + try { + const html = await page.content(); + return { + content: [{ type: 'text', text: html }], + isError: false, + }; + } catch (error) { + return { + content: [ + { + type: 'text', + text: `Failed to get HTML: ${(error as Error).message}`, + }, + ], + isError: true, + }; + } + }, + browser_get_text: async (args) => { + try { + const text = await page.evaluate(() => document.body.innerText); + return { + content: [{ type: 'text', text }], + isError: false, + }; + } catch (error) { + return { + content: [ + { + type: 'text', + text: `Failed to get text: ${(error as Error).message}`, + }, + ], + isError: true, + }; + } + }, + browser_get_markdown: async (args) => { + try { + const turndownService = new TurndownService(); + turndownService.addRule('filter_tags', { + filter: ['script', 'style'], + replacement: (content) => { + return ''; + }, + }); + + const html = await page.content(); + const markdown = turndownService.turndown(html); + return { + content: [{ type: 'text', text: markdown }], + isError: false, + }; + } catch (error) { + return { + content: [ + { + type: 'text', + text: `Failed to get markdown: ${(error as Error).message}`, + }, + ], + }; + } + }, + browser_read_links: async (args) => { + try { + const links = await page.evaluate(() => { + const linkElements = document.querySelectorAll('a[href]'); + return Array.from(linkElements).map((el) => ({ + text: (el as HTMLElement).innerText, + href: el.getAttribute('href'), + })); + }); + return { + content: [{ type: 'text', text: JSON.stringify(links, null, 2) }], + isError: false, + }; + } catch (error) { + return { + content: [ + { + type: 'text', + text: `Failed to read links: ${(error as Error).message}`, + }, + ], + isError: true, + }; + } + }, + browser_scroll: async (args) => { + try { + const scrollResult = await page.evaluate((amount) => { + const beforeScrollY = window.scrollY; + window.scrollBy(0, amount); + + // check if the page is scrolled the expected distance + const actualScroll = window.scrollY - beforeScrollY; + + // check if the page is at the bottom + const scrollHeight = Math.max( + document.documentElement.scrollHeight, + document.body.scrollHeight, + ); + const scrollTop = window.scrollY; + const clientHeight = + window.innerHeight || document.documentElement.clientHeight; + const isAtBottom = + Math.abs(scrollHeight - scrollTop - clientHeight) <= 1; + + return { + actualScroll, + isAtBottom, + }; + }, args.amount); + + return { + content: [ + { + type: 'text', + text: `Scrolled ${scrollResult.actualScroll} pixels. ${ + scrollResult.isAtBottom + ? 'Reached the bottom of the page.' + : 'Did not reach the bottom of the page.' + }`, + }, + ], + isError: false, + }; + } catch (error) { + return { + content: [ + { + type: 'text', + text: `Failed to scroll: ${args.amount}`, + }, + ], + isError: true, + }; + } + }, + browser_new_tab: async (args) => { + try { + const newPage = await browser!.newPage(); + await newPage.goto(args.url); + page = newPage; + await setInitialBrowser(browser, newPage); + return { + content: [ + { type: 'text', text: `Opened new tab with URL: ${args.url}` }, + ], + isError: false, + }; + } catch (error) { + return { + content: [ + { + type: 'text', + text: `Failed to open new tab: ${(error as Error).message}`, + }, + ], + isError: true, + }; + } + }, + browser_close_tab: async (args) => { + try { + await page.close(); + return { + content: [{ type: 'text', text: 'Closed current tab' }], + isError: false, + }; + } catch (error) { + return { + content: [ + { + type: 'text', + text: `Failed to close tab: ${(error as Error).message}`, + }, + ], + isError: true, + }; + } + }, + browser_tab_list: async (args) => { + try { + const tabListList = await getTabList(browser); + const { activePageId, activePage } = await getCurrentPage(browser); + const tabListSummary = + tabListList?.length > 0 + ? `Current Tab: [${activePageId}] ${await activePage?.title()}\nAll Tabs: \n${tabListList + .map((tab) => `[${tab.index}] ${tab.title} (${tab.url})`) + .join('\n')}` + : ''; + return { + content: [{ type: 'text', text: tabListSummary }], + isError: false, + }; + } catch (error) { + return { + content: [ + { + type: 'text', + text: `Failed to get tab list`, + }, + ], + }; + } + }, + browser_switch_tab: async (args) => { + try { + const pages = await browser!.pages(); + if (args.index >= 0 && args.index < pages.length) { + await pages[args.index].bringToFront(); + + const tabListList = await getTabList(browser); + const tabListSummary = + tabListList?.length > 0 + ? `All Tabs: \n${tabListList + .map((tab) => `[${tab.index}] ${tab.title} (${tab.url})`) + .join('\n')}` + : ''; + + return { + content: [ + { + type: 'text', + text: `Switched to tab ${args.index}, ${tabListSummary}`, + }, + ], + isError: false, + }; + } + return { + content: [{ type: 'text', text: `Invalid tab index: ${args.index}` }], + isError: true, + }; + } catch (error) { + return { + content: [ + { + type: 'text', + text: `Failed to switch tab: ${(error as Error).message}`, + }, + ], + isError: true, + }; + } + }, + }; + + if (handlers[name as ToolNames]) { + return handlers[name as ToolNames](toolArgs as any); + } + + return { + content: [ + { + type: 'text', + text: `Unknown tool: ${name}`, + }, + ], + isError: true, + }; +}; + +const close = async () => { + const { browser } = getBrowser(); + await browser?.close(); +}; + +export const client: Pick = { + callTool: handleToolCall, + listTools: listTools, + close, +}; diff --git a/packages/agent-infra/mcp-servers/browser/tsconfig.json b/packages/agent-infra/mcp-servers/browser/tsconfig.json new file mode 100644 index 000000000..22643d8c3 --- /dev/null +++ b/packages/agent-infra/mcp-servers/browser/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "target": "ES2022", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "outDir": "./dist", + "rootDir": ".", + "declaration": true, + "moduleResolution": "NodeNext", + "module": "NodeNext" + }, + "include": ["./**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/packages/agent-infra/mcp-servers/browser/vitest.config.mts b/packages/agent-infra/mcp-servers/browser/vitest.config.mts new file mode 100644 index 000000000..9e1a00225 --- /dev/null +++ b/packages/agent-infra/mcp-servers/browser/vitest.config.mts @@ -0,0 +1,12 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + environment: 'node', + include: ['**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], + }, +}); diff --git a/packages/agent-infra/mcp-servers/commands/.gitignore b/packages/agent-infra/mcp-servers/commands/.gitignore new file mode 100644 index 000000000..7f106e9fa --- /dev/null +++ b/packages/agent-infra/mcp-servers/commands/.gitignore @@ -0,0 +1,4 @@ +node_modules/ +build/ +*.log +.env* \ No newline at end of file diff --git a/packages/agent-infra/mcp-servers/commands/CHANGELOG.md b/packages/agent-infra/mcp-servers/commands/CHANGELOG.md new file mode 100644 index 000000000..c32860f90 --- /dev/null +++ b/packages/agent-infra/mcp-servers/commands/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.4.0 2024-12-10 - add logging + +- See Logging in [README.md](./README.md#logging) +- By default, errors will now be logged +- Use the new `--verbose` flag for detailed logging diff --git a/packages/agent-infra/mcp-servers/commands/README.md b/packages/agent-infra/mcp-servers/commands/README.md new file mode 100644 index 000000000..e3f5b8854 --- /dev/null +++ b/packages/agent-infra/mcp-servers/commands/README.md @@ -0,0 +1 @@ +## MCP Commands diff --git a/packages/agent-infra/mcp-servers/commands/TODO.md b/packages/agent-infra/mcp-servers/commands/TODO.md new file mode 100644 index 000000000..91e428e03 --- /dev/null +++ b/packages/agent-infra/mcp-servers/commands/TODO.md @@ -0,0 +1,20 @@ +# TODOs + +- Every time Claude runs a python script, `python` is used as the interpreter. Which fails every time. + - Thankfully, Claude retries with `python3` and uses that for the rest of the chat. + - Hence the idea to have some memory concept across chats! Very selective memory and very minimal. + - I was thinking of adding a tool for this server alone, one to write to and another to read from this cmdline memory... and then otherwise instruct Claude to judiciously use the memory (i.e. never if possible) + - And, don't put any constraints on the memory other than a list of strings. Claude can do all that on his own (i.e. a line with `pythoh3` alone should be sufficient, in fact I could do some testing with that alone and see how Claude does) + - Another example would be `uname` on a Windows machine. + - These different scenarios aren't necessarily mission critical to fix but they offer an opportunity to improve the experience. + - The solution may not be generalizable too and might be specific to commmand that fails, i.e. if I pass the OS name in the ListTools response, that will likely fix that issue. + - i.e. routinely `python` is used and then `python3` + - Or, should I have some static mappings of common commands that fail and when they do, use the fallback? And find a way to tell the LLM? Or, + - Or would some sort of command lookup mechanism be useful? i.e. python3 instead of python +- Add windows tests, linux tests and macOS tests for nuances of each. i.e. pwsh, pwsh-core, cmd.exe on Windows. +- Add a server side request to score risk of a tool request (specific to run_command/run_script?) - this wouldn't be a tool the LLM uses, but rather the client. + - Claude makes tool request, client passes it to server for scoring, server returns risk, client decides to prompt (or not) and then client sends tool request to server... + - Or, have client use another LLM score it? + - I chimed in about this on this discussion: https://github.com/orgs/modelcontextprotocol/discussions/69 + - Also, some tools might be able to be marked safe in their spec, i.e. getting date/time, fetching a web page... inherently mostly "safe" + - The fewer prompts the user sees, the most likely that the user will actually read the requested tool use. Otherwise, next next next prompt fatigue kicks in regardless of risk diff --git a/packages/agent-infra/mcp-servers/commands/package.json b/packages/agent-infra/mcp-servers/commands/package.json new file mode 100644 index 000000000..bb0ceb622 --- /dev/null +++ b/packages/agent-infra/mcp-servers/commands/package.json @@ -0,0 +1,36 @@ +{ + "name": "@agent-infra/mcp-server-commands", + "version": "0.0.1", + "description": "An MCP server to run arbitrary commands", + "type": "module", + "main": "./build/server.js", + "module": "./build/server.js", + "types": "./build/server.d.ts", + "bin": { + "mcp-server-commands": "./build/index.js" + }, + "files": [ + "build" + ], + "scripts": { + "clean": "rm -rf build", + "build": "rm -rf build && tsc && node -e \"require('fs').chmodSync('build/index.js', '755')\"", + "prepare": "npm run build", + "watch": "npm run build && tsc --watch", + "dev": "npx -y @modelcontextprotocol/inspector tsx src/index.ts", + "inspector": "npx @modelcontextprotocol/inspector build/index.js", + "test": "vitest run", + "test:watch": "vitest --watch", + "test:integration": "vitest tests/integration" + }, + "dependencies": { + "@modelcontextprotocol/sdk": "^1.6.1" + }, + "devDependencies": { + "tsx": "^4.19.3", + "zod": "^3.23.8", + "vitest": "^3.0.7", + "@types/node": "^20.11.24", + "typescript": "^5.7.3" + } +} diff --git a/packages/agent-infra/mcp-servers/commands/src/exec-utils.ts b/packages/agent-infra/mcp-servers/commands/src/exec-utils.ts new file mode 100644 index 000000000..22b18426d --- /dev/null +++ b/packages/agent-infra/mcp-servers/commands/src/exec-utils.ts @@ -0,0 +1,86 @@ +/** + * The following code is modified based on + * https://github.com/g0t4/mcp-server-commands/blob/master/src/exec-utils.ts + * + * MIT License + * Copyright (c) 2025 g0t4 + * https://github.com/g0t4/mcp-server-commands/blob/master/LICENSE + */ +import { exec, ExecOptions } from 'child_process'; +import { ObjectEncodingOptions } from 'fs'; + +type ExecResult = { + // FYI leave this type for now as a declaration of the expected shape of the result for BOTH success and failure (errors) + // do not switch to using ExecException b/c that only applies to failures + stdout: string; + stderr: string; + + // message is the error message from the child process, not sure I like this naming + // - perhaps worth pushing the error logic out of messagesFor back into catch block above + message?: string; +}; + +/** + * Executes a file with the given arguments, piping input to stdin. + * @param {string} interpreter - The file to execute. + * @param {string} stdin_text - The string to pipe to stdin. + * @returns {Promise} A promise that resolves with the stdout and stderr of the command. `message` is provided on a failure to explain the error. + */ +function execFileWithInput( + interpreter: string, + stdin_text: string, + options: ObjectEncodingOptions & ExecOptions, +): Promise { + // FYI for now, using `exec()` so the interpreter can have cmd+args AIO + // could switch to `execFile()` to pass args array separately + // TODO starts with fish too? "fish -..." PRN use a library to parse the command and determine this? + if (interpreter.split(' ')[0] === 'fish') { + // PRN also check error from fish and add possible clarification to error message though there are legit ways to trigger that same error message! i.e. `fish .` which is not the same issue! + return fishWorkaround(interpreter, stdin_text, options); + } + + return new Promise((resolve, reject) => { + const child = exec(interpreter, options, (error, stdout, stderr) => { + if (error) { + reject({ message: error.message, stdout, stderr }); + } else { + resolve({ stdout, stderr }); + } + }); + + if (stdin_text) { + if (child.stdin === null) { + reject(new Error('Unexpected failure: child.stdin is null')); + return; + } + child.stdin.write(stdin_text); + child.stdin.end(); + } + }); +} + +async function fishWorkaround( + interpreter: string, + script: string, + options: ObjectEncodingOptions & ExecOptions, +): Promise { + // fish right now chokes on piped input (STDIN) + node's exec/spawn/etc, so lets use a workaround to echo the input + // base64 encode thee input, then decode in pipeline + const base64Script = Buffer.from(script).toString('base64'); + + const command = `${interpreter} -c "echo ${base64Script} | base64 -d | fish"`; + + return new Promise((resolve, reject) => { + // const child = ... // careful with refactoring not to return that unused child + exec(command, options, (error, stdout, stderr) => { + // I like this style of error vs success handling! it's beautiful-est (prommises are underrated) + if (error) { + reject({ message: error.message, stdout, stderr }); + } else { + resolve({ stdout, stderr }); + } + }); + }); +} + +export { execFileWithInput, ExecResult }; diff --git a/packages/agent-infra/mcp-servers/commands/src/index.ts b/packages/agent-infra/mcp-servers/commands/src/index.ts new file mode 100644 index 000000000..50b833a84 --- /dev/null +++ b/packages/agent-infra/mcp-servers/commands/src/index.ts @@ -0,0 +1,183 @@ +#!/usr/bin/env node +/** + * The following code is modified based on + * https://github.com/g0t4/mcp-server-commands/blob/master/src/index.ts + * + * MIT License + * Copyright (c) 2025 g0t4 + * https://github.com/g0t4/mcp-server-commands/blob/master/LICENSE + */ +import os from 'node:os'; +import { Server } from '@modelcontextprotocol/sdk/server/index.js'; +import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; +import { + CallToolRequestSchema, + PromptMessage, + ListToolsRequestSchema, + ListPromptsRequestSchema, + GetPromptRequestSchema, +} from '@modelcontextprotocol/sdk/types.js'; +import { exec } from 'node:child_process'; +import { promisify } from 'node:util'; +import { client as mcpCommandsClient } from './server.js'; + +import { createRequire } from 'module'; +import { always_log } from './server.js'; +const require = createRequire(import.meta.url); +const { + name: package_name, + version: package_version, +} = require('../package.json'); + +// TODO use .promises? in node api +const execAsync = promisify(exec); + +let verbose = false; +// check CLI args: +if (process.argv.includes('--verbose')) { + verbose = true; +} + +const server = new Server( + { + name: package_name, + version: package_version, + description: 'Run commands on this ' + os.platform() + ' machine', + }, + { + capabilities: { + //resources: {}, + tools: {}, + prompts: {}, + //logging: {}, // for logging messages that don't seem to work yet or I am doing them wrong + }, + }, +); + +if (verbose) { + always_log('INFO: verbose logging enabled'); +} else { + always_log('INFO: verbose logging disabled, enable it with --verbose'); +} + +function verbose_log(message: string, data?: any) { + // https://modelcontextprotocol.io/docs/tools/debugging - mentions various ways to debug/troubleshoot (including dev tools) + // + // remember STDIO transport means can't log over STDOUT (client expects JSON messages per the spec) + // https://modelcontextprotocol.io/docs/tools/debugging#implementing-logging + // mentions STDERR is captured by the host app (i.e. Claude Desktop app) + // server.sendLoggingMessage is captured by MCP client (not Claude Desktop app) + // SO, IIUC use STDERR for logging into Claude Desktop app logs in: + // '~/Library/Logs/Claude/mcp.log' + if (verbose) { + always_log(message, data); + } + // inspector, catches these logs and shows them on left hand side of screen (sidebar) + + // TODO add verbose parameter (CLI arg?) + + // IF I wanted to log via MCP client logs (not sure what those are/do): + // I do not see inspector catching these logs :(, there is a server notifications section and it remains empty + //server.sendLoggingMessage({ + // level: "info", + // data: message, + //}); + // which results in something like: + //server.notification({ + // method: "notifications/message", + // params: { + // level: "warning", + // logger: "mcp-server-commands", + // data: "ListToolsRequest2", + // }, + //}); + // + // FYI client should also requets a log level from the server, so that needs to be here at some point too +} + +server.setRequestHandler(ListToolsRequestSchema, mcpCommandsClient.listTools); + +server.setRequestHandler(CallToolRequestSchema, async (request) => { + verbose_log('INFO: ToolRequest', request); + return mcpCommandsClient.callTool(request.params); +}); + +server.setRequestHandler(ListPromptsRequestSchema, async () => { + verbose_log('INFO: ListPrompts'); + return { + prompts: [ + { + name: 'run_command', + description: + 'Include command output in the prompt. Instead of a tool call, the user decides what commands are relevant.', + arguments: [ + { + name: 'command', + required: true, + }, + ], + }, + ], + }; +}); + +server.setRequestHandler(GetPromptRequestSchema, async (request) => { + if (request.params.name !== 'run_command') { + throw new Error('Unknown prompt'); + } + verbose_log('INFO: PromptRequest', request); + + const command = String(request.params.arguments?.command); + if (!command) { + throw new Error('Command is required'); + } + // Is it possible/feasible to pass a path for the CWD when running the command? + // - currently it uses / (yikez) + // - IMO makes more sense to have it be based on the Zed CWD of each project + // - Fallback could be to configure on server level (i.e. home dir of current user) - perhaps CLI arg? (thinking of zed's context_servers config section) + + const { stdout, stderr } = await execAsync(command); + // TODO gracefully handle errors and turn them into a prompt message that can be used by LLM to troubleshoot the issue, currently errors result in nothing inserted into the prompt and instead it shows the Zed's chat panel as a failure + + const messages: PromptMessage[] = [ + { + role: 'user', + content: { + type: 'text', + text: + 'I ran the following command, if there is any output it will be shown below:\n' + + command, + }, + }, + ]; + if (stdout) { + messages.push({ + role: 'user', + content: { + type: 'text', + text: 'STDOUT:\n' + stdout, + }, + }); + } + if (stderr) { + messages.push({ + role: 'user', + content: { + type: 'text', + text: 'STDERR:\n' + stderr, + }, + }); + } + verbose_log('INFO: PromptResponse', messages); + return { messages }; +}); + +async function main() { + const transport = new StdioServerTransport(); + await server.connect(transport); +} + +main().catch((error) => { + console.error('Server error:', error); + process.exit(1); +}); diff --git a/packages/agent-infra/mcp-servers/commands/src/server.ts b/packages/agent-infra/mcp-servers/commands/src/server.ts new file mode 100644 index 000000000..76ca0fab6 --- /dev/null +++ b/packages/agent-infra/mcp-servers/commands/src/server.ts @@ -0,0 +1,237 @@ +/** + * The following code is modified based on + * https://github.com/g0t4/mcp-server-commands/blob/master/src/index.ts + * + * MIT License + * Copyright (c) 2025 g0t4 + * https://github.com/g0t4/mcp-server-commands/blob/master/LICENSE + */ +import { Client } from '@modelcontextprotocol/sdk/client/index.js'; +import { z } from 'zod'; +import os from 'node:os'; +import { exec, ExecOptions } from 'node:child_process'; +import { ObjectEncodingOptions } from 'node:fs'; +import { promisify } from 'node:util'; +import { zodToJsonSchema } from 'zod-to-json-schema'; +import { + CallToolResult, + TextContent, + ToolSchema, +} from '@modelcontextprotocol/sdk/types.js'; + +import { execFileWithInput, ExecResult } from './exec-utils.js'; + +// TODO use .promises? in node api +const execAsync = promisify(exec); + +function messagesFor(result: ExecResult): TextContent[] { + const messages: TextContent[] = []; + if (result.message) { + messages.push({ + // most of the time this is gonna match stderr, TODO do I want/need both error and stderr? + type: 'text', + text: result.message, + name: 'ERROR', + }); + } + if (result.stdout) { + messages.push({ + type: 'text', + text: result.stdout, + name: 'STDOUT', + }); + } + if (result.stderr) { + messages.push({ + type: 'text', + text: result.stderr, + name: 'STDERR', + }); + } + return messages; +} + +export function always_log(message: string, data?: any) { + if (data) { + console.error(message + ': ' + JSON.stringify(data)); + } else { + console.error(message); + } +} + +async function runCommand( + args: Record | undefined, +): Promise { + const command = String(args?.command); + if (!command) { + throw new Error('Command is required'); + } + + const options: ExecOptions = {}; + if (args?.cwd) { + options.cwd = String(args.cwd); + // ENOENT is thrown if the cwd doesn't exist, and I think LLMs can understand that? + } + + try { + const result = await execAsync(command, options); + console.log('execute command result', result); + return { + isError: false, + content: messagesFor(result), + }; + } catch (error) { + // TODO catch for other errors, not just ExecException + // FYI failure may not always be a bad thing if for example checking for a file to exist so just keep that in mind in terms of logging? + const response = { + isError: true, + content: messagesFor(error as ExecResult), + }; + always_log('WARN: run_command failed', response); + return response; + } +} + +async function runScript( + args: Record | undefined, +): Promise { + const interpreter = String(args?.interpreter); + if (!interpreter) { + throw new Error('Interpreter is required'); + } + + const options: ObjectEncodingOptions & ExecOptions = { + //const options = { + // constrains typescript too, to string based overload + encoding: 'utf8', + }; + if (args?.cwd) { + options.cwd = String(args.cwd); + // ENOENT is thrown if the cwd doesn't exist, and I think LLMs can understand that? + } + + const script = String(args?.script); + if (!script) { + throw new Error('Script is required'); + } + + try { + const result = await execFileWithInput(interpreter, script, options); + return { + isError: false, + content: messagesFor(result), + }; + } catch (error) { + const response = { + isError: true, + content: messagesFor(error as ExecResult), + }; + always_log('WARN: run_script failed', response); + return response; + } +} + +const toolsMap = { + run_command: { + name: 'run_command', + description: 'Run a command on this ' + os.platform() + ' machine', + inputSchema: z.object({ + command: z.string().describe('Command with args'), + cwd: z + .string() + .optional() + .describe('Current working directory, leave empty in most cases'), + }), + }, + run_script: { + name: 'run_script', + description: 'Run a script on this ' + os.platform() + ' machine', + inputSchema: z.object({ + interpreter: z + .string() + .optional() + .describe( + 'Command with arguments. Script will be piped to stdin. Examples: bash, fish, zsh, python, or: bash --norc', + ), + script: z.string().describe('Script to run'), + cwd: z + .string() + .optional() + .describe('Current working directory, leave empty in most cases'), + }), + }, +}; + +const ToolInputSchema = ToolSchema.shape.inputSchema; +type ToolInput = z.infer; +type ToolNames = keyof typeof toolsMap; +type ToolInputMap = { + [K in ToolNames]: z.infer<(typeof toolsMap)[K]['inputSchema']>; +}; + +const listTools: Client['listTools'] = async () => { + const mcpTools = Object.keys(toolsMap || {}).map((key) => { + const name = key as ToolNames; + const tool = toolsMap[name]; + return { + // @ts-ignore + name: tool?.name || name, + description: tool.description, + inputSchema: zodToJsonSchema(tool.inputSchema) as ToolInput, + }; + }); + + return { + tools: mcpTools, + }; +}; + +const callTool: Client['callTool'] = async ({ + name, + arguments: toolArgs, +}): Promise => { + const handlers: { + [K in ToolNames]: (args: ToolInputMap[K]) => Promise; + } = { + run_command: async (args) => { + const { command, cwd } = args; + const response = await runCommand(args); + + return { + ...response, + toolResult: response, + }; + }, + run_script: async (args) => { + const response = await runScript(args); + return { + toolResult: response, + ...response, + }; + }, + }; + + if (handlers[name as ToolNames]) { + return handlers[name as ToolNames](toolArgs as any); + } + + return { + content: [ + { + type: 'text', + text: `Unknown tool: ${name}`, + }, + ], + isError: true, + }; +}; + +const close: Client['close'] = async () => { + return; +}; + +export const client: Pick = { + callTool, + listTools, + close, +}; diff --git a/packages/agent-infra/mcp-servers/commands/src/tests.md b/packages/agent-infra/mcp-servers/commands/src/tests.md new file mode 100644 index 000000000..981566da2 --- /dev/null +++ b/packages/agent-infra/mcp-servers/commands/src/tests.md @@ -0,0 +1,18 @@ +## run_command + +command: echo foos + +command: ls + +command: doesntmatter # should fail + +## run_script + +interpreter: echo foos +script: doesntmatter + +interpreter: bash +script: echo foos + +interpreter: python3 +script: print(1+1) diff --git a/packages/agent-infra/mcp-servers/commands/tests/integration/exec-utils.test.ts b/packages/agent-infra/mcp-servers/commands/tests/integration/exec-utils.test.ts new file mode 100644 index 000000000..ee82368e6 --- /dev/null +++ b/packages/agent-infra/mcp-servers/commands/tests/integration/exec-utils.test.ts @@ -0,0 +1,121 @@ +/** + * The following code is modified based on + * https://github.com/g0t4/mcp-server-commands/blob/master/tests/integration/exec-utils.test.ts + * + * MIT License + * Copyright (c) 2025 g0t4 + * https://github.com/g0t4/mcp-server-commands/blob/master/LICENSE + */ +import os from 'os'; +import { execFileWithInput } from '../../src/exec-utils.js'; +import { describe, test, expect } from 'vitest'; + +// FYI Claude generated most of these, by dog fooding the run_command/script tools! +// I am going to keep asking Claude to add new tests to see how I feel about that workflow + +describe('execFileWithInput integration tests', () => { + // ok, impressive choice of "seam" to add testing of the most critical part, executing the command! this is EXACTLY what I had in mind and didn't even tell Claude I wanted. + + test('should execute a simple bash command', async () => { + const result = await execFileWithInput('bash', 'echo "Hello World"', {}); + expect(result.stdout.trim()).toBe('Hello World'); + expect(result.stderr).toBe(''); + }); + + test('should handle command errors properly in bash', async () => { + try { + await execFileWithInput('bash', 'nonexistentcommand', {}); + expect.fail('Should have thrown an error'); + } catch (error: any) { + expect(error.stderr).toContain('nonexistentcommand'); + expect(error.message).toBeTruthy(); + } + }); + + test.skip('should handle fish shell command', async () => { + const result = await execFileWithInput( + 'fish', + 'echo "Hello from Fish"', + {}, + ); + expect(result.stdout.trim()).toBe('Hello from Fish'); + expect(result.stderr).toBe(''); + }); + + // TODO make sure to cover the fish workaround logic, in all its edge cases and then can leave those tests when I remove that or just nuke them + test.skip('should handle command errors properly in fish', async () => { + try { + await execFileWithInput('fish', 'totallynonexistentcommand', {}); + expect.fail('Should have thrown an error'); + } catch (error: any) { + expect(error.stderr).toContain('totallynonexistentcommand'); + expect(error.message).toBeTruthy(); + } + }); + + test.skip('should execute zsh command', async () => { + const result = await execFileWithInput('zsh', 'echo "Hello from Zsh"', {}); + expect(result.stdout.trim()).toBe('Hello from Zsh'); + expect(result.stderr).toBe(''); + }); + + test.skip('should handle command errors properly in zsh', async () => { + try { + await execFileWithInput('zsh', 'completelynonexistentcommand', {}); + expect.fail('Should have thrown an error'); + } catch (error: any) { + expect(error.stderr).toContain('completelynonexistentcommand'); + expect(error.message).toBeTruthy(); + } + }); + + test.skip('should handle multiline scripts in zsh', async () => { + const script = ` + echo "Line 1 from Zsh" + for i in 1 2 3; do + echo "Number $i" + done + `; + const result = await execFileWithInput('zsh', script, {}); + //expect(lines[0]).toContain('Line 1 from Zsh'); + //expect(lines[1]).toContain('Number 1'); + //expect(lines[2]).toContain('Number 2'); + //expect(lines[3]).toContain('Number 3'); + expect(result.stdout).toContain(`Line 1 from Zsh +Number 1 +Number 2 +Number 3 +`); + }); + + test('should respect working directory option', async () => { + // FYI best to pick a path that is common on both macOS and Linux + // unfortunately, on macOS /tmp is a symlink to /private/tmp so that can cause issues + // TODO make sure cwd is not already / in the test? + // PRN use multiple paths would be another way around checking cwd of test runner + const result = await execFileWithInput('bash', 'pwd', { cwd: '/' }); + expect(result.stdout.trim()).toBe('/'); + }); + + test('should handle bash multiline scripts', async () => { + const script = ` + echo "Line 1" + echo "Line 2" + echo "Line 3" + `; + const result = await execFileWithInput('bash', script, {}); + // validate all of output: + expect(result.stdout).toContain(`Line 1 +Line 2 +Line 3`); + }); +}); + +// TODO add testing of try/catch in runScript block +// just make sure I cover failure cases through the catch blocks +// maybe, push the try/catch into a new, interim seam +// keep this testing separate of the lower level seam around execWithInput +// don't need a ton of tests, just an integration "glue" test of the try/catch impl (so if it changes I can validate it) +// + +// TODO add tests for logging on failures? diff --git a/packages/agent-infra/mcp-servers/commands/tests/manual/exec-file-sync.cjs b/packages/agent-infra/mcp-servers/commands/tests/manual/exec-file-sync.cjs new file mode 100644 index 000000000..f0a40a69d --- /dev/null +++ b/packages/agent-infra/mcp-servers/commands/tests/manual/exec-file-sync.cjs @@ -0,0 +1,42 @@ +/** + * The following code is modified based on + * https://github.com/g0t4/mcp-server-commands/blob/master/tests/manual/exec-file-sync.cjs + * + * MIT License + * Copyright (c) 2025 g0t4 + * https://github.com/g0t4/mcp-server-commands/blob/master/LICENSE + */ +const { execFile, execFileSync } = require('child_process'); + +// FYI async too but not the point of this script +execFile('ls', ['-l'], (error, stdout, stderr) => { + if (error) console.error(`Error: ${error.message}`); + else console.log(`Stdout: ${stdout}`); +}); + +execFile('ls', ['-l'], { input: 'echo foobar2' }, (error, stdout, stderr) => { + if (error) console.error(`Error: ${error.message}`); + else console.log(`Stdout: ${stdout}`); +}); + +// !!! key demo here of execFileSync +const inbash = execFileSync('bash', [], { input: 'echo foobar' }); +console.log(inbash.toString()); // sync means it will show before async callbacks +const infish = execFileSync('fish', [], { input: 'echo foobar' }); +// FYI did some testing of fish shell: +// new rust version doesn't fail on this, so this is definitely a bug in c++ builds only +// - reproduced with remote: origin/Integration_3.7.1 +// make +// set PATH /Users/wes/repos/github/fish-shell/fish-shell/build $PATH +// node exec-file-sync.cjs # this script +// FYI traced back to this line: https://github.com/fish-shell/fish-shell/blob/tmp3.7.1/src/reader.cpp#L4763 +// +// rust build works: +// gcob master +// cargo build +// set PATH /Users/wes/repos/github/fish-shell/fish-shell/target/debug/ $PATH +// node exec-file-sync.cjs # this script +// # works fine! perhaps I should start running the rust build :) and give feedback on bugs anyways? +// +// show buffer text: +console.log(infish.toString()); // sync means it will show before async callbacks diff --git a/packages/agent-infra/mcp-servers/commands/tests/manual/exec-file-with-stdin.cjs b/packages/agent-infra/mcp-servers/commands/tests/manual/exec-file-with-stdin.cjs new file mode 100644 index 000000000..0a37106b1 --- /dev/null +++ b/packages/agent-infra/mcp-servers/commands/tests/manual/exec-file-with-stdin.cjs @@ -0,0 +1,46 @@ +/** + * The following code is modified based on + * https://github.com/g0t4/mcp-server-commands/blob/master/tests/manual/exec-file-with-stdin.cjs + * + * MIT License + * Copyright (c) 2025 g0t4 + * https://github.com/g0t4/mcp-server-commands/blob/master/LICENSE + */ +const { execFile } = require('child_process'); + +/** + * Executes a file with the given arguments, piping input to stdin. + * @param {string} file - The file to execute. + * @param {string[]} args - Array of arguments for the file. + * @param {string} input - The string to pipe to stdin. + * @returns {Promise<{ stdout: string, stderr: string }>} Resolves with stdout and stderr. + */ +function execFileWithInputTest(file, args, input) { + return new Promise((resolve, reject) => { + const child = execFile(file, args, (error, stdout, stderr) => { + if (error) { + reject({ error, stdout, stderr }); + } else { + resolve({ stdout, stderr }); + } + }); + + if (input) { + child.stdin.write(input); + child.stdin.end(); + } + }); +} + +// Example usage +execFileWithInputTest('cat', [], 'Hello, world!') + .then(({ stdout, stderr }) => { + //throw new Error('This should not be executed'); // demo how catch would catch this too and yeah not desirable (necessarily) + console.log('STDOUT:', stdout); + console.log('STDERR:', stderr); + }) + .catch(({ error, stdout, stderr }) => { + console.error('ERROR:', error); + console.error('STDOUT:', stdout); + console.error('STDERR:', stderr); + }); diff --git a/packages/agent-infra/mcp-servers/commands/tests/manual/fish-exec-fail-repro.js b/packages/agent-infra/mcp-servers/commands/tests/manual/fish-exec-fail-repro.js new file mode 100644 index 000000000..dfa8b89cf --- /dev/null +++ b/packages/agent-infra/mcp-servers/commands/tests/manual/fish-exec-fail-repro.js @@ -0,0 +1,71 @@ +/** + * The following code is modified based on + * https://github.com/g0t4/mcp-server-commands/blob/master/tests/manual/fish-exec-fail-repro.js + * + * MIT License + * Copyright (c) 2025 g0t4 + * https://github.com/g0t4/mcp-server-commands/blob/master/LICENSE + */ +import { exec, execSync } from 'child_process'; +import { promisify } from 'util'; + +const execAsync = promisify(exec); + +function test_callback() { + exec('fish', (error, stdout, stderr) => { + console.log('stdout', stdout); + console.log('stderr', stderr); + }); +} + +async function main() { + //const { stdout, stderr } = await execAsync('fish -c "echo hello"'); // works + const { stdout, stderr } = await execAsync('fish --no-config --no-execute'); // fails, smth to do with interactive vs not? + //const { stdout, stderr } = await execAsync("cat"); // fails, smth to do with interactive vs not? + + console.log('stdout', stdout); + console.log('stderr', stderr); +} + +//test_callback(); +//main(); +// + +import { execFileWithInput } from '../build/exec-utils.js'; + +async function test_workaround() { + const { stdout, stderr } = await execFileWithInput( + // TODO add integration tests for these scenarios, I need to verify them as I make more changes + //"fish", + 'fish -i', + // TODO "bash" test case too + 'echo hello', + {}, + ); + + console.log('stdout', stdout); + console.log('stderr', stderr); +} + +test_workaround(); + +// WEIRD FISH SHELL FAILURE, look into later, actually referenced in fish source code: +// re: "Unable to read input file: Is a directory" +// has smth to do with stdin for script +// what is strange is if I do `fish -c "echo foobar"` that works fine via exec but I cannot exec/execFile and pass string to stdin and have it work with just fish shell +// appears to be open bug in fish shell: +// https://github.com/fish-shell/fish-shell/blob/master/src/reader.rs#L678-L681 +// // XXX: This can be triggered spuriously, so we'll not do that for stdin. +// // This can be seen e.g. with node's "spawn" api. + +async function main_execSyncTest() { + const { stdout, stderr } = execSync('fish --no-config -i ', { + encoding: 'utf8', + input: 'echo hello', + }); + + console.log('stdout', stdout); + console.log('stderr', stderr); +} + +//main_execSyncTest(); diff --git a/packages/agent-infra/mcp-servers/commands/tests/manual/fish-spawn.cjs b/packages/agent-infra/mcp-servers/commands/tests/manual/fish-spawn.cjs new file mode 100644 index 000000000..3c28c37bb --- /dev/null +++ b/packages/agent-infra/mcp-servers/commands/tests/manual/fish-spawn.cjs @@ -0,0 +1,29 @@ +/** + * The following code is modified based on + * https://github.com/g0t4/mcp-server-commands/blob/master/tests/manual/fish-spawn.cjs + * + * MIT License + * Copyright (c) 2025 g0t4 + * https://github.com/g0t4/mcp-server-commands/blob/master/LICENSE + */ +const { spawn } = require('child_process'); + +const script = ` +echo "Hello from Fish shell!" +set greeting "Hello, Node.js!" +echo $greeting +`; + +const child = spawn('fish', [], { + stdio: ['pipe', 'inherit', 'inherit'], // Use 'pipe' for stdin, 'inherit' to show output in the console +}); + +// Write the script to stdin +child.stdin.write(script); + +// Close stdin to signal end of input +child.stdin.end(); + +child.on('close', (code) => { + console.log(`Fish shell exited with code ${code}`); +}); diff --git a/packages/agent-infra/mcp-servers/commands/tests/manual/fish-spawn3.cjs b/packages/agent-infra/mcp-servers/commands/tests/manual/fish-spawn3.cjs new file mode 100644 index 000000000..4f9001021 --- /dev/null +++ b/packages/agent-infra/mcp-servers/commands/tests/manual/fish-spawn3.cjs @@ -0,0 +1,32 @@ +/** + * The following code is modified based on + * https://github.com/g0t4/mcp-server-commands/blob/master/tests/manual/fish-spawn3.cjs + * + * MIT License + * Copyright (c) 2025 g0t4 + * https://github.com/g0t4/mcp-server-commands/blob/master/LICENSE + */ +const { spawn } = require('child_process'); + +// Original script +const script = ` +echo "Hello from Fish shell!" +set greeting "Hello, \"Node.js!\"" +echo $greeting +`; + +// Encode the script in Base64 +const base64Script = Buffer.from(script).toString('base64'); + +// Use echo to pipe the Base64 script into Fish, decode, and execute +const child = spawn( + 'sh', + ['-c', `echo "${base64Script}" | base64 --decode | fish`], + { + stdio: ['inherit', 'inherit', 'inherit'], // Inherit all standard streams + }, +); + +child.on('close', (code) => { + console.log(`Fish shell exited with code ${code}`); +}); diff --git a/packages/agent-infra/mcp-servers/commands/tests/manual/test-with-error.cjs b/packages/agent-infra/mcp-servers/commands/tests/manual/test-with-error.cjs new file mode 100644 index 000000000..c84801041 --- /dev/null +++ b/packages/agent-infra/mcp-servers/commands/tests/manual/test-with-error.cjs @@ -0,0 +1,39 @@ +/** + * The following code is modified based on + * https://github.com/g0t4/mcp-server-commands/blob/master/tests/manual/test-with-error.cjs + * + * MIT License + * Copyright (c) 2025 g0t4 + * https://github.com/g0t4/mcp-server-commands/blob/master/LICENSE + */ +const { exec } = require('child_process'); +const { promisify } = require('util'); + +const execAsync = promisify(exec); + +async function runCommand(command) { + try { + const { stdout, stderr } = await execAsync(command); + // Handle successful output + console.log('Command succeeded with output:'); + console.log('stdout:', stdout); + console.log('stderr:', stderr); // Stderr may still contain warnings + } catch (error) { + // Catch errors and still access stdout/stderr + console.error('error:', error.message); + console.error('stdout:', error.stdout); // Stdout on error + console.error('stderr:', error.stderr); // Stderr on error + } +} + +// Example usage +//runCommand('ls invalid-folder'); // Command likely to fail +//runCommand('echo "Hello, World!"'); // Command likely to succeed +// +const { argv } = process; +if (argv.length < 3) { + console.log('Usage: node test2.cjs '); + process.exit(1); +} + +runCommand(argv.slice(2).join(' ')); diff --git a/packages/agent-infra/mcp-servers/commands/tests/manual/test-without-error-handler.cjs b/packages/agent-infra/mcp-servers/commands/tests/manual/test-without-error-handler.cjs new file mode 100644 index 000000000..b883e1cbf --- /dev/null +++ b/packages/agent-infra/mcp-servers/commands/tests/manual/test-without-error-handler.cjs @@ -0,0 +1,19 @@ +/** + * The following code is modified based on + * https://github.com/g0t4/mcp-server-commands/blob/master/tests/manual/test-without-error-handler.cjs + * + * MIT License + * Copyright (c) 2025 g0t4 + * https://github.com/g0t4/mcp-server-commands/blob/master/LICENSE + */ +const util = require('node:util'); +const exec = util.promisify(require('node:child_process').exec); + +async function main() { + const { argv } = process; + const { stdout, stderr } = await exec(argv[2]); + console.log('stdout:', stdout); + console.error('stderr:', stderr); +} + +main(); diff --git a/packages/agent-infra/mcp-servers/commands/tests/manual/test.ts b/packages/agent-infra/mcp-servers/commands/tests/manual/test.ts new file mode 100644 index 000000000..a909f40bd --- /dev/null +++ b/packages/agent-infra/mcp-servers/commands/tests/manual/test.ts @@ -0,0 +1,53 @@ +/** + * The following code is modified based on + * https://github.com/g0t4/mcp-server-commands/blob/master/tests/manual/test.ts + * + * MIT License + * Copyright (c) 2025 g0t4 + * https://github.com/g0t4/mcp-server-commands/blob/master/LICENSE + */ +type Baz = { qux: string } | undefined; + +const bar = { + baz: { + qux: 'quux', + } as Baz, +}; + +console.log(bar); + +console.log('bar.baz', bar.baz); + +console.log('bar.baz.qux', bar.baz?.qux); + +function setRandom(): Baz { + return Math.random() > 0.5 ? { qux: 'random' } : undefined; +} + +bar.baz = setRandom(); + +console.log('bar.baz.qux', bar.baz?.qux); + +type FooString = { foo?: string }; + +console.log(); +function dump(fooString: FooString) { + if (fooString.foo) { + console.log(fooString.foo); + } else { + console.log('NOPE'); + } +} + +const foo: FooString = { foo: 'bar' }; +dump(foo); + +const foo1 = { foo: undefined } as FooString; +dump(foo1); + +const foo2 = { foo: '' } as FooString; +dump(foo2); + +const hello = [1, 2]; + +console.log([3].concat(hello)); diff --git a/packages/agent-infra/mcp-servers/commands/tsconfig.json b/packages/agent-infra/mcp-servers/commands/tsconfig.json new file mode 100644 index 000000000..560d8ef30 --- /dev/null +++ b/packages/agent-infra/mcp-servers/commands/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "Node16", + "moduleResolution": "Node16", + "outDir": "./build", + "rootDir": "./src", + "declaration": true, + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/packages/agent-infra/mcp-servers/commands/vitest.config.mts b/packages/agent-infra/mcp-servers/commands/vitest.config.mts new file mode 100644 index 000000000..9e1a00225 --- /dev/null +++ b/packages/agent-infra/mcp-servers/commands/vitest.config.mts @@ -0,0 +1,12 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + environment: 'node', + include: ['**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], + }, +}); diff --git a/packages/agent-infra/mcp-servers/filesystem/Dockerfile b/packages/agent-infra/mcp-servers/filesystem/Dockerfile new file mode 100644 index 000000000..418b14005 --- /dev/null +++ b/packages/agent-infra/mcp-servers/filesystem/Dockerfile @@ -0,0 +1,25 @@ +FROM node:22.12-alpine AS builder + +WORKDIR /app + +COPY src/filesystem /app +COPY tsconfig.json /tsconfig.json + +RUN --mount=type=cache,target=/root/.npm npm install + +RUN --mount=type=cache,target=/root/.npm-production npm ci --ignore-scripts --omit-dev + + +FROM node:22-alpine AS release + +WORKDIR /app + +COPY --from=builder /app/dist /app/dist +COPY --from=builder /app/package.json /app/package.json +COPY --from=builder /app/package-lock.json /app/package-lock.json + +ENV NODE_ENV=production + +RUN npm ci --ignore-scripts --omit-dev + +ENTRYPOINT ["node", "/app/dist/index.js"] \ No newline at end of file diff --git a/packages/agent-infra/mcp-servers/filesystem/README.md b/packages/agent-infra/mcp-servers/filesystem/README.md new file mode 100644 index 000000000..732bf5b7c --- /dev/null +++ b/packages/agent-infra/mcp-servers/filesystem/README.md @@ -0,0 +1,3 @@ +# Filesystem MCP Server + +Node.js server implementing Model Context Protocol (MCP) for filesystem operations. diff --git a/packages/agent-infra/mcp-servers/filesystem/index.ts b/packages/agent-infra/mcp-servers/filesystem/index.ts new file mode 100644 index 000000000..8237be4e8 --- /dev/null +++ b/packages/agent-infra/mcp-servers/filesystem/index.ts @@ -0,0 +1,72 @@ +#!/usr/bin/env node +/** + * The following code is modified based on + * https://github.com/modelcontextprotocol/servers/blob/main/src/filesystem/index.ts + * + * MIT License + * Copyright (c) 2024 Anthropic, PBC + * https://github.com/modelcontextprotocol/servers/blob/main/LICENSE + */ + +import { Server } from '@modelcontextprotocol/sdk/server/index.js'; +import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; +import { + CallToolRequestSchema, + ListToolsRequestSchema, +} from '@modelcontextprotocol/sdk/types.js'; +import { + client as filesystemClient, + getAllowedDirectories, + setAllowedDirectories, +} from './server.js'; + +// Command line argument parsinggetAllowedDirectories, +const args = process.argv.slice(2); +if (args.length === 0) { + console.error( + 'Usage: mcp-server-filesystem [additional-directories...]', + ); + process.exit(1); +} + +try { + setAllowedDirectories(args); +} catch (error) { + console.error('Error setting allowed directories:', error); + process.exit(1); +} + +const allowedDirectories = getAllowedDirectories(); + +// Server setup +const server = new Server( + { + name: 'secure-filesystem-server', + version: '0.2.0', + }, + { + capabilities: { + tools: {}, + }, + }, +); + +// Tool handlers +server.setRequestHandler(ListToolsRequestSchema, filesystemClient.listTools); + +server.setRequestHandler(CallToolRequestSchema, async (request) => { + return filesystemClient.callTool(request.params); +}); + +// Start server +async function runServer() { + const transport = new StdioServerTransport(); + await server.connect(transport); + console.error('Secure MCP Filesystem Server running on stdio'); + console.error('Allowed directories:', allowedDirectories); +} + +runServer().catch((error) => { + console.error('Fatal error running server:', error); + process.exit(1); +}); diff --git a/packages/agent-infra/mcp-servers/filesystem/package.json b/packages/agent-infra/mcp-servers/filesystem/package.json new file mode 100644 index 000000000..4c2691432 --- /dev/null +++ b/packages/agent-infra/mcp-servers/filesystem/package.json @@ -0,0 +1,39 @@ +{ + "name": "@agent-infra/mcp-server-filesystem", + "version": "0.0.1", + "description": "MCP server for filesystem access", + "license": "MIT", + "type": "module", + "main": "./dist/server.js", + "module": "./dist/server.js", + "types": "./dist/server.d.ts", + "bin": { + "mcp-server-filesystem": "dist/index.js" + }, + "files": [ + "dist" + ], + "scripts": { + "build": "rm -rf dist && tsc && shx chmod +x dist/*.js", + "dev": "npx -y @modelcontextprotocol/inspector tsx index.ts", + "prepare": "npm run build", + "watch": "tsc --watch" + }, + "dependencies": { + "@modelcontextprotocol/sdk": "^1.6.1", + "diff": "^5.1.0", + "glob": "^10.3.10", + "minimatch": "^10.0.1", + "zod-to-json-schema": "^3.23.5" + }, + "devDependencies": { + "zod": "^3.23.8", + "tsx": "^4.19.3", + "vitest": "^3.0.7", + "@types/diff": "^5.0.9", + "@types/minimatch": "^5.1.2", + "@types/node": "^22", + "shx": "^0.3.4", + "typescript": "^5.7.3" + } +} diff --git a/packages/agent-infra/mcp-servers/filesystem/schema.ts b/packages/agent-infra/mcp-servers/filesystem/schema.ts new file mode 100644 index 000000000..d7e985c5b --- /dev/null +++ b/packages/agent-infra/mcp-servers/filesystem/schema.ts @@ -0,0 +1,64 @@ +/** + * The following code is modified based on + * https://github.com/modelcontextprotocol/servers/blob/main/src/filesystem/index.ts + * + * MIT License + * Copyright (c) 2024 Anthropic, PBC + * https://github.com/modelcontextprotocol/servers/blob/main/LICENSE + */ +import { z } from 'zod'; + +// Schema definitions +export const ReadFileArgsSchema = z.object({ + path: z.string(), +}); + +export const ReadMultipleFilesArgsSchema = z.object({ + paths: z.array(z.string()), +}); + +export const WriteFileArgsSchema = z.object({ + path: z.string(), + content: z.string(), +}); + +export const EditOperation = z.object({ + oldText: z.string().describe('Text to search for - must match exactly'), + newText: z.string().describe('Text to replace with'), +}); + +export const EditFileArgsSchema = z.object({ + path: z.string(), + edits: z.array(EditOperation), + dryRun: z + .boolean() + .default(false) + .describe('Preview changes using git-style diff format'), +}); + +export const CreateDirectoryArgsSchema = z.object({ + path: z.string(), +}); + +export const ListDirectoryArgsSchema = z.object({ + path: z.string(), +}); + +export const DirectoryTreeArgsSchema = z.object({ + path: z.string(), +}); + +export const MoveFileArgsSchema = z.object({ + source: z.string(), + destination: z.string(), +}); + +export const SearchFilesArgsSchema = z.object({ + path: z.string(), + pattern: z.string(), + excludePatterns: z.array(z.string()).optional().default([]), +}); + +export const GetFileInfoArgsSchema = z.object({ + path: z.string(), +}); diff --git a/packages/agent-infra/mcp-servers/filesystem/server.ts b/packages/agent-infra/mcp-servers/filesystem/server.ts new file mode 100644 index 000000000..1424d7357 --- /dev/null +++ b/packages/agent-infra/mcp-servers/filesystem/server.ts @@ -0,0 +1,523 @@ +/** + * The following code is modified based on + * https://github.com/modelcontextprotocol/servers/blob/main/src/filesystem/index.ts + * + * MIT License + * Copyright (c) 2024 Anthropic, PBC + * https://github.com/modelcontextprotocol/servers/blob/main/LICENSE + */ +import { Client } from '@modelcontextprotocol/sdk/client/index.js'; +import { z } from 'zod'; +import fs from 'fs/promises'; +import fsSync from 'fs'; +import path from 'path'; +import { minimatch } from 'minimatch'; +import { zodToJsonSchema } from 'zod-to-json-schema'; +import { + CallToolResult, + TextContent, + ToolSchema, +} from '@modelcontextprotocol/sdk/types.js'; +import { + CreateDirectoryArgsSchema, + DirectoryTreeArgsSchema, + EditFileArgsSchema, + GetFileInfoArgsSchema, + ListDirectoryArgsSchema, + MoveFileArgsSchema, + ReadFileArgsSchema, + ReadMultipleFilesArgsSchema, + SearchFilesArgsSchema, + WriteFileArgsSchema, +} from './schema.js'; +import { + normalizePath, + expandHome, + applyFileEdits, + getFileStats, +} from './utils.js'; + +let allowedDirectories: string[] = []; + +export function setAllowedDirectories(dirs: string[]) { + allowedDirectories = dirs.map((dir) => { + // Store allowed directories in normalized form + return normalizePath(path.resolve(expandHome(dir))); + }); + + allowedDirectories.forEach((dir) => { + const stats = fsSync.statSync(dir); + if (!stats.isDirectory()) { + console.error(`Error: ${dir} is not a directory`); + throw new Error(`${dir} is not a directory`); + } + }); +} + +export function getAllowedDirectories() { + return allowedDirectories; +} + +// Security utilities +async function validatePath(requestedPath: string): Promise { + console.log('requestedPath', requestedPath); + const expandedPath = expandHome(requestedPath); + const absolute = path.isAbsolute(expandedPath) + ? path.resolve(expandedPath) + : path.resolve(process.cwd(), expandedPath); + + const normalizedRequested = normalizePath(absolute); + console.log('allowedDirectories', allowedDirectories); + + // Check if path is within allowed directories + const isAllowed = allowedDirectories.some((dir) => + normalizedRequested.startsWith(dir), + ); + if (!isAllowed) { + throw new Error( + `Access denied - path outside allowed directories: ${absolute} not in ${allowedDirectories.join(', ')}`, + ); + } + + // Handle symlinks by checking their real path + try { + const realPath = await fs.realpath(absolute); + const normalizedReal = normalizePath(realPath); + const isRealPathAllowed = allowedDirectories.some((dir) => + normalizedReal.startsWith(dir), + ); + if (!isRealPathAllowed) { + throw new Error( + 'Access denied - symlink target outside allowed directories', + ); + } + return realPath; + } catch (error) { + console.error('[validatePath] error', error); + // For new files that don't exist yet, verify parent directory + const parentDir = path.dirname(absolute); + console.log('parentDir', parentDir); + try { + const realParentPath = await fs.realpath(parentDir); + const normalizedParent = normalizePath(realParentPath); + const isParentAllowed = allowedDirectories.some((dir) => + normalizedParent.startsWith(dir), + ); + if (!isParentAllowed) { + throw new Error( + 'Access denied - parent directory outside allowed directories', + ); + } + return absolute; + } catch (error) { + console.error('[validatePath] error_2', error); + throw new Error(`Parent directory does not exist: ${parentDir}`); + } + } +} + +const toolsMap = { + read_file: { + description: + 'Read the complete contents of a file from the file system. ' + + 'Handles various text encodings and provides detailed error messages ' + + 'if the file cannot be read. Use this tool when you need to examine ' + + 'the contents of a single file. Only works within allowed directories.', + inputSchema: ReadFileArgsSchema, + }, + read_multiple_files: { + description: + 'Read the contents of multiple files simultaneously. This is more ' + + 'efficient than reading files one by one when you need to analyze ' + + "or compare multiple files. Each file's content is returned with its " + + "path as a reference. Failed reads for individual files won't stop " + + 'the entire operation. Only works within allowed directories.', + inputSchema: ReadMultipleFilesArgsSchema, + }, + write_file: { + description: + 'Create a new file or completely overwrite an existing file with new content. ' + + 'Use with caution as it will overwrite existing files without warning. ' + + 'Handles text content with proper encoding. Only works within allowed directories.', + inputSchema: WriteFileArgsSchema, + }, + edit_file: { + description: + 'Make line-based edits to a text file. Each edit replaces exact line sequences ' + + 'with new content. Returns a git-style diff showing the changes made. ' + + 'Only works within allowed directories.', + inputSchema: EditFileArgsSchema, + }, + create_directory: { + description: + 'Create a new directory or ensure a directory exists. Can create multiple ' + + 'nested directories in one operation. If the directory already exists, ' + + 'this operation will succeed silently. Perfect for setting up directory ' + + 'structures for projects or ensuring required paths exist. Only works within allowed directories.', + inputSchema: CreateDirectoryArgsSchema, + }, + list_directory: { + description: + 'Get a detailed listing of all files and directories in a specified path. ' + + 'Results clearly distinguish between files and directories with [FILE] and [DIR] ' + + 'prefixes. This tool is essential for understanding directory structure and ' + + 'finding specific files within a directory. Only works within allowed directories.', + inputSchema: ListDirectoryArgsSchema, + }, + directory_tree: { + description: + 'Get a recursive tree view of files and directories as a JSON structure. ' + + "Each entry includes 'name', 'type' (file/directory), and 'children' for directories. " + + 'Files have no children array, while directories always have a children array (which may be empty). ' + + 'The output is formatted with 2-space indentation for readability. Only works within allowed directories.', + inputSchema: DirectoryTreeArgsSchema, + }, + move_file: { + description: + 'Move or rename files and directories. Can move files between directories ' + + 'and rename them in a single operation. If the destination exists, the ' + + 'operation will fail. Works across different directories and can be used ' + + 'for simple renaming within the same directory. Both source and destination must be within allowed directories.', + inputSchema: MoveFileArgsSchema, + }, + search_files: { + description: + 'Recursively search for files and directories matching a pattern. ' + + 'Searches through all subdirectories from the starting path. The search ' + + 'is case-insensitive and matches partial names. Returns full paths to all ' + + "matching items. Great for finding files when you don't know their exact location. " + + 'Only searches within allowed directories.', + inputSchema: SearchFilesArgsSchema, + }, + get_file_info: { + description: + 'Retrieve detailed metadata about a file or directory. Returns comprehensive ' + + 'information including size, creation time, last modified time, permissions, ' + + 'and type. This tool is perfect for understanding file characteristics ' + + 'without reading the actual content. Only works within allowed directories.', + inputSchema: GetFileInfoArgsSchema, + }, + list_allowed_directories: { + description: + 'Returns the list of directories that this server is allowed to access. ' + + 'Use this to understand which directories are available before trying to access files.', + inputSchema: z.object({}), + }, +}; + +const ToolInputSchema = ToolSchema.shape.inputSchema; +type ToolInput = z.infer; +type ToolNames = keyof typeof toolsMap; +type ToolInputMap = { + [K in ToolNames]: z.infer<(typeof toolsMap)[K]['inputSchema']>; +}; + +const listTools: Client['listTools'] = async () => { + const mcpTools = Object.keys(toolsMap || {}).map((key) => { + const name = key as ToolNames; + const tool = toolsMap[name]; + return { + // @ts-ignore + name: tool?.name || name, + description: tool.description, + inputSchema: zodToJsonSchema(tool.inputSchema) as ToolInput, + }; + }); + + return { + tools: mcpTools, + }; +}; + +async function searchFiles( + rootPath: string, + pattern: string, + excludePatterns: string[] = [], +): Promise { + const results: string[] = []; + + async function search(currentPath: string) { + const entries = await fs.readdir(currentPath, { withFileTypes: true }); + + for (const entry of entries) { + const fullPath = path.join(currentPath, entry.name); + + try { + // Validate each path before processing + await validatePath(fullPath); + + // Check if path matches any exclude pattern + const relativePath = path.relative(rootPath, fullPath); + const shouldExclude = excludePatterns.some((pattern) => { + const globPattern = pattern.includes('*') + ? pattern + : `**/${pattern}/**`; + return minimatch(relativePath, globPattern, { dot: true }); + }); + + if (shouldExclude) { + continue; + } + + if (entry.name.toLowerCase().includes(pattern.toLowerCase())) { + results.push(fullPath); + } + + if (entry.isDirectory()) { + await search(fullPath); + } + } catch (error) { + // Skip invalid paths during search + continue; + } + } + } + + await search(rootPath); + return results; +} + +const callTool: Client['callTool'] = async ({ + name, + arguments: toolArgs, +}): Promise => { + const handlers: { + [K in ToolNames]: (args: ToolInputMap[K]) => Promise; + } = { + read_file: async (args) => { + const parsed = ReadFileArgsSchema.safeParse(args); + if (!parsed.success) { + throw new Error(`Invalid arguments for read_file: ${parsed.error}`); + } + const validPath = await validatePath(parsed.data.path); + const content = await fs.readFile(validPath, 'utf-8'); + return { + content: [{ type: 'text', text: content }], + }; + }, + read_multiple_files: async (args) => { + const parsed = ReadMultipleFilesArgsSchema.safeParse(args); + if (!parsed.success) { + throw new Error( + `Invalid arguments for read_multiple_files: ${parsed.error}`, + ); + } + const results = await Promise.all( + parsed.data.paths.map(async (filePath: string) => { + try { + const validPath = await validatePath(filePath); + const content = await fs.readFile(validPath, 'utf-8'); + return `${filePath}:\n${content}\n`; + } catch (error) { + const errorMessage = + error instanceof Error ? error.message : String(error); + return `${filePath}: Error - ${errorMessage}`; + } + }), + ); + return { + content: [{ type: 'text', text: results.join('\n---\n') }], + }; + }, + write_file: async (args) => { + const parsed = WriteFileArgsSchema.safeParse(args); + if (!parsed.success) { + throw new Error(`Invalid arguments for write_file: ${parsed.error}`); + } + const validPath = await validatePath(parsed.data.path); + await fs.writeFile(validPath, parsed.data.content, 'utf-8'); + return { + content: [ + { type: 'text', text: `Successfully wrote to ${parsed.data.path}` }, + ], + }; + }, + edit_file: async (args) => { + const parsed = EditFileArgsSchema.safeParse(args); + if (!parsed.success) { + throw new Error(`Invalid arguments for edit_file: ${parsed.error}`); + } + const validPath = await validatePath(parsed.data.path); + const result = await applyFileEdits( + validPath, + parsed.data.edits, + parsed.data.dryRun, + ); + return { + content: [{ type: 'text', text: result }], + }; + }, + create_directory: async (args) => { + const parsed = CreateDirectoryArgsSchema.safeParse(args); + if (!parsed.success) { + throw new Error( + `Invalid arguments for create_directory: ${parsed.error}`, + ); + } + const validPath = await validatePath(parsed.data.path); + await fs.mkdir(validPath, { recursive: true }); + return { + content: [ + { + type: 'text', + text: `Successfully created directory ${parsed.data.path}`, + }, + ], + }; + }, + list_directory: async (args) => { + const parsed = ListDirectoryArgsSchema.safeParse(args); + if (!parsed.success) { + throw new Error( + `Invalid arguments for list_directory: ${parsed.error}`, + ); + } + const validPath = await validatePath(parsed.data.path); + const entries = await fs.readdir(validPath, { withFileTypes: true }); + const formatted = entries + .map( + (entry) => + `${entry.isDirectory() ? '[DIR]' : '[FILE]'} ${entry.name}`, + ) + .join('\n'); + return { + content: [{ type: 'text', text: formatted }], + }; + }, + directory_tree: async (args) => { + const parsed = DirectoryTreeArgsSchema.safeParse(args); + if (!parsed.success) { + throw new Error( + `Invalid arguments for directory_tree: ${parsed.error}`, + ); + } + + interface TreeEntry { + name: string; + type: 'file' | 'directory'; + children?: TreeEntry[]; + } + + async function buildTree(currentPath: string): Promise { + const validPath = await validatePath(currentPath); + const entries = await fs.readdir(validPath, { withFileTypes: true }); + const result: TreeEntry[] = []; + + for (const entry of entries) { + const entryData: TreeEntry = { + name: entry.name, + type: entry.isDirectory() ? 'directory' : 'file', + }; + + if (entry.isDirectory()) { + const subPath = path.join(currentPath, entry.name); + entryData.children = await buildTree(subPath); + } + + result.push(entryData); + } + + return result; + } + + const treeData = await buildTree(parsed.data.path); + return { + content: [ + { + type: 'text', + text: JSON.stringify(treeData, null, 2), + }, + ], + }; + }, + move_file: async (args) => { + const parsed = MoveFileArgsSchema.safeParse(args); + if (!parsed.success) { + throw new Error(`Invalid arguments for move_file: ${parsed.error}`); + } + const validSourcePath = await validatePath(parsed.data.source); + const validDestPath = await validatePath(parsed.data.destination); + await fs.rename(validSourcePath, validDestPath); + return { + content: [ + { + type: 'text', + text: `Successfully moved ${parsed.data.source} to ${parsed.data.destination}`, + }, + ], + }; + }, + search_files: async (args) => { + const parsed = SearchFilesArgsSchema.safeParse(args); + if (!parsed.success) { + throw new Error(`Invalid arguments for search_files: ${parsed.error}`); + } + const validPath = await validatePath(parsed.data.path); + const results = await searchFiles( + validPath, + parsed.data.pattern, + parsed.data.excludePatterns, + ); + return { + content: [ + { + type: 'text', + text: results.length > 0 ? results.join('\n') : 'No matches found', + }, + ], + }; + }, + get_file_info: async (args) => { + const parsed = GetFileInfoArgsSchema.safeParse(args); + if (!parsed.success) { + throw new Error(`Invalid arguments for get_file_info: ${parsed.error}`); + } + const validPath = await validatePath(parsed.data.path); + const info = await getFileStats(validPath); + return { + content: [ + { + type: 'text', + text: Object.entries(info) + .map(([key, value]) => `${key}: ${value}`) + .join('\n'), + }, + ], + }; + }, + list_allowed_directories: async () => { + return { + content: [ + { + type: 'text', + text: `Allowed directories:\n${allowedDirectories.join('\n')}`, + }, + ], + }; + }, + }; + + if (handlers[name as ToolNames]) { + return handlers[name as ToolNames](toolArgs as any); + } + + return { + content: [ + { + type: 'text', + text: `Unknown tool: ${name}`, + }, + ], + isError: true, + }; +}; + +const close: Client['close'] = async () => { + return; +}; + +export const client: Pick = { + callTool, + listTools, + close, +}; diff --git a/packages/agent-infra/mcp-servers/filesystem/tsconfig.json b/packages/agent-infra/mcp-servers/filesystem/tsconfig.json new file mode 100644 index 000000000..22643d8c3 --- /dev/null +++ b/packages/agent-infra/mcp-servers/filesystem/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "target": "ES2022", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "outDir": "./dist", + "rootDir": ".", + "declaration": true, + "moduleResolution": "NodeNext", + "module": "NodeNext" + }, + "include": ["./**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/packages/agent-infra/mcp-servers/filesystem/utils.ts b/packages/agent-infra/mcp-servers/filesystem/utils.ts new file mode 100644 index 000000000..f05a92fa1 --- /dev/null +++ b/packages/agent-infra/mcp-servers/filesystem/utils.ts @@ -0,0 +1,153 @@ +/** + * The following code is modified based on + * https://github.com/modelcontextprotocol/servers/blob/main/src/filesystem/index.ts + * + * MIT License + * Copyright (c) 2024 Anthropic, PBC + * https://github.com/modelcontextprotocol/servers/blob/main/LICENSE + */ +import path from 'path'; +import os from 'os'; +import fs from 'fs/promises'; +import { createTwoFilesPatch } from 'diff'; + +// Normalize all paths consistently +export function normalizePath(p: string): string { + return path.normalize(p); +} + +export function expandHome(filepath: string): string { + if (filepath.startsWith('~/') || filepath === '~') { + return path.join(os.homedir(), filepath.slice(1)); + } + return filepath; +} + +// file editing and diffing utilities +function normalizeLineEndings(text: string): string { + return text.replace(/\r\n/g, '\n'); +} + +function createUnifiedDiff( + originalContent: string, + newContent: string, + filepath = 'file', +): string { + // Ensure consistent line endings for diff + const normalizedOriginal = normalizeLineEndings(originalContent); + const normalizedNew = normalizeLineEndings(newContent); + + return createTwoFilesPatch( + filepath, + filepath, + normalizedOriginal, + normalizedNew, + 'original', + 'modified', + ); +} + +export async function applyFileEdits( + filePath: string, + edits: Array<{ oldText: string; newText: string }>, + dryRun = false, +): Promise { + // Read file content and normalize line endings + const content = normalizeLineEndings(await fs.readFile(filePath, 'utf-8')); + + // Apply edits sequentially + let modifiedContent = content; + for (const edit of edits) { + const normalizedOld = normalizeLineEndings(edit.oldText); + const normalizedNew = normalizeLineEndings(edit.newText); + + // If exact match exists, use it + if (modifiedContent.includes(normalizedOld)) { + modifiedContent = modifiedContent.replace(normalizedOld, normalizedNew); + continue; + } + + // Otherwise, try line-by-line matching with flexibility for whitespace + const oldLines = normalizedOld.split('\n'); + const contentLines = modifiedContent.split('\n'); + let matchFound = false; + + for (let i = 0; i <= contentLines.length - oldLines.length; i++) { + const potentialMatch = contentLines.slice(i, i + oldLines.length); + + // Compare lines with normalized whitespace + const isMatch = oldLines.every((oldLine, j) => { + const contentLine = potentialMatch[j]; + return oldLine.trim() === contentLine.trim(); + }); + + if (isMatch) { + // Preserve original indentation of first line + const originalIndent = contentLines[i].match(/^\s*/)?.[0] || ''; + const newLines = normalizedNew.split('\n').map((line, j) => { + if (j === 0) return originalIndent + line.trimStart(); + // For subsequent lines, try to preserve relative indentation + const oldIndent = oldLines[j]?.match(/^\s*/)?.[0] || ''; + const newIndent = line.match(/^\s*/)?.[0] || ''; + if (oldIndent && newIndent) { + const relativeIndent = newIndent.length - oldIndent.length; + return ( + originalIndent + + ' '.repeat(Math.max(0, relativeIndent)) + + line.trimStart() + ); + } + return line; + }); + + contentLines.splice(i, oldLines.length, ...newLines); + modifiedContent = contentLines.join('\n'); + matchFound = true; + break; + } + } + + if (!matchFound) { + throw new Error(`Could not find exact match for edit:\n${edit.oldText}`); + } + } + + // Create unified diff + const diff = createUnifiedDiff(content, modifiedContent, filePath); + + // Format diff with appropriate number of backticks + let numBackticks = 3; + while (diff.includes('`'.repeat(numBackticks))) { + numBackticks++; + } + const formattedDiff = `${'`'.repeat(numBackticks)}diff\n${diff}${'`'.repeat(numBackticks)}\n\n`; + + if (!dryRun) { + await fs.writeFile(filePath, modifiedContent, 'utf-8'); + } + + return formattedDiff; +} + +interface FileInfo { + size: number; + created: Date; + modified: Date; + accessed: Date; + isDirectory: boolean; + isFile: boolean; + permissions: string; +} + +export async function getFileStats(filePath: string): Promise { + const stats = await fs.stat(filePath); + return { + size: stats.size, + created: stats.birthtime, + modified: stats.mtime, + accessed: stats.atime, + isDirectory: stats.isDirectory(), + isFile: stats.isFile(), + permissions: stats.mode.toString(8).slice(-3), + }; +} diff --git a/packages/agent-infra/mcp-servers/filesystem/vitest.config.mts b/packages/agent-infra/mcp-servers/filesystem/vitest.config.mts new file mode 100644 index 000000000..9e1a00225 --- /dev/null +++ b/packages/agent-infra/mcp-servers/filesystem/vitest.config.mts @@ -0,0 +1,12 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + environment: 'node', + include: ['**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 63923f3f6..ef83f01a4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -375,6 +375,58 @@ importers: specifier: 3.0.7 version: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4) + packages/agent-infra/browser-use: + dependencies: + '@agent-infra/browser': + specifier: workspace:* + version: link:../browser + '@agent-infra/logger': + specifier: workspace:* + version: link:../logger + '@agent-infra/shared': + specifier: workspace:* + version: link:../shared + '@langchain/core': + specifier: 0.3.42 + version: 0.3.42(openai@4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2)) + jsonrepair: + specifier: 3.12.0 + version: 3.12.0 + openai: + specifier: ^4.87.3 + version: 4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2) + puppeteer-core: + specifier: 24.1.1 + version: 24.1.1 + zod: + specifier: ^3.23.8 + version: 3.24.2 + devDependencies: + '@langchain/aws': + specifier: 0.1.6 + version: 0.1.6(@langchain/core@0.3.42(openai@4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2))) + '@langchain/openai': + specifier: 0.4.4 + version: 0.4.4(@langchain/core@0.3.42(openai@4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2)))(encoding@0.1.13)(ws@8.18.0) + '@rslib/core': + specifier: 0.5.3 + version: 0.5.3(typescript@5.7.3) + '@types/node': + specifier: 20.14.8 + version: 20.14.8 + '@vitest/coverage-v8': + specifier: 3.0.7 + version: 3.0.7(vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4)) + tsx: + specifier: ^4.19.3 + version: 4.19.3 + typescript: + specifier: ^5.7.3 + version: 5.7.3 + vitest: + specifier: 3.0.7 + version: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4) + packages/agent-infra/logger: devDependencies: '@rslib/core': @@ -387,6 +439,157 @@ importers: specifier: 4.9.4 version: 4.9.4 + packages/agent-infra/mcp-client: + dependencies: + '@modelcontextprotocol/sdk': + specifier: ^1.6.1 + version: 1.7.0 + uuid: + specifier: ^11.1.0 + version: 11.1.0 + zod: + specifier: ^3.23.8 + version: 3.24.2 + devDependencies: + '@agent-infra/mcp-server-browser': + specifier: workspace:* + version: link:../mcp-servers/browser + '@agent-infra/mcp-server-commands': + specifier: workspace:* + version: link:../mcp-servers/commands + '@agent-infra/mcp-server-filesystem': + specifier: workspace:* + version: link:../mcp-servers/filesystem + '@types/node': + specifier: ^20.11.24 + version: 20.14.8 + '@types/uuid': + specifier: ^10.0.0 + version: 10.0.0 + openai: + specifier: ^4.86.2 + version: 4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2) + tsx: + specifier: ^4.19.3 + version: 4.19.3 + typescript: + specifier: ^5.7.3 + version: 5.7.3 + vitest: + specifier: ^3.0.7 + version: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4) + + packages/agent-infra/mcp-servers/browser: + dependencies: + '@agent-infra/browser': + specifier: workspace:* + version: link:../../browser + '@agent-infra/browser-use': + specifier: workspace:* + version: link:../../browser-use + '@modelcontextprotocol/sdk': + specifier: ^1.6.1 + version: 1.7.0 + puppeteer-core: + specifier: ^24.1.1 + version: 24.1.1 + turndown: + specifier: ^7.2.0 + version: 7.2.0 + zod-to-json-schema: + specifier: ^3.23.5 + version: 3.24.1(zod@3.24.2) + devDependencies: + '@types/diff': + specifier: ^5.0.9 + version: 5.2.3 + '@types/minimatch': + specifier: ^5.1.2 + version: 5.1.2 + '@types/node': + specifier: ^22 + version: 22.13.10 + shx: + specifier: ^0.3.4 + version: 0.3.4 + tsx: + specifier: ^4.19.3 + version: 4.19.3 + typescript: + specifier: ^5.7.3 + version: 5.7.3 + vitest: + specifier: ^3.0.7 + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.10)(happy-dom@17.1.1)(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4) + zod: + specifier: ^3.23.8 + version: 3.24.2 + + packages/agent-infra/mcp-servers/commands: + dependencies: + '@modelcontextprotocol/sdk': + specifier: ^1.6.1 + version: 1.7.0 + devDependencies: + '@types/node': + specifier: ^20.11.24 + version: 20.14.8 + tsx: + specifier: ^4.19.3 + version: 4.19.3 + typescript: + specifier: ^5.7.3 + version: 5.7.3 + vitest: + specifier: ^3.0.7 + version: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4) + zod: + specifier: ^3.23.8 + version: 3.24.2 + + packages/agent-infra/mcp-servers/filesystem: + dependencies: + '@modelcontextprotocol/sdk': + specifier: ^1.6.1 + version: 1.7.0 + diff: + specifier: ^5.1.0 + version: 5.2.0 + glob: + specifier: ^10.3.10 + version: 10.4.5 + minimatch: + specifier: ^10.0.1 + version: 10.0.1 + zod-to-json-schema: + specifier: ^3.23.5 + version: 3.24.1(zod@3.24.2) + devDependencies: + '@types/diff': + specifier: ^5.0.9 + version: 5.2.3 + '@types/minimatch': + specifier: ^5.1.2 + version: 5.1.2 + '@types/node': + specifier: ^22 + version: 22.13.10 + shx: + specifier: ^0.3.4 + version: 0.3.4 + tsx: + specifier: ^4.19.3 + version: 4.19.3 + typescript: + specifier: ^5.7.3 + version: 5.7.3 + vitest: + specifier: ^3.0.7 + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.10)(happy-dom@17.1.1)(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4) + zod: + specifier: ^3.23.8 + version: 3.24.2 + packages/agent-infra/search/bing-search: dependencies: '@agent-infra/logger': @@ -546,7 +749,7 @@ importers: version: 5.7.3 vitest: specifier: ^3.0.2 - version: 3.0.5(@types/debug@4.1.12)(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4) packages/ui-tars/action-parser: dependencies: @@ -565,7 +768,7 @@ importers: version: 5.7.3 vitest: specifier: ^3.0.2 - version: 3.0.5(@types/debug@4.1.12)(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4) packages/ui-tars/cli: dependencies: @@ -605,7 +808,7 @@ importers: version: 5.7.3 vitest: specifier: ^3.0.2 - version: 3.0.5(@types/debug@4.1.12)(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4) packages/ui-tars/electron-ipc: devDependencies: @@ -623,13 +826,13 @@ importers: version: 5.7.3 vitest: specifier: ^3.0.2 - version: 3.0.5(@types/debug@4.1.12)(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4) packages/ui-tars/operators/browserbase: dependencies: '@browserbasehq/stagehand': specifier: ^1.13.0 - version: 1.13.0(@playwright/test@1.50.1)(deepmerge@2.2.1)(dotenv@16.4.7)(encoding@0.1.13)(openai@4.85.1(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2))(zod@3.24.2) + version: 1.13.0(@playwright/test@1.50.1)(deepmerge@2.2.1)(dotenv@16.4.7)(encoding@0.1.13)(openai@4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2))(zod@3.24.2) '@ui-tars/shared': specifier: workspace:* version: link:../../shared @@ -654,7 +857,7 @@ importers: version: 5.7.3 vitest: specifier: ^3.0.2 - version: 3.0.5(@types/debug@4.1.12)(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4) packages/ui-tars/operators/nut-js: dependencies: @@ -688,7 +891,7 @@ importers: version: 5.7.3 vitest: specifier: ^3.0.2 - version: 3.0.5(@types/debug@4.1.12)(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4) packages/ui-tars/sdk: dependencies: @@ -719,7 +922,7 @@ importers: version: 1.4.9 '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.3.4(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)) + version: 4.3.4(vite@5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4)) happy-dom: specifier: ^17.1.1 version: 17.1.1 @@ -737,7 +940,7 @@ importers: version: 5.7.3 vitest: specifier: ^3.0.2 - version: 3.0.5(@types/debug@4.1.12)(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4) vitest-browser-react: specifier: ^0.1.1 version: 0.1.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(@vitest/browser@3.0.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vitest@3.0.5) @@ -909,6 +1112,123 @@ packages: resolution: {integrity: sha512-po7sndAfW53voskEV/5bwfiigfQYBW0ESiSmVpYthl2zXja8xuGj47vIPa2IMMjdCGCxoLKfAE1U/aKOHEn0BQ==} engines: {node: '>= 10'} + '@aws-crypto/crc32@5.2.0': + resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/sha256-browser@5.2.0': + resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} + + '@aws-crypto/sha256-js@5.2.0': + resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/supports-web-crypto@5.2.0': + resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} + + '@aws-crypto/util@5.2.0': + resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} + + '@aws-sdk/client-bedrock-agent-runtime@3.765.0': + resolution: {integrity: sha512-Q823ZJ1gHBzMhcOJSciKwXmb2vZZ4vCBHW0b0DgbB3YQqkFILRov3PhNUCEmwJpv+34wUsDLsxTIMjww8Kx4tA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/client-bedrock-runtime@3.758.0': + resolution: {integrity: sha512-T7s+fULUxN3AcJP+lgoUKLawzVEtyCTi+5Ga+wrHnqEPwAsM/wg7VctsZfow1fCgARLT/lzmP2LTCi8ycRnQWg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/client-kendra@3.758.0': + resolution: {integrity: sha512-jciLetMDVx5hom0UKIr+t+WsehbRH7aF1E0BiFsgHfpFI+KRyVRIrOUOFxUDq2EKMOPSZbWLqDO7xJ4w/OuPlA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/client-sso@3.758.0': + resolution: {integrity: sha512-BoGO6IIWrLyLxQG6txJw6RT2urmbtlwfggapNCrNPyYjlXpzTSJhBYjndg7TpDATFd0SXL0zm8y/tXsUXNkdYQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/core@3.758.0': + resolution: {integrity: sha512-0RswbdR9jt/XKemaLNuxi2gGr4xGlHyGxkTdhSQzCyUe9A9OPCoLl3rIESRguQEech+oJnbHk/wuiwHqTuP9sg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-env@3.758.0': + resolution: {integrity: sha512-N27eFoRrO6MeUNumtNHDW9WOiwfd59LPXPqDrIa3kWL/s+fOKFHb9xIcF++bAwtcZnAxKkgpDCUP+INNZskE+w==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-http@3.758.0': + resolution: {integrity: sha512-Xt9/U8qUCiw1hihztWkNeIR+arg6P+yda10OuCHX6kFVx3auTlU7+hCqs3UxqniGU4dguHuftf3mRpi5/GJ33Q==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-ini@3.758.0': + resolution: {integrity: sha512-cymSKMcP5d+OsgetoIZ5QCe1wnp2Q/tq+uIxVdh9MbfdBBEnl9Ecq6dH6VlYS89sp4QKuxHxkWXVnbXU3Q19Aw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-node@3.758.0': + resolution: {integrity: sha512-+DaMv63wiq7pJrhIQzZYMn4hSarKiizDoJRvyR7WGhnn0oQ/getX9Z0VNCV3i7lIFoLNTb7WMmQ9k7+z/uD5EQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-process@3.758.0': + resolution: {integrity: sha512-AzcY74QTPqcbXWVgjpPZ3HOmxQZYPROIBz2YINF0OQk0MhezDWV/O7Xec+K1+MPGQO3qS6EDrUUlnPLjsqieHA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-sso@3.758.0': + resolution: {integrity: sha512-x0FYJqcOLUCv8GLLFDYMXRAQKGjoM+L0BG4BiHYZRDf24yQWFCAZsCQAYKo6XZYh2qznbsW6f//qpyJ5b0QVKQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-web-identity@3.758.0': + resolution: {integrity: sha512-XGguXhBqiCXMXRxcfCAVPlMbm3VyJTou79r/3mxWddHWF0XbhaQiBIbUz6vobVTD25YQRbWSmSch7VA8kI5Lrw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-host-header@3.734.0': + resolution: {integrity: sha512-LW7RRgSOHHBzWZnigNsDIzu3AiwtjeI2X66v+Wn1P1u+eXssy1+up4ZY/h+t2sU4LU36UvEf+jrZti9c6vRnFw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-logger@3.734.0': + resolution: {integrity: sha512-mUMFITpJUW3LcKvFok176eI5zXAUomVtahb9IQBwLzkqFYOrMJvWAvoV4yuxrJ8TlQBG8gyEnkb9SnhZvjg67w==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-recursion-detection@3.734.0': + resolution: {integrity: sha512-CUat2d9ITsFc2XsmeiRQO96iWpxSKYFjxvj27Hc7vo87YUHRnfMfnc8jw1EpxEwMcvBD7LsRa6vDNky6AjcrFA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-user-agent@3.758.0': + resolution: {integrity: sha512-iNyehQXtQlj69JCgfaOssgZD4HeYGOwxcaKeG6F+40cwBjTAi0+Ph1yfDwqk2qiBPIRWJ/9l2LodZbxiBqgrwg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/nested-clients@3.758.0': + resolution: {integrity: sha512-YZ5s7PSvyF3Mt2h1EQulCG93uybprNGbBkPmVuy/HMMfbFTt4iL3SbKjxqvOZelm86epFfj7pvK7FliI2WOEcg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/region-config-resolver@3.734.0': + resolution: {integrity: sha512-Lvj1kPRC5IuJBr9DyJ9T9/plkh+EfKLy+12s/mykOy1JaKHDpvj+XGy2YO6YgYVOb8JFtaqloid+5COtje4JTQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/token-providers@3.758.0': + resolution: {integrity: sha512-ckptN1tNrIfQUaGWm/ayW1ddG+imbKN7HHhjFdS4VfItsP0QQOB0+Ov+tpgb4MoNR4JaUghMIVStjIeHN2ks1w==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/types@3.734.0': + resolution: {integrity: sha512-o11tSPTT70nAkGV1fN9wm/hAIiLPyWX6SuGf+9JyTp7S/rC2cFWhR26MvA69nplcjNaXVzB0f+QFrLXXjOqCrg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-endpoints@3.743.0': + resolution: {integrity: sha512-sN1l559zrixeh5x+pttrnd0A3+r34r0tmPkJ/eaaMaAzXqsmKU/xYre9K3FNnsSS1J1k4PEfk/nHDTVUgFYjnw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-locate-window@3.723.0': + resolution: {integrity: sha512-Yf2CS10BqK688DRsrKI/EO6B8ff5J86NXe4C+VCysK7UOgN0l1zOTeTukZ3H8Q9tYYX3oaF1961o8vRkFm7Nmw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-user-agent-browser@3.734.0': + resolution: {integrity: sha512-xQTCus6Q9LwUuALW+S76OL0jcWtMOVu14q+GoLnWPUM7QeUw963oQcLhF7oq0CtaLLKyl4GOUfcwc773Zmwwng==} + + '@aws-sdk/util-user-agent-node@3.758.0': + resolution: {integrity: sha512-A5EZw85V6WhoKMV2hbuFRvb9NPlxEErb4HPO6/SPXYY4QrjprIzScHxikqcWv1w4J3apB1wto9LPU3IMsYtfrw==} + engines: {node: '>=18.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + '@azure-rest/core-client@1.4.0': resolution: {integrity: sha512-ozTDPBVUDR5eOnMIwhggbnVmOrka4fXCs8n8mvUo4WLLc38kki6bAOByDoVZZPz/pZy2jMt2kwfpvy/UjALj6w==} engines: {node: '>=18.0.0'} @@ -1063,6 +1383,9 @@ packages: '@bundled-es-modules/tough-cookie@0.1.6': resolution: {integrity: sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==} + '@cfworker/json-schema@4.1.1': + resolution: {integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==} + '@chakra-ui/anatomy@2.3.4': resolution: {integrity: sha512-fFIYN7L276gw0Q7/ikMMlZxP7mvnjRaWJ7f3Jsf9VtDOi6eAYIBRrhQe6+SZ0PGmoOkRaBc7gSE5oeIbgFFyrw==} @@ -2462,6 +2785,22 @@ packages: '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@langchain/aws@0.1.6': + resolution: {integrity: sha512-9w6wf2meQevj8UXEBuDPLbpC4huEuU98inAVEx8SFNfJpyxPfW9w9zG62mcM4ifqGTPGgnbps2H1Sx0QkwO5UA==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': '>=0.3.41 <0.4.0' + + '@langchain/core@0.3.42': + resolution: {integrity: sha512-pT/jC5lqWK3YGDq8dQwgKoa6anqAhMtG1x5JbnrOj9NdaLeBbCKBDQ+/Ykzk3nZ8o+0UMsaXNZo7IVL83VVjHg==} + engines: {node: '>=18'} + + '@langchain/openai@0.4.4': + resolution: {integrity: sha512-UZybJeMd8+UX7Kn47kuFYfqKdBCeBUWNqDtmAr6ZUIMMnlsNIb6MkrEEhGgAEjGCpdT4CU8U/DyyddTz+JayOQ==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': '>=0.3.39 <0.4.0' + '@malept/cross-spawn-promise@2.0.0': resolution: {integrity: sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==} engines: {node: '>= 12.13.0'} @@ -2480,6 +2819,10 @@ packages: '@mixmark-io/domino@2.2.0': resolution: {integrity: sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==} + '@modelcontextprotocol/sdk@1.7.0': + resolution: {integrity: sha512-IYPe/FLpvF3IZrd/f5p5ffmWhMc3aEMuM2wGJASDqC2Ge7qatVCdbfPx3n/5xFeb19xN0j/911M2AaFuircsWA==} + engines: {node: '>=18'} + '@module-federation/error-codes@0.8.4': resolution: {integrity: sha512-55LYmrDdKb4jt+qr8qE8U3al62ZANp3FhfVaNPOaAmdTh0jHdD8M3yf5HKFlr5xVkVO4eV/F/J2NCfpbh+pEXQ==} @@ -2815,100 +3158,291 @@ packages: resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} - '@swc/helpers@0.5.15': - resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@smithy/abort-controller@4.0.1': + resolution: {integrity: sha512-fiUIYgIgRjMWznk6iLJz35K2YxSLHzLBA/RC6lBrKfQ8fHbPfvk7Pk9UvpKoHgJjI18MnbPuEju53zcVy6KF1g==} + engines: {node: '>=18.0.0'} - '@szmarczak/http-timer@4.0.6': - resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} - engines: {node: '>=10'} + '@smithy/config-resolver@4.0.1': + resolution: {integrity: sha512-Igfg8lKu3dRVkTSEm98QpZUvKEOa71jDX4vKRcvJVyRc3UgN3j7vFMf0s7xLQhYmKa8kyJGQgUJDOV5V3neVlQ==} + engines: {node: '>=18.0.0'} - '@tavily/core@0.3.1': - resolution: {integrity: sha512-7jyvPWG4Zjst0s4v0FMLO1f/dfHqs4FnqvKm86zOGYzXxSfxHu0isbLzlwjJad0csYwF0kifdlECTuNouHfr5A==} + '@smithy/core@3.1.5': + resolution: {integrity: sha512-HLclGWPkCsekQgsyzxLhCQLa8THWXtB5PxyYN+2O6nkyLt550KQKTlbV2D1/j5dNIQapAZM1+qFnpBFxZQkgCA==} + engines: {node: '>=18.0.0'} - '@testing-library/dom@10.4.0': - resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} - engines: {node: '>=18'} + '@smithy/credential-provider-imds@4.0.1': + resolution: {integrity: sha512-l/qdInaDq1Zpznpmev/+52QomsJNZ3JkTl5yrTl02V6NBgJOQ4LY0SFw/8zsMwj3tLe8vqiIuwF6nxaEwgf6mg==} + engines: {node: '>=18.0.0'} - '@testing-library/user-event@14.6.1': - resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} - engines: {node: '>=12', npm: '>=6'} - peerDependencies: - '@testing-library/dom': '>=7.21.4' + '@smithy/eventstream-codec@4.0.1': + resolution: {integrity: sha512-Q2bCAAR6zXNVtJgifsU16ZjKGqdw/DyecKNgIgi7dlqw04fqDu0mnq+JmGphqheypVc64CYq3azSuCpAdFk2+A==} + engines: {node: '>=18.0.0'} - '@tokenizer/token@0.3.0': - resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + '@smithy/eventstream-serde-browser@4.0.1': + resolution: {integrity: sha512-HbIybmz5rhNg+zxKiyVAnvdM3vkzjE6ccrJ620iPL8IXcJEntd3hnBl+ktMwIy12Te/kyrSbUb8UCdnUT4QEdA==} + engines: {node: '>=18.0.0'} - '@tootallnate/once@2.0.0': - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} + '@smithy/eventstream-serde-config-resolver@4.0.1': + resolution: {integrity: sha512-lSipaiq3rmHguHa3QFF4YcCM3VJOrY9oq2sow3qlhFY+nBSTF/nrO82MUQRPrxHQXA58J5G1UnU2WuJfi465BA==} + engines: {node: '>=18.0.0'} - '@tootallnate/quickjs-emscripten@0.23.0': - resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + '@smithy/eventstream-serde-node@4.0.1': + resolution: {integrity: sha512-o4CoOI6oYGYJ4zXo34U8X9szDe3oGjmHgsMGiZM0j4vtNoT+h80TLnkUcrLZR3+E6HIxqW+G+9WHAVfl0GXK0Q==} + engines: {node: '>=18.0.0'} - '@trivago/prettier-plugin-sort-imports@5.2.2': - resolution: {integrity: sha512-fYDQA9e6yTNmA13TLVSA+WMQRc5Bn/c0EUBditUHNfMMxN7M82c38b1kEggVE3pLpZ0FwkwJkUEKMiOi52JXFA==} - engines: {node: '>18.12'} - peerDependencies: - '@vue/compiler-sfc': 3.x - prettier: 2.x - 3.x - prettier-plugin-svelte: 3.x - svelte: 4.x || 5.x - peerDependenciesMeta: - '@vue/compiler-sfc': - optional: true - prettier-plugin-svelte: - optional: true - svelte: - optional: true + '@smithy/eventstream-serde-universal@4.0.1': + resolution: {integrity: sha512-Z94uZp0tGJuxds3iEAZBqGU2QiaBHP4YytLUjwZWx+oUeohCsLyUm33yp4MMBmhkuPqSbQCXq5hDet6JGUgHWA==} + engines: {node: '>=18.0.0'} - '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + '@smithy/fetch-http-handler@5.0.1': + resolution: {integrity: sha512-3aS+fP28urrMW2KTjb6z9iFow6jO8n3MFfineGbndvzGZit3taZhKWtTorf+Gp5RpFDDafeHlhfsGlDCXvUnJA==} + engines: {node: '>=18.0.0'} - '@tsconfig/node12@1.0.11': - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + '@smithy/hash-node@4.0.1': + resolution: {integrity: sha512-TJ6oZS+3r2Xu4emVse1YPB3Dq3d8RkZDKcPr71Nj/lJsdAP1c7oFzYqEn1IBc915TsgLl2xIJNuxCz+gLbLE0w==} + engines: {node: '>=18.0.0'} - '@tsconfig/node14@1.0.3': - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + '@smithy/invalid-dependency@4.0.1': + resolution: {integrity: sha512-gdudFPf4QRQ5pzj7HEnu6FhKRi61BfH/Gk5Yf6O0KiSbr1LlVhgjThcvjdu658VE6Nve8vaIWB8/fodmS1rBPQ==} + engines: {node: '>=18.0.0'} - '@tsconfig/node16@1.0.4': - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@smithy/is-array-buffer@2.2.0': + resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} + engines: {node: '>=14.0.0'} - '@types/appdmg@0.5.5': - resolution: {integrity: sha512-G+n6DgZTZFOteITE30LnWj+HRVIGr7wMlAiLWOO02uJFWVEitaPU9JVXm9wJokkgshBawb2O1OykdcsmkkZfgg==} + '@smithy/is-array-buffer@4.0.0': + resolution: {integrity: sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==} + engines: {node: '>=18.0.0'} - '@types/aria-query@5.0.4': - resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + '@smithy/middleware-content-length@4.0.1': + resolution: {integrity: sha512-OGXo7w5EkB5pPiac7KNzVtfCW2vKBTZNuCctn++TTSOMpe6RZO/n6WEC1AxJINn3+vWLKW49uad3lo/u0WJ9oQ==} + engines: {node: '>=18.0.0'} - '@types/async-retry@1.4.9': - resolution: {integrity: sha512-s1ciZQJzRh3708X/m3vPExr5KJlzlZJvXsKpbtE2luqNcbROr64qU+3KpJsYHqWMeaxI839OvXf9PrUSw1Xtyg==} + '@smithy/middleware-endpoint@4.0.6': + resolution: {integrity: sha512-ftpmkTHIFqgaFugcjzLZv3kzPEFsBFSnq1JsIkr2mwFzCraZVhQk2gqN51OOeRxqhbPTkRFj39Qd2V91E/mQxg==} + engines: {node: '>=18.0.0'} - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + '@smithy/middleware-retry@4.0.7': + resolution: {integrity: sha512-58j9XbUPLkqAcV1kHzVX/kAR16GT+j7DUZJqwzsxh1jtz7G82caZiGyyFgUvogVfNTg3TeAOIJepGc8TXF4AVQ==} + engines: {node: '>=18.0.0'} - '@types/babel__generator@7.6.8': - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + '@smithy/middleware-serde@4.0.2': + resolution: {integrity: sha512-Sdr5lOagCn5tt+zKsaW+U2/iwr6bI9p08wOkCp6/eL6iMbgdtc2R5Ety66rf87PeohR0ExI84Txz9GYv5ou3iQ==} + engines: {node: '>=18.0.0'} - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + '@smithy/middleware-stack@4.0.1': + resolution: {integrity: sha512-dHwDmrtR/ln8UTHpaIavRSzeIk5+YZTBtLnKwDW3G2t6nAupCiQUvNzNoHBpik63fwUaJPtlnMzXbQrNFWssIA==} + engines: {node: '>=18.0.0'} - '@types/babel__traverse@7.20.6': - resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + '@smithy/node-config-provider@4.0.1': + resolution: {integrity: sha512-8mRTjvCtVET8+rxvmzRNRR0hH2JjV0DFOmwXPrISmTIJEfnCBugpYYGAsCj8t41qd+RB5gbheSQ/6aKZCQvFLQ==} + engines: {node: '>=18.0.0'} - '@types/big.js@6.2.2': - resolution: {integrity: sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA==} + '@smithy/node-http-handler@4.0.3': + resolution: {integrity: sha512-dYCLeINNbYdvmMLtW0VdhW1biXt+PPCGazzT5ZjKw46mOtdgToQEwjqZSS9/EN8+tNs/RO0cEWG044+YZs97aA==} + engines: {node: '>=18.0.0'} - '@types/cacheable-request@6.0.3': - resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + '@smithy/property-provider@4.0.1': + resolution: {integrity: sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ==} + engines: {node: '>=18.0.0'} - '@types/conventional-commits-parser@5.0.1': - resolution: {integrity: sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==} + '@smithy/protocol-http@5.0.1': + resolution: {integrity: sha512-TE4cpj49jJNB/oHyh/cRVEgNZaoPaxd4vteJNB0yGidOCVR0jCw/hjPVsT8Q8FRmj8Bd3bFZt8Dh7xGCT+xMBQ==} + engines: {node: '>=18.0.0'} - '@types/cookie@0.6.0': - resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + '@smithy/querystring-builder@4.0.1': + resolution: {integrity: sha512-wU87iWZoCbcqrwszsOewEIuq+SU2mSoBE2CcsLwE0I19m0B2gOJr1MVjxWcDQYOzHbR1xCk7AcOBbGFUYOKvdg==} + engines: {node: '>=18.0.0'} + + '@smithy/querystring-parser@4.0.1': + resolution: {integrity: sha512-Ma2XC7VS9aV77+clSFylVUnPZRindhB7BbmYiNOdr+CHt/kZNJoPP0cd3QxCnCFyPXC4eybmyE98phEHkqZ5Jw==} + engines: {node: '>=18.0.0'} + + '@smithy/service-error-classification@4.0.1': + resolution: {integrity: sha512-3JNjBfOWpj/mYfjXJHB4Txc/7E4LVq32bwzE7m28GN79+M1f76XHflUaSUkhOriprPDzev9cX/M+dEB80DNDKA==} + engines: {node: '>=18.0.0'} + + '@smithy/shared-ini-file-loader@4.0.1': + resolution: {integrity: sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw==} + engines: {node: '>=18.0.0'} + + '@smithy/signature-v4@5.0.1': + resolution: {integrity: sha512-nCe6fQ+ppm1bQuw5iKoeJ0MJfz2os7Ic3GBjOkLOPtavbD1ONoyE3ygjBfz2ythFWm4YnRm6OxW+8p/m9uCoIA==} + engines: {node: '>=18.0.0'} + + '@smithy/smithy-client@4.1.6': + resolution: {integrity: sha512-UYDolNg6h2O0L+cJjtgSyKKvEKCOa/8FHYJnBobyeoeWDmNpXjwOAtw16ezyeu1ETuuLEOZbrynK0ZY1Lx9Jbw==} + engines: {node: '>=18.0.0'} + + '@smithy/types@4.1.0': + resolution: {integrity: sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==} + engines: {node: '>=18.0.0'} + + '@smithy/url-parser@4.0.1': + resolution: {integrity: sha512-gPXcIEUtw7VlK8f/QcruNXm7q+T5hhvGu9tl63LsJPZ27exB6dtNwvh2HIi0v7JcXJ5emBxB+CJxwaLEdJfA+g==} + engines: {node: '>=18.0.0'} + + '@smithy/util-base64@4.0.0': + resolution: {integrity: sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-body-length-browser@4.0.0': + resolution: {integrity: sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-body-length-node@4.0.0': + resolution: {integrity: sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-buffer-from@2.2.0': + resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} + engines: {node: '>=14.0.0'} + + '@smithy/util-buffer-from@4.0.0': + resolution: {integrity: sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==} + engines: {node: '>=18.0.0'} + + '@smithy/util-config-provider@4.0.0': + resolution: {integrity: sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==} + engines: {node: '>=18.0.0'} + + '@smithy/util-defaults-mode-browser@4.0.7': + resolution: {integrity: sha512-CZgDDrYHLv0RUElOsmZtAnp1pIjwDVCSuZWOPhIOBvG36RDfX1Q9+6lS61xBf+qqvHoqRjHxgINeQz47cYFC2Q==} + engines: {node: '>=18.0.0'} + + '@smithy/util-defaults-mode-node@4.0.7': + resolution: {integrity: sha512-79fQW3hnfCdrfIi1soPbK3zmooRFnLpSx3Vxi6nUlqaaQeC5dm8plt4OTNDNqEEEDkvKghZSaoti684dQFVrGQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-endpoints@3.0.1': + resolution: {integrity: sha512-zVdUENQpdtn9jbpD9SCFK4+aSiavRb9BxEtw9ZGUR1TYo6bBHbIoi7VkrFQ0/RwZlzx0wRBaRmPclj8iAoJCLA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-hex-encoding@4.0.0': + resolution: {integrity: sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==} + engines: {node: '>=18.0.0'} + + '@smithy/util-middleware@4.0.1': + resolution: {integrity: sha512-HiLAvlcqhbzhuiOa0Lyct5IIlyIz0PQO5dnMlmQ/ubYM46dPInB+3yQGkfxsk6Q24Y0n3/JmcA1v5iEhmOF5mA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-retry@4.0.1': + resolution: {integrity: sha512-WmRHqNVwn3kI3rKk1LsKcVgPBG6iLTBGC1iYOV3GQegwJ3E8yjzHytPt26VNzOWr1qu0xE03nK0Ug8S7T7oufw==} + engines: {node: '>=18.0.0'} + + '@smithy/util-stream@4.1.2': + resolution: {integrity: sha512-44PKEqQ303d3rlQuiDpcCcu//hV8sn+u2JBo84dWCE0rvgeiVl0IlLMagbU++o0jCWhYCsHaAt9wZuZqNe05Hw==} + engines: {node: '>=18.0.0'} + + '@smithy/util-uri-escape@4.0.0': + resolution: {integrity: sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-utf8@2.3.0': + resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} + engines: {node: '>=14.0.0'} + + '@smithy/util-utf8@4.0.0': + resolution: {integrity: sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==} + engines: {node: '>=18.0.0'} + + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + + '@szmarczak/http-timer@4.0.6': + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} + + '@tavily/core@0.3.1': + resolution: {integrity: sha512-7jyvPWG4Zjst0s4v0FMLO1f/dfHqs4FnqvKm86zOGYzXxSfxHu0isbLzlwjJad0csYwF0kifdlECTuNouHfr5A==} + + '@testing-library/dom@10.4.0': + resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} + engines: {node: '>=18'} + + '@testing-library/user-event@14.6.1': + resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + + '@tokenizer/token@0.3.0': + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + + '@tootallnate/once@2.0.0': + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + + '@tootallnate/quickjs-emscripten@0.23.0': + resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + + '@trivago/prettier-plugin-sort-imports@5.2.2': + resolution: {integrity: sha512-fYDQA9e6yTNmA13TLVSA+WMQRc5Bn/c0EUBditUHNfMMxN7M82c38b1kEggVE3pLpZ0FwkwJkUEKMiOi52JXFA==} + engines: {node: '>18.12'} + peerDependencies: + '@vue/compiler-sfc': 3.x + prettier: 2.x - 3.x + prettier-plugin-svelte: 3.x + svelte: 4.x || 5.x + peerDependenciesMeta: + '@vue/compiler-sfc': + optional: true + prettier-plugin-svelte: + optional: true + svelte: + optional: true + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@types/appdmg@0.5.5': + resolution: {integrity: sha512-G+n6DgZTZFOteITE30LnWj+HRVIGr7wMlAiLWOO02uJFWVEitaPU9JVXm9wJokkgshBawb2O1OykdcsmkkZfgg==} + + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + + '@types/async-retry@1.4.9': + resolution: {integrity: sha512-s1ciZQJzRh3708X/m3vPExr5KJlzlZJvXsKpbtE2luqNcbROr64qU+3KpJsYHqWMeaxI839OvXf9PrUSw1Xtyg==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/big.js@6.2.2': + resolution: {integrity: sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA==} + + '@types/cacheable-request@6.0.3': + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + + '@types/conventional-commits-parser@5.0.1': + resolution: {integrity: sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==} + + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/diff@5.2.3': + resolution: {integrity: sha512-K0Oqlrq3kQMaO2RhfrNQX5trmt+XLyom88zS0u84nnIcLvFnRUMRRHmrGny5GSM+kNO9IZLARsdQHDzkhAgmrQ==} + '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} @@ -2942,6 +3476,9 @@ packages: '@types/lodash@4.17.15': resolution: {integrity: sha512-w/P33JFeySuhN6JLkysYUK2gEmy9kHHFN7E8ro0tkfmlDOgxBDzWEZ/J8cWA+fHqFevpswDTFZnDx+R9lbL6xw==} + '@types/minimatch@5.1.2': + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} @@ -2963,6 +3500,9 @@ packages: '@types/node@20.17.17': resolution: {integrity: sha512-/WndGO4kIfMicEQLTi/mDANUu/iVUhT7KboZPdEqqHQ4aTS+3qT3U5gIqWDFV+XouorjfgGqvKILJeHhuQgFYg==} + '@types/node@22.13.10': + resolution: {integrity: sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==} + '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -2980,6 +3520,9 @@ packages: '@types/responselike@1.0.3': resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} + '@types/retry@0.12.0': + resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + '@types/retry@0.12.5': resolution: {integrity: sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw==} @@ -2995,6 +3538,12 @@ packages: '@types/turndown@5.0.5': resolution: {integrity: sha512-TL2IgGgc7B5j78rIccBtlYAnkuv8nUQqhQc+DSYV5j9Be9XOcm/SKOVRuA47xAVI3680Tk9B1d8flK2GWT2+4w==} + '@types/uuid@10.0.0': + resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} + + '@types/uuid@9.0.8': + resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} + '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} @@ -3268,6 +3817,10 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -3531,6 +4084,10 @@ packages: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@2.1.0: + resolution: {integrity: sha512-/hPxh61E+ll0Ujp24Ilm64cykicul1ypfwjVttduAiEdtnJFvLePSrIPk+HMImtNv5270wOGCb1Tns2rybMkoQ==} + engines: {node: '>=18'} + boolean@3.2.0: resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. @@ -3538,6 +4095,9 @@ packages: bottleneck@2.19.5: resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} + bowser@2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + bplist-creator@0.0.8: resolution: {integrity: sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA==} @@ -3611,6 +4171,10 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + caniuse-lite@1.0.30001703: resolution: {integrity: sha512-kRlAGTRWgPsOj7oARC9m1okJEXdL/8fekFVcxA8Hl7GH4r/sN4OJn/i6Flde373T50KS7Y37oFbMwlE8+F42kQ==} @@ -3771,10 +4335,17 @@ packages: resolution: {integrity: sha512-Bi6v586cy1CoTFViVO4lGTtx780lfF96fUmS1lSX6wpZf6330NvHUu6fReVuDP1de8Mg0nkZb01c8tAQdz1o3w==} engines: {node: '>=18'} + console-table-printer@2.12.1: + resolution: {integrity: sha512-wKGOQRRvdnd89pCeH96e2Fn4wkbenSP6LMHfjfyNLMbGuHEFbMqQNuxXqd0oXG9caIOQ1FTvc5Uijp9/4jujnQ==} + content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} + content-disposition@1.0.0: + resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} + engines: {node: '>= 0.6'} + content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} @@ -3801,6 +4372,10 @@ packages: cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} + cookie@0.7.1: resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} engines: {node: '>= 0.6'} @@ -3822,6 +4397,10 @@ packages: core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + cosmiconfig-typescript-loader@6.1.0: resolution: {integrity: sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==} engines: {node: '>=v18'} @@ -3929,6 +4508,15 @@ packages: supports-color: optional: true + debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + debug@4.4.0: resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} @@ -3938,6 +4526,10 @@ packages: supports-color: optional: true + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} @@ -4012,6 +4604,10 @@ packages: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + dir-compare@4.2.0: resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} @@ -4373,6 +4969,9 @@ packages: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} @@ -4380,6 +4979,14 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} + eventsource-parser@3.0.0: + resolution: {integrity: sha512-T1C0XCUimhxVQzW4zFipdx0SficT651NnkR0ZSH3yQwh+mFMdLfgjABVi4YtMTtaL4s168593DaoaRLMqryavA==} + engines: {node: '>=18.0.0'} + + eventsource@3.0.5: + resolution: {integrity: sha512-LT/5J605bx5SNyE+ITBDiM3FxffBiq9un7Vx0EwMDM3vg8sWKx/tO2zC+LMqZ+smAM0F2hblaDZUVZF0te2pSw==} + engines: {node: '>=18.0.0'} + execa@1.0.0: resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} engines: {node: '>=6'} @@ -4402,6 +5009,12 @@ packages: exponential-backoff@3.1.2: resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} + express-rate-limit@7.5.0: + resolution: {integrity: sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==} + engines: {node: '>= 16'} + peerDependencies: + express: ^4.11 || 5 || ^5.0.0-beta.1 + express-ws@5.0.2: resolution: {integrity: sha512-0uvmuk61O9HXgLhGl3QhNSEtRsQevtmbL94/eILaliEADZBHZOQUAiHFrGPrgsjikohyrmSG5g+sCfASTt0lkQ==} engines: {node: '>=4.5.0'} @@ -4412,6 +5025,10 @@ packages: resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} engines: {node: '>= 0.10.0'} + express@5.0.1: + resolution: {integrity: sha512-ORF7g6qGnD+YtUG9yx4DFoqCShNMmUKiXuT5oWMHiOvt/4WFbHC6yCwQMTSBMno7AqntNCAzzcnnjowRkTL9eQ==} + engines: {node: '>= 18'} + extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} @@ -4449,6 +5066,10 @@ packages: fast-uri@3.0.6: resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + fast-xml-parser@4.4.1: + resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} + hasBin: true + fastest-stable-stringify@2.0.2: resolution: {integrity: sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==} @@ -4493,6 +5114,10 @@ packages: resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} + finalhandler@2.1.0: + resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} + engines: {node: '>= 0.8'} + find-root@1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} @@ -4588,6 +5213,10 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} + fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} @@ -4885,6 +5514,10 @@ packages: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} + iconv-lite@0.5.2: + resolution: {integrity: sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==} + engines: {node: '>=0.10.0'} + iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} @@ -4962,6 +5595,10 @@ packages: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} + interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + interpret@3.1.1: resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} engines: {node: '>=10.13.0'} @@ -5084,6 +5721,9 @@ packages: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + is-property@1.0.2: resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} @@ -5295,6 +5935,10 @@ packages: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} + jsonrepair@3.12.0: + resolution: {integrity: sha512-SWfjz8SuQ0wZjwsxtSJ3Zy8vvLg6aO/kxcp9TWNPGwJKgTZVfhNEQBMk/vPOpYCDFWRxD6QWuI6IHR1t615f0w==} + hasBin: true + jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} @@ -5315,6 +5959,14 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + langsmith@0.3.14: + resolution: {integrity: sha512-MzoxdRkFFV/6140vpP5V2e2fkTG6x/0zIjw77bsRwAXEMjPRTUyDazfXeSyrS5uJvbLgxAXc+MF1h6vPWe6SXQ==} + peerDependencies: + openai: '*' + peerDependenciesMeta: + openai: + optional: true + levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -5498,6 +6150,10 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + medium-zoom@1.1.0: resolution: {integrity: sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==} @@ -5512,6 +6168,10 @@ packages: merge-descriptors@1.0.3: resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -5535,10 +6195,18 @@ packages: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} + mime-db@1.53.0: + resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} + engines: {node: '>= 0.6'} + mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mime-types@3.0.0: + resolution: {integrity: sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w==} + engines: {node: '>= 0.6'} + mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} @@ -5674,6 +6342,10 @@ packages: murmur-32@0.2.0: resolution: {integrity: sha512-ZkcWZudylwF+ir3Ld1n7gL6bI2mQAzXvSobPwVtu8aYi2sbXeipeSkdcanRLzIofLcM5F53lGaKm2dk7orBi7Q==} + mustache@4.2.0: + resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true + mute-stream@1.0.0: resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -5710,6 +6382,10 @@ packages: resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} engines: {node: '>= 0.6'} + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + netmask@2.0.2: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} @@ -5836,6 +6512,18 @@ packages: zod: optional: true + openai@4.87.3: + resolution: {integrity: sha512-d2D54fzMuBYTxMW8wcNmhT1rYKcTfMJ8t+4KjH2KtvYenygITiGBgHoIrzHwnDQWW+C5oCA+ikIR2jgPCFqcKQ==} + hasBin: true + peerDependencies: + ws: ^8.18.0 + zod: ^3.23.8 + peerDependenciesMeta: + ws: + optional: true + zod: + optional: true + opencommit@3.2.5: resolution: {integrity: sha512-hIleBRrmQh2L8KXzwUZQr2ggM4TABjFlL1iUfinfAVWu3DqIQKDmck9oq1Qq6TYN56kCGTErm9z4uiRNUHqnVw==} hasBin: true @@ -5922,6 +6610,18 @@ packages: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} + p-queue@6.6.2: + resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} + engines: {node: '>=8'} + + p-retry@4.6.2: + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} + engines: {node: '>=8'} + + p-timeout@3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + p-try@1.0.0: resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} engines: {node: '>=4'} @@ -6027,6 +6727,10 @@ packages: path-to-regexp@6.3.0: resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + path-to-regexp@8.2.0: + resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} + engines: {node: '>=16'} + path-type@2.0.0: resolution: {integrity: sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ==} engines: {node: '>=4'} @@ -6089,6 +6793,10 @@ packages: resolution: {integrity: sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q==} hasBin: true + pkce-challenge@4.1.0: + resolution: {integrity: sha512-ZBmhE1C9LcPoH9XZSdwiPtbPHZROwAnMy+kIFQVrnMCxY4Cudlz3gBOpzilgc0jOgRaiT3sIWfpMomW2ar2orQ==} + engines: {node: '>=16.20.0'} + playwright-core@1.50.1: resolution: {integrity: sha512-ra9fsNWayuYumt+NiM069M6OkcRb1FZSK8bgi66AtpFoWkg2+y0bJSNmkFrWhMbEBbVKC/EruAHH3g0zmtwGmQ==} engines: {node: '>=18'} @@ -6217,6 +6925,10 @@ packages: resolution: {integrity: sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==} engines: {node: '>=0.6'} + qs@6.14.0: + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + engines: {node: '>=0.6'} + querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} @@ -6238,6 +6950,10 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} + raw-body@3.0.0: + resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} + engines: {node: '>= 0.8'} + react-clientside-effect@1.2.7: resolution: {integrity: sha512-gce9m0Pk/xYYMEojRI9bgvqQAkl6hm7ozQvqWPyQx+kULiatdHgkNM1QG4DQRx5N9BAzWSCJmt9mMV8/KsdgVg==} peerDependencies: @@ -6365,6 +7081,10 @@ packages: resolution: {integrity: sha512-In3boYjBnbGVrLuuRu/Ath/H6h1jgk30nAsk/71tCare1dTVoe1oMBGRn5LGf0n3c1BcHwwAqpraxX4AUAP5KA==} engines: {node: '>=8'} + rechoir@0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + rechoir@0.8.0: resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} engines: {node: '>= 10.13.0'} @@ -6489,6 +7209,10 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + router@2.1.0: + resolution: {integrity: sha512-/m/NSLxeYEgWNtyC+WtNHCF7jbGxOibVWKnn+1Psff4dJGOfoXP+MuC/f2CwSmyiHdOIzYnYFp4W6GxWfekaLA==} + engines: {node: '>= 18'} + rsbuild-plugin-dts@0.5.3: resolution: {integrity: sha512-NLy2oKyStcM89CwSdgQUu10BlNTpZieshGj7p7w/sge9VM7aADp8mUqo86bDKX4ITMMACLTO6Q/VQmp9B/1tMg==} engines: {node: '>=16.7.0'} @@ -6704,6 +7428,10 @@ packages: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} + send@1.1.0: + resolution: {integrity: sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA==} + engines: {node: '>= 18'} + serialize-error@7.0.1: resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} engines: {node: '>=10'} @@ -6712,6 +7440,10 @@ packages: resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} engines: {node: '>= 0.8.0'} + serve-static@2.1.0: + resolution: {integrity: sha512-A3We5UfEjG8Z7VkDv6uItWw6HY2bBSBJT1KtVESn6EOoOr2jAxNhxWCLY3jDE2WcuHXByWju74ck3ZgLwL8xmA==} + engines: {node: '>= 18'} + set-cookie-parser@2.7.1: resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} @@ -6757,6 +7489,16 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shelljs@0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true + + shx@0.3.4: + resolution: {integrity: sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==} + engines: {node: '>=6'} + hasBin: true + side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -6786,6 +7528,9 @@ packages: simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + simple-wcswidth@1.0.1: + resolution: {integrity: sha512-xMO/8eNREtaROt7tJvWJqHBDTMFN4eiQ5I4JRMuilwfnFcV5W9u7RUkueNkdw0jPqGMX36iCywelS5yilTuOxg==} + simple-xml-to-json@1.2.3: resolution: {integrity: sha512-kWJDCr9EWtZ+/EYYM5MareWj2cRnZGF93YDNpH4jQiHB+hBIZnfPFSQiVMzZOdk+zXWqTZ/9fTeQNu2DqeiudA==} engines: {node: '>=20.12.2'} @@ -6970,6 +7715,9 @@ packages: resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} engines: {node: '>=0.10.0'} + strnum@1.1.2: + resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==} + strtok3@6.3.0: resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} engines: {node: '>=10'} @@ -7197,6 +7945,11 @@ packages: engines: {node: '>=18.0.0'} hasBin: true + tsx@4.19.3: + resolution: {integrity: sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==} + engines: {node: '>=18.0.0'} + hasBin: true + tunnel@0.0.6: resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} @@ -7241,6 +7994,10 @@ packages: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} + type-is@2.0.0: + resolution: {integrity: sha512-gd0sGezQYCbWSbkZr75mln4YBidWUN60+devscpLF5mtRDUpiaTvKpBNrdaCvel1NdR2k6vclXybU5fBd2i+nw==} + engines: {node: '>= 0.6'} + typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} @@ -7290,6 +8047,9 @@ packages: undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + undici@5.28.5: resolution: {integrity: sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==} engines: {node: '>=14.0'} @@ -7386,10 +8146,22 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} - v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + uuid@10.0.0: + resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + hasBin: true - validate-npm-package-license@3.0.4: + uuid@11.1.0: + resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} + hasBin: true + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} varint@6.0.0: @@ -7874,6 +8646,451 @@ snapshots: '@ast-grep/napi-win32-ia32-msvc': 0.36.0 '@ast-grep/napi-win32-x64-msvc': 0.36.0 + '@aws-crypto/crc32@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.734.0 + tslib: 2.8.1 + + '@aws-crypto/sha256-browser@5.2.0': + dependencies: + '@aws-crypto/sha256-js': 5.2.0 + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-locate-window': 3.723.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-crypto/sha256-js@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.734.0 + tslib: 2.8.1 + + '@aws-crypto/supports-web-crypto@5.2.0': + dependencies: + tslib: 2.8.1 + + '@aws-crypto/util@5.2.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-sdk/client-bedrock-agent-runtime@3.765.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.758.0 + '@aws-sdk/credential-provider-node': 3.758.0 + '@aws-sdk/middleware-host-header': 3.734.0 + '@aws-sdk/middleware-logger': 3.734.0 + '@aws-sdk/middleware-recursion-detection': 3.734.0 + '@aws-sdk/middleware-user-agent': 3.758.0 + '@aws-sdk/region-config-resolver': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.743.0 + '@aws-sdk/util-user-agent-browser': 3.734.0 + '@aws-sdk/util-user-agent-node': 3.758.0 + '@smithy/config-resolver': 4.0.1 + '@smithy/core': 3.1.5 + '@smithy/eventstream-serde-browser': 4.0.1 + '@smithy/eventstream-serde-config-resolver': 4.0.1 + '@smithy/eventstream-serde-node': 4.0.1 + '@smithy/fetch-http-handler': 5.0.1 + '@smithy/hash-node': 4.0.1 + '@smithy/invalid-dependency': 4.0.1 + '@smithy/middleware-content-length': 4.0.1 + '@smithy/middleware-endpoint': 4.0.6 + '@smithy/middleware-retry': 4.0.7 + '@smithy/middleware-serde': 4.0.2 + '@smithy/middleware-stack': 4.0.1 + '@smithy/node-config-provider': 4.0.1 + '@smithy/node-http-handler': 4.0.3 + '@smithy/protocol-http': 5.0.1 + '@smithy/smithy-client': 4.1.6 + '@smithy/types': 4.1.0 + '@smithy/url-parser': 4.0.1 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.7 + '@smithy/util-defaults-mode-node': 4.0.7 + '@smithy/util-endpoints': 3.0.1 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-retry': 4.0.1 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-bedrock-runtime@3.758.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.758.0 + '@aws-sdk/credential-provider-node': 3.758.0 + '@aws-sdk/middleware-host-header': 3.734.0 + '@aws-sdk/middleware-logger': 3.734.0 + '@aws-sdk/middleware-recursion-detection': 3.734.0 + '@aws-sdk/middleware-user-agent': 3.758.0 + '@aws-sdk/region-config-resolver': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.743.0 + '@aws-sdk/util-user-agent-browser': 3.734.0 + '@aws-sdk/util-user-agent-node': 3.758.0 + '@smithy/config-resolver': 4.0.1 + '@smithy/core': 3.1.5 + '@smithy/eventstream-serde-browser': 4.0.1 + '@smithy/eventstream-serde-config-resolver': 4.0.1 + '@smithy/eventstream-serde-node': 4.0.1 + '@smithy/fetch-http-handler': 5.0.1 + '@smithy/hash-node': 4.0.1 + '@smithy/invalid-dependency': 4.0.1 + '@smithy/middleware-content-length': 4.0.1 + '@smithy/middleware-endpoint': 4.0.6 + '@smithy/middleware-retry': 4.0.7 + '@smithy/middleware-serde': 4.0.2 + '@smithy/middleware-stack': 4.0.1 + '@smithy/node-config-provider': 4.0.1 + '@smithy/node-http-handler': 4.0.3 + '@smithy/protocol-http': 5.0.1 + '@smithy/smithy-client': 4.1.6 + '@smithy/types': 4.1.0 + '@smithy/url-parser': 4.0.1 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.7 + '@smithy/util-defaults-mode-node': 4.0.7 + '@smithy/util-endpoints': 3.0.1 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-retry': 4.0.1 + '@smithy/util-stream': 4.1.2 + '@smithy/util-utf8': 4.0.0 + '@types/uuid': 9.0.8 + tslib: 2.8.1 + uuid: 9.0.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-kendra@3.758.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.758.0 + '@aws-sdk/credential-provider-node': 3.758.0 + '@aws-sdk/middleware-host-header': 3.734.0 + '@aws-sdk/middleware-logger': 3.734.0 + '@aws-sdk/middleware-recursion-detection': 3.734.0 + '@aws-sdk/middleware-user-agent': 3.758.0 + '@aws-sdk/region-config-resolver': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.743.0 + '@aws-sdk/util-user-agent-browser': 3.734.0 + '@aws-sdk/util-user-agent-node': 3.758.0 + '@smithy/config-resolver': 4.0.1 + '@smithy/core': 3.1.5 + '@smithy/fetch-http-handler': 5.0.1 + '@smithy/hash-node': 4.0.1 + '@smithy/invalid-dependency': 4.0.1 + '@smithy/middleware-content-length': 4.0.1 + '@smithy/middleware-endpoint': 4.0.6 + '@smithy/middleware-retry': 4.0.7 + '@smithy/middleware-serde': 4.0.2 + '@smithy/middleware-stack': 4.0.1 + '@smithy/node-config-provider': 4.0.1 + '@smithy/node-http-handler': 4.0.3 + '@smithy/protocol-http': 5.0.1 + '@smithy/smithy-client': 4.1.6 + '@smithy/types': 4.1.0 + '@smithy/url-parser': 4.0.1 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.7 + '@smithy/util-defaults-mode-node': 4.0.7 + '@smithy/util-endpoints': 3.0.1 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-retry': 4.0.1 + '@smithy/util-utf8': 4.0.0 + '@types/uuid': 9.0.8 + tslib: 2.8.1 + uuid: 9.0.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sso@3.758.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.758.0 + '@aws-sdk/middleware-host-header': 3.734.0 + '@aws-sdk/middleware-logger': 3.734.0 + '@aws-sdk/middleware-recursion-detection': 3.734.0 + '@aws-sdk/middleware-user-agent': 3.758.0 + '@aws-sdk/region-config-resolver': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.743.0 + '@aws-sdk/util-user-agent-browser': 3.734.0 + '@aws-sdk/util-user-agent-node': 3.758.0 + '@smithy/config-resolver': 4.0.1 + '@smithy/core': 3.1.5 + '@smithy/fetch-http-handler': 5.0.1 + '@smithy/hash-node': 4.0.1 + '@smithy/invalid-dependency': 4.0.1 + '@smithy/middleware-content-length': 4.0.1 + '@smithy/middleware-endpoint': 4.0.6 + '@smithy/middleware-retry': 4.0.7 + '@smithy/middleware-serde': 4.0.2 + '@smithy/middleware-stack': 4.0.1 + '@smithy/node-config-provider': 4.0.1 + '@smithy/node-http-handler': 4.0.3 + '@smithy/protocol-http': 5.0.1 + '@smithy/smithy-client': 4.1.6 + '@smithy/types': 4.1.0 + '@smithy/url-parser': 4.0.1 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.7 + '@smithy/util-defaults-mode-node': 4.0.7 + '@smithy/util-endpoints': 3.0.1 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-retry': 4.0.1 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/core@3.758.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/core': 3.1.5 + '@smithy/node-config-provider': 4.0.1 + '@smithy/property-provider': 4.0.1 + '@smithy/protocol-http': 5.0.1 + '@smithy/signature-v4': 5.0.1 + '@smithy/smithy-client': 4.1.6 + '@smithy/types': 4.1.0 + '@smithy/util-middleware': 4.0.1 + fast-xml-parser: 4.4.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-env@3.758.0': + dependencies: + '@aws-sdk/core': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-http@3.758.0': + dependencies: + '@aws-sdk/core': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/fetch-http-handler': 5.0.1 + '@smithy/node-http-handler': 4.0.3 + '@smithy/property-provider': 4.0.1 + '@smithy/protocol-http': 5.0.1 + '@smithy/smithy-client': 4.1.6 + '@smithy/types': 4.1.0 + '@smithy/util-stream': 4.1.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-ini@3.758.0': + dependencies: + '@aws-sdk/core': 3.758.0 + '@aws-sdk/credential-provider-env': 3.758.0 + '@aws-sdk/credential-provider-http': 3.758.0 + '@aws-sdk/credential-provider-process': 3.758.0 + '@aws-sdk/credential-provider-sso': 3.758.0 + '@aws-sdk/credential-provider-web-identity': 3.758.0 + '@aws-sdk/nested-clients': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/credential-provider-imds': 4.0.1 + '@smithy/property-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-node@3.758.0': + dependencies: + '@aws-sdk/credential-provider-env': 3.758.0 + '@aws-sdk/credential-provider-http': 3.758.0 + '@aws-sdk/credential-provider-ini': 3.758.0 + '@aws-sdk/credential-provider-process': 3.758.0 + '@aws-sdk/credential-provider-sso': 3.758.0 + '@aws-sdk/credential-provider-web-identity': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/credential-provider-imds': 4.0.1 + '@smithy/property-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-process@3.758.0': + dependencies: + '@aws-sdk/core': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-sso@3.758.0': + dependencies: + '@aws-sdk/client-sso': 3.758.0 + '@aws-sdk/core': 3.758.0 + '@aws-sdk/token-providers': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-web-identity@3.758.0': + dependencies: + '@aws-sdk/core': 3.758.0 + '@aws-sdk/nested-clients': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/middleware-host-header@3.734.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-logger@3.734.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-recursion-detection@3.734.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-user-agent@3.758.0': + dependencies: + '@aws-sdk/core': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.743.0 + '@smithy/core': 3.1.5 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@aws-sdk/nested-clients@3.758.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.758.0 + '@aws-sdk/middleware-host-header': 3.734.0 + '@aws-sdk/middleware-logger': 3.734.0 + '@aws-sdk/middleware-recursion-detection': 3.734.0 + '@aws-sdk/middleware-user-agent': 3.758.0 + '@aws-sdk/region-config-resolver': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.743.0 + '@aws-sdk/util-user-agent-browser': 3.734.0 + '@aws-sdk/util-user-agent-node': 3.758.0 + '@smithy/config-resolver': 4.0.1 + '@smithy/core': 3.1.5 + '@smithy/fetch-http-handler': 5.0.1 + '@smithy/hash-node': 4.0.1 + '@smithy/invalid-dependency': 4.0.1 + '@smithy/middleware-content-length': 4.0.1 + '@smithy/middleware-endpoint': 4.0.6 + '@smithy/middleware-retry': 4.0.7 + '@smithy/middleware-serde': 4.0.2 + '@smithy/middleware-stack': 4.0.1 + '@smithy/node-config-provider': 4.0.1 + '@smithy/node-http-handler': 4.0.3 + '@smithy/protocol-http': 5.0.1 + '@smithy/smithy-client': 4.1.6 + '@smithy/types': 4.1.0 + '@smithy/url-parser': 4.0.1 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.7 + '@smithy/util-defaults-mode-node': 4.0.7 + '@smithy/util-endpoints': 3.0.1 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-retry': 4.0.1 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/region-config-resolver@3.734.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/node-config-provider': 4.0.1 + '@smithy/types': 4.1.0 + '@smithy/util-config-provider': 4.0.0 + '@smithy/util-middleware': 4.0.1 + tslib: 2.8.1 + + '@aws-sdk/token-providers@3.758.0': + dependencies: + '@aws-sdk/nested-clients': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/types@3.734.0': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@aws-sdk/util-endpoints@3.743.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/types': 4.1.0 + '@smithy/util-endpoints': 3.0.1 + tslib: 2.8.1 + + '@aws-sdk/util-locate-window@3.723.0': + dependencies: + tslib: 2.8.1 + + '@aws-sdk/util-user-agent-browser@3.734.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/types': 4.1.0 + bowser: 2.11.0 + tslib: 2.8.1 + + '@aws-sdk/util-user-agent-node@3.758.0': + dependencies: + '@aws-sdk/middleware-user-agent': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/node-config-provider': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + '@azure-rest/core-client@1.4.0': dependencies: '@azure/abort-controller': 2.1.2 @@ -8071,14 +9288,14 @@ snapshots: transitivePeerDependencies: - encoding - '@browserbasehq/stagehand@1.13.0(@playwright/test@1.50.1)(deepmerge@2.2.1)(dotenv@16.4.7)(encoding@0.1.13)(openai@4.85.1(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2))(zod@3.24.2)': + '@browserbasehq/stagehand@1.13.0(@playwright/test@1.50.1)(deepmerge@2.2.1)(dotenv@16.4.7)(encoding@0.1.13)(openai@4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2))(zod@3.24.2)': dependencies: '@anthropic-ai/sdk': 0.27.3(encoding@0.1.13) '@browserbasehq/sdk': 2.3.0(encoding@0.1.13) '@playwright/test': 1.50.1 deepmerge: 2.2.1 dotenv: 16.4.7 - openai: 4.85.1(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2) + openai: 4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2) ws: 8.18.0 zod: 3.24.2 zod-to-json-schema: 3.24.1(zod@3.24.2) @@ -8102,6 +9319,8 @@ snapshots: '@types/tough-cookie': 4.0.5 tough-cookie: 4.1.4 + '@cfworker/json-schema@4.1.1': {} + '@chakra-ui/anatomy@2.3.4': {} '@chakra-ui/anatomy@2.3.5': {} @@ -9403,6 +10622,14 @@ snapshots: '@inquirer/type': 3.0.4(@types/node@20.17.17) optionalDependencies: '@types/node': 20.17.17 + optional: true + + '@inquirer/confirm@5.1.6(@types/node@22.13.10)': + dependencies: + '@inquirer/core': 10.1.7(@types/node@22.13.10) + '@inquirer/type': 3.0.4(@types/node@22.13.10) + optionalDependencies: + '@types/node': 22.13.10 '@inquirer/core@10.1.7(@types/node@20.14.8)': dependencies: @@ -9430,6 +10657,20 @@ snapshots: yoctocolors-cjs: 2.1.2 optionalDependencies: '@types/node': 20.17.17 + optional: true + + '@inquirer/core@10.1.7(@types/node@22.13.10)': + dependencies: + '@inquirer/figures': 1.0.10 + '@inquirer/type': 3.0.4(@types/node@22.13.10) + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.10 '@inquirer/figures@1.0.10': {} @@ -9441,6 +10682,11 @@ snapshots: '@inquirer/type@3.0.4(@types/node@20.17.17)': optionalDependencies: '@types/node': 20.17.17 + optional: true + + '@inquirer/type@3.0.4(@types/node@22.13.10)': + optionalDependencies: + '@types/node': 22.13.10 '@isaacs/cliui@8.0.2': dependencies: @@ -9880,6 +11126,46 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + '@langchain/aws@0.1.6(@langchain/core@0.3.42(openai@4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2)))': + dependencies: + '@aws-sdk/client-bedrock-agent-runtime': 3.765.0 + '@aws-sdk/client-bedrock-runtime': 3.758.0 + '@aws-sdk/client-kendra': 3.758.0 + '@aws-sdk/credential-provider-node': 3.758.0 + '@langchain/core': 0.3.42(openai@4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2)) + zod: 3.24.2 + zod-to-json-schema: 3.24.1(zod@3.24.2) + transitivePeerDependencies: + - aws-crt + + '@langchain/core@0.3.42(openai@4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2))': + dependencies: + '@cfworker/json-schema': 4.1.1 + ansi-styles: 5.2.0 + camelcase: 6.3.0 + decamelize: 1.2.0 + js-tiktoken: 1.0.19 + langsmith: 0.3.14(openai@4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2)) + mustache: 4.2.0 + p-queue: 6.6.2 + p-retry: 4.6.2 + uuid: 10.0.0 + zod: 3.24.2 + zod-to-json-schema: 3.24.1(zod@3.24.2) + transitivePeerDependencies: + - openai + + '@langchain/openai@0.4.4(@langchain/core@0.3.42(openai@4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2)))(encoding@0.1.13)(ws@8.18.0)': + dependencies: + '@langchain/core': 0.3.42(openai@4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2)) + js-tiktoken: 1.0.19 + openai: 4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2) + zod: 3.24.2 + zod-to-json-schema: 3.24.1(zod@3.24.2) + transitivePeerDependencies: + - encoding + - ws + '@malept/cross-spawn-promise@2.0.0': dependencies: cross-spawn: 7.0.6 @@ -9907,6 +11193,20 @@ snapshots: '@mixmark-io/domino@2.2.0': {} + '@modelcontextprotocol/sdk@1.7.0': + dependencies: + content-type: 1.0.5 + cors: 2.8.5 + eventsource: 3.0.5 + express: 5.0.1 + express-rate-limit: 7.5.0(express@5.0.1) + pkce-challenge: 4.1.0 + raw-body: 3.0.0 + zod: 3.24.2 + zod-to-json-schema: 3.24.1(zod@3.24.2) + transitivePeerDependencies: + - supports-color + '@module-federation/error-codes@0.8.4': {} '@module-federation/runtime-tools@0.8.4': @@ -10246,6 +11546,303 @@ snapshots: '@sindresorhus/is@4.6.0': {} + '@smithy/abort-controller@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/config-resolver@4.0.1': + dependencies: + '@smithy/node-config-provider': 4.0.1 + '@smithy/types': 4.1.0 + '@smithy/util-config-provider': 4.0.0 + '@smithy/util-middleware': 4.0.1 + tslib: 2.8.1 + + '@smithy/core@3.1.5': + dependencies: + '@smithy/middleware-serde': 4.0.2 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-stream': 4.1.2 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/credential-provider-imds@4.0.1': + dependencies: + '@smithy/node-config-provider': 4.0.1 + '@smithy/property-provider': 4.0.1 + '@smithy/types': 4.1.0 + '@smithy/url-parser': 4.0.1 + tslib: 2.8.1 + + '@smithy/eventstream-codec@4.0.1': + dependencies: + '@aws-crypto/crc32': 5.2.0 + '@smithy/types': 4.1.0 + '@smithy/util-hex-encoding': 4.0.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-browser@4.0.1': + dependencies: + '@smithy/eventstream-serde-universal': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-config-resolver@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-node@4.0.1': + dependencies: + '@smithy/eventstream-serde-universal': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-universal@4.0.1': + dependencies: + '@smithy/eventstream-codec': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/fetch-http-handler@5.0.1': + dependencies: + '@smithy/protocol-http': 5.0.1 + '@smithy/querystring-builder': 4.0.1 + '@smithy/types': 4.1.0 + '@smithy/util-base64': 4.0.0 + tslib: 2.8.1 + + '@smithy/hash-node@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/invalid-dependency@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/is-array-buffer@2.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/is-array-buffer@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/middleware-content-length@4.0.1': + dependencies: + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/middleware-endpoint@4.0.6': + dependencies: + '@smithy/core': 3.1.5 + '@smithy/middleware-serde': 4.0.2 + '@smithy/node-config-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 + '@smithy/url-parser': 4.0.1 + '@smithy/util-middleware': 4.0.1 + tslib: 2.8.1 + + '@smithy/middleware-retry@4.0.7': + dependencies: + '@smithy/node-config-provider': 4.0.1 + '@smithy/protocol-http': 5.0.1 + '@smithy/service-error-classification': 4.0.1 + '@smithy/smithy-client': 4.1.6 + '@smithy/types': 4.1.0 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-retry': 4.0.1 + tslib: 2.8.1 + uuid: 9.0.1 + + '@smithy/middleware-serde@4.0.2': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/middleware-stack@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/node-config-provider@4.0.1': + dependencies: + '@smithy/property-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/node-http-handler@4.0.3': + dependencies: + '@smithy/abort-controller': 4.0.1 + '@smithy/protocol-http': 5.0.1 + '@smithy/querystring-builder': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/property-provider@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/protocol-http@5.0.1': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/querystring-builder@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + '@smithy/util-uri-escape': 4.0.0 + tslib: 2.8.1 + + '@smithy/querystring-parser@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/service-error-classification@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + + '@smithy/shared-ini-file-loader@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/signature-v4@5.0.1': + dependencies: + '@smithy/is-array-buffer': 4.0.0 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + '@smithy/util-hex-encoding': 4.0.0 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-uri-escape': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/smithy-client@4.1.6': + dependencies: + '@smithy/core': 3.1.5 + '@smithy/middleware-endpoint': 4.0.6 + '@smithy/middleware-stack': 4.0.1 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + '@smithy/util-stream': 4.1.2 + tslib: 2.8.1 + + '@smithy/types@4.1.0': + dependencies: + tslib: 2.8.1 + + '@smithy/url-parser@4.0.1': + dependencies: + '@smithy/querystring-parser': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/util-base64@4.0.0': + dependencies: + '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/util-body-length-browser@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-body-length-node@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-buffer-from@2.2.0': + dependencies: + '@smithy/is-array-buffer': 2.2.0 + tslib: 2.8.1 + + '@smithy/util-buffer-from@4.0.0': + dependencies: + '@smithy/is-array-buffer': 4.0.0 + tslib: 2.8.1 + + '@smithy/util-config-provider@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-defaults-mode-browser@4.0.7': + dependencies: + '@smithy/property-provider': 4.0.1 + '@smithy/smithy-client': 4.1.6 + '@smithy/types': 4.1.0 + bowser: 2.11.0 + tslib: 2.8.1 + + '@smithy/util-defaults-mode-node@4.0.7': + dependencies: + '@smithy/config-resolver': 4.0.1 + '@smithy/credential-provider-imds': 4.0.1 + '@smithy/node-config-provider': 4.0.1 + '@smithy/property-provider': 4.0.1 + '@smithy/smithy-client': 4.1.6 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/util-endpoints@3.0.1': + dependencies: + '@smithy/node-config-provider': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/util-hex-encoding@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-middleware@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/util-retry@4.0.1': + dependencies: + '@smithy/service-error-classification': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/util-stream@4.1.2': + dependencies: + '@smithy/fetch-http-handler': 5.0.1 + '@smithy/node-http-handler': 4.0.3 + '@smithy/types': 4.1.0 + '@smithy/util-base64': 4.0.0 + '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-hex-encoding': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/util-uri-escape@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-utf8@2.3.0': + dependencies: + '@smithy/util-buffer-from': 2.2.0 + tslib: 2.8.1 + + '@smithy/util-utf8@4.0.0': + dependencies: + '@smithy/util-buffer-from': 4.0.0 + tslib: 2.8.1 + '@swc/helpers@0.5.15': dependencies: tslib: 2.8.1 @@ -10356,6 +11953,8 @@ snapshots: '@types/ms': 2.1.0 optional: true + '@types/diff@5.2.3': {} + '@types/estree@1.0.6': {} '@types/gensync@1.0.4': {} @@ -10385,6 +11984,8 @@ snapshots: '@types/lodash@4.17.15': {} + '@types/minimatch@5.1.2': {} + '@types/ms@2.1.0': optional: true @@ -10409,6 +12010,10 @@ snapshots: dependencies: undici-types: 6.19.8 + '@types/node@22.13.10': + dependencies: + undici-types: 6.20.0 + '@types/parse-json@4.0.2': {} '@types/prop-types@15.7.14': {} @@ -10426,6 +12031,8 @@ snapshots: dependencies: '@types/node': 20.14.8 + '@types/retry@0.12.0': {} + '@types/retry@0.12.5': {} '@types/semver@7.5.8': {} @@ -10436,6 +12043,10 @@ snapshots: '@types/turndown@5.0.5': {} + '@types/uuid@10.0.0': {} + + '@types/uuid@9.0.8': {} + '@types/yauzl@2.10.3': dependencies: '@types/node': 20.14.8 @@ -10619,6 +12230,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitejs/plugin-react@4.3.4(vite@5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4))': + dependencies: + '@babel/core': 7.26.8 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.8) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.8) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.2 + vite: 5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4) + transitivePeerDependencies: + - supports-color + '@vitest/browser@3.0.5(@types/node@20.17.17)(playwright@1.50.1)(typescript@5.7.3)(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4))(vitest@3.0.5)': dependencies: '@testing-library/dom': 10.4.0 @@ -10639,6 +12261,28 @@ snapshots: - typescript - utf-8-validate - vite + optional: true + + '@vitest/browser@3.0.5(@types/node@22.13.10)(playwright@1.50.1)(typescript@5.7.3)(vite@5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4))(vitest@3.0.5)': + dependencies: + '@testing-library/dom': 10.4.0 + '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0) + '@vitest/mocker': 3.0.5(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(vite@5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4)) + '@vitest/utils': 3.0.5 + magic-string: 0.30.17 + msw: 2.7.0(@types/node@22.13.10)(typescript@5.7.3) + sirv: 3.0.1 + tinyrainbow: 2.0.0 + vitest: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4) + ws: 8.18.0 + optionalDependencies: + playwright: 1.50.1 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - typescript + - utf-8-validate + - vite '@vitest/coverage-istanbul@3.0.5(vitest@3.0.5)': dependencies: @@ -10732,6 +12376,15 @@ snapshots: msw: 2.7.0(@types/node@20.17.17)(typescript@5.7.3) vite: 5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4) + '@vitest/mocker@3.0.5(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(vite@5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4))': + dependencies: + '@vitest/spy': 3.0.5 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + msw: 2.7.0(@types/node@22.13.10)(typescript@5.7.3) + vite: 5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4) + '@vitest/mocker@3.0.7(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(vite@5.4.14(@types/node@20.14.8)(sass-embedded@1.83.4))': dependencies: '@vitest/spy': 3.0.7 @@ -10750,6 +12403,15 @@ snapshots: msw: 2.7.0(@types/node@20.14.8)(typescript@5.7.3) vite: 5.4.14(@types/node@20.14.8)(sass-embedded@1.83.4) + '@vitest/mocker@3.0.7(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(vite@5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4))': + dependencies: + '@vitest/spy': 3.0.7 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + msw: 2.7.0(@types/node@22.13.10)(typescript@5.7.3) + vite: 5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4) + '@vitest/pretty-format@3.0.5': dependencies: tinyrainbow: 2.0.0 @@ -10869,6 +12531,11 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 + accepts@2.0.0: + dependencies: + mime-types: 3.0.0 + negotiator: 1.0.0 + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: acorn: 8.14.0 @@ -11168,11 +12835,27 @@ snapshots: transitivePeerDependencies: - supports-color + body-parser@2.1.0: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 4.4.0 + http-errors: 2.0.0 + iconv-lite: 0.5.2 + on-finished: 2.4.1 + qs: 6.14.0 + raw-body: 3.0.0 + type-is: 2.0.0 + transitivePeerDependencies: + - supports-color + boolean@3.2.0: optional: true bottleneck@2.19.5: {} + bowser@2.11.0: {} + bplist-creator@0.0.8: dependencies: stream-buffers: 2.2.0 @@ -11274,6 +12957,8 @@ snapshots: callsites@3.1.0: {} + camelcase@6.3.0: {} + caniuse-lite@1.0.30001703: {} centra@2.7.0: @@ -11427,10 +13112,18 @@ snapshots: semver: 7.7.1 uint8array-extras: 1.4.0 + console-table-printer@2.12.1: + dependencies: + simple-wcswidth: 1.0.1 + content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 + content-disposition@1.0.0: + dependencies: + safe-buffer: 5.2.1 + content-type@1.0.5: {} conventional-changelog-angular@7.0.0: @@ -11454,6 +13147,8 @@ snapshots: cookie-signature@1.0.6: {} + cookie-signature@1.2.2: {} + cookie@0.7.1: {} cookie@0.7.2: {} @@ -11468,6 +13163,11 @@ snapshots: core-util-is@1.0.3: {} + cors@2.8.5: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + cosmiconfig-typescript-loader@6.1.0(@types/node@20.17.17)(cosmiconfig@9.0.0(typescript@5.7.3))(typescript@5.7.3): dependencies: '@types/node': 20.17.17 @@ -11567,10 +13267,16 @@ snapshots: dependencies: ms: 2.1.2 + debug@4.3.6: + dependencies: + ms: 2.1.2 + debug@4.4.0: dependencies: ms: 2.1.3 + decamelize@1.2.0: {} + decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 @@ -11628,6 +13334,8 @@ snapshots: diff@4.0.2: {} + diff@5.2.0: {} + dir-compare@4.2.0: dependencies: minimatch: 3.1.2 @@ -12201,10 +13909,18 @@ snapshots: event-target-shim@5.0.1: {} + eventemitter3@4.0.7: {} + eventemitter3@5.0.1: {} events@3.3.0: {} + eventsource-parser@3.0.0: {} + + eventsource@3.0.5: + dependencies: + eventsource-parser: 3.0.0 + execa@1.0.0: dependencies: cross-spawn: 6.0.6 @@ -12245,6 +13961,10 @@ snapshots: exponential-backoff@3.1.2: {} + express-rate-limit@7.5.0(express@5.0.1): + dependencies: + express: 5.0.1 + express-ws@5.0.2(express@4.21.2): dependencies: express: 4.21.2 @@ -12261,29 +13981,66 @@ snapshots: content-disposition: 0.5.4 content-type: 1.0.5 cookie: 0.7.1 - cookie-signature: 1.0.6 - debug: 2.6.9 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.1 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.12 + proxy-addr: 2.0.7 + qs: 6.13.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.0 + serve-static: 1.16.2 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + express@5.0.1: + dependencies: + accepts: 2.0.0 + body-parser: 2.1.0 + content-disposition: 1.0.0 + content-type: 1.0.5 + cookie: 0.7.1 + cookie-signature: 1.2.2 + debug: 4.3.6 depd: 2.0.0 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 1.3.1 - fresh: 0.5.2 + finalhandler: 2.1.0 + fresh: 2.0.0 http-errors: 2.0.0 - merge-descriptors: 1.0.3 + merge-descriptors: 2.0.0 methods: 1.1.2 + mime-types: 3.0.0 on-finished: 2.4.1 + once: 1.4.0 parseurl: 1.3.3 - path-to-regexp: 0.1.12 proxy-addr: 2.0.7 qs: 6.13.0 range-parser: 1.2.1 + router: 2.1.0 safe-buffer: 5.2.1 - send: 0.19.0 - serve-static: 1.16.2 + send: 1.1.0 + serve-static: 2.1.0 setprototypeof: 1.2.0 statuses: 2.0.1 - type-is: 1.6.18 + type-is: 2.0.0 utils-merge: 1.0.1 vary: 1.1.2 transitivePeerDependencies: @@ -12329,6 +14086,10 @@ snapshots: fast-uri@3.0.6: {} + fast-xml-parser@4.4.1: + dependencies: + strnum: 1.1.2 + fastest-stable-stringify@2.0.2: {} fastq@1.19.0: @@ -12379,6 +14140,17 @@ snapshots: transitivePeerDependencies: - supports-color + finalhandler@2.1.0: + dependencies: + debug: 4.4.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + find-root@1.1.0: {} find-up@2.1.0: @@ -12479,6 +14251,8 @@ snapshots: fresh@0.5.2: {} + fresh@2.0.0: {} + fs-extra@10.1.0: dependencies: graceful-fs: 4.2.11 @@ -12846,10 +14620,13 @@ snapshots: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.5.2: + dependencies: + safer-buffer: 2.1.2 + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 - optional: true ieee754@1.2.1: {} @@ -12920,6 +14697,8 @@ snapshots: hasown: 2.0.2 side-channel: 1.1.0 + interpret@1.4.0: {} + interpret@3.1.1: {} ip-address@9.0.5: @@ -13031,6 +14810,8 @@ snapshots: is-plain-object@5.0.0: {} + is-promise@4.0.0: {} + is-property@1.0.2: optional: true @@ -13267,6 +15048,8 @@ snapshots: jsonpointer@5.0.1: optional: true + jsonrepair@3.12.0: {} + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 @@ -13291,6 +15074,18 @@ snapshots: dependencies: json-buffer: 3.0.1 + langsmith@0.3.14(openai@4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2)): + dependencies: + '@types/uuid': 10.0.0 + chalk: 4.1.2 + console-table-printer: 2.12.1 + p-queue: 6.6.2 + p-retry: 4.6.2 + semver: 7.7.1 + uuid: 10.0.0 + optionalDependencies: + openai: 4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2) + levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -13511,6 +15306,8 @@ snapshots: media-typer@0.3.0: {} + media-typer@1.1.0: {} + medium-zoom@1.1.0: {} mem@4.3.0: @@ -13523,6 +15320,8 @@ snapshots: merge-descriptors@1.0.3: {} + merge-descriptors@2.0.0: {} + merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -13541,10 +15340,16 @@ snapshots: mime-db@1.52.0: {} + mime-db@1.53.0: {} + mime-types@2.1.35: dependencies: mime-db: 1.52.0 + mime-types@3.0.0: + dependencies: + mime-db: 1.53.0 + mime@1.6.0: {} mime@3.0.0: {} @@ -13718,6 +15523,32 @@ snapshots: typescript: 5.7.3 transitivePeerDependencies: - '@types/node' + optional: true + + msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3): + dependencies: + '@bundled-es-modules/cookie': 2.0.1 + '@bundled-es-modules/statuses': 1.0.1 + '@bundled-es-modules/tough-cookie': 0.1.6 + '@inquirer/confirm': 5.1.6(@types/node@22.13.10) + '@mswjs/interceptors': 0.37.6 + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/until': 2.1.0 + '@types/cookie': 0.6.0 + '@types/statuses': 2.0.5 + graphql: 16.10.0 + headers-polyfill: 4.0.3 + is-node-process: 1.2.0 + outvariant: 1.4.3 + path-to-regexp: 6.3.0 + picocolors: 1.1.1 + strict-event-emitter: 0.5.1 + type-fest: 4.34.1 + yargs: 17.7.2 + optionalDependencies: + typescript: 5.7.3 + transitivePeerDependencies: + - '@types/node' murmur-32@0.2.0: dependencies: @@ -13726,6 +15557,8 @@ snapshots: imul: 1.0.1 optional: true + mustache@4.2.0: {} + mute-stream@1.0.0: {} mute-stream@2.0.0: {} @@ -13756,6 +15589,8 @@ snapshots: negotiator@0.6.4: {} + negotiator@1.0.0: {} + netmask@2.0.2: {} new-github-issue-url@0.2.1: {} @@ -13883,6 +15718,21 @@ snapshots: transitivePeerDependencies: - encoding + openai@4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2): + dependencies: + '@types/node': 18.19.75 + '@types/node-fetch': 2.6.12 + abort-controller: 3.0.0 + agentkeepalive: 4.6.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0(encoding@0.1.13) + optionalDependencies: + ws: 8.18.0 + zod: 3.24.2 + transitivePeerDependencies: + - encoding + opencommit@3.2.5(encoding@0.1.13)(ws@8.18.0): dependencies: '@actions/core': 1.11.1 @@ -13904,7 +15754,7 @@ snapshots: ignore: 5.3.2 ini: 3.0.1 inquirer: 9.3.7 - openai: 4.85.1(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2) + openai: 4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2) punycode: 2.3.1 zod: 3.24.2 transitivePeerDependencies: @@ -13996,6 +15846,20 @@ snapshots: dependencies: aggregate-error: 3.1.0 + p-queue@6.6.2: + dependencies: + eventemitter3: 4.0.7 + p-timeout: 3.2.0 + + p-retry@4.6.2: + dependencies: + '@types/retry': 0.12.0 + retry: 0.13.1 + + p-timeout@3.2.0: + dependencies: + p-finally: 1.0.0 + p-try@1.0.0: {} p-try@2.2.0: {} @@ -14091,6 +15955,8 @@ snapshots: path-to-regexp@6.3.0: {} + path-to-regexp@8.2.0: {} + path-type@2.0.0: dependencies: pify: 2.3.0 @@ -14133,6 +15999,8 @@ snapshots: dependencies: pngjs: 6.0.0 + pkce-challenge@4.1.0: {} + playwright-core@1.50.1: {} playwright@1.50.1: @@ -14257,6 +16125,10 @@ snapshots: dependencies: side-channel: 1.1.0 + qs@6.14.0: + dependencies: + side-channel: 1.1.0 + querystringify@2.2.0: {} queue-microtask@1.2.3: {} @@ -14278,6 +16150,13 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 + raw-body@3.0.0: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.6.3 + unpipe: 1.0.0 + react-clientside-effect@1.2.7(react@18.3.1): dependencies: '@babel/runtime': 7.26.7 @@ -14433,6 +16312,10 @@ snapshots: process: 0.11.10 readable-stream: 4.7.0 + rechoir@0.6.2: + dependencies: + resolve: 1.22.10 + rechoir@0.8.0: dependencies: resolve: 1.22.10 @@ -14573,6 +16456,12 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.34.6 fsevents: 2.3.3 + router@2.1.0: + dependencies: + is-promise: 4.0.0 + parseurl: 1.3.3 + path-to-regexp: 8.2.0 + rsbuild-plugin-dts@0.5.3(@rsbuild/core@1.2.17)(typescript@4.9.4): dependencies: '@ast-grep/napi': 0.35.0 @@ -14772,6 +16661,23 @@ snapshots: transitivePeerDependencies: - supports-color + send@1.1.0: + dependencies: + debug: 4.4.0 + destroy: 1.2.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime-types: 2.1.35 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + serialize-error@7.0.1: dependencies: type-fest: 0.13.1 @@ -14786,6 +16692,15 @@ snapshots: transitivePeerDependencies: - supports-color + serve-static@2.1.0: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 1.1.0 + transitivePeerDependencies: + - supports-color + set-cookie-parser@2.7.1: {} set-function-length@1.2.2: @@ -14854,6 +16769,17 @@ snapshots: shebang-regex@3.0.0: {} + shelljs@0.8.5: + dependencies: + glob: 7.2.3 + interpret: 1.4.0 + rechoir: 0.6.2 + + shx@0.3.4: + dependencies: + minimist: 1.2.8 + shelljs: 0.8.5 + side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 @@ -14892,6 +16818,8 @@ snapshots: dependencies: is-arrayish: 0.3.2 + simple-wcswidth@1.0.1: {} + simple-xml-to-json@1.2.3: {} sirv@3.0.1: @@ -15097,6 +17025,8 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 + strnum@1.1.2: {} + strtok3@6.3.0: dependencies: '@tokenizer/token': 0.3.0 @@ -15336,6 +17266,13 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + tsx@4.19.3: + dependencies: + esbuild: 0.25.0 + get-tsconfig: 4.10.0 + optionalDependencies: + fsevents: 2.3.3 + tunnel@0.0.6: {} turbo-stream@2.4.0: {} @@ -15368,6 +17305,12 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 + type-is@2.0.0: + dependencies: + content-type: 1.0.5 + media-typer: 1.1.0 + mime-types: 3.0.0 + typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.3 @@ -15427,6 +17370,8 @@ snapshots: undici-types@6.19.8: {} + undici-types@6.20.0: {} + undici@5.28.5: dependencies: '@fastify/busboy': 2.1.1 @@ -15512,6 +17457,12 @@ snapshots: utils-merge@1.0.1: {} + uuid@10.0.0: {} + + uuid@11.1.0: {} + + uuid@9.0.1: {} + v8-compile-cache-lib@3.0.1: {} validate-npm-package-license@3.0.4: @@ -15541,6 +17492,24 @@ snapshots: - supports-color - terser + vite-node@3.0.5(@types/node@22.13.10)(sass-embedded@1.83.4): + dependencies: + cac: 6.7.14 + debug: 4.4.0 + es-module-lexer: 1.6.0 + pathe: 2.0.3 + vite: 5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + vite-node@3.0.7(@types/node@20.14.8)(sass-embedded@1.83.4): dependencies: cac: 6.7.14 @@ -15559,6 +17528,24 @@ snapshots: - supports-color - terser + vite-node@3.0.7(@types/node@22.13.10)(sass-embedded@1.83.4): + dependencies: + cac: 6.7.14 + debug: 4.4.0 + es-module-lexer: 1.6.0 + pathe: 2.0.3 + vite: 5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + vite-tsconfig-paths@5.1.4(typescript@5.7.3)(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)): dependencies: debug: 4.4.0 @@ -15590,12 +17577,22 @@ snapshots: fsevents: 2.3.3 sass-embedded: 1.83.4 + vite@5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4): + dependencies: + esbuild: 0.21.5 + postcss: 8.5.2 + rollup: 4.34.6 + optionalDependencies: + '@types/node': 22.13.10 + fsevents: 2.3.3 + sass-embedded: 1.83.4 + vitest-browser-react@0.1.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(@vitest/browser@3.0.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vitest@3.0.5): dependencies: - '@vitest/browser': 3.0.5(@types/node@20.17.17)(playwright@1.50.1)(typescript@5.7.3)(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4))(vitest@3.0.5) + '@vitest/browser': 3.0.5(@types/node@22.13.10)(playwright@1.50.1)(typescript@5.7.3)(vite@5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4))(vitest@3.0.5) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - vitest: 3.0.5(@types/debug@4.1.12)(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4) + vitest: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4) optionalDependencies: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) @@ -15638,6 +17635,44 @@ snapshots: - supports-color - terser + vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4): + dependencies: + '@vitest/expect': 3.0.5 + '@vitest/mocker': 3.0.5(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(vite@5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4)) + '@vitest/pretty-format': 3.0.5 + '@vitest/runner': 3.0.5 + '@vitest/snapshot': 3.0.5 + '@vitest/spy': 3.0.5 + '@vitest/utils': 3.0.5 + chai: 5.1.2 + debug: 4.4.0 + expect-type: 1.1.0 + magic-string: 0.30.17 + pathe: 2.0.3 + std-env: 3.8.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinypool: 1.0.2 + tinyrainbow: 2.0.0 + vite: 5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4) + vite-node: 3.0.5(@types/node@22.13.10)(sass-embedded@1.83.4) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/debug': 4.1.12 + '@types/node': 22.13.10 + '@vitest/browser': 3.0.5(@types/node@22.13.10)(playwright@1.50.1)(typescript@5.7.3)(vite@5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4))(vitest@3.0.5) + happy-dom: 17.1.1 + transitivePeerDependencies: + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4): dependencies: '@vitest/expect': 3.0.7 @@ -15712,6 +17747,43 @@ snapshots: - supports-color - terser + vitest@3.0.7(@types/debug@4.1.12)(@types/node@22.13.10)(happy-dom@17.1.1)(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4): + dependencies: + '@vitest/expect': 3.0.7 + '@vitest/mocker': 3.0.7(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(vite@5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4)) + '@vitest/pretty-format': 3.0.8 + '@vitest/runner': 3.0.7 + '@vitest/snapshot': 3.0.7 + '@vitest/spy': 3.0.7 + '@vitest/utils': 3.0.7 + chai: 5.2.0 + debug: 4.4.0 + expect-type: 1.1.0 + magic-string: 0.30.17 + pathe: 2.0.3 + std-env: 3.8.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinypool: 1.0.2 + tinyrainbow: 2.0.0 + vite: 5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4) + vite-node: 3.0.7(@types/node@22.13.10)(sass-embedded@1.83.4) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/debug': 4.1.12 + '@types/node': 22.13.10 + happy-dom: 17.1.1 + transitivePeerDependencies: + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + wcwidth@1.0.1: dependencies: defaults: 1.0.4 From 75b46e96b93de91c1ca6edd456152bbb1856fd92 Mon Sep 17 00:00:00 2001 From: Charles Date: Mon, 17 Mar 2025 17:52:01 +0800 Subject: [PATCH 52/62] fix(mcp-browser): browser relaunch when session closed (#192) --- .../agent-infra/mcp-servers/browser/index.ts | 43 ++++++++++++++++- .../mcp-servers/browser/package.json | 1 + .../agent-infra/mcp-servers/browser/server.ts | 48 +++++++++++++++---- pnpm-lock.yaml | 3 ++ 4 files changed, 85 insertions(+), 10 deletions(-) diff --git a/packages/agent-infra/mcp-servers/browser/index.ts b/packages/agent-infra/mcp-servers/browser/index.ts index ead933b6d..562583ccb 100644 --- a/packages/agent-infra/mcp-servers/browser/index.ts +++ b/packages/agent-infra/mcp-servers/browser/index.ts @@ -14,12 +14,12 @@ import { ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, - CallToolResult, } from '@modelcontextprotocol/sdk/types.js'; import { client as mcpBrowserClient, getBrowser, getScreenshots, + setConfig, } from './server.js'; let initialBrowserSetup = false; @@ -35,6 +35,47 @@ declare global { } } +setConfig({ + launchOptions: { + headless: false, + }, + logger: { + info: (...args: any[]) => { + server.notification({ + method: 'notifications/message', + params: { + level: 'warning', + logger: 'mcp-server-browser', + data: JSON.stringify(args), + }, + }); + + server.sendLoggingMessage({ + level: 'info', + data: JSON.stringify(args), + }); + }, + error: (...args: any[]) => { + server.sendLoggingMessage({ + level: 'error', + data: JSON.stringify(args), + }); + }, + warn: (...args: any[]) => { + server.sendLoggingMessage({ + level: 'warning', + data: JSON.stringify(args), + }); + }, + debug: (...args: any[]) => { + server.sendLoggingMessage({ + level: 'debug', + data: JSON.stringify(args), + }); + }, + }, +}); + async function handleToolCall(name: string, args: any) { const result = await mcpBrowserClient.callTool({ name, diff --git a/packages/agent-infra/mcp-servers/browser/package.json b/packages/agent-infra/mcp-servers/browser/package.json index 1839e137f..6de1e272b 100644 --- a/packages/agent-infra/mcp-servers/browser/package.json +++ b/packages/agent-infra/mcp-servers/browser/package.json @@ -23,6 +23,7 @@ "dependencies": { "@modelcontextprotocol/sdk": "^1.6.1", "turndown": "^7.2.0", + "turndown-plugin-gfm": "^1.0.2", "@agent-infra/browser": "workspace:*", "@agent-infra/browser-use": "workspace:*", "puppeteer-core": "^24.1.1", diff --git a/packages/agent-infra/mcp-servers/browser/server.ts b/packages/agent-infra/mcp-servers/browser/server.ts index 070436a36..79f9aa54a 100644 --- a/packages/agent-infra/mcp-servers/browser/server.ts +++ b/packages/agent-infra/mcp-servers/browser/server.ts @@ -14,7 +14,7 @@ import { import { z } from 'zod'; import { ToolSchema } from '@modelcontextprotocol/sdk/types.js'; import { zodToJsonSchema } from 'zod-to-json-schema'; -import { LocalBrowser, Page } from '@agent-infra/browser'; +import { LaunchOptions, LocalBrowser, Page } from '@agent-infra/browser'; import { getBuildDomTreeScript, parseNode, @@ -25,15 +25,35 @@ import { } from '@agent-infra/browser-use'; import { Client } from '@modelcontextprotocol/sdk/client/index.js'; import TurndownService from 'turndown'; - +// @ts-ignore +import { gfm } from 'turndown-plugin-gfm'; const ToolInputSchema = ToolSchema.shape.inputSchema; type ToolInput = z.infer; +type Logger = { + info: (...args: any[]) => void; + error: (...args: any[]) => void; + warn: (...args: any[]) => void; + debug: (...args: any[]) => void; +}; + +interface GlobalConfig { + launchOptions?: LaunchOptions; + logger?: Logger; +} + // Global state +let globalConfig: GlobalConfig = { + launchOptions: { + headless: true, + }, +}; let globalBrowser: LocalBrowser['browser'] | undefined; let globalPage: Page | undefined; let selectorMap: Map | undefined; + const screenshots = new Map(); +const logger = (globalConfig?.logger || console) as Logger; export const getScreenshots = () => screenshots; @@ -63,15 +83,24 @@ const getCurrentPage = async (browser: LocalBrowser['browser']) => { }; }; +export async function setConfig(config: GlobalConfig) { + globalConfig = config; +} + export async function setInitialBrowser( _browser?: LocalBrowser['browser'], _page?: Page, ) { if (globalBrowser) { try { - await globalBrowser.pages(); + logger.info('starting to check if browser session is closed'); + const pages = await globalBrowser.pages(); + if (pages.length === 0) { + throw new Error('browser session is closed'); + } + logger.info(`detected browser session is still open: ${pages.length}`); } catch (error) { - console.log('detected browser session closed, will reinitialize browser'); + logger.info('detected browser session closed, will reinitialize browser'); globalBrowser = undefined; globalPage = undefined; } @@ -88,9 +117,7 @@ export async function setInitialBrowser( // priority 2: create new browser and page if (!globalBrowser) { const localBrowser = new LocalBrowser(); - await localBrowser.launch({ - headless: false, - }); + await localBrowser.launch(globalConfig.launchOptions); globalBrowser = localBrowser.getBrowser(); } let currTabsIdx = 0; @@ -327,7 +354,7 @@ async function buildDomTree(page: Page) { } return null; } catch (error) { - console.error('Error building DOM tree:', error); + logger.error('Error building DOM tree:', error); return null; } } @@ -336,7 +363,9 @@ const handleToolCall: Client['callTool'] = async ({ name, arguments: toolArgs, }): Promise => { - let { browser, page } = await setInitialBrowser(); + const initialBrowser = await setInitialBrowser(); + const { browser } = initialBrowser; + let { page } = initialBrowser; if (!page) { return { @@ -668,6 +697,7 @@ const handleToolCall: Client['callTool'] = async ({ return ''; }, }); + turndownService.use(gfm); const html = await page.content(); const markdown = turndownService.turndown(html); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ef83f01a4..44b525c1f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -496,6 +496,9 @@ importers: turndown: specifier: ^7.2.0 version: 7.2.0 + turndown-plugin-gfm: + specifier: ^1.0.2 + version: 1.0.2 zod-to-json-schema: specifier: ^3.23.5 version: 3.24.1(zod@3.24.2) From 9989abadfdfb9f778e747e7eee0bcf6b6cd8b6e7 Mon Sep 17 00:00:00 2001 From: yangxingyuan <39261479+sanyuan0704@users.noreply.github.com> Date: Mon, 17 Mar 2025 20:18:12 +0800 Subject: [PATCH 53/62] feat: agent tars app (#191) Co-authored-by: chenhaoli Co-authored-by: Charles --- apps/omega/dev-app-update.yml | 3 + apps/omega/electron-builder.yml | 45 + apps/omega/electron.vite.config.ts | 75 + apps/omega/forge.config.ts | 159 + apps/omega/package.json | 69 + apps/omega/postcss.config.js | 6 + apps/omega/resources/icon.png | Bin 0 -> 35949 bytes apps/omega/src/main/customTools/index.ts | 32 + apps/omega/src/main/customTools/search.ts | 37 + apps/omega/src/main/index.ts | 100 + apps/omega/src/main/ipcRoutes/action.ts | 203 + apps/omega/src/main/ipcRoutes/agent.ts | 10 + apps/omega/src/main/ipcRoutes/browser.ts | 9 + apps/omega/src/main/ipcRoutes/filesystem.ts | 44 + apps/omega/src/main/ipcRoutes/index.ts | 25 + apps/omega/src/main/ipcRoutes/llm.ts | 135 + .../src/main/llmProvider/ProviderFactory.ts | 107 + apps/omega/src/main/llmProvider/README.md | 265 + .../src/main/llmProvider/config/config.ts | 29 + apps/omega/src/main/llmProvider/example.ts | 88 + apps/omega/src/main/llmProvider/index.ts | 144 + .../llmProvider/interfaces/LLMProvider.ts | 67 + .../providers/AnthropicProvider.ts | 350 + .../providers/AzureOpenAIProvider.ts | 233 + .../llmProvider/providers/BaseProvider.ts | 69 + .../llmProvider/providers/GeminiProvider.ts | 318 + .../llmProvider/providers/MistralProvider.ts | 235 + .../llmProvider/providers/OpenAIProvider.ts | 223 + apps/omega/src/main/mcp/client.ts | 85 + apps/omega/src/main/mcp/tools.ts | 30 + apps/omega/src/main/package.json | 25 + apps/omega/src/main/type.ts | 4 + .../src/main/utils/normalizeOmegaData.ts | 78 + apps/omega/src/preload/index.d.ts | 11 + apps/omega/src/preload/index.ts | 26 + apps/omega/src/renderer/index.html | 16 + apps/omega/src/renderer/mock/ipc.ts | 131 + apps/omega/src/renderer/package.json | 49 + apps/omega/src/renderer/src/App.tsx | 20 + .../omega/src/renderer/src/agent/AgentFlow.ts | 418 + apps/omega/src/renderer/src/agent/Aware.ts | 245 + .../src/renderer/src/agent/EventManager.ts | 432 + .../src/renderer/src/agent/Executor/index.ts | 151 + .../src/renderer/src/agent/Executor/tools.ts | 41 + apps/omega/src/renderer/src/agent/Greeter.ts | 78 + .../src/renderer/src/agent/mockEvents.ts | 1958 ++ .../renderer/src/api/fileSystemInterceptor.ts | 116 + apps/omega/src/renderer/src/api/index.ts | 29 + apps/omega/src/renderer/src/api/llmConfig.ts | 30 + .../omega/src/renderer/src/assets/Mistral.tsx | 45 + apps/omega/src/renderer/src/assets/base.css | 67 + .../src/renderer/src/assets/electron.svg | 10 + apps/omega/src/renderer/src/assets/logo.png | Bin 0 -> 47979 bytes apps/omega/src/renderer/src/assets/main.css | 171 + .../src/renderer/src/assets/wavy-lines.svg | 25 + .../src/components/AgentApp/index.tsx | 57 + .../AgentFlowMessage/EventRenderer.tsx | 35 + .../AgentFlowMessage/GroupSection.tsx | 61 + .../AgentFlowMessage/ProgressBar.tsx | 38 + .../AgentFlowMessage/StepSection.tsx | 131 + .../AgentFlowMessage/events/AgentStatus.tsx | 12 + .../AgentFlowMessage/events/ChatText.tsx | 15 + .../AgentFlowMessage/events/End.tsx | 11 + .../AgentFlowMessage/events/LoadingStatus.tsx | 60 + .../AgentFlowMessage/events/Observation.tsx | 19 + .../AgentFlowMessage/events/ToolUsed.tsx | 130 + .../events/UserInteruption.tsx | 89 + .../src/components/AgentFlowMessage/icons.tsx | 12 + .../src/components/AgentFlowMessage/index.tsx | 37 + .../EventPlayer/PlayerControls.tsx | 101 + .../CanvasPanel/EventPlayer/index.tsx | 210 + .../platform/BrowserPanel/IconMapping.tsx | 40 + .../components/DefaultContent.tsx | 39 + .../BrowserPanel/components/LinksContent.tsx | 32 + .../components/ScreenshotContent.tsx | 22 + .../BrowserPanel/components/TextContent.tsx | 21 + .../platform/BrowserPanel/index.tsx | 27 + .../platform/BrowserPanel/types.ts | 13 + .../EventPlayer/platform/DefaultTip.tsx | 17 + .../EventPlayer/platform/FSPanel.tsx | 40 + .../EventPlayer/platform/SearchPanel.tsx | 67 + .../EventPlayer/platform/TerminalPanel.tsx | 130 + .../EventPlayer/renderPlatformPanel.tsx | 77 + .../src/components/CanvasPanel/index.tsx | 15 + .../ChatUI/AgentStatusTip/index.tsx | 33 + .../ChatUI/BeforeInputContainer.tsx | 28 + .../src/components/ChatUI/MenuHeader.tsx | 130 + .../ChatUI/PlanTaskStatus/index.tsx | 102 + .../renderer/src/components/ChatUI/Replay.tsx | 125 + .../src/components/ChatUI/ShareModal.tsx | 153 + .../src/components/ChatUI/StatusBar.tsx | 76 + .../ChatUI/UserInteruptArea/index.tsx | 195 + .../renderer/src/components/ChatUI/index.scss | 18 + .../renderer/src/components/ChatUI/index.tsx | 143 + .../src/components/ChatUI/renderMessageUI.tsx | 20 + .../renderer/src/components/ErrorBoundary.tsx | 37 + .../FilePermissionHandler/index.tsx | 14 + .../components/FilePermissionModal/index.tsx | 121 + .../src/components/LeftSidebar/BottomBar.tsx | 22 + .../components/LeftSidebar/DeleteModal.tsx | 42 + .../components/LeftSidebar/SessionItem.tsx | 107 + .../LeftSidebar/SessionList/index.tsx | 114 + .../Settings/FileSystemSettingsTab.tsx | 83 + .../LeftSidebar/Settings/ModelSettingsTab.tsx | 129 + .../LeftSidebar/Settings/SettingsModal.tsx | 97 + .../components/LeftSidebar/Settings/index.ts | 1 + .../LeftSidebar/Settings/modelUtils.tsx | 61 + .../components/LeftSidebar/Settings/types.ts | 25 + .../LeftSidebar/Settings/useAppSettings.ts | 69 + .../LeftSidebar/Settings/useModelSettings.ts | 43 + .../LeftSidebar/Settings/useProviders.ts | 26 + .../src/components/LeftSidebar/TopBar.tsx | 53 + .../components/LeftSidebar/index.module.scss | 395 + .../src/components/LeftSidebar/index.tsx | 157 + .../src/components/LeftSidebar/type.ts | 10 + .../src/components/LoadingSpinner/index.tsx | 37 + .../renderer/src/components/MonacoEditor.tsx | 79 + .../omega/src/renderer/src/constants/index.ts | 15 + apps/omega/src/renderer/src/env.d.ts | 1 + .../renderer/src/hooks/useAddUserMessage.ts | 56 + .../src/renderer/src/hooks/useAgentFlow.ts | 97 + .../src/renderer/src/hooks/useAppChat.ts | 15 + .../src/renderer/src/hooks/useChatSession.ts | 171 + .../src/hooks/useFileSystemSettings.ts | 57 + .../src/renderer/src/hooks/useThemeMode.ts | 11 + apps/omega/src/renderer/src/index.scss | 361 + apps/omega/src/renderer/src/main.tsx | 13 + .../src/services/chatSessionStorage.ts | 116 + .../src/services/filePermissionService.ts | 92 + .../src/services/fileSystemSettings.ts | 41 + .../src/renderer/src/services/llmSettings.ts | 48 + apps/omega/src/renderer/src/state/canvas.ts | 82 + apps/omega/src/renderer/src/state/chat.ts | 28 + apps/omega/src/renderer/src/type/agent.ts | 201 + apps/omega/src/renderer/src/type/canvas.ts | 24 + .../src/renderer/src/type/chatMessage.ts | 24 + apps/omega/src/renderer/src/type/event.ts | 64 + .../renderer/src/utils/ChatMessageUtils.tsx | 57 + .../src/utils/extractHistoryEvents.ts | 14 + .../src/utils/getLoadingTipForToolCall.ts | 183 + apps/omega/src/renderer/src/utils/index.ts | 6 + .../src/renderer/src/utils/monacoConfig.ts | 40 + .../src/utils/normalizeToolUsedInfo.ts | 27 + .../renderer/src/utils/parseEvents.test.ts | 81 + .../src/renderer/src/utils/parseEvents.ts | 224 + apps/omega/src/vendor/chat-ui/index.d.ts | 592 + apps/omega/src/vendor/chat-ui/index.js | 1 + apps/omega/src/vendor/chat-ui/package.json | 6 + apps/omega/static/dmg-background.png | Bin 0 -> 914 bytes apps/omega/static/dmg-background@2x.png | Bin 0 -> 2073 bytes apps/omega/tailwind.config.ts | 36 + apps/omega/tsconfig.base.json | 13 + apps/omega/tsconfig.json | 11 + apps/omega/tsconfig.node.json | 10 + apps/omega/tsconfig.web.json | 16 + apps/omega/vite.config.ts | 57 + apps/omega/vitest.config.ts | 15 + apps/ui-tars/e2e/vitest.config.mts | 1 + apps/ui-tars/src/main/vitest.config.mts | 1 + apps/ui-tars/vitest.config.mts | 1 + pnpm-lock.yaml | 19923 +++++++++++----- pnpm-workspace.yaml | 3 +- 162 files changed, 27930 insertions(+), 6579 deletions(-) create mode 100644 apps/omega/dev-app-update.yml create mode 100644 apps/omega/electron-builder.yml create mode 100644 apps/omega/electron.vite.config.ts create mode 100644 apps/omega/forge.config.ts create mode 100644 apps/omega/package.json create mode 100644 apps/omega/postcss.config.js create mode 100644 apps/omega/resources/icon.png create mode 100644 apps/omega/src/main/customTools/index.ts create mode 100644 apps/omega/src/main/customTools/search.ts create mode 100644 apps/omega/src/main/index.ts create mode 100644 apps/omega/src/main/ipcRoutes/action.ts create mode 100644 apps/omega/src/main/ipcRoutes/agent.ts create mode 100644 apps/omega/src/main/ipcRoutes/browser.ts create mode 100644 apps/omega/src/main/ipcRoutes/filesystem.ts create mode 100644 apps/omega/src/main/ipcRoutes/index.ts create mode 100644 apps/omega/src/main/ipcRoutes/llm.ts create mode 100644 apps/omega/src/main/llmProvider/ProviderFactory.ts create mode 100644 apps/omega/src/main/llmProvider/README.md create mode 100644 apps/omega/src/main/llmProvider/config/config.ts create mode 100644 apps/omega/src/main/llmProvider/example.ts create mode 100644 apps/omega/src/main/llmProvider/index.ts create mode 100644 apps/omega/src/main/llmProvider/interfaces/LLMProvider.ts create mode 100644 apps/omega/src/main/llmProvider/providers/AnthropicProvider.ts create mode 100644 apps/omega/src/main/llmProvider/providers/AzureOpenAIProvider.ts create mode 100644 apps/omega/src/main/llmProvider/providers/BaseProvider.ts create mode 100644 apps/omega/src/main/llmProvider/providers/GeminiProvider.ts create mode 100644 apps/omega/src/main/llmProvider/providers/MistralProvider.ts create mode 100644 apps/omega/src/main/llmProvider/providers/OpenAIProvider.ts create mode 100644 apps/omega/src/main/mcp/client.ts create mode 100644 apps/omega/src/main/mcp/tools.ts create mode 100644 apps/omega/src/main/package.json create mode 100644 apps/omega/src/main/type.ts create mode 100644 apps/omega/src/main/utils/normalizeOmegaData.ts create mode 100644 apps/omega/src/preload/index.d.ts create mode 100644 apps/omega/src/preload/index.ts create mode 100644 apps/omega/src/renderer/index.html create mode 100644 apps/omega/src/renderer/mock/ipc.ts create mode 100644 apps/omega/src/renderer/package.json create mode 100644 apps/omega/src/renderer/src/App.tsx create mode 100644 apps/omega/src/renderer/src/agent/AgentFlow.ts create mode 100644 apps/omega/src/renderer/src/agent/Aware.ts create mode 100644 apps/omega/src/renderer/src/agent/EventManager.ts create mode 100644 apps/omega/src/renderer/src/agent/Executor/index.ts create mode 100644 apps/omega/src/renderer/src/agent/Executor/tools.ts create mode 100644 apps/omega/src/renderer/src/agent/Greeter.ts create mode 100644 apps/omega/src/renderer/src/agent/mockEvents.ts create mode 100644 apps/omega/src/renderer/src/api/fileSystemInterceptor.ts create mode 100644 apps/omega/src/renderer/src/api/index.ts create mode 100644 apps/omega/src/renderer/src/api/llmConfig.ts create mode 100644 apps/omega/src/renderer/src/assets/Mistral.tsx create mode 100644 apps/omega/src/renderer/src/assets/base.css create mode 100644 apps/omega/src/renderer/src/assets/electron.svg create mode 100644 apps/omega/src/renderer/src/assets/logo.png create mode 100644 apps/omega/src/renderer/src/assets/main.css create mode 100644 apps/omega/src/renderer/src/assets/wavy-lines.svg create mode 100644 apps/omega/src/renderer/src/components/AgentApp/index.tsx create mode 100644 apps/omega/src/renderer/src/components/AgentFlowMessage/EventRenderer.tsx create mode 100644 apps/omega/src/renderer/src/components/AgentFlowMessage/GroupSection.tsx create mode 100644 apps/omega/src/renderer/src/components/AgentFlowMessage/ProgressBar.tsx create mode 100644 apps/omega/src/renderer/src/components/AgentFlowMessage/StepSection.tsx create mode 100644 apps/omega/src/renderer/src/components/AgentFlowMessage/events/AgentStatus.tsx create mode 100644 apps/omega/src/renderer/src/components/AgentFlowMessage/events/ChatText.tsx create mode 100644 apps/omega/src/renderer/src/components/AgentFlowMessage/events/End.tsx create mode 100644 apps/omega/src/renderer/src/components/AgentFlowMessage/events/LoadingStatus.tsx create mode 100644 apps/omega/src/renderer/src/components/AgentFlowMessage/events/Observation.tsx create mode 100644 apps/omega/src/renderer/src/components/AgentFlowMessage/events/ToolUsed.tsx create mode 100644 apps/omega/src/renderer/src/components/AgentFlowMessage/events/UserInteruption.tsx create mode 100644 apps/omega/src/renderer/src/components/AgentFlowMessage/icons.tsx create mode 100644 apps/omega/src/renderer/src/components/AgentFlowMessage/index.tsx create mode 100644 apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/PlayerControls.tsx create mode 100644 apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/index.tsx create mode 100644 apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/BrowserPanel/IconMapping.tsx create mode 100644 apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/BrowserPanel/components/DefaultContent.tsx create mode 100644 apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/BrowserPanel/components/LinksContent.tsx create mode 100644 apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/BrowserPanel/components/ScreenshotContent.tsx create mode 100644 apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/BrowserPanel/components/TextContent.tsx create mode 100644 apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/BrowserPanel/index.tsx create mode 100644 apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/BrowserPanel/types.ts create mode 100644 apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/DefaultTip.tsx create mode 100644 apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/FSPanel.tsx create mode 100644 apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/SearchPanel.tsx create mode 100644 apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/TerminalPanel.tsx create mode 100644 apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/renderPlatformPanel.tsx create mode 100644 apps/omega/src/renderer/src/components/CanvasPanel/index.tsx create mode 100644 apps/omega/src/renderer/src/components/ChatUI/AgentStatusTip/index.tsx create mode 100644 apps/omega/src/renderer/src/components/ChatUI/BeforeInputContainer.tsx create mode 100644 apps/omega/src/renderer/src/components/ChatUI/MenuHeader.tsx create mode 100644 apps/omega/src/renderer/src/components/ChatUI/PlanTaskStatus/index.tsx create mode 100644 apps/omega/src/renderer/src/components/ChatUI/Replay.tsx create mode 100644 apps/omega/src/renderer/src/components/ChatUI/ShareModal.tsx create mode 100644 apps/omega/src/renderer/src/components/ChatUI/StatusBar.tsx create mode 100644 apps/omega/src/renderer/src/components/ChatUI/UserInteruptArea/index.tsx create mode 100644 apps/omega/src/renderer/src/components/ChatUI/index.scss create mode 100644 apps/omega/src/renderer/src/components/ChatUI/index.tsx create mode 100644 apps/omega/src/renderer/src/components/ChatUI/renderMessageUI.tsx create mode 100644 apps/omega/src/renderer/src/components/ErrorBoundary.tsx create mode 100644 apps/omega/src/renderer/src/components/FilePermissionHandler/index.tsx create mode 100644 apps/omega/src/renderer/src/components/FilePermissionModal/index.tsx create mode 100644 apps/omega/src/renderer/src/components/LeftSidebar/BottomBar.tsx create mode 100644 apps/omega/src/renderer/src/components/LeftSidebar/DeleteModal.tsx create mode 100644 apps/omega/src/renderer/src/components/LeftSidebar/SessionItem.tsx create mode 100644 apps/omega/src/renderer/src/components/LeftSidebar/SessionList/index.tsx create mode 100644 apps/omega/src/renderer/src/components/LeftSidebar/Settings/FileSystemSettingsTab.tsx create mode 100644 apps/omega/src/renderer/src/components/LeftSidebar/Settings/ModelSettingsTab.tsx create mode 100644 apps/omega/src/renderer/src/components/LeftSidebar/Settings/SettingsModal.tsx create mode 100644 apps/omega/src/renderer/src/components/LeftSidebar/Settings/index.ts create mode 100644 apps/omega/src/renderer/src/components/LeftSidebar/Settings/modelUtils.tsx create mode 100644 apps/omega/src/renderer/src/components/LeftSidebar/Settings/types.ts create mode 100644 apps/omega/src/renderer/src/components/LeftSidebar/Settings/useAppSettings.ts create mode 100644 apps/omega/src/renderer/src/components/LeftSidebar/Settings/useModelSettings.ts create mode 100644 apps/omega/src/renderer/src/components/LeftSidebar/Settings/useProviders.ts create mode 100644 apps/omega/src/renderer/src/components/LeftSidebar/TopBar.tsx create mode 100644 apps/omega/src/renderer/src/components/LeftSidebar/index.module.scss create mode 100644 apps/omega/src/renderer/src/components/LeftSidebar/index.tsx create mode 100644 apps/omega/src/renderer/src/components/LeftSidebar/type.ts create mode 100644 apps/omega/src/renderer/src/components/LoadingSpinner/index.tsx create mode 100644 apps/omega/src/renderer/src/components/MonacoEditor.tsx create mode 100644 apps/omega/src/renderer/src/constants/index.ts create mode 100644 apps/omega/src/renderer/src/env.d.ts create mode 100644 apps/omega/src/renderer/src/hooks/useAddUserMessage.ts create mode 100644 apps/omega/src/renderer/src/hooks/useAgentFlow.ts create mode 100644 apps/omega/src/renderer/src/hooks/useAppChat.ts create mode 100644 apps/omega/src/renderer/src/hooks/useChatSession.ts create mode 100644 apps/omega/src/renderer/src/hooks/useFileSystemSettings.ts create mode 100644 apps/omega/src/renderer/src/hooks/useThemeMode.ts create mode 100644 apps/omega/src/renderer/src/index.scss create mode 100644 apps/omega/src/renderer/src/main.tsx create mode 100644 apps/omega/src/renderer/src/services/chatSessionStorage.ts create mode 100644 apps/omega/src/renderer/src/services/filePermissionService.ts create mode 100644 apps/omega/src/renderer/src/services/fileSystemSettings.ts create mode 100644 apps/omega/src/renderer/src/services/llmSettings.ts create mode 100644 apps/omega/src/renderer/src/state/canvas.ts create mode 100644 apps/omega/src/renderer/src/state/chat.ts create mode 100644 apps/omega/src/renderer/src/type/agent.ts create mode 100644 apps/omega/src/renderer/src/type/canvas.ts create mode 100644 apps/omega/src/renderer/src/type/chatMessage.ts create mode 100644 apps/omega/src/renderer/src/type/event.ts create mode 100644 apps/omega/src/renderer/src/utils/ChatMessageUtils.tsx create mode 100644 apps/omega/src/renderer/src/utils/extractHistoryEvents.ts create mode 100644 apps/omega/src/renderer/src/utils/getLoadingTipForToolCall.ts create mode 100644 apps/omega/src/renderer/src/utils/index.ts create mode 100644 apps/omega/src/renderer/src/utils/monacoConfig.ts create mode 100644 apps/omega/src/renderer/src/utils/normalizeToolUsedInfo.ts create mode 100644 apps/omega/src/renderer/src/utils/parseEvents.test.ts create mode 100644 apps/omega/src/renderer/src/utils/parseEvents.ts create mode 100644 apps/omega/src/vendor/chat-ui/index.d.ts create mode 100644 apps/omega/src/vendor/chat-ui/index.js create mode 100644 apps/omega/src/vendor/chat-ui/package.json create mode 100644 apps/omega/static/dmg-background.png create mode 100644 apps/omega/static/dmg-background@2x.png create mode 100644 apps/omega/tailwind.config.ts create mode 100644 apps/omega/tsconfig.base.json create mode 100644 apps/omega/tsconfig.json create mode 100644 apps/omega/tsconfig.node.json create mode 100644 apps/omega/tsconfig.web.json create mode 100644 apps/omega/vite.config.ts create mode 100644 apps/omega/vitest.config.ts diff --git a/apps/omega/dev-app-update.yml b/apps/omega/dev-app-update.yml new file mode 100644 index 000000000..78fadeb7d --- /dev/null +++ b/apps/omega/dev-app-update.yml @@ -0,0 +1,3 @@ +provider: generic +url: https://example.com/auto-updates +updaterCacheDirName: open-agent-updater diff --git a/apps/omega/electron-builder.yml b/apps/omega/electron-builder.yml new file mode 100644 index 000000000..7a54efa8f --- /dev/null +++ b/apps/omega/electron-builder.yml @@ -0,0 +1,45 @@ +appId: com.electron.app +productName: open-agent +directories: + buildResources: build +files: + - '!**/.vscode/*' + - '!src/*' + - '!electron.vite.config.{js,ts,mjs,cjs}' + - '!{.eslintignore,.eslintrc.cjs,.prettierignore,.prettierrc.yaml,dev-app-update.yml,CHANGELOG.md,README.md}' + - '!{.env,.env.*,.npmrc,pnpm-lock.yaml}' + - '!{tsconfig.json,tsconfig.node.json,tsconfig.web.json}' +asarUnpack: + - resources/** +win: + executableName: open-agent +nsis: + artifactName: ${name}-${version}-setup.${ext} + shortcutName: ${productName} + uninstallDisplayName: ${productName} + createDesktopShortcut: always +mac: + entitlementsInherit: build/entitlements.mac.plist + extendInfo: + - NSCameraUsageDescription: Application requests access to the device's camera. + - NSMicrophoneUsageDescription: Application requests access to the device's microphone. + - NSDocumentsFolderUsageDescription: Application requests access to the user's Documents folder. + - NSDownloadsFolderUsageDescription: Application requests access to the user's Downloads folder. + notarize: false +dmg: + artifactName: ${name}-${version}.${ext} +linux: + target: + - AppImage + - snap + - deb + maintainer: electronjs.org + category: Utility +appImage: + artifactName: ${name}-${version}.${ext} +npmRebuild: false +publish: + provider: generic + url: https://example.com/auto-updates +electronDownload: + mirror: https://npmmirror.com/mirrors/electron/ diff --git a/apps/omega/electron.vite.config.ts b/apps/omega/electron.vite.config.ts new file mode 100644 index 000000000..2a4c3fe08 --- /dev/null +++ b/apps/omega/electron.vite.config.ts @@ -0,0 +1,75 @@ +import { resolve } from 'node:path'; +import { defineConfig, externalizeDepsPlugin } from 'electron-vite'; +import react from '@vitejs/plugin-react'; +import tsconfigPaths from 'vite-tsconfig-paths'; + +const workspaceDeps = ['@ui-tars/electron-ipc']; + +export default defineConfig({ + main: { + root: 'src/main', + build: { + outDir: resolve(__dirname, './dist/main'), + }, + plugins: [ + externalizeDepsPlugin({ + exclude: workspaceDeps, + }), + tsconfigPaths(), + ], + }, + preload: { + root: 'src/preload', + build: { + outDir: resolve(__dirname, './dist/preload'), + }, + plugins: [ + externalizeDepsPlugin({ + exclude: workspaceDeps, + }), + tsconfigPaths(), + ], + }, + renderer: { + optimizeDeps: { + include: [ + '@monaco-editor/react', + 'monaco-editor/esm/vs/language/json/json.worker', + 'monaco-editor/esm/vs/language/css/css.worker', + 'monaco-editor/esm/vs/language/html/html.worker', + 'monaco-editor/esm/vs/language/typescript/ts.worker', + 'monaco-editor/esm/vs/editor/editor.worker', + ], + }, + define: { + 'process.env.REPORT_HTML_MODE': 'false', + }, + worker: { + format: 'es', + }, + root: 'src/renderer', + build: { + outDir: resolve(__dirname, './dist/renderer'), + rollupOptions: { + input: { + main: resolve('./src/renderer/index.html'), + }, + output: { + manualChunks: { + monaco: ['monaco-editor'], + }, + }, + }, + minify: true, + }, + css: { + preprocessorOptions: { + scss: { + api: 'modern', + }, + }, + }, + + plugins: [react(), tsconfigPaths()], + }, +}); diff --git a/apps/omega/forge.config.ts b/apps/omega/forge.config.ts new file mode 100644 index 000000000..b9889ba93 --- /dev/null +++ b/apps/omega/forge.config.ts @@ -0,0 +1,159 @@ +import { readdirSync } from 'node:fs'; +import { readdir } from 'node:fs/promises'; +import path, { resolve } from 'node:path'; +import { MakerDMG } from '@electron-forge/maker-dmg'; +import { MakerZIP } from '@electron-forge/maker-zip'; +import { AutoUnpackNativesPlugin } from '@electron-forge/plugin-auto-unpack-natives'; +import { FusesPlugin } from '@electron-forge/plugin-fuses'; +import type { ForgeConfig } from '@electron-forge/shared-types'; +import { FuseV1Options, FuseVersion } from '@electron/fuses'; +import setLanguages from 'electron-packager-languages'; +import { rimraf, rimrafSync } from 'rimraf'; + +const keepLanguages = new Set(['en', 'en_GB', 'en-US', 'en_US']); + +const enableOsxSign = + process.env.APPLE_ID && + process.env.APPLE_PASSWORD && + process.env.APPLE_TEAM_ID; + +// remove folders & files not to be included in the app +async function cleanSources( + buildPath, + _electronVersion, + platform, + _arch, + callback, +) { + // folders & files to be included in the app + const appItems = new Set([ + 'dist', + 'node_modules', + 'package.json', + 'resources', + ]); + + console.log('buildPath', buildPath); + + if (platform === 'darwin') { + const frameworkResourcePath = resolve( + buildPath, + '../../Frameworks/Electron Framework.framework/Versions/A/Resources', + ); + + for (const file of readdirSync(frameworkResourcePath)) { + if (file.endsWith('.lproj') && !keepLanguages.has(file.split('.')[0])) { + rimrafSync(resolve(frameworkResourcePath, file)); + } + } + } + + // Skip devDependencies node_modules in the app + await Promise.all([ + ...(await readdir(buildPath).then((items) => + items + .filter((item) => !appItems.has(item)) + .map((item) => rimraf.sync(path.join(buildPath, item))), + )), + ...(await readdir(path.join(buildPath, 'node_modules')) + .then((items) => + items.map((item) => + rimraf.sync(path.join(buildPath, 'node_modules', item)), + ), + ) + .catch(() => { + return []; + })), + ]); + + callback(); +} + +const noopAfterCopy = ( + _buildPath, + _electronVersion, + _platform, + _arch, + callback, +) => callback(); + +const config: ForgeConfig = { + packagerConfig: { + // appBundleId: 'com.bytedance.uitars', + name: 'Open Agent', + icon: 'resources/icon', + asar: true, + prune: true, + ignore: [/^\/node_modules\/$/, '.vite'], + afterCopy: [ + cleanSources, + process.platform !== 'win32' + ? noopAfterCopy + : setLanguages(Array.from(keepLanguages)), + ], + executableName: 'Open-Agent', + ...(enableOsxSign + ? { + osxSign: { + keychain: process.env.KEYCHAIN_PATH, + optionsForFile: () => ({ + entitlements: 'build/entitlements.mac.plist', + }), + }, + osxNotarize: { + appleId: process.env.APPLE_ID!, + appleIdPassword: process.env.APPLE_PASSWORD!, + teamId: process.env.APPLE_TEAM_ID!, + }, + } + : {}), + }, + rebuildConfig: {}, + // publishers: [ + // { + // name: '@electron-forge/publisher-github', + // config: { + // repository: { owner: 'bytedance', name: 'ui-tars-desktop' }, + // draft: true, + // force: true, + // }, + // }, + // ], + makers: [ + new MakerZIP({}, ['darwin']), + // https://github.com/electron/forge/issues/3712 + new MakerDMG({ + overwrite: true, + background: 'static/dmg-background.png', + // icon: 'static/dmg-icon.icns', + iconSize: 160, + format: 'UDZO', + additionalDMGOptions: { window: { size: { width: 660, height: 400 } } }, + contents: (opts) => [ + { x: 180, y: 170, type: 'file', path: opts.appPath }, + { x: 480, y: 170, type: 'link', path: '/Applications' }, + ], + }), + ], + plugins: [ + new AutoUnpackNativesPlugin({}), + // Fuses are used to enable/disable various Electron functionality + // at package time, before code signing the application + // https://github.com/microsoft/playwright/issues/28669#issuecomment-2268380066 + ...(process.env.CI === 'e2e' + ? [] + : [ + new FusesPlugin({ + version: FuseVersion.V1, + [FuseV1Options.RunAsNode]: false, + [FuseV1Options.EnableCookieEncryption]: true, + [FuseV1Options.EnableNodeOptionsEnvironmentVariable]: false, + [FuseV1Options.EnableNodeCliInspectArguments]: false, + [FuseV1Options.EnableEmbeddedAsarIntegrityValidation]: true, + [FuseV1Options.OnlyLoadAppFromAsar]: true, + }), + ]), + ], +}; + +export default config; diff --git a/apps/omega/package.json b/apps/omega/package.json new file mode 100644 index 000000000..08109f932 --- /dev/null +++ b/apps/omega/package.json @@ -0,0 +1,69 @@ +{ + "name": "open-agent-app", + "version": "1.0.0", + "description": "An Electron application with React and TypeScript", + "main": "./dist/main/index.js", + "author": "example.com", + "homepage": "https://electron-vite.org", + "packageManager": "pnpm@9.12.3", + "scripts": { + "typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false", + "typecheck:web": "tsc --noEmit -p tsconfig.web.json --composite false", + "typecheck": "npm run typecheck:node && npm run typecheck:web", + "start": "electron-vite preview", + "dev": "electron-vite dev", + "package": "electron-forge package", + "build": "npm run typecheck && npm run build:reporter && electron-vite build && DEBUG=1 electron-forge make", + "test": "vitest run", + "publish:mac": "electron-vite build && electron-forge publish --arch=universal --platform=darwin", + "build:reporter": "vite build" + }, + "peerDependencies": { + "esbuild-register": "*", + "ts-node": "*", + "tsx": "*" + }, + "peerDependenciesMeta": { + "esbuild-register": { + "optional": true + }, + "ts-node": { + "optional": true + }, + "tsx": { + "optional": true + } + }, + "dependencies": { + "@agent-infra/mcp-server-commands": "workspace:*", + "@agent-infra/mcp-server-filesystem": "workspace:*", + "@agent-infra/mcp-server-browser": "workspace:*" + }, + "devDependencies": { + "@electron-forge/cli": "7.7.0", + "@electron-forge/maker-deb": "7.7.0", + "@electron-forge/maker-dmg": "7.7.0", + "@electron-forge/maker-rpm": "7.7.0", + "@electron-forge/maker-squirrel": "7.7.0", + "@electron-forge/maker-zip": "7.7.0", + "@electron-forge/plugin-auto-unpack-natives": "7.7.0", + "@electron-forge/plugin-fuses": "7.7.0", + "@electron-forge/plugin-vite": "7.7.0", + "@electron-forge/publisher-github": "7.7.0", + "@electron-toolkit/tsconfig": "^1.0.1", + "@types/node": "^22.13.4", + "@vitejs/plugin-react": "^4.3.4", + "autoprefixer": "10.4.20", + "electron": "34.1.1", + "electron-packager-languages": "0.6.0", + "electron-vite": "^3.0.0", + "jsdom": "^26.0.0", + "sass": "1.85.1", + "tailwindcss": "^3.3.3", + "typescript": "^5.7.3", + "vite": "^6.1.0", + "vite-tsconfig-paths": "^5.1.4", + "vitest": "3.0.8", + "vite-plugin-singlefile": "2.2.0" + } +} diff --git a/apps/omega/postcss.config.js b/apps/omega/postcss.config.js new file mode 100644 index 000000000..12a703d90 --- /dev/null +++ b/apps/omega/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/apps/omega/resources/icon.png b/apps/omega/resources/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cf9e8b2c87b5c18ac0b26913af6fd3ed00ec3bfb GIT binary patch literal 35949 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

    (|V7O%OOlsc*vU+P^72X!U7K_eX*CG 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 E`T9pxN5i1O>p>VAy6%lIREYyb! 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 Kl11VsAO0U5dJ04U literal 0 HcmV?d00001 diff --git a/apps/omega/src/main/customTools/index.ts b/apps/omega/src/main/customTools/index.ts new file mode 100644 index 000000000..a257ed7ae --- /dev/null +++ b/apps/omega/src/main/customTools/index.ts @@ -0,0 +1,32 @@ +import { ToolCall } from '@agent-infra/shared'; +import { search } from './search'; + +export function executeCustomTool(toolCall: ToolCall) { + if (toolCall.function.name === 'web_search') { + return search(toolCall); + } + + return null; +} + +export function listCustomTools() { + return [ + { + type: 'function', + function: { + name: 'web_search', + description: 'Search in the internet', + parameters: { + type: 'object', + properties: { + query: { + type: 'string', + description: 'The search query', + }, + }, + required: ['query'], + }, + }, + }, + ] as const; +} diff --git a/apps/omega/src/main/customTools/search.ts b/apps/omega/src/main/customTools/search.ts new file mode 100644 index 000000000..abfe87328 --- /dev/null +++ b/apps/omega/src/main/customTools/search.ts @@ -0,0 +1,37 @@ +import { ToolCall } from '@agent-infra/shared'; +import { SearchClient, SearchProvider } from '@agent-infra/search'; +import { MCPToolResult } from '@main/type'; + +export async function search(toolCall: ToolCall): Promise { + const args = JSON.parse(toolCall.function.arguments); + + const client = new SearchClient({ + provider: SearchProvider.BingSearch, + providerConfig: { + apiKey: process.env.BING_SEARCH_API_KEY, + baseUrl: process.env.BING_SEARCH_API_BASE_URL, + }, + }); + + try { + // Perform a search + const results = await client.search({ + query: args.query, + count: 10, + }); + + return [ + { + isError: false, + content: results, + }, + ]; + } catch (e) { + return [ + { + isError: true, + content: [JSON.stringify(e)], + }, + ]; + } +} diff --git a/apps/omega/src/main/index.ts b/apps/omega/src/main/index.ts new file mode 100644 index 000000000..1653a398e --- /dev/null +++ b/apps/omega/src/main/index.ts @@ -0,0 +1,100 @@ +import { app, shell, BrowserWindow, ipcMain } from 'electron'; +import { join } from 'path'; +import { registerIpcMain } from '@ui-tars/electron-ipc/main'; +import { electronApp, optimizer, is } from '@electron-toolkit/utils'; +import { ipcRoutes } from './ipcRoutes'; +import icon from '../../resources/icon.png?asset'; + +function createWindow(): void { + // Create the browser window. + const mainWindow = new BrowserWindow({ + width: 900, + height: 670, + show: false, + autoHideMenuBar: true, + ...(process.platform === 'linux' ? { icon } : {}), + webPreferences: { + preload: join(__dirname, '../preload/index.js'), + sandbox: false, + // Allow local file access + webSecurity: false, + allowRunningInsecureContent: false, + contextIsolation: true, + }, + }); + + mainWindow.webContents.session.webRequest.onHeadersReceived( + (details, callback) => { + callback({ + responseHeaders: { + ...details.responseHeaders, + 'Content-Security-Policy': [ + "default-src 'self' 'unsafe-inline' file: data: blob:;", + "script-src 'self' 'unsafe-inline' 'unsafe-eval' https://cdn.jsdelivr.net https://cdn.jsdelivr.net/npm/ https://cdnjs.cloudflare.com;", + "img-src 'self' file: data: blob:;", + "style-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net https://cdnjs.cloudflare.com https://fonts.googleapis.com;", + "font-src 'self' https://cdnjs.cloudflare.com https://fonts.googleapis.com;", + "worker-src 'self' blob:;", + "connect-src 'self' https://cdn.jsdelivr.net/npm/ blob:", + ], + }, + }); + }, + ); + + mainWindow.on('ready-to-show', () => { + mainWindow.show(); + }); + + mainWindow.webContents.setWindowOpenHandler((details) => { + shell.openExternal(details.url); + return { action: 'deny' }; + }); + + // HMR for renderer base on electron-vite cli. + // Load the remote URL for development or the local html file for production. + if (is.dev && process.env['ELECTRON_RENDERER_URL']) { + mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL']); + } else { + mainWindow.loadFile(join(__dirname, '../renderer/index.html')); + } +} + +// This method will be called when Electron has finished +// initialization and is ready to create browser windows. +// Some APIs can only be used after this event occurs. +app.whenReady().then(() => { + // Set app user model id for windows + electronApp.setAppUserModelId('com.electron'); + + // Default open or close DevTools by F12 in development + // and ignore CommandOrControl + R in production. + // see https://github.com/alex8088/electron-toolkit/tree/master/packages/utils + app.on('browser-window-created', (_, window) => { + optimizer.watchWindowShortcuts(window); + }); + + // IPC test + ipcMain.on('ping', () => console.log('pong')); + registerIpcMain(ipcRoutes); + + createWindow(); + + app.on('activate', function () { + // On macOS it's common to re-create a window in the app when the + // dock icon is clicked and there are no other windows open. + if (BrowserWindow.getAllWindows().length === 0) createWindow(); + }); +}); + +// Quit when all windows are closed, except on macOS. There, it's common +// for applications and their menu bar to stay active until the user quits +// explicitly with Cmd + Q. +app.on('window-all-closed', () => { + if (process.platform !== 'darwin') { + app.quit(); + } +}); + +// In this file you can include the rest of your app's specific main process +// code. You can also put them in separate files and require them here. diff --git a/apps/omega/src/main/ipcRoutes/action.ts b/apps/omega/src/main/ipcRoutes/action.ts new file mode 100644 index 000000000..6bf04be2a --- /dev/null +++ b/apps/omega/src/main/ipcRoutes/action.ts @@ -0,0 +1,203 @@ +import { MCPServerName, ToolCall } from '@agent-infra/shared'; +import { executeCustomTool, listCustomTools } from '@main/customTools'; +import { createMcpClient, getOmegaDir } from '@main/mcp/client'; +import { mcpToolsToAzureTools } from '@main/mcp/tools'; +import { MCPToolResult } from '@main/type'; +import { initIpc } from '@ui-tars/electron-ipc/main'; +import { ChatCompletionTool } from 'openai/resources/index.mjs'; +import path from 'path'; +import fs, { readFile } from 'fs-extra'; +import { shell } from 'electron'; +import fetch from 'node-fetch'; +import FormData from 'form-data'; +import { normalizeMessages } from '@main/utils/normalizeOmegaData'; + +export interface MCPTool { + id: string; + serverName: string; + name?: string; + description?: string; + inputSchema?: Record; +} + +const t = initIpc.create(); + +/** + * Convert tool use data from OpenAI to MCP tool format + */ +function toolUseToMcpTool( + mcpTools: MCPTool[] | undefined, + toolUse: ToolCall, +): MCPTool | undefined { + if (!mcpTools) return undefined; + const tool = mcpTools.find((tool) => tool.name === toolUse.function.name); + if (!tool) return undefined; + tool.inputSchema = JSON.parse(toolUse.function.arguments); + return tool; +} + +export const actionRoute = t.router({ + listTools: t.procedure.handle(async () => { + const mcpClient = await createMcpClient(); + const tools = mcpToolsToAzureTools(await mcpClient.listTools()); + const customTools = listCustomTools(); + return [ + ...tools.map((tool) => tool.function), + ...customTools.map((tool) => tool.function), + ] as ChatCompletionTool['function'][]; + }), + + listMcpTools: t.procedure.handle(async () => { + const mcpClient = await createMcpClient(); + const tools = await mcpClient.listTools(); + return tools; + }), + + listCustomTools: t.procedure.handle(async () => { + const customTools = listCustomTools(); + return customTools; + }), + + executeTool: t.procedure + .input<{ + toolCalls: ToolCall[]; + }>() + .handle(async ({ input }) => { + const mcpClient = await createMcpClient(); + const tools = await mcpClient.listTools(); + const results: MCPToolResult = []; + for (const toolCall of input.toolCalls) { + const mcpTool = toolUseToMcpTool(tools, toolCall); + if (mcpTool) { + console.log('i will execute tool', mcpTool.name, mcpTool.inputSchema); + try { + const result = await mcpClient.callTool({ + client: mcpTool.serverName as MCPServerName, + name: mcpTool.name as string, + args: mcpTool.inputSchema || {}, + }); + results.push(result); + } catch (e) { + console.error('execute tool error', mcpTool, e); + results.push({ + isError: true, + content: [JSON.stringify(e)], + }); + } + } else { + const result = await executeCustomTool(toolCall); + if (result) { + results.push(...result); + } + } + } + return results; + }), + + saveBrowserSnapshot: t.procedure.input().handle(async () => { + const mcpClient = await createMcpClient(); + try { + const result = await mcpClient.callTool({ + client: MCPServerName.Browser, + name: 'browser_screenshot', + args: {}, + }); + const screenshotMeta = ( + result.content as [ + { type: 'text'; text: string }, + { type: 'image'; data: string; mimeType: string }, + ] + )[1]; + const omegaDir = await getOmegaDir(); + const screenshotPath = path.join(omegaDir, 'screenshots'); + await fs.mkdirSync(screenshotPath, { recursive: true }); + + const ext = screenshotMeta.mimeType.split('/')[1] || 'png'; + const timestamp = new Date().getTime(); + const filename = `screenshot_${timestamp}.${ext}`; + const filepath = path.join(screenshotPath, filename); + + const imageBuffer = Buffer.from(screenshotMeta.data, 'base64'); + await fs.writeFile(filepath, imageBuffer); + return { filepath }; + } catch (e) { + console.error('Failed to save screenshot:', e); + throw e; + } + }), + + saveReportHtml: t.procedure + .input<{ messages: any; reportApiUrl?: string }>() + .handle(async ({ input }) => { + const { messages: rawMessages, reportApiUrl } = input; + const messages = await normalizeMessages(rawMessages); + const omegaDir = await getOmegaDir(); + const reportHtmlTemplate = await readFile( + path.join(__dirname, '../reporter/index.html'), + 'utf-8', + ); + const reportContent = reportHtmlTemplate.replace( + ' ', + '', + ); + + if (reportApiUrl) { + const tempPath = path.join( + omegaDir, + `temp_report_${new Date().getTime()}.html`, + ); + await fs.writeFile(tempPath, reportContent); + + try { + const formData = new FormData(); + const fileBuffer = await fs.readFile(tempPath); + formData.append('file', fileBuffer, { + filename: 'report.html', + contentType: 'text/html', + }); + + const res = await fetch(reportApiUrl, { + method: 'POST', + body: formData, + headers: formData.getHeaders(), + }); + + await fs.remove(tempPath); + + if (!res.ok) { + console.error('Upload failed:', await res.text()); + throw new Error('文件上传失败'); + } + + const data = await res.json(); + if (!data.url) { + throw new Error('文件上传失败:服务器未返回 url'); + } + + await shell.openExternal(data.url); + return data.url; + } catch (error) { + console.error('Upload failed:', error); + throw error; + } + } else { + const reportPath = path.join( + omegaDir, + `report_${new Date().getTime()}.html`, + ); + await fs.writeFile(reportPath, reportContent); + + // Open the report in the default browser + await shell.openPath(reportPath); + return reportPath; + } + }), + + cleanup: t.procedure.handle(async () => { + const mcpClient = await createMcpClient(); + await mcpClient.cleanup(); + return true; + }), +}); diff --git a/apps/omega/src/main/ipcRoutes/agent.ts b/apps/omega/src/main/ipcRoutes/agent.ts new file mode 100644 index 000000000..30e24b9d8 --- /dev/null +++ b/apps/omega/src/main/ipcRoutes/agent.ts @@ -0,0 +1,10 @@ +import { initIpc } from '@ui-tars/electron-ipc/main'; + +const t = initIpc.create(); + +export const agentRoute = t.router({ + runAgent: t.procedure.input().handle(async () => { + console.log('runAgent'); + return 'Hello'; + }), +}); diff --git a/apps/omega/src/main/ipcRoutes/browser.ts b/apps/omega/src/main/ipcRoutes/browser.ts new file mode 100644 index 000000000..20eeb5fea --- /dev/null +++ b/apps/omega/src/main/ipcRoutes/browser.ts @@ -0,0 +1,9 @@ +import { initIpc } from '@ui-tars/electron-ipc/main'; + +const t = initIpc.create(); + +export const browserRoute = t.router({ + // getScreenshot: t.procedure.input().handle(async (key: string) => { + // return getScreenshots(key); + // }), +}); diff --git a/apps/omega/src/main/ipcRoutes/filesystem.ts b/apps/omega/src/main/ipcRoutes/filesystem.ts new file mode 100644 index 000000000..f8d827d75 --- /dev/null +++ b/apps/omega/src/main/ipcRoutes/filesystem.ts @@ -0,0 +1,44 @@ +import { initIpc } from '@ui-tars/electron-ipc/main'; +import { setAllowedDirectories, getAllowedDirectories } from '@main/mcp/client'; +import path from 'path'; +import os from 'os'; + +const t = initIpc.create(); + +interface FileSystemSettings { + availableDirectories: string[]; +} + +export const fileSystemRoute = t.router({ + updateFileSystemConfig: t.procedure + .input() + .handle(async ({ input }) => { + try { + // Always include the default .omega directory + const omegaDir = path.join(os.homedir(), '.omega'); + + // Combine with user-specified directories, ensuring no duplicates + const allDirectories = [ + omegaDir, + ...input.availableDirectories.filter((dir) => dir !== omegaDir), + ]; + + // Update allowed directories in the MCP file system client + await setAllowedDirectories(allDirectories); + + return true; + } catch (error) { + return false; + } + }), + + getAllowedDirectories: t.procedure.input().handle(async () => { + try { + return await getAllowedDirectories(); + } catch (error) { + console.error('Failed to get allowed directories:', error); + const omegaDir = path.join(os.homedir(), '.omega'); + return [omegaDir]; + } + }), +}); diff --git a/apps/omega/src/main/ipcRoutes/index.ts b/apps/omega/src/main/ipcRoutes/index.ts new file mode 100644 index 000000000..d242fc8c1 --- /dev/null +++ b/apps/omega/src/main/ipcRoutes/index.ts @@ -0,0 +1,25 @@ +import { initIpc, createServer } from '@ui-tars/electron-ipc/main'; +import { agentRoute } from './agent'; +import { llmRoute } from './llm'; +import { actionRoute } from './action'; +import { browserRoute } from './browser'; +import { fileSystemRoute } from './filesystem'; + +const t = initIpc.create(); + +export const ipcRoutes = t.router({ + ...agentRoute, + ...llmRoute, + ...actionRoute, + ...browserRoute, + ...fileSystemRoute, + + // Add direct access to routes for TypeScript typing + updateLLMConfig: llmRoute.updateLLMConfig, + getAvailableProviders: llmRoute.getAvailableProviders, + updateFileSystemConfig: fileSystemRoute.updateFileSystemConfig, + getAllowedDirectories: fileSystemRoute.getAllowedDirectories, +}); +export type Router = typeof ipcRoutes; + +export const server = createServer(ipcRoutes); diff --git a/apps/omega/src/main/ipcRoutes/llm.ts b/apps/omega/src/main/ipcRoutes/llm.ts new file mode 100644 index 000000000..9d6fef941 --- /dev/null +++ b/apps/omega/src/main/ipcRoutes/llm.ts @@ -0,0 +1,135 @@ +import dotenv from 'dotenv'; +import { MCPServerName, Message, MessageData } from '@agent-infra/shared'; +import { initIpc } from '@ui-tars/electron-ipc/main'; +import { ChatCompletionTool } from 'openai/resources/index.mjs'; +import { BrowserWindow } from 'electron'; +import { LLM, llm, LLMConfig } from '@main/llmProvider'; + +const t = initIpc.create(); + +// Load environment variables +dotenv.config(); + +export type ToolChoice = 'none' | 'auto' | 'required'; + +const activeStreams = new Map(); +const activeRequests = new Map(); + +export const llmRoute = t.router({ + askLLMText: t.procedure + .input<{ + messages: MessageData[]; + systemMsgs?: MessageData[]; + requestId: string; + }>() + .handle(async ({ input }) => { + const messages = input.messages.map((msg) => new Message(msg)); + const response = await llm.askLLMText({ + messages, + requestId: input.requestId, + }); + return response; + }), + + askLLMTool: t.procedure + .input<{ + messages: MessageData[]; + tools: ChatCompletionTool[]; + mcpServerKeys?: MCPServerName[]; + requestId: string; + }>() + .handle(async ({ input }) => { + const messages = input.messages.map((msg) => new Message(msg)); + const response = await llm.askTool({ + messages, + tools: input.tools, + mcpServerKeys: input.mcpServerKeys, + requestId: input.requestId, + }); + return response; + }), + + askLLMTextStream: t.procedure + .input<{ + messages: MessageData[]; + systemMsgs?: MessageData[]; + requestId: string; + }>() + .handle(async ({ input }) => { + const messages = input.messages.map((msg) => new Message(msg)); + const { requestId } = input; + + (async () => { + const windows = BrowserWindow.getAllWindows(); + try { + const stream = llm.askLLMTextStream({ messages, requestId }); + activeStreams.set(requestId, stream); + + for await (const chunk of stream) { + if (!activeStreams.has(requestId)) { + windows.forEach((win) => { + win.webContents.send(`llm:stream:${requestId}:end`); + }); + return; + } + + windows.forEach((win) => { + win.webContents.send(`llm:stream:${requestId}:data`, chunk); + }); + } + + activeStreams.delete(requestId); + windows.forEach((win) => { + win.webContents.send(`llm:stream:${requestId}:end`); + }); + } catch (error) { + activeStreams.delete(requestId); + windows.forEach((win) => { + win.webContents.send(`llm:stream:${requestId}:error`, error); + }); + } + })(); + + return requestId; + }), + + abortRequest: t.procedure + .input<{ requestId: string }>() + .handle(async ({ input }) => { + const { requestId } = input; + // Abort stream request + if (activeStreams.has(requestId)) { + const stream = activeStreams.get(requestId); + if (stream.cancel) { + await stream.cancel(); + } + activeStreams.delete(requestId); + } + // Abort non stream request + if (activeRequests.has(requestId)) { + const controller = activeRequests.get(requestId); + controller.abort(); + activeRequests.delete(requestId); + } + return true; + }), + + updateLLMConfig: t.procedure.input().handle(async ({ input }) => { + try { + llm.setProvider(input, input.configName); + return true; + } catch (error) { + console.error('Failed to update LLM configuration:', error); + return false; + } + }), + + getAvailableProviders: t.procedure.input().handle(async () => { + try { + return LLM.getAvailableProviders(); + } catch (error) { + console.error('Failed to get available providers:', error); + return []; + } + }), +}); diff --git a/apps/omega/src/main/llmProvider/ProviderFactory.ts b/apps/omega/src/main/llmProvider/ProviderFactory.ts new file mode 100644 index 000000000..473b52a8c --- /dev/null +++ b/apps/omega/src/main/llmProvider/ProviderFactory.ts @@ -0,0 +1,107 @@ +import { LLMConfig, LLMProvider } from './interfaces/LLMProvider'; +import { OpenAIProvider } from './providers/OpenAIProvider'; +import { AnthropicProvider } from './providers/AnthropicProvider'; +import { AzureOpenAIProvider } from './providers/AzureOpenAIProvider'; +import { GeminiProvider } from './providers/GeminiProvider'; +import { MistralProvider } from './providers/MistralProvider'; + +// Define model prefixes that will be used to determine the provider +const MODEL_PREFIXES = { + OPENAI: ['gpt-', 'o1', 'o3', 'davinci'], + ANTHROPIC: ['claude'], + AZURE_OPENAI: ['aws_', 'azure_'], + GEMINI: ['gemini'], + MISTRAL: ['mistral'], +}; + +/** + * Factory for creating LLM provider instances based on model or explicit provider selection + */ +export class ProviderFactory { + /** + * Create a provider instance based on model name or explicit provider selection + * @param config LLM configuration including model + * @param providerName Optional explicit provider name to use + * @returns Instance of LLMProvider + */ + static createProvider(config: LLMConfig, providerName?: string): LLMProvider { + // If provider name is explicitly specified, use that + if (providerName) { + return ProviderFactory.createProviderByName(providerName, config); + } + + const DEFAULT_MODEL = 'aws_claude35_sdk_sonnet_v2'; + // Otherwise, determine provider from model name + const model = config.model?.toLowerCase() || DEFAULT_MODEL; + + if (!model) { + // Default to OpenAI if no model is specified + return new OpenAIProvider(config); + } + + // Check model prefix to determine provider + if (MODEL_PREFIXES.OPENAI.some((prefix) => model.startsWith(prefix))) { + return new OpenAIProvider(config); + } + + if (MODEL_PREFIXES.ANTHROPIC.some((prefix) => model.startsWith(prefix))) { + return new AnthropicProvider(config); + } + + if ( + MODEL_PREFIXES.AZURE_OPENAI.some((prefix) => model.startsWith(prefix)) + ) { + return new AzureOpenAIProvider(config); + } + + if (MODEL_PREFIXES.GEMINI.some((prefix) => model.startsWith(prefix))) { + return new GeminiProvider(config); + } + + if (MODEL_PREFIXES.MISTRAL.some((prefix) => model.startsWith(prefix))) { + return new MistralProvider(config); + } + + // Default to OpenAI if model doesn't match any known prefix + console.warn( + `Unknown model prefix: ${model}. Defaulting to OpenAI provider.`, + ); + return new OpenAIProvider(config); + } + + /** + * Create a provider instance by explicit provider name + * @param providerName Provider name to use + * @param config LLM configuration + * @returns Instance of LLMProvider + */ + private static createProviderByName( + providerName: string, + config: LLMConfig, + ): LLMProvider { + switch (providerName.toLowerCase()) { + case 'openai': + return new OpenAIProvider(config); + case 'anthropic': + return new AnthropicProvider(config); + case 'azure': + case 'azure_openai': + return new AzureOpenAIProvider(config); + case 'gemini': + case 'google': + return new GeminiProvider(config); + case 'mistral': + return new MistralProvider(config); + default: + throw new Error(`Unknown provider name: ${providerName}`); + } + } + + /** + * Get a list of available provider names + * @returns Array of provider names + */ + static getAvailableProviders(): string[] { + return ['openai', 'anthropic', 'azure_openai', 'gemini', 'mistral']; + } +} diff --git a/apps/omega/src/main/llmProvider/README.md b/apps/omega/src/main/llmProvider/README.md new file mode 100644 index 000000000..93be71882 --- /dev/null +++ b/apps/omega/src/main/llmProvider/README.md @@ -0,0 +1,265 @@ +# Unified LLM Provider Interface + +This module provides a unified interface for working with different Large Language Model (LLM) providers, including: + +- OpenAI +- Anthropic (Claude) +- Azure OpenAI +- Google Gemini +- Mistral + +## Features + +- Unified API for different LLM providers +- Automatic provider selection based on model name +- Explicit provider selection +- Simple configuration via environment variables or code +- Support for streaming responses +- Support for function/tool calling +- Abort mechanism for ongoing requests + +## Installation + +This module is part of the Open Agent project. No additional installation is required if you're already using the project. + +However, you need to install the necessary dependencies for each provider you want to use: + +```bash +# For OpenAI +npm install openai + +# For Anthropic +npm install @anthropic-ai/sdk + +# For Google Gemini +npm install @google/generative-ai + +# For Mistral +npm install @mistralai/mistralai +``` + +## Configuration + +### Environment Variables + +Configure your API keys and default models in the `.env` file: + +```bash +# OpenAI API Configuration +OPENAI_API_KEY=your_openai_api_key_here +OPENAI_API_BASE_URL=your_openai_base_url_here # Optional +OPENAI_DEFAULT_MODEL=gpt-4o # Optional, defaults to gpt-4o + +# Azure OpenAI API Configuration +AZURE_OPENAI_ENDPOINT=your_azure_openai_endpoint_here +AZURE_OPENAI_API_VERSION=your_azure_openai_api_version_here +AZURE_OPENAI_MODEL=your_azure_openai_model_here +AZURE_OPENAI_API_KEY=your_azure_openai_api_key_here + +# Anthropic API Configuration +ANTHROPIC_API_KEY=your_anthropic_api_key_here +ANTHROPIC_API_BASE_URL=your_anthropic_base_url_here # Optional +ANTHROPIC_DEFAULT_MODEL=claude-3-sonnet-20240229 # Optional + +# Google Gemini API Configuration +GEMINI_API_KEY=your_gemini_api_key_here +GEMINI_API_BASE_URL=your_gemini_base_url_here # Optional +GEMINI_DEFAULT_MODEL=gemini-1.5-pro # Optional + +# Mistral API Configuration +MISTRAL_API_KEY=your_mistral_api_key_here +MISTRAL_API_BASE_URL=your_mistral_base_url_here # Optional +MISTRAL_DEFAULT_MODEL=mistral-large-latest # Optional +``` + +### Code Configuration + +Alternatively, you can configure the provider in code: + +```typescript +import { createLLM, LLMConfig } from './llmProvider'; + +const config: LLMConfig = { + model: 'claude-3-sonnet-20240229', + apiKey: 'your_api_key_here', + temperature: 0.7, + maxTokens: 4000, + topP: 1.0, + // ...other options +}; + +const llm = createLLM(config); +``` + +## Usage + +### Basic Usage with the Default Instance + +```typescript +import { llm } from './llmProvider'; + +async function main() { + const response = await llm.askLLMText({ + messages: [{ role: 'user', content: 'Hello, how are you?' }], + requestId: 'request-1', + }); + + console.log(response); +} +``` + +### Creating a Custom Instance + +```typescript +import { createLLM, LLMConfig } from './llmProvider'; + +// Create a new LLM instance with specific configuration +const config: LLMConfig = { + model: 'gpt-4o', + temperature: 0.7, + maxTokens: 2000, +}; + +const customLLM = createLLM(config); +``` + +### Specifying the Provider Explicitly + +```typescript +import { createLLM } from './llmProvider'; + +// Create a new LLM instance with a specific provider +const mistralLLM = createLLM({ model: 'mistral-large-latest' }, 'mistral'); +``` + +### Switching Providers at Runtime + +```typescript +import { createLLM } from './llmProvider'; + +const dynamicLLM = createLLM({ model: 'gpt-4o' }); + +// Later, switch to a different provider +dynamicLLM.setProvider({ model: 'claude-3-opus-20240229' }); +``` + +### Using Streaming Responses + +```typescript +import { llm } from './llmProvider'; + +async function streamingExample() { + const stream = llm.askLLMTextStream({ + messages: [{ role: 'user', content: 'Write a short story about a robot.' }], + requestId: 'stream-1', + }); + + for await (const chunk of stream) { + process.stdout.write(chunk); // Print each chunk as it arrives + } +} +``` + +### Using Tool Calls (Function Calling) + +```typescript +import { llm } from './llmProvider'; +import { ChatCompletionTool } from 'openai/resources'; + +async function toolExample() { + // Define tools in OpenAI format + const tools: ChatCompletionTool[] = [ + { + type: 'function', + function: { + name: 'get_weather', + description: 'Get the current weather in a location', + parameters: { + type: 'object', + properties: { + location: { + type: 'string', + description: 'The city and state, e.g., San Francisco, CA', + }, + unit: { + type: 'string', + enum: ['celsius', 'fahrenheit'], + description: 'The unit of temperature', + }, + }, + required: ['location'], + }, + }, + }, + ]; + + const response = await llm.askTool({ + messages: [{ role: 'user', content: 'What is the weather like in New York?' }], + tools, + requestId: 'tool-1', + toolChoice: 'auto', // 'auto', 'none', or 'required' + }); + + console.log('Content:', response.content); + console.log('Tool calls:', response.tool_calls); +} +``` + +### Aborting Requests + +```typescript +import { llm } from './llmProvider'; + +const requestId = 'request-to-abort'; + +// Start a request +const promise = llm.askLLMText({ + messages: [{ role: 'user', content: 'Write a very long essay about quantum physics' }], + requestId, +}); + +// Later, abort the request +setTimeout(() => { + llm.abortRequest(requestId); + console.log('Request aborted'); +}, 1000); +``` + +## Available Models + +To get a list of available providers and models: + +```typescript +import { LLM } from './llmProvider'; + +console.log('Available providers:', LLM.getAvailableProviders()); +console.log('Supported models:', LLM.getSupportedModels()); +``` + +## Example + +See `example.ts` for a complete example of using the unified LLM provider interface. + +## Architecture + +The unified LLM provider interface consists of: + +- **LLM**: The main class that provides a unified interface for all providers +- **BaseProvider**: An abstract base class for all provider implementations +- **Provider implementations**: Concrete implementations for each LLM provider (OpenAI, Anthropic, etc.) +- **ProviderFactory**: A factory class for creating provider instances based on configuration + +## Extending with New Providers + +To add a new provider, create a new class that extends `BaseProvider` and implements the required methods. Then, update the `ProviderFactory` to include the new provider. + +For example, to add a new provider called "NewProvider": + +1. Create a new file `providers/NewProvider.ts` extending `BaseProvider` +2. Implement the required methods (`formatMessages`, `askLLMText`, `askTool`, `askLLMTextStream`) +3. Update `ProviderFactory.ts` to include the new provider +4. Update `.env` with any necessary environment variables for the new provider + +## License + +This module is part of the Open Agent project and is licensed under the same terms. diff --git a/apps/omega/src/main/llmProvider/config/config.ts b/apps/omega/src/main/llmProvider/config/config.ts new file mode 100644 index 000000000..677457dbc --- /dev/null +++ b/apps/omega/src/main/llmProvider/config/config.ts @@ -0,0 +1,29 @@ +import dotenv from 'dotenv'; + +// Load environment variables +dotenv.config(); + +/** + * LLM Provider types + */ +export enum ProviderType { + OPENAI = 'openai', + AZURE_OPENAI = 'azure_openai', + ANTHROPIC = 'anthropic', + GOOGLE = 'google', + MISTRAL = 'mistral', +} + +/** + * Configuration interface for each provider + */ +export interface ProviderConfig { + enabled: boolean; + apiKey?: string; + baseURL?: string; + apiVersion?: string; + models: { + [key: string]: string; + }; + defaultModel: string; +} diff --git a/apps/omega/src/main/llmProvider/example.ts b/apps/omega/src/main/llmProvider/example.ts new file mode 100644 index 000000000..f9de2f5d5 --- /dev/null +++ b/apps/omega/src/main/llmProvider/example.ts @@ -0,0 +1,88 @@ +/** + * Example usage of the unified LLM provider interface + * + * This file demonstrates how to use the LLM provider interface + * with different models from different providers. + */ + +import { Message } from '@agent-infra/shared'; +import { LLM, llm, createLLM, LLMConfig } from './index'; + +async function main() { + // Example 1: Using the default singleton LLM instance + console.log('Example 1: Using the default LLM instance'); + const response1 = await llm.askLLMText({ + messages: [Message.userMessage('Hello, how are you?')], + requestId: 'example1', + }); + console.log('Response:', response1); + // Example 2: Creating a custom LLM instance with a specific model + console.log('\nExample 2: Using Claude from Anthropic'); + const claudeConfig: LLMConfig = { + model: 'claude-3-7-sonnet-latest', + temperature: 0.7, + }; + const claudeLLM = createLLM(claudeConfig); + const response2 = await claudeLLM.askLLMText({ + messages: [Message.userMessage('Tell me about Claude')], + requestId: 'example2', + }); + console.log('Response:', response2); + // Example 3: Creating a custom LLM instance with a specific provider + console.log('\nExample 3: Using Azure OpenAI from Azure'); + const awsConfig: LLMConfig = { + model: 'aws_claude35_sdk_sonnet_v2', + temperature: 0.5, + }; + const awsLLM = createLLM(awsConfig); + const response3 = await awsLLM.askLLMText({ + messages: [Message.userMessage('Tell me about claude')], + requestId: 'example3', + }); + console.log('Response:', response3); + // Example 4: Switching models/providers at runtime + console.log('\nExample 4: Switching providers at runtime'); + const dynamicLLM = createLLM({ model: 'gpt-4o-mini' }); + const response4a = await dynamicLLM.askLLMText({ + messages: [Message.userMessage('What model are you using?')], + requestId: 'example4a', + }); + console.log('Response with GPT-4o:', response4a); + dynamicLLM.setProvider({ model: 'gemini-2.0-flash' }); + const response4b = await dynamicLLM.askTool({ + messages: [Message.userMessage('What model are you using now?')], + requestId: 'example4b', + tools: [ + { + type: 'function', + function: { + name: 'get_model_name', + description: 'Get the name of the current model', + parameters: { + type: 'object', + properties: { + model: { + type: 'string', + description: 'The name of the model', + }, + }, + }, + }, + }, + ], + }); + console.log('Response with model:', JSON.stringify(response4b, null, 2)); + // Switch to Mistral + dynamicLLM.setProvider({ model: 'mistral-large-latest' }); + const response4c = await dynamicLLM.askLLMText({ + messages: [Message.userMessage('What model are you using now?')], + requestId: 'example4b', + }); + console.log('Response with Mistral:', response4c); + // Example 5: Getting available providers and models + console.log('\nExample 5: Available providers and models'); + console.log('Available providers:', LLM.getAvailableProviders()); +} + +// Run the example - uncomment to execute +main().catch(console.error); diff --git a/apps/omega/src/main/llmProvider/index.ts b/apps/omega/src/main/llmProvider/index.ts new file mode 100644 index 000000000..caa2282e2 --- /dev/null +++ b/apps/omega/src/main/llmProvider/index.ts @@ -0,0 +1,144 @@ +import dotenv from 'dotenv'; +import { MCPServerName, Message } from '@agent-infra/shared'; +import { ChatCompletionTool } from 'openai/resources/index.mjs'; +import { mapToolKeysToAzureTools } from '../../main/mcp/tools'; +import { createMcpClient } from '../../main/mcp/client'; +import { listCustomTools } from '../../main/customTools'; +import { ProviderFactory } from './ProviderFactory'; +import { + LLMConfig, + LLMProvider, + LLMResponse, + ToolChoice, +} from './interfaces/LLMProvider'; + +// Load environment variables +dotenv.config(); + +// Export interfaces and types from LLMProvider for convenience +export type { + LLMConfig, + LLMResponse, + ToolChoice, + LLMProvider, +} from './interfaces/LLMProvider'; + +/** + * Unified LLM class that uses different providers based on configuration + */ +export class LLM { + private provider: LLMProvider; + private config: LLMConfig; + + constructor(config: LLMConfig = {}) { + this.config = config; + // Create provider instance based on the model or explicit provider setting + this.provider = ProviderFactory.createProvider(config, config.configName); + } + + /** + * Get the current provider + */ + getProvider(): LLMProvider { + return this.provider; + } + + /** + * Change the provider or model at runtime + */ + setProvider(config: LLMConfig = {}, providerName?: string): void { + this.config = { ...this.config, ...config }; + this.provider = ProviderFactory.createProvider( + this.config, + providerName || config.configName, + ); + } + + /** + * Send a message to the LLM and get a response + */ + async askLLMText({ + messages, + requestId, + }: { + messages: Message[]; + requestId: string; + }): Promise { + return this.provider.askLLMText({ messages, requestId }); + } + + /** + * Send a message to the LLM with tools and get a response with potential tool calls + */ + async askTool({ + messages, + tools, + mcpServerKeys, + requestId, + toolChoice, + }: { + messages: Message[]; + tools: ChatCompletionTool[]; + mcpServerKeys?: MCPServerName[]; + requestId: string; + toolChoice?: ToolChoice; + }): Promise { + try { + const mcpClient = await createMcpClient(); + const mcpTools = await mcpClient.listTools(); + const customTools = listCustomTools(); + const normalizeMcpTools = mapToolKeysToAzureTools( + mcpTools, + mcpServerKeys || [], + ); + + const allTools = [...tools, ...normalizeMcpTools, ...customTools]; + return this.provider.askTool({ + messages, + tools: allTools, + requestId, + toolChoice: toolChoice || 'auto', + }); + } catch (error: any) { + throw new Error(`Failed to get tool response from LLM: ${error}`); + } + } + + /** + * Send a message to the LLM and get a streaming response + */ + async *askLLMTextStream({ + messages, + requestId, + }: { + messages: Message[]; + requestId: string; + }): AsyncGenerator { + yield* this.provider.askLLMTextStream({ messages, requestId }); + } + + /** + * Abort an active request + */ + abortRequest(requestId: string): boolean { + if ('abortRequest' in this.provider) { + return this.provider.abortRequest(requestId); + } + return false; + } + + /** + * Get a list of available providers + */ + static getAvailableProviders(): string[] { + return ProviderFactory.getAvailableProviders(); + } +} + +// Create a singleton LLM instance with default settings +export const llm = new LLM(); + +// Provide a factory function to create new instances with custom settings +export function createLLM(config: LLMConfig = {}): LLM { + return new LLM(config); +} diff --git a/apps/omega/src/main/llmProvider/interfaces/LLMProvider.ts b/apps/omega/src/main/llmProvider/interfaces/LLMProvider.ts new file mode 100644 index 000000000..7655b1929 --- /dev/null +++ b/apps/omega/src/main/llmProvider/interfaces/LLMProvider.ts @@ -0,0 +1,67 @@ +import { Message, ToolCall } from '@agent-infra/shared'; +import { ChatCompletionTool } from 'openai/resources'; + +/** + * Common interface for all LLM provider configurations + */ +export interface LLMConfig { + model?: string; + apiKey?: string; + temperature?: number; + maxTokens?: number; + topP?: number; + frequencyPenalty?: number; + presencePenalty?: number; + configName?: string; + baseURL?: string; + apiVersion?: string; +} + +/** + * Standardized response format from LLM providers + */ +export interface LLMResponse { + content: string | null; + tool_calls?: ToolCall[]; +} + +/** + * Defines how tools should be chosen by the LLM + */ +export type ToolChoice = 'none' | 'auto' | 'required'; + +/** + * Common interface for all LLM providers + */ +export interface LLMProvider { + /** + * Send a message to the LLM and get a text response + */ + askLLMText(params: { + messages: Message[]; + requestId: string; + }): Promise; + + /** + * Send a message to the LLM with tools and get a response with potential tool calls + */ + askTool(params: { + messages: Message[]; + tools: ChatCompletionTool[]; + requestId: string; + toolChoice?: ToolChoice; + }): Promise; + + /** + * Send a message to the LLM and get a streaming response + */ + askLLMTextStream(params: { + messages: Message[]; + requestId: string; + }): AsyncGenerator; + + /** + * Abort an active request + */ + abortRequest(requestId: string): boolean; +} diff --git a/apps/omega/src/main/llmProvider/providers/AnthropicProvider.ts b/apps/omega/src/main/llmProvider/providers/AnthropicProvider.ts new file mode 100644 index 000000000..d98f200c9 --- /dev/null +++ b/apps/omega/src/main/llmProvider/providers/AnthropicProvider.ts @@ -0,0 +1,350 @@ +import Anthropic from '@anthropic-ai/sdk'; +import { Message, ToolCall } from '@agent-infra/shared'; +import { ChatCompletionTool } from 'openai/resources'; +import { BaseProvider } from './BaseProvider'; +import { LLMConfig, LLMResponse, ToolChoice } from '../interfaces/LLMProvider'; + +/** + * Helper to convert OpenAI tool format to Anthropic tool format + */ +function convertOpenAIToolsToAnthropic( + tools: ChatCompletionTool[], +): Anthropic.Tool[] { + return tools.map((tool) => { + if (tool.type === 'function') { + return { + name: tool.function.name, + description: tool.function.description, + input_schema: tool.function.parameters as any, + }; + } + throw new Error(`Unsupported tool type: ${tool.type}`); + }); +} + +/** + * Anthropic provider implementation + */ +export class AnthropicProvider extends BaseProvider { + private client: Anthropic; + private model: string; + + constructor(config: LLMConfig = {}) { + super(config); + + // Use environment variables or defaults + const apiKey = config.apiKey || process.env.ANTHROPIC_API_KEY; + const baseURL = config.baseURL || process.env.ANTHROPIC_API_BASE_URL; + + if (!apiKey) { + throw new Error( + 'Anthropic API key is required. Set ANTHROPIC_API_KEY environment variable or provide in config.', + ); + } + + this.client = new Anthropic({ + apiKey, + ...(baseURL && { baseURL }), + }); + + this.model = + config.model || + process.env.ANTHROPIC_DEFAULT_MODEL || + 'claude-3-7-sonnet-latest'; + } + + /** + * Convert Message objects to Anthropic API format + */ + protected formatMessages(messages: Message[]): Anthropic.MessageParam[] { + // Need to convert the messages from OpenAI format to Anthropic format + const anthropicMessages: Anthropic.MessageParam[] = []; + + // First, extract system message if present + const systemMsgIndex = messages.findIndex((m) => m.role === 'system'); + if (systemMsgIndex >= 0) { + // Remove system message as it's handled separately + messages = [ + ...messages.slice(0, systemMsgIndex), + ...messages.slice(systemMsgIndex + 1), + ]; + } + + // Convert remaining messages to Anthropic format + for (const msg of messages) { + if (msg.role === 'user') { + anthropicMessages.push({ + role: 'user', + content: msg.content || '', + }); + } else if (msg.role === 'assistant') { + const assistantMsg: Anthropic.MessageParam = { + role: 'assistant', + content: msg.content || '', + }; + + // Handle tool calls + if (msg.tool_calls) { + const content: Anthropic.ContentBlock[] = [ + { type: 'text', text: msg.content || '', citations: [] }, + ]; + + // Add tool calls + for (const toolCall of msg.tool_calls) { + content.push({ + type: 'tool_use', + id: toolCall.id, + name: toolCall.function.name, + input: JSON.parse(toolCall.function.arguments || '{}'), + }); + } + + assistantMsg.content = content; + } + + anthropicMessages.push(assistantMsg); + } else if (msg.role === 'tool') { + // Find the last assistant message + const lastAssistantIdx = anthropicMessages.length - 1; + if ( + lastAssistantIdx >= 0 && + anthropicMessages[lastAssistantIdx].role === 'assistant' + ) { + // Add tool output to the assistant's message content + const assistantMsg = anthropicMessages[lastAssistantIdx]; + const content = Array.isArray(assistantMsg.content) + ? assistantMsg.content + : []; + + content.push({ + type: 'tool_result', + tool_use_id: msg.tool_call_id!, + content: msg.content || '', + }); + + anthropicMessages[lastAssistantIdx].content = content; + } + } + } + + return anthropicMessages; + } + + /** + * Process tool calls from Anthropic response + */ + private processToolCalls( + response: Anthropic.Message, + ): ToolCall[] | undefined { + if (!response.content || !Array.isArray(response.content)) { + return undefined; + } + + const toolUses = response.content.filter( + (block): block is Anthropic.ToolUseBlock => block.type === 'tool_use', + ); + + if (toolUses.length === 0) { + return undefined; + } + + return toolUses.map((toolUse) => ({ + id: toolUse.id, + type: 'function' as const, + function: { + name: toolUse.name, + arguments: JSON.stringify(toolUse.input), + }, + })); + } + + /** + * Extract text content from Anthropic response + */ + private extractTextContent(response: Anthropic.Message): string { + if (typeof response.content === 'string') { + return response.content; + } + + if (Array.isArray(response.content)) { + const textBlocks = response.content.filter( + (block): block is Anthropic.TextBlock => block.type === 'text', + ); + return textBlocks.map((block) => block.text).join(''); + } + + return ''; + } + + /** + * Send a message to the LLM and get a response + */ + async askLLMText({ + messages, + requestId, + }: { + messages: Message[]; + requestId: string; + }): Promise { + try { + const formattedMessages = this.formatMessages(messages); + const controller = new AbortController(); + this.activeRequests.set(requestId, controller); + + // Extract system message if present at the beginning + let systemMessage = ''; + const systemMsgIndex = messages.findIndex((m) => m.role === 'system'); + if (systemMsgIndex >= 0) { + systemMessage = messages[systemMsgIndex].content || ''; + } + + const response = await this.client.messages.create( + { + model: this.model, + messages: formattedMessages, + system: systemMessage, + temperature: this.config.temperature, + max_tokens: this.config.maxTokens || 8192, + top_p: this.config.topP, + }, + { + signal: controller.signal, + }, + ); + + if (controller.signal.aborted) { + throw new Error('Request aborted'); + } + this.cleanupRequest(requestId); + return this.extractTextContent(response); + } catch (error: any) { + this.cleanupRequest(requestId); + if (error.name === 'AbortError' || error.message.includes('aborted')) { + return ''; + } + throw new Error(`Failed to get response from Anthropic: ${error}`); + } + } + + /** + * Send a message to the LLM with tools and get a response with potential tool calls + */ + async askTool({ + messages, + tools, + requestId, + toolChoice = 'auto', + }: { + messages: Message[]; + tools: ChatCompletionTool[]; + requestId: string; + toolChoice?: ToolChoice; + }): Promise { + try { + const formattedMessages = this.formatMessages(messages); + const controller = new AbortController(); + this.activeRequests.set(requestId, controller); + + // Extract system message if present + let systemMessage = ''; + const systemMsgIndex = messages.findIndex((m) => m.role === 'system'); + if (systemMsgIndex >= 0) { + systemMessage = messages[systemMsgIndex].content || ''; + } + + // Convert tools to Anthropic format + const anthropicTools = convertOpenAIToolsToAnthropic(tools); + + const response = await this.client.messages.create( + { + model: this.model, + messages: formattedMessages, + system: systemMessage, + temperature: this.config.temperature, + max_tokens: this.config.maxTokens || 4000, + top_p: this.config.topP, + tools: anthropicTools, + tool_choice: + toolChoice === 'required' ? { type: 'any' } : { type: 'auto' }, + }, + { + signal: controller.signal, + }, + ); + + if (controller.signal.aborted) { + throw new Error('Request aborted'); + } + + this.cleanupRequest(requestId); + const content = this.extractTextContent(response); + const toolCalls = this.processToolCalls(response); + return { content, tool_calls: toolCalls }; + } catch (error: any) { + this.cleanupRequest(requestId); + if (error.name === 'AbortError' || error.message.includes('aborted')) { + return { content: '' }; + } + throw new Error(`Failed to get tool response from Anthropic: ${error}`); + } + } + + /** + * Send a message to the LLM and get a streaming response + */ + async *askLLMTextStream({ + messages, + requestId, + }: { + messages: Message[]; + requestId: string; + }): AsyncGenerator { + try { + const formattedMessages = this.formatMessages(messages); + const controller = new AbortController(); + this.activeRequests.set(requestId, controller); + + // Extract system message if present + let systemMessage = ''; + const systemMsgIndex = messages.findIndex((m) => m.role === 'system'); + if (systemMsgIndex >= 0) { + systemMessage = messages[systemMsgIndex].content || ''; + } + + const stream = await this.client.messages.create( + { + model: this.model, + messages: formattedMessages, + system: systemMessage, + temperature: this.config.temperature, + max_tokens: this.config.maxTokens || 4000, + top_p: this.config.topP, + stream: true, + }, + { + signal: controller.signal, + }, + ); + + for await (const chunk of stream) { + if (controller.signal.aborted) { + throw new Error('Request aborted'); + } + + if ( + chunk.type === 'content_block_delta' && + chunk.delta?.type === 'text_delta' + ) { + yield chunk.delta.text; + } + } + } catch (error: any) { + if (error.name === 'AbortError' || error.message.includes('aborted')) { + throw new Error('Request aborted'); + } + throw error; + } finally { + this.cleanupRequest(requestId); + } + } +} diff --git a/apps/omega/src/main/llmProvider/providers/AzureOpenAIProvider.ts b/apps/omega/src/main/llmProvider/providers/AzureOpenAIProvider.ts new file mode 100644 index 000000000..3a3536d9f --- /dev/null +++ b/apps/omega/src/main/llmProvider/providers/AzureOpenAIProvider.ts @@ -0,0 +1,233 @@ +import OpenAI, { AzureOpenAI } from 'openai'; +import { Message, ToolCall } from '@agent-infra/shared'; +import { ChatCompletionTool } from 'openai/resources'; + +import { BaseProvider } from './BaseProvider'; +import { LLMConfig, LLMResponse, ToolChoice } from '../interfaces/LLMProvider'; + +/** + * Azure OpenAI provider implementation + */ +export class AzureOpenAIProvider extends BaseProvider { + private client: AzureOpenAI; + private model: string; + + constructor(config: LLMConfig = {}) { + super(config); + + // Use environment variables or defaults + const apiKey = config.apiKey || process.env.AZURE_OPENAI_API_KEY; + const endpoint = config.baseURL || process.env.AZURE_OPENAI_ENDPOINT; + const apiVersion = + config.apiVersion || + process.env.AZURE_OPENAI_API_VERSION || + '2023-12-01-preview'; + + if (!apiKey) { + throw new Error( + 'Azure OpenAI API key is required. Set AZURE_OPENAI_API_KEY environment variable or provide in config.', + ); + } + + if (!endpoint) { + throw new Error( + 'Azure OpenAI endpoint is required. Set AZURE_OPENAI_ENDPOINT environment variable or provide in config.', + ); + } + + this.client = new AzureOpenAI({ apiKey, apiVersion, endpoint }); + this.model = config.model || process.env.AZURE_OPENAI_MODEL || 'gpt-4o'; + } + + /** + * Convert Message objects to Azure OpenAI API format + */ + protected formatMessages(messages: Message[]): any[] { + return messages.map((item) => ({ + role: item.role as any, + content: item.content, + ...(item.tool_call_id && { tool_call_id: item.tool_call_id }), + ...(item.tool_calls && { tool_calls: item.tool_calls }), + ...(item.name && { name: item.name }), + })); + } + + /** + * Process tool calls from response + */ + private processToolCalls( + response: OpenAI.Chat.ChatCompletion, + ): ToolCall[] | undefined { + const toolCalls = response.choices + .filter((choice) => choice.finish_reason === 'tool_calls') + .map((choice) => choice.message.tool_calls) + .flat(); + + if (!toolCalls || toolCalls.length === 0) return undefined; + + return toolCalls + .map((toolCall) => { + if (!toolCall) { + return undefined; + } + return { + id: toolCall.id, + type: 'function' as const, + function: { + name: toolCall.function.name, + arguments: toolCall.function.arguments, + }, + }; + }) + .filter(Boolean) as ToolCall[]; + } + + /** + * Send a message to the LLM and get a response + */ + async askLLMText({ + messages, + requestId, + }: { + messages: Message[]; + requestId: string; + }): Promise { + try { + const formattedMessages = this.formatMessages(messages); + const controller = new AbortController(); + this.activeRequests.set(requestId, controller); + + const response = await this.client.chat.completions.create( + { + model: this.model, + messages: formattedMessages, + temperature: this.config.temperature, + max_tokens: this.config.maxTokens, + top_p: this.config.topP, + frequency_penalty: this.config.frequencyPenalty, + presence_penalty: this.config.presencePenalty, + }, + { + signal: controller.signal, + }, + ); + + if (controller.signal.aborted) { + throw new Error('Request aborted'); + } + this.cleanupRequest(requestId); + return response.choices[0].message.content || ''; + } catch (error: any) { + this.cleanupRequest(requestId); + if (error.name === 'AbortError' || error.message.includes('aborted')) { + return ''; + } + throw new Error(`Failed to get response from Azure OpenAI: ${error}`); + } + } + + /** + * Send a message to the LLM with tools and get a response with potential tool calls + */ + async askTool({ + messages, + tools, + requestId, + toolChoice = 'auto', + }: { + messages: Message[]; + tools: ChatCompletionTool[]; + requestId: string; + toolChoice?: ToolChoice; + }): Promise { + try { + const formattedMessages = this.formatMessages(messages); + const controller = new AbortController(); + this.activeRequests.set(requestId, controller); + + const response = await this.client.chat.completions.create( + { + model: this.model, + messages: formattedMessages, + temperature: this.config.temperature, + max_tokens: this.config.maxTokens, + tools, + tool_choice: toolChoice, + top_p: this.config.topP, + frequency_penalty: this.config.frequencyPenalty, + presence_penalty: this.config.presencePenalty, + }, + { + signal: controller.signal, + }, + ); + + if (controller.signal.aborted) { + throw new Error('Request aborted'); + } + + this.cleanupRequest(requestId); + const content = response.choices[0].message.content; + const toolCalls = this.processToolCalls(response); + return { content, tool_calls: toolCalls }; + } catch (error: any) { + this.cleanupRequest(requestId); + if (error.name === 'AbortError' || error.message.includes('aborted')) { + return { content: '' }; + } + throw new Error( + `Failed to get tool response from Azure OpenAI: ${error}`, + ); + } + } + + /** + * Send a message to the LLM and get a streaming response + */ + async *askLLMTextStream({ + messages, + requestId, + }: { + messages: Message[]; + requestId: string; + }): AsyncGenerator { + try { + const formattedMessages = this.formatMessages(messages); + const controller = new AbortController(); + this.activeRequests.set(requestId, controller); + + const stream = await this.client.chat.completions.create( + { + model: this.model, + messages: formattedMessages, + temperature: this.config.temperature, + max_tokens: this.config.maxTokens, + top_p: this.config.topP, + frequency_penalty: this.config.frequencyPenalty, + presence_penalty: this.config.presencePenalty, + stream: true, + }, + { + signal: controller.signal, + }, + ); + + for await (const chunk of stream) { + if (controller.signal.aborted) { + throw new Error('Request aborted'); + } + const content = chunk.choices[0]?.delta?.content; + if (content) { + yield content; + } + } + } catch (error: any) { + if (error.name === 'AbortError' || error.message.includes('aborted')) { + throw new Error('Request aborted'); + } + throw error; + } finally { + this.cleanupRequest(requestId); + } + } +} diff --git a/apps/omega/src/main/llmProvider/providers/BaseProvider.ts b/apps/omega/src/main/llmProvider/providers/BaseProvider.ts new file mode 100644 index 000000000..df84f6d96 --- /dev/null +++ b/apps/omega/src/main/llmProvider/providers/BaseProvider.ts @@ -0,0 +1,69 @@ +import { Message } from '@agent-infra/shared'; +import { LLMConfig, LLMProvider } from '../interfaces/LLMProvider'; + +/** + * Base abstract class for all LLM providers + * Implements common functionality and requires specific provider implementations + */ +export abstract class BaseProvider implements LLMProvider { + protected config: LLMConfig; + protected activeRequests = new Map(); + + constructor(config: LLMConfig = {}) { + this.config = { + temperature: config.temperature !== undefined ? config.temperature : 0, + maxTokens: config.maxTokens || 4000, + topP: config.topP !== undefined ? config.topP : 1.0, + frequencyPenalty: config.frequencyPenalty || 0, + presencePenalty: config.presencePenalty || 0, + ...config, + }; + } + + /** + * Convert Message objects to provider-specific format + * Each provider should implement this + */ + protected abstract formatMessages(messages: Message[]): any[]; + + /** + * Abort an active request + */ + abortRequest(requestId: string): boolean { + const controller = this.activeRequests.get(requestId); + if (controller) { + controller.abort(); + this.activeRequests.delete(requestId); + return true; + } + return false; + } + + /** + * Clean up request controller after completion/error + */ + protected cleanupRequest(requestId: string): void { + this.activeRequests.delete(requestId); + } + + /** + * Implementation required by subclasses + */ + abstract askLLMText(params: { + messages: Message[]; + requestId: string; + }): Promise; + + /** + * Implementation required by subclasses + */ + abstract askTool(params: any): Promise; + + /** + * Implementation required by subclasses + */ + abstract askLLMTextStream(params: { + messages: Message[]; + requestId: string; + }): AsyncGenerator; +} diff --git a/apps/omega/src/main/llmProvider/providers/GeminiProvider.ts b/apps/omega/src/main/llmProvider/providers/GeminiProvider.ts new file mode 100644 index 000000000..eea65b2c8 --- /dev/null +++ b/apps/omega/src/main/llmProvider/providers/GeminiProvider.ts @@ -0,0 +1,318 @@ +import { Message, ToolCall } from '@agent-infra/shared'; +import { ChatCompletionTool } from 'openai/resources'; +import { + GoogleGenerativeAI, + EnhancedGenerateContentResponse, + FunctionDeclaration, + SchemaType, +} from '@google/generative-ai'; +import { BaseProvider } from './BaseProvider'; +import { LLMConfig, LLMResponse, ToolChoice } from '../interfaces/LLMProvider'; + +/** + * Google Gemini provider implementation + */ +export class GeminiProvider extends BaseProvider { + private client: GoogleGenerativeAI; + private model: string; + + constructor(config: LLMConfig = {}) { + super(config); + + // Use environment variables or defaults + const apiKey = config.apiKey || process.env.GEMINI_API_KEY; + + if (!apiKey) { + throw new Error( + 'Gemini API key is required. Set GEMINI_API_KEY environment variable or provide in config.', + ); + } + + // Initialize client with the actual SDK + this.client = new GoogleGenerativeAI(apiKey); + + // Set default model or use provided one + this.model = + config.model || process.env.GEMINI_DEFAULT_MODEL || 'gemini-1.5-pro'; + } + + /** + * Convert Message objects to Google Gemini API format + */ + protected formatMessages(messages: Message[]): any[] { + return messages.map((message) => { + const role = message.role === 'system' ? 'user' : message.role; + return { + role, + parts: [{ text: message.content }], + }; + }); + } + + /** + * Process tool calls from Gemini response + */ + private processToolCalls( + response: EnhancedGenerateContentResponse, + ): ToolCall[] | undefined { + // Check if there are any function calls in the response + const functionCallResults = response.functionCalls(); + if (!functionCallResults || functionCallResults.length === 0) { + return undefined; + } + + return functionCallResults.map((callResult, index) => ({ + id: `gemini-function-call-${Date.now()}-${index}`, + type: 'function', + function: { + name: callResult.name, + arguments: callResult.args ? JSON.stringify(callResult.args) : '{}', + }, + })); + } + + /** + * Extract text content from Gemini response + */ + private extractTextContent( + response: EnhancedGenerateContentResponse, + ): string { + return response.text() || ''; + } + + /** + * Send a message to the LLM and get a response + */ + async askLLMText({ + messages, + requestId, + }: { + messages: Message[]; + requestId: string; + }): Promise { + try { + const formattedMessages = this.formatMessages(messages); + const controller = new AbortController(); + this.activeRequests.set(requestId, controller); + + // Create a generative model instance + const generativeModel = this.client.getGenerativeModel({ + model: this.model, + generationConfig: { + temperature: this.config.temperature, + maxOutputTokens: this.config.maxTokens, + topP: this.config.topP, + }, + }); + + // Use chat API to send messages + const chat = generativeModel.startChat(); + const result = await chat.sendMessage( + formattedMessages.map((message) => message.parts[0].text).join('\n'), + { + signal: controller.signal, + }, + ); + + if (controller.signal.aborted) { + throw new Error('Request aborted'); + } + + this.cleanupRequest(requestId); + return this.extractTextContent(result.response); + } catch (error: any) { + this.cleanupRequest(requestId); + if (error.name === 'AbortError' || error.message.includes('aborted')) { + return ''; + } + throw new Error(`Failed to get response from Gemini: ${error}`); + } + } + + /** + * Send a message to the LLM with tools and get a response with potential tool calls + */ + async askTool({ + messages, + tools, + requestId, + }: { + messages: Message[]; + tools: ChatCompletionTool[]; + requestId: string; + toolChoice?: ToolChoice; + }): Promise { + try { + const formattedMessages = this.formatMessages(messages); + const controller = new AbortController(); + this.activeRequests.set(requestId, controller); + + // Convert OpenAI-style tools to Gemini function declarations + const functionDeclarations: FunctionDeclaration[] = tools.map((tool) => ({ + name: tool.function.name, + description: tool.function.description || '', + parameters: tool.function.parameters + ? { + type: SchemaType.OBJECT, + properties: Object.entries( + tool.function.parameters.properties || {}, + ).reduce( + (acc, [key, value]) => { + // Convert each property to a format Gemini expects + acc[key] = convertOpenAISchemaToGemini(value); + return acc; + }, + { + // Add an extra properties to avoid runtime error for gemeni + message: { + type: 'string', + description: 'the user input message', + }, + } as Record, + ), + // Copy over required fields if present + } + : undefined, + })); + + function convertOpenAISchemaToGemini(schema: any): any { + if (!schema) return {}; + + // Basic conversion based on type + if (schema.type === 'object') { + return { + type: SchemaType.OBJECT, + properties: Object.entries(schema.properties || {}).reduce( + (acc, [key, value]) => { + acc[key] = convertOpenAISchemaToGemini(value); + return acc; + }, + {} as Record, + ), + ...(schema.required && { required: schema.required }), + ...(schema.description && { description: schema.description }), + }; + } else if (schema.type === 'array') { + return { + type: SchemaType.ARRAY, + items: convertOpenAISchemaToGemini(schema.items), + ...(schema.description && { description: schema.description }), + }; + } else if (schema.type === 'string') { + return { + type: SchemaType.STRING, + ...(schema.enum && { enum: schema.enum, format: 'enum' }), + ...(schema.description && { description: schema.description }), + }; + } else if (schema.type === 'number') { + return { + type: SchemaType.NUMBER, + ...(schema.description && { description: schema.description }), + }; + } else if (schema.type === 'integer') { + return { + type: SchemaType.INTEGER, + ...(schema.description && { description: schema.description }), + }; + } else if (schema.type === 'boolean') { + return { + type: SchemaType.BOOLEAN, + ...(schema.description && { description: schema.description }), + }; + } + + // Fallback + return { + type: SchemaType.STRING, + ...(schema.description && { description: schema.description }), + }; + } + + // Create a generative model instance with tools + const generativeModel = this.client.getGenerativeModel({ + model: this.model, + generationConfig: { + temperature: this.config.temperature, + maxOutputTokens: this.config.maxTokens, + topP: this.config.topP, + }, + tools: [{ functionDeclarations }], + }); + + // Use chat API to send messages + const chat = generativeModel.startChat(); + const result = await chat.sendMessage( + formattedMessages.map((message) => message.parts[0].text).join('\n'), + { + signal: controller.signal, + }, + ); + + if (controller.signal.aborted) { + throw new Error('Request aborted'); + } + + this.cleanupRequest(requestId); + const content = this.extractTextContent(result.response); + const toolCalls = this.processToolCalls(result.response); + return { content, tool_calls: toolCalls }; + } catch (error: any) { + this.cleanupRequest(requestId); + if (error.name === 'AbortError' || error.message.includes('aborted')) { + return { content: '' }; + } + throw new Error(`Failed to get tool response from Gemini: ${error}`); + } + } + + /** + * Send a message to the LLM and get a streaming response + */ + async *askLLMTextStream({ + messages, + requestId, + }: { + messages: Message[]; + requestId: string; + }): AsyncGenerator { + try { + const formattedMessages = this.formatMessages(messages); + const controller = new AbortController(); + this.activeRequests.set(requestId, controller); + + // Create a generative model instance + const generativeModel = this.client.getGenerativeModel({ + model: this.model, + generationConfig: { + temperature: this.config.temperature, + maxOutputTokens: this.config.maxTokens, + topP: this.config.topP, + }, + }); + + // Use chat API to send messages and get streaming response + const chat = generativeModel.startChat(); + const streamingResponse = await chat.sendMessageStream( + formattedMessages[formattedMessages.length - 1].parts[0].text, + ); + + for await (const chunk of streamingResponse.stream) { + if (controller.signal.aborted) { + throw new Error('Request aborted'); + } + + const textChunk = chunk.text(); + if (textChunk) { + yield textChunk; + } + } + } catch (error: any) { + if (error.name === 'AbortError' || error.message.includes('aborted')) { + throw new Error('Request aborted'); + } + throw error; + } finally { + this.cleanupRequest(requestId); + } + } +} diff --git a/apps/omega/src/main/llmProvider/providers/MistralProvider.ts b/apps/omega/src/main/llmProvider/providers/MistralProvider.ts new file mode 100644 index 000000000..8b54c977c --- /dev/null +++ b/apps/omega/src/main/llmProvider/providers/MistralProvider.ts @@ -0,0 +1,235 @@ +import { Message, ToolCall } from '@agent-infra/shared'; +import { + ChatCompletionMessageParam, + ChatCompletionTool, +} from 'openai/resources'; +import { Mistral } from '@mistralai/mistralai'; +import { BaseProvider } from './BaseProvider'; +import { LLMConfig, LLMResponse, ToolChoice } from '../interfaces/LLMProvider'; +import { ChatCompletionResponse } from '@mistralai/mistralai/models/components'; + +/** + * Mistral provider implementation + */ +export class MistralProvider extends BaseProvider { + private client: Mistral; + private model: string; + + constructor(config: LLMConfig = {}) { + super(config); + + // Use environment variables or defaults + const apiKey = config.apiKey || process.env.MISTRAL_API_KEY; + + if (!apiKey) { + throw new Error( + 'Mistral API key is required. Set MISTRAL_API_KEY environment variable or provide in config.', + ); + } + + // Initialize client with the actual SDK + this.client = new Mistral({ + apiKey, + }); + + // Set default model or use provided one + this.model = + config.model || + process.env.MISTRAL_DEFAULT_MODEL || + 'mistral-large-latest'; + } + + /** + * Convert Message objects to Mistral API format + */ + protected formatMessages(messages: Message[]): ChatCompletionMessageParam[] { + return messages.map((message) => ({ + role: message.role, + content: message.content, + })) as ChatCompletionMessageParam[]; + } + + /** + * Process tool calls from Mistral response + */ + private processToolCalls( + response: ChatCompletionResponse, + ): ToolCall[] | undefined { + if (!response.choices) { + return undefined; + } + const toolCalls = response.choices[0]?.message?.toolCalls; + if (!toolCalls || toolCalls.length === 0) { + return undefined; + } + + return toolCalls.map((call) => ({ + id: call.id || `mistral-tool-call-${Date.now()}`, + type: 'function' as const, + function: { + name: call.function.name, + arguments: (call.function.arguments || {}) as any, + }, + })); + } + + /** + * Send a message to the LLM and get a response + */ + async askLLMText({ + messages, + requestId, + }: { + messages: Message[]; + requestId: string; + }): Promise { + try { + const formattedMessages = this.formatMessages(messages); + const controller = new AbortController(); + this.activeRequests.set(requestId, controller); + + // Use the Mistral SDK to send the request + const response = await this.client.chat.complete({ + model: this.model, + messages: formattedMessages as any, + temperature: this.config.temperature || 0, + maxTokens: this.config.maxTokens, + topP: this.config.topP, + }); + + if (controller.signal.aborted) { + throw new Error('Request aborted'); + } + + this.cleanupRequest(requestId); + const messageContent = response.choices?.[0].message.content || ''; + if (Array.isArray(messageContent)) { + return messageContent + .map((c) => (c.type === 'text' ? c.text : '')) + .join(''); + } + return messageContent; + } catch (error: any) { + this.cleanupRequest(requestId); + if (error.name === 'AbortError' || error.message.includes('aborted')) { + return ''; + } + throw new Error(`Failed to get response from Mistral: ${error}`); + } + } + + /** + * Send a message to the LLM with tools and get a response with potential tool calls + */ + async askTool({ + messages, + tools, + requestId, + }: { + messages: Message[]; + tools: ChatCompletionTool[]; + requestId: string; + toolChoice?: ToolChoice; + }): Promise { + try { + const formattedMessages = this.formatMessages(messages); + const controller = new AbortController(); + this.activeRequests.set(requestId, controller); + + // Convert OpenAI style tools to Mistral format + const mistralTools = tools.map((tool) => ({ + type: 'function' as const, + function: { + name: tool.function.name, + description: tool.function.description || '', + parameters: tool.function.parameters || ({} as Record), + }, + })); + + // Send the request with tools + const response = await this.client.chat.complete({ + model: this.model, + messages: formattedMessages as any, + temperature: this.config.temperature || 0, + maxTokens: this.config.maxTokens, + topP: this.config.topP, + tools: mistralTools, + toolChoice: 'required', + }); + + if (controller.signal.aborted) { + throw new Error('Request aborted'); + } + + this.cleanupRequest(requestId); + const messageContent = response.choices?.[0].message.content || ''; + let content = ''; + if (Array.isArray(messageContent)) { + content = messageContent + .map((c) => (c.type === 'text' ? c.text : '')) + .join(''); + } + const toolCalls = this.processToolCalls(response); + return { + content, + tool_calls: toolCalls, + }; + } catch (error: any) { + this.cleanupRequest(requestId); + if (error.name === 'AbortError' || error.message.includes('aborted')) { + return { content: '' }; + } + throw new Error(`Failed to get tool response from Mistral: ${error}`); + } + } + + /** + * Send a message to the LLM and get a streaming response + */ + async *askLLMTextStream({ + messages, + requestId, + }: { + messages: Message[]; + requestId: string; + }): AsyncGenerator { + try { + const formattedMessages = this.formatMessages(messages); + const controller = new AbortController(); + this.activeRequests.set(requestId, controller); + + // Use Mistral streaming API + const stream = await this.client.chat.stream({ + model: this.model, + messages: formattedMessages as any, + temperature: this.config.temperature || 0, + maxTokens: this.config.maxTokens, + topP: this.config.topP, + }); + + for await (const chunk of stream) { + if (controller.signal.aborted) { + throw new Error('Request aborted'); + } + + const content = chunk.data.choices?.[0]?.delta.content; + let textContent = content; + if (Array.isArray(textContent)) { + textContent = textContent + .map((c) => (c.type === 'text' ? c.text : '')) + .join(''); + } + if (textContent) { + yield textContent; + } + } + } catch (error: any) { + if (error.name === 'AbortError' || error.message.includes('aborted')) { + throw new Error('Request aborted'); + } + throw error; + } finally { + this.cleanupRequest(requestId); + } + } +} diff --git a/apps/omega/src/main/llmProvider/providers/OpenAIProvider.ts b/apps/omega/src/main/llmProvider/providers/OpenAIProvider.ts new file mode 100644 index 000000000..1f7974f50 --- /dev/null +++ b/apps/omega/src/main/llmProvider/providers/OpenAIProvider.ts @@ -0,0 +1,223 @@ +import OpenAI from 'openai'; +import { Message, ToolCall } from '@agent-infra/shared'; +import { ChatCompletionTool } from 'openai/resources'; +import { BaseProvider } from './BaseProvider'; +import { LLMConfig, LLMResponse, ToolChoice } from '../interfaces/LLMProvider'; + +/** + * OpenAI provider implementation + */ +export class OpenAIProvider extends BaseProvider { + private client: OpenAI; + private model: string; + + constructor(config: LLMConfig = {}) { + super(config); + + // Use environment variables or defaults + const apiKey = config.apiKey || process.env.OPENAI_API_KEY; + const baseURL = config.baseURL || process.env.OPENAI_API_BASE_URL; + + if (!apiKey) { + throw new Error( + 'OpenAI API key is required. Set OPENAI_API_KEY environment variable or provide in config.', + ); + } + + this.client = new OpenAI({ apiKey, baseURL }); + this.model = config.model || process.env.OPENAI_DEFAULT_MODEL || 'gpt-4o'; + } + + /** + * Convert Message objects to OpenAI API format + */ + protected formatMessages( + messages: Message[], + ): OpenAI.Chat.ChatCompletionMessageParam[] { + return messages.map((item) => ({ + role: item.role as any, + content: item.content, + ...(item.tool_call_id && { tool_call_id: item.tool_call_id }), + ...((item.tool_calls && { tool_calls: item.tool_calls }) as any), + ...(item.name && { name: item.name }), + })); + } + + /** + * Process tool calls from response + */ + private processToolCalls( + response: OpenAI.Chat.ChatCompletion, + ): ToolCall[] | undefined { + const toolCalls = response.choices + .filter((choice) => choice.finish_reason === 'tool_calls') + .map((choice) => choice.message.tool_calls) + .flat(); + + if (!toolCalls || toolCalls.length === 0) return undefined; + + return toolCalls + .map((toolCall) => { + if (!toolCall) { + return undefined; + } + + return { + id: toolCall.id, + type: 'function' as const, + function: { + name: toolCall.function.name, + arguments: toolCall.function.arguments, + }, + }; + }) + .filter(Boolean) as ToolCall[]; + } + + /** + * Send a message to the LLM and get a response + */ + async askLLMText({ + messages, + requestId, + }: { + messages: Message[]; + requestId: string; + }): Promise { + try { + const formattedMessages = this.formatMessages(messages); + const controller = new AbortController(); + this.activeRequests.set(requestId, controller); + + const response = await this.client.chat.completions.create( + { + model: this.model, + messages: formattedMessages, + temperature: this.config.temperature, + max_tokens: this.config.maxTokens, + top_p: this.config.topP, + frequency_penalty: this.config.frequencyPenalty, + presence_penalty: this.config.presencePenalty, + }, + { + signal: controller.signal, + }, + ); + + if (controller.signal.aborted) { + throw new Error('Request aborted'); + } + this.cleanupRequest(requestId); + return response.choices[0].message.content || ''; + } catch (error: any) { + this.cleanupRequest(requestId); + if (error.name === 'AbortError' || error.message.includes('aborted')) { + return ''; + } + throw new Error(`Failed to get response from OpenAI: ${error}`); + } + } + + /** + * Send a message to the LLM with tools and get a response with potential tool calls + */ + async askTool({ + messages, + tools, + requestId, + toolChoice = 'auto', + }: { + messages: Message[]; + tools: ChatCompletionTool[]; + requestId: string; + toolChoice?: ToolChoice; + }): Promise { + try { + const formattedMessages = this.formatMessages(messages); + const controller = new AbortController(); + this.activeRequests.set(requestId, controller); + + const response = await this.client.chat.completions.create( + { + model: this.model, + messages: formattedMessages, + temperature: this.config.temperature, + max_tokens: this.config.maxTokens, + tools, + tool_choice: toolChoice, + top_p: this.config.topP, + frequency_penalty: this.config.frequencyPenalty, + presence_penalty: this.config.presencePenalty, + }, + { + signal: controller.signal, + }, + ); + + if (controller.signal.aborted) { + throw new Error('Request aborted'); + } + + this.cleanupRequest(requestId); + const content = response.choices[0].message.content; + const toolCalls = this.processToolCalls(response); + return { content, tool_calls: toolCalls }; + } catch (error: any) { + this.cleanupRequest(requestId); + if (error.name === 'AbortError' || error.message.includes('aborted')) { + return { content: '' }; + } + throw new Error(`Failed to get tool response from OpenAI: ${error}`); + } + } + + /** + * Send a message to the LLM and get a streaming response + */ + async *askLLMTextStream({ + messages, + requestId, + }: { + messages: Message[]; + requestId: string; + }): AsyncGenerator { + try { + const formattedMessages = this.formatMessages(messages); + const controller = new AbortController(); + this.activeRequests.set(requestId, controller); + + const stream = await this.client.chat.completions.create( + { + model: this.model, + messages: formattedMessages, + temperature: this.config.temperature, + max_tokens: this.config.maxTokens, + top_p: this.config.topP, + frequency_penalty: this.config.frequencyPenalty, + presence_penalty: this.config.presencePenalty, + stream: true, + }, + { + signal: controller.signal, + }, + ); + + for await (const chunk of stream) { + if (controller.signal.aborted) { + throw new Error('Request aborted'); + } + const content = chunk.choices[0]?.delta?.content; + if (content) { + yield content; + } + } + } catch (error: any) { + if (error.name === 'AbortError' || error.message.includes('aborted')) { + throw new Error('Request aborted'); + } + throw error; + } finally { + this.cleanupRequest(requestId); + } + } +} diff --git a/apps/omega/src/main/mcp/client.ts b/apps/omega/src/main/mcp/client.ts new file mode 100644 index 000000000..b9966131e --- /dev/null +++ b/apps/omega/src/main/mcp/client.ts @@ -0,0 +1,85 @@ +import { MCPClient } from '@agent-infra/mcp-client'; +import { MCPServerName } from '@agent-infra/shared'; +import path from 'path'; +import os from 'os'; +import fs from 'fs-extra'; + +// Keep track of the filesystem client to allow updating allowed directories +let fsClientModule: any = null; + +export const getOmegaDir = async () => { + // Create working directory in user's home directory. + const omegaDir = path.join(os.homedir(), '.omega'); + if (!fs.existsSync(omegaDir)) { + await fs.mkdir(omegaDir, { recursive: true }); + } + return omegaDir; +}; + +const dynamicImport = (url) => + // eslint-disable-next-line @typescript-eslint/no-implied-eval + new Function(`return import('${url}')`)(); + +// Initialize MCP client with filesystem and commands tools +export const createMcpClient = async () => { + if (mapClientRef.current) { + return mapClientRef.current; + } + const { client: commandClient } = await dynamicImport( + '@agent-infra/mcp-server-commands', + ); + const fsModule = await dynamicImport('@agent-infra/mcp-server-filesystem'); + const { client: fsClient, setAllowedDirectories } = fsModule; + fsClientModule = fsModule; + + const { client: browserClient } = await dynamicImport( + '@agent-infra/mcp-server-browser', + ); + + const omegaDir = await getOmegaDir(); + setAllowedDirectories([omegaDir]); + + const toolsMap = { + [MCPServerName.FileSystem]: { + name: MCPServerName.FileSystem, + description: 'filesystem tool', + localClient: fsClient, + }, + [MCPServerName.Commands]: { + name: MCPServerName.Commands, + description: 'commands tool', + localClient: commandClient, + }, + [MCPServerName.Browser]: { + name: MCPServerName.Browser, + local: true, + description: 'browser tools', + localClient: browserClient, + }, + }; + + const client = new MCPClient(Object.values(toolsMap)); + mapClientRef.current = client; + return client; +}; + +export const mapClientRef: { + current: MCPClient | undefined; +} = { + current: undefined, +}; + +export const setAllowedDirectories = async (directories: string[]) => { + if (fsClientModule && fsClientModule.setAllowedDirectories) { + return fsClientModule.setAllowedDirectories(directories); + } + throw new Error('File system client not initialized'); +}; + +export const getAllowedDirectories = async (): Promise => { + if (fsClientModule && fsClientModule.getAllowedDirectories) { + return fsClientModule.getAllowedDirectories(); + } + const omegaDir = await getOmegaDir(); + return [omegaDir]; +}; diff --git a/apps/omega/src/main/mcp/tools.ts b/apps/omega/src/main/mcp/tools.ts new file mode 100644 index 000000000..748405116 --- /dev/null +++ b/apps/omega/src/main/mcp/tools.ts @@ -0,0 +1,30 @@ +import { MCPServerName } from '@agent-infra/shared'; +import { MCPTool } from '@agent-infra/mcp-client'; +import { ChatCompletionTool } from 'openai/resources/index.mjs'; + +export function mcpToolsToAzureTools( + mcpTools: MCPTool[], +): Array { + return mcpTools.map((tool) => { + const t = { + type: 'function' as const, + function: { + name: tool.name, + description: tool.description, + parameters: tool.inputSchema, + }, + }; + return t; + }); +} + +export function mapToolKeysToAzureTools( + mcpTools: MCPTool[], + toolKeys: MCPServerName[], +) { + return mcpToolsToAzureTools( + mcpTools.filter((tool) => + toolKeys.includes(tool.serverName as MCPServerName), + ), + ); +} diff --git a/apps/omega/src/main/package.json b/apps/omega/src/main/package.json new file mode 100644 index 000000000..80ba3d13f --- /dev/null +++ b/apps/omega/src/main/package.json @@ -0,0 +1,25 @@ +{ + "name": "open-agent-main", + "dependencies": { + "@electron-toolkit/preload": "^3.0.1", + "@electron-toolkit/utils": "^4.0.0", + "update-electron-app": "^3.1.0", + "openai": "^4.86.2", + "dotenv": "16.4.7", + "@agent-infra/shared": "workspace:*", + "@agent-infra/mcp-client": "workspace:*", + "@agent-infra/search": "workspace:*", + "ws": "8.18.1", + "utf-8-validate": "6.0.5", + "bufferutil": "4.0.9", + "fs-extra": "11.3.0", + "@anthropic-ai/sdk": "0.39.0", + "@google/generative-ai": "0.24.0", + "@mistralai/mistralai": "1.5.1", + "@ui-tars/electron-ipc": "workspace:*" + }, + "devDependencies": { + "electron": "34.1.1", + "@types/fs-extra": "11.0.4" + } +} diff --git a/apps/omega/src/main/type.ts b/apps/omega/src/main/type.ts new file mode 100644 index 000000000..f66d086d7 --- /dev/null +++ b/apps/omega/src/main/type.ts @@ -0,0 +1,4 @@ +import { CompatibilityCallToolResultSchema } from '@modelcontextprotocol/sdk/types.js'; +import { z } from 'zod'; + +export type MCPToolResult = z.infer[]; diff --git a/apps/omega/src/main/utils/normalizeOmegaData.ts b/apps/omega/src/main/utils/normalizeOmegaData.ts new file mode 100644 index 000000000..f3d810070 --- /dev/null +++ b/apps/omega/src/main/utils/normalizeOmegaData.ts @@ -0,0 +1,78 @@ +import { readFile } from 'fs-extra'; + +interface ImageItem { + type: 'image'; + path: string; + content?: string; +} + +interface ToolUsedEvent { + type: 'tool-used'; + content: { + result: Array; + }; +} + +interface OmegaAgentMessage { + type: 'omega-agent'; + content: { + events: Array; + }; +} + +export async function normalizeMessages( + messages: Array, +) { + const normalizedMessages = await Promise.all( + messages.map(async (item) => { + if (item.type !== 'omega-agent') { + return item; + } + + const normalizedEvents = await Promise.all( + item.content.events.map(async (event) => { + if ( + event.type === 'tool-used' && + event.content.tool.includes('browser') + ) { + const result = event.content.result || []; + const normalizedResults = await Promise.all( + result.map(async (resultItem) => { + if (resultItem.type === 'image') { + const base64Content = await readFile( + resultItem.path, + 'base64', + ); + delete resultItem.path; + return { + ...resultItem, + content: `data:image/png;base64,${base64Content}`, + }; + } + return resultItem; + }), + ); + return { + ...event, + content: { + ...event.content, + result: normalizedResults, + }, + }; + } + return event; + }), + ); + + return { + ...item, + content: { + ...item.content, + events: normalizedEvents, + }, + }; + }), + ); + + return normalizedMessages; +} diff --git a/apps/omega/src/preload/index.d.ts b/apps/omega/src/preload/index.d.ts new file mode 100644 index 000000000..0cc56585a --- /dev/null +++ b/apps/omega/src/preload/index.d.ts @@ -0,0 +1,11 @@ +import { ElectronAPI } from '@electron-toolkit/preload'; + +declare global { + interface Window { + electron: ElectronAPI; + api: { + on: (channel: string, callback: (...args: any[]) => void) => void; + off: (channel: string, callback: (...args: any[]) => void) => void; + }; + } +} diff --git a/apps/omega/src/preload/index.ts b/apps/omega/src/preload/index.ts new file mode 100644 index 000000000..2a9f920a3 --- /dev/null +++ b/apps/omega/src/preload/index.ts @@ -0,0 +1,26 @@ +import { contextBridge, ipcRenderer } from 'electron'; +import { electronAPI } from '@electron-toolkit/preload'; + +// Custom APIs for renderer +const api = { + on: (channel: string, callback: (...args: any[]) => void) => { + ipcRenderer.on(channel, (_event, ...args) => callback(...args)); + }, + off: (channel: string, callback: (...args: any[]) => void) => { + ipcRenderer.removeListener(channel, callback); + }, +}; + +if (process.contextIsolated) { + try { + contextBridge.exposeInMainWorld('electron', electronAPI); + contextBridge.exposeInMainWorld('api', api); + } catch (error) { + console.error(error); + } +} else { + // @ts-ignore (define in dts) + window.electron = electronAPI; + // @ts-ignore (define in dts) + window.api = api; +} diff --git a/apps/omega/src/renderer/index.html b/apps/omega/src/renderer/index.html new file mode 100644 index 000000000..2ed3acfbc --- /dev/null +++ b/apps/omega/src/renderer/index.html @@ -0,0 +1,16 @@ + + + + + Electron + + + + +

    + + + diff --git a/apps/omega/src/renderer/mock/ipc.ts b/apps/omega/src/renderer/mock/ipc.ts new file mode 100644 index 000000000..6ccd08623 --- /dev/null +++ b/apps/omega/src/renderer/mock/ipc.ts @@ -0,0 +1,131 @@ +import { MCPToolResult } from '../../main/type'; + +const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); + +// Mock tool result for web_search +const mockSearchResult: MCPToolResult = [ + { + isError: false, + content: [ + { + title: 'Mock Search Result 1', + url: 'https://example.com/1', + snippet: 'This is a mock search result.', + }, + { + title: 'Mock Search Result 2', + url: 'https://example.com/2', + snippet: 'Another mock search result.', + }, + ], + }, +]; + +// Mock tools list +const mockTools = [ + { + name: 'web_search', + description: 'Search in the internet', + parameters: { + type: 'object', + properties: { + query: { + type: 'string', + description: 'The search query', + }, + }, + required: ['query'], + }, + }, +]; + +export const createClient = () => ({ + askLLMText: async () => { + await delay(1000); + return "I'm a mock response from the LLM."; + }, + + askLLMTool: async () => { + await delay(1000); + return { + content: null, + tool_calls: [ + { + id: 'mock-tool-call', + type: 'function', + function: { + name: 'web_search', + arguments: JSON.stringify({ + query: 'mock search query', + }), + }, + }, + ], + }; + }, + + askLLMTextStream: async ({ requestId }: { requestId: string }) => { + return requestId; + }, + + abortRequest: async ({ requestId }: { requestId: string }) => { + return true; + }, + + listTools: async () => { + await delay(500); + return mockTools; + }, + + listMcpTools: async () => { + await delay(500); + return []; + }, + + listCustomTools: async () => { + await delay(500); + return mockTools; + }, + + executeTool: async () => { + await delay(1000); + return mockSearchResult; + }, + + saveBrowserSnapshot: async () => { + await delay(500); + return { + filepath: '/mock/path/to/screenshot.png', + }; + }, + + saveReportHtml: async () => { + await delay(500); + return '/mock/path/to/report.html'; + }, + + cleanup: async () => { + return true; + }, + + runAgent: async () => { + return 'Hello from mock agent'; + }, +}); + +declare global { + interface Window { + electron: { + ipcRenderer: { + invoke: (channel: string, ...args: any[]) => Promise; + }; + }; + } +} +window.electron = { + ipcRenderer: { + invoke: async () => { + // noop + }, + }, +}; diff --git a/apps/omega/src/renderer/package.json b/apps/omega/src/renderer/package.json new file mode 100644 index 000000000..8cdec88ba --- /dev/null +++ b/apps/omega/src/renderer/package.json @@ -0,0 +1,49 @@ +{ + "name": "open-agent-renderer", + "dependencies": { + "@ui-tars/electron-ipc": "^1.2.3", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "@nextui-org/react": "2.4.8", + "framer-motion": "11.2.13", + "styled-components": "^6.1.11", + "localforage": "^1.10.0", + "jotai": "^2.8.2", + "react-icons": "5.2.1", + "lucide-react": "0.479.0", + "classnames": "2.5.1", + "jszip": "3.10.1", + "@nextui-org/system": "2.2.6", + "@nextui-org/theme": "2.2.11", + "@agent-infra/shared": "workspace:*", + "clsx": "2.1.1", + "tailwind-merge": "3.0.2", + "use-dark-mode": "2.3.1", + "eventemitter3": "5.0.1", + "dayjs": "1.11.13", + "date-fns": "4.1.0", + "react-split": "2.0.14", + "@monaco-editor/react": "4.7.0", + "xterm": "^5.3.0", + "xterm-addon-fit": "^0.8.0", + "xterm-addon-web-links": "^0.9.0", + "jsonrepair": "3.12.0", + "react-markdown": "10.1.0", + "remark-gfm": "4.0.1", + "remark-math": "6.0.0", + "rehype-katex": "7.0.1", + "lodash-es": "4.17.21", + "katex": "0.16.21", + "react-syntax-highlighter": "15.5.0", + "uuid": "11.1.0", + "react-hot-toast": "2.5.2", + "path-browserify": "1.0.1" + }, + "devDependencies": { + "typescript": "^5.7.3", + "@types/react": "^18.3.18", + "@types/react-dom": "^18.3.5", + "@tailwindcss/aspect-ratio": "0.4.2", + "@agent-infra/search": "workspace:*" + } +} diff --git a/apps/omega/src/renderer/src/App.tsx b/apps/omega/src/renderer/src/App.tsx new file mode 100644 index 000000000..035d9c8a1 --- /dev/null +++ b/apps/omega/src/renderer/src/App.tsx @@ -0,0 +1,20 @@ +// import { useState } from 'react'; +// import { api } from '@renderer/api'; +import { AgentApp } from './components/AgentApp'; +import './index.scss'; + +function App(): JSX.Element { + // const [agentResponse, setAgentResponse] = useState(); + // const callAgent = async (): Promise => { + // const res = await api.runAgent(); + // setAgentResponse(res); + // }; + + return ( +
    + +
    + ); +} + +export default App; diff --git a/apps/omega/src/renderer/src/agent/AgentFlow.ts b/apps/omega/src/renderer/src/agent/AgentFlow.ts new file mode 100644 index 000000000..0730e63ed --- /dev/null +++ b/apps/omega/src/renderer/src/agent/AgentFlow.ts @@ -0,0 +1,418 @@ +import { Memory } from '@agent-infra/shared'; +import { ChatMessageUtil } from '@renderer/utils/ChatMessageUtils'; +import { AppContext } from '@renderer/hooks/useAgentFlow'; +import { Aware, AwareResult } from './Aware'; +import { Executor } from './Executor'; +import { PlanTask, PlanTaskStatus, ToolCallType } from '@renderer/type/agent'; +import { EventManager } from './EventManager'; +import { ExecutorToolType } from './Executor/tools'; +import { ipcClient } from '@renderer/api'; +import { GlobalEvent, globalEventEmitter } from '@renderer/state/chat'; +import { Greeter } from './Greeter'; +import { extractHistoryEvents } from '@renderer/utils/extractHistoryEvents'; +import { EventItem, EventType } from '@renderer/type/event'; +import { SNAPSHOT_BROWSER_ACTIONS } from '@renderer/constants'; +import { loadLLMSettings } from '@renderer/services/llmSettings'; + +export interface AgentContext { + plan: PlanTask[]; + currentStep: number; + memory: Memory; + getEnvironmentInfo: ( + appContext: AppContext, + agentContext: AgentContext, + ) => string; + eventManager: EventManager; +} + +export interface EventStream {} + +export class AgentFlow { + private eventManager: EventManager; + private abortController: AbortController; + private interruptController: AbortController; + private hasFinished: boolean = false; + private loadingStatusTip: string = ''; + + constructor(private appContext: AppContext) { + // Load LLM settings and update the configuration + const llmSettings = loadLLMSettings(); + if (llmSettings) { + // Update LLM configuration when starting the agent flow + ipcClient + .updateLLMConfig({ + configName: llmSettings.provider, + model: + llmSettings.provider === 'azure_openai' + ? llmSettings.customModel + : llmSettings.model, + apiKey: llmSettings.apiKey, + apiVersion: llmSettings.apiVersion, + baseURL: llmSettings.endpoint, + }) + .catch((error) => { + console.error('Failed to update LLM configuration:', error); + }); + } + + const omegaHistoryEvents = this.parseHistoryEvents(); + this.eventManager = new EventManager(omegaHistoryEvents); + this.abortController = new AbortController(); + this.interruptController = new AbortController(); + } + + async run() { + this.appContext.setPlanTasks([]); + const chatUtils = this.appContext.chatUtils; + const { setAgentStatusTip } = this.appContext; + this.eventManager.addLoadingStatus('Thinking'); + chatUtils.addMessage( + ChatMessageUtil.assistantOmegaMessage({ + events: this.eventManager.getAllEvents(), + }), + { + shouldSyncStorage: true, + }, + ); + // this.appContext.setEvents([ + // ...this.eventManager.getHistoryEvents(), + // ...this.eventManager.getAllEvents(), + // ]); + // return; + setAgentStatusTip('Thinking'); + // First, we give a loading ui to the user to indicate that the agent is thinking + const agentContext: AgentContext = { + plan: [], + currentStep: 0, + memory: new Memory(), + getEnvironmentInfo: this.getEnvironmentInfo, + eventManager: this.eventManager, + }; + const aware = new Aware( + this.appContext, + agentContext, + this.interruptController.signal, + ); + const executor = new Executor( + this.appContext, + agentContext, + this.interruptController.signal, + ); + this.eventManager.addLoadingStatus('Thinking'); + const greeter = new Greeter(this.appContext, this.abortController.signal); + + globalEventEmitter.addListener( + this.appContext.agentFlowId, + async (event) => { + if (event.type === 'terminate') { + this.abortController.abort(); + await this.eventManager.addEndEvent( + 'Agent flow has been terminated.', + ); + } + }, + ); + const preparePromise = greeter.run().then(async () => { + // Run planner agent + const omegaMessage = await chatUtils.addMessage( + ChatMessageUtil.assistantOmegaMessage({ + events: this.eventManager.getAllEvents(), + }), + { + shouldSyncStorage: true, + }, + ); + // Bind event data and ui, when event added, the ui will be updated automatically + // In other words, reactive ui programming + this.eventManager.setUpdateCallback(async (events) => { + this.appContext.setEvents((preEvents: EventItem[]) => { + // Show canvas automatically when tool used + if (preEvents.find((e) => e.type === EventType.ToolUsed)) { + this.appContext.setShowCanvas(true); + } + const latestToolUsedEvent = [...events] + .reverse() + .find((e) => e.type === EventType.ToolUsed); + console.log('latestToolUsedEvent', latestToolUsedEvent); + latestToolUsedEvent && + this.appContext.setEventId(latestToolUsedEvent.id); + return [...this.eventManager.getHistoryEvents(), ...events]; + }); + await chatUtils.updateMessage( + ChatMessageUtil.assistantOmegaMessage({ events }), + { + messageId: omegaMessage!.id, + shouldSyncStorage: true, + shouldScrollToBottom: true, + }, + ); + }); + + globalEventEmitter.addListener( + this.appContext.agentFlowId, + async (event: GlobalEvent) => { + switch (event.type) { + case 'user-interrupt': + await this.eventManager.addUserInteruptionInput(event.text); + this.interruptController.abort(); + await chatUtils.updateMessage( + ChatMessageUtil.assistantOmegaMessage({ + events: this.eventManager.getAllEvents(), + }), + { + messageId: omegaMessage!.id, + shouldSyncStorage: true, + }, + ); + break; + default: + break; + } + }, + ); + }); + + await Promise.all([ + preparePromise, + this.launchAgentLoop(executor, aware, agentContext, preparePromise), + ]); + + if (!this.abortController.signal.aborted) { + this.eventManager.addEndEvent('> Omega Agent has finished.'); + } + } + + private async launchAgentLoop( + executor: Executor, + aware: Aware, + agentContext: AgentContext, + preparePromise: Promise, + ) { + this.loadingStatusTip = 'Thinking'; + try { + while (!this.abortController.signal.aborted && !this.hasFinished) { + // The environment includes + // - The current event stream context + // - The current task + // - The current user message + try { + await this.eventManager.addLoadingStatus(this.loadingStatusTip); + console.log( + 'env info', + this.getEnvironmentInfo(this.appContext, agentContext), + ); + const awareResult = await aware.run(); + this.loadingStatusTip = 'Thinking'; + await preparePromise; + if (this.abortController.signal.aborted) { + break; + } + if ( + awareResult.plan && + awareResult.plan.every( + (task) => task.status === PlanTaskStatus.Done, + ) + ) { + this.hasFinished = true; + break; + } + + if (this.interruptController.signal.aborted) { + this.interruptController = new AbortController(); + this.loadingStatusTip = 'Replaning'; + aware.updateSignal(this.interruptController.signal); + executor.updateSignal(this.interruptController.signal); + await this.eventManager.addLoadingStatus(this.loadingStatusTip); + this.appContext.setAgentStatusTip(this.loadingStatusTip); + continue; + } + console.log('aware result', awareResult); + + // Reset the plan + agentContext.plan = this.normalizePlan(awareResult, agentContext); + await this.eventManager.addPlanUpdate( + awareResult.step, + agentContext.plan, + ); + this.appContext.setPlanTasks(agentContext.plan); + agentContext.currentStep = awareResult.step; + if (awareResult.step > agentContext.currentStep) { + // Update UI, render new step + await this.eventManager.addNewPlanStep(agentContext.currentStep); + // Over the max task number, break the loop + if (awareResult.step > agentContext.plan.length) { + break; + } + } + if (awareResult.status) { + // Update UI, render new status + await this.eventManager.addAgentStatus(awareResult.status); + } + + await this.eventManager.addLoadingStatus(this.loadingStatusTip); + this.appContext.setAgentStatusTip(this.loadingStatusTip); + + const toolCallList = (await executor.run(awareResult.status)).filter( + Boolean, + ); + + if (this.abortController.signal.aborted) { + break; + } + + if (this.interruptController.signal.aborted) { + this.handleUserInterrupt(aware, executor); + continue; + } + + const mcpTools = await ipcClient.listMcpTools(); + const customServerTools = await ipcClient.listCustomTools(); + this.loadingStatusTip = 'Executing Tool'; + // Execute the tools + for (const toolCall of toolCallList) { + const toolName = toolCall.function.name; + const isMCPToolCall = mcpTools.some( + (tool) => tool.name === toolCall.function.name, + ); + const isCustomServerToolCall = customServerTools.some( + (tool) => tool.function.name === toolCall.function.name, + ); + + await this.eventManager.addToolCallStart( + toolName, + toolCall.function.arguments, + ); + + await this.eventManager.addToolExecutionLoading(toolCall); + + // Set up permission check interval for this specific tool execution + + if (isMCPToolCall || isCustomServerToolCall) { + // Execute tool in the main thread + const callResult = (await executor.excuteTools([toolCall]))[0]; + this.appContext.setAgentStatusTip('Executing Tool'); + + await this.eventManager.handleToolExecution({ + toolName, + toolCallId: toolCall.id, + params: toolCall.function.arguments, + result: callResult.content, + isError: callResult.isError as boolean, + }); + } + + if (SNAPSHOT_BROWSER_ACTIONS.includes(toolName as ToolCallType)) { + const screenshotPath = await ipcClient.saveBrowserSnapshot(); + console.log('screenshotPath', screenshotPath); + this.eventManager.updateScreenshot(screenshotPath.filepath); + } + + if (toolName === ExecutorToolType.ChatMessage) { + const params = JSON.parse(toolCall.function.arguments); + await this.eventManager.addChatText(params.text); + } + + if (toolName === ExecutorToolType.Idle) { + this.hasFinished = true; + this.eventManager.addPlanUpdate( + agentContext.plan.length, + this.flagPlanDone(agentContext.plan), + ); + break; + } + } + this.loadingStatusTip = 'Thinking'; + } catch (e) { + console.log(e); + break; + } + } + } catch (error) { + if (error instanceof DOMException && error.name === 'AbortError') { + console.log('Agent loop aborted'); + return; + } + throw error; + } + } + + private async handleUserInterrupt(aware: Aware, executor: Executor) { + this.interruptController = new AbortController(); + aware.updateSignal(this.interruptController.signal); + executor.updateSignal(this.interruptController.signal); + this.loadingStatusTip = 'Replaning'; + await this.eventManager.addLoadingStatus(this.loadingStatusTip); + this.appContext.setAgentStatusTip(this.loadingStatusTip); + } + + private getEnvironmentInfo( + appContext: AppContext, + agentContext: AgentContext, + ) { + const pendingInit = agentContext.plan.length === 0; + const currentStep = agentContext.currentStep; + const currentTask = agentContext.plan[currentStep - 1]?.title; + return `Event stream result history: ${this.eventManager.normalizeEventsForPrompt()} + +The user original input: ${appContext.request.inputText} + + ${ + pendingInit + ? 'Plan: None' + : `Plan: +${agentContext.plan.map((item) => ` - [${item.id}] ${item.title}`).join('\n')} + +Current step: ${currentStep} + +Current task: ${currentTask} +` + } + `; + } + + /** + * Get the event manager instance + */ + public getEventManager(): EventManager { + return this.eventManager; + } + + private normalizePlan(awareResult: AwareResult, agentContext: AgentContext) { + return (awareResult.plan || agentContext.plan).map((item, index) => { + // const currentTask = agentContext.plan[index]; + if (index < awareResult.step - 1) { + return { + ...item, + status: PlanTaskStatus.Done, + }; + } + + if (index === awareResult.step - 1) { + return { + ...item, + status: PlanTaskStatus.Doing, + }; + } + + return { + ...item, + status: PlanTaskStatus.Todo, + }; + }); + } + + private flagPlanDone(plan: PlanTask[]) { + return plan.map((item) => { + return { + ...item, + status: PlanTaskStatus.Done, + }; + }); + } + + private parseHistoryEvents() { + const events = extractHistoryEvents(this.appContext.chatUtils.messages); + this.appContext.setEvents(events); + return events; + } +} diff --git a/apps/omega/src/renderer/src/agent/Aware.ts b/apps/omega/src/renderer/src/agent/Aware.ts new file mode 100644 index 000000000..a452b8dfe --- /dev/null +++ b/apps/omega/src/renderer/src/agent/Aware.ts @@ -0,0 +1,245 @@ +import { Message } from '@agent-infra/shared'; +import { AgentContext } from './AgentFlow'; +import { ipcClient } from '@renderer/api'; +import { AppContext } from '@renderer/hooks/useAgentFlow'; +import { PlanTask } from '@renderer/type/agent'; +import { jsonrepair } from 'jsonrepair'; + +export interface AwareResult { + reflection: string; + step: number; + status: string; + plan?: PlanTask[]; +} + +// Note: Aware is the `Ambient World Analysis and Response Engine` for short, meaning that it is responsible for analyzing the ambient world and response the plan for the next step. +export class Aware { + constructor( + private appContext: AppContext, + private agentContext: AgentContext, + private abortSignal: AbortSignal, + ) {} + + private systemPrompt = `You are an AI agent with the ability to analyze the current environment, decide the next task status, tell user the next specific action. + + +You must call the aware_analysis tool. + +You should give the insights of current environment according to the various context information, and then decide the next task status. + +If the task is none or current step is done, you should increment the step number and update system status. Please return the json output in the tool call part: + +\`\`\`json +{ + "reflection": "[your reflection about current environment]", + "step": "[next step number]", + "status": "[next task description, a complete sentence tell user what to do next]", +} +\`\`\` + +You should output the reflection first. + +You should not output any response text and only return the tool call. + +Only when there is no existing plan in the current environment, you should return plan field with the following format: +- id: string (format: "step_XXX" where XXX is a sequential number starting from 001) +- title: string (clear, concise description of the step) + + + + + +For any given task or problem: +1. Analyze the requirements thoroughly +2. Create a systematic, step-by-step solution +3. Ensure each step is concrete and actionable +4. Maintain logical progression between steps + + + +You must follow these limitations: + +- If there is plan exist, you should not return the plan field. +- Don't ask user anything, just tell user what to do next. If some points is not very clear, you should tell user your solution. Remember, you are a agent for human. +- Don't output any response text and only return the tool call. +- You should not repeat the same behavior or mean with previous steps. + + + + + +Only except user interrupt or start a new session, you CANNOT update the plan! + +If you reset the plan to a new one, you should also reset the step to number 1. + + + + + + +In the \`status\` field, you should only return a sentence to tell user what you will do next, and don't need to return the reason and other information.Please the the first person perspective to answer, indicating that you are work for the user. + + + + + + +If in the last step, but we still have issues to solve, you cannot increment the step number and should continue to solve the issue. + + + + + +For user interrupt input in the middle of the event stream, you should handle it in the first important level and handle it as soon as possible.If current plan tasks cannot match the new user input, you should reset the plan. + + + + + +The event stream result record the complete response of the agent, you should make next decision base on the history, if current step has not been done, please don't increment the step number. If you meet the \`ended\` message, that means you entered a new session and you should reset the plan from stratch. + +In the event stream, the \`observation\` type message is the observation of the tool use, you should attention to the field and judge the task status accroding to it.When the observer represent the error message, you should reflect the error and solve it in the next step. + + + + + +After \`web_search\` called, then you must select web page from the search result, then you must see the detail of the page, call navigate to get detail. See the detail right away after get search result! + + + + + +When you want to write file, you should list allowed directories and write the file to the allowed directory. + + + + + +You should use the same language as the user input by default. + + + `; + + private awareSchema = { + type: 'object', + properties: { + step: { + type: 'number', + description: 'Next step number', + }, + status: { + type: 'string', + description: + 'Next task description, a complete sentence tell user what to do next', + }, + reflection: { + type: 'string', + description: 'Your reflection about current environment', + }, + plan: { + type: 'array', + items: { + type: 'object', + required: ['id', 'title'], + properties: { + id: { + type: 'string', + description: 'Step ID is a sequential number', + }, + title: { + type: 'string', + minLength: 1, + description: 'Clear and concise description of the step', + }, + }, + }, + }, + }, + required: ['step', 'status', 'reflection'], + } as const; + + public updateSignal(abortSignal: AbortSignal) { + this.abortSignal = abortSignal; + } + + async run() { + const environmentInfo = await this.agentContext.getEnvironmentInfo( + this.appContext, + this.agentContext, + ); + const defaultResult = { + reflection: 'No plan', + step: this.agentContext.currentStep, + status: 'No plan', + plan: [], + }; + + if (this.abortSignal.aborted) { + return defaultResult; + } + + const streamId = Math.random().toString(36).substring(7); + return new Promise(async (resolve, reject) => { + const abortHandler = () => { + ipcClient.abortRequest({ requestId: streamId }); + resolve(defaultResult); + }; + + try { + this.abortSignal.addEventListener('abort', abortHandler); + const excutorTools = await ipcClient.listTools(); + const result = await ipcClient.askLLMTool({ + messages: [ + Message.systemMessage(this.systemPrompt), + Message.systemMessage( + `You are working with excutor agent, here is the excutor tools: ${excutorTools + .map((tool) => `${tool.name}: ${tool.description}`) + .join(', ')}`, + ), + Message.userMessage(environmentInfo), + Message.userMessage( + `Please call aware_analysis tool to give me next decision.`, + ), + ], + tools: [ + { + type: 'function', + function: { + name: 'aware_analysis', + description: + 'Analyze the current environment with user input, and decide the next task status', + parameters: this.awareSchema, + }, + }, + ], + requestId: streamId, + }); + + if (!result.tool_calls?.length) { + console.warn('No tool calls returned'); + + // retry + try { + const res = JSON.parse( + jsonrepair(result.content || ''), + ) as AwareResult; + resolve(res); + } catch (e) { + throw new Error(`No tool calls returned ${result.content}`); + } + return; + } + + const awareResult = JSON.parse( + result.tool_calls.filter(Boolean)[0].function.arguments, + ) as AwareResult; + resolve(awareResult); + } catch (error) { + reject(error); + } finally { + this.abortSignal.removeEventListener('abort', abortHandler); + } + }); + } +} diff --git a/apps/omega/src/renderer/src/agent/EventManager.ts b/apps/omega/src/renderer/src/agent/EventManager.ts new file mode 100644 index 000000000..5502bee7f --- /dev/null +++ b/apps/omega/src/renderer/src/agent/EventManager.ts @@ -0,0 +1,432 @@ +import { v4 as uuidv4 } from 'uuid'; +import { + EventItem, + EventType, + EventContentDescriptor, +} from '@renderer/type/event'; +import { ActionStatus, PlanTask } from '@renderer/type/agent'; +import { normalizeToolUsedInfo } from '@renderer/utils/normalizeToolUsedInfo'; +import { getLoadingTipFromToolCall } from '@renderer/utils/getLoadingTipForToolCall'; +import { ToolCall } from '@agent-infra/shared'; +import { SNAPSHOT_BROWSER_ACTIONS } from '@renderer/constants'; + +export class EventManager { + private historyEvents: EventItem[] = []; + private events: EventItem[] = []; + private onEventsUpdate?: (events: EventItem[]) => void; + + constructor(historyEvents: EventItem[] = []) { + this.historyEvents = historyEvents; + this.events = []; + } + + /** + * Get history events + */ + public getHistoryEvents(): EventItem[] { + return this.historyEvents; + } + + /** + * Set callback function to be called whenever events are updated + */ + public setUpdateCallback(callback: (events: EventItem[]) => void): void { + this.onEventsUpdate = callback; + } + + /** + * Get all events + */ + public getAllEvents(): EventItem[] { + return [...this.events]; + } + + /** + * Add a generic event + */ + private async addEvent( + type: T, + content: EventContentDescriptor[T], + willNotifyUpdate = true, + ): Promise { + const event: EventItem = { + id: uuidv4(), + type, + content: content as EventContentDescriptor[keyof EventContentDescriptor], + timestamp: Date.now(), + }; + + this.events.push(event); + willNotifyUpdate && (await this.notifyUpdate()); + return event; + } + + /** + * Add a chat text event + */ + public async addChatText(content: string): Promise { + return this.addEvent(EventType.ChatText, content); + } + + /** + * Add a loading status event + */ + public async addLoadingStatus( + title: string, + willNotifyUpdate = true, + ): Promise { + return this.addEvent(EventType.LoadingStatus, { title }, willNotifyUpdate); + } + + /** + * Add a plan update event + */ + public async addPlanUpdate( + step: number, + plan: PlanTask[], + ): Promise { + return this.addEvent(EventType.PlanUpdate, { + plan, + step, + }); + } + + /** + * Add a new plan step event + */ + public async addNewPlanStep(step: number): Promise { + return this.addEvent(EventType.NewPlanStep, { step }); + } + + /** + * Add an agent status event + */ + public async addAgentStatus(status: string): Promise { + return this.addEvent(EventType.AgentStatus, status); + } + + /** + * Add an observation event + */ + public async addObservation(content: any): Promise { + return this.addEvent(EventType.Observation, content); + } + + /** + * Update an existing event + */ + public updateEvent(eventId: string, updates: Partial): boolean { + const eventIndex = this.events.findIndex((event) => event.id === eventId); + if (eventIndex === -1) return false; + + this.events[eventIndex] = { + ...this.events[eventIndex], + ...updates, + // Don't allow overriding id + id: this.events[eventIndex].id, + }; + + this.notifyUpdate(); + return true; + } + + /** + * Update a tool used event status + */ + public updateToolStatus(eventId: string, status: ActionStatus): boolean { + const event = this.events.find((e) => e.id === eventId); + if (!event || event.type !== EventType.ToolUsed) return false; + + const content = event.content as EventContentDescriptor[EventType.ToolUsed]; + return this.updateEvent(eventId, { + content: { ...content, status } as any, + }); + } + + /** + * Find events by type + */ + public findEventsByType(type: T): EventItem[] { + return this.events.filter((event) => event.type === type); + } + + /** + * Find the most recent event of a specific type + */ + public findLatestEventByType( + type: T, + ): EventItem | undefined { + const events = this.findEventsByType(type); + return events.length > 0 ? events[events.length - 1] : undefined; + } + + /** + * Clear all events + */ + public clearEvents(): void { + this.events = []; + this.notifyUpdate(); + } + + /** + * Notify subscribers about event updates + */ + private notifyUpdate(): void { + if (this.onEventsUpdate) { + this.onEventsUpdate(this.getAllEvents()); + } + } + + /** + * Add a user interrupt instruction event + */ + public async addUserInteruptionInput(text: string): Promise { + return this.addEvent(EventType.UserInteruption, { text }); + } + + /** + * Add an end event + */ + public async addEndEvent(message: string): Promise { + return this.addEvent(EventType.End, { message }); + } + + /** + * Add a tool call start event + */ + public async addToolCallStart( + toolName: string, + params: string, + ): Promise { + const { value, description } = getLoadingTipFromToolCall( + toolName, + params, + ActionStatus.Running, + ); + return this.addEvent(EventType.ToolCallStart, { + tool: toolName, + params, + description, + value, + }); + } + + /** + * Handle tool execution result and add related events + */ + public async handleToolExecution({ + toolName, + toolCallId, + params, + result, + isError, + }: { + toolName: string; + toolCallId: string; + params: string; + result: any; + isError: boolean; + }): Promise { + const normalizedInfo = normalizeToolUsedInfo( + toolName, + params, + isError ? ActionStatus.Failed : ActionStatus.Success, + result, + ); + + await this.addEvent(EventType.ToolUsed, { + actionId: toolCallId, + ...normalizedInfo, + }); + + await this.addObservation(JSON.stringify(result)); + } + + public async updateScreenshot(screenshotFilePath: string) { + const latestBrowserNavigateEvent = [...this.events] + .reverse() + .find( + (event) => + event.type === EventType.ToolUsed && + SNAPSHOT_BROWSER_ACTIONS.includes(event.content.tool), + ); + + if (!latestBrowserNavigateEvent) { + return; + } + + latestBrowserNavigateEvent.content = { + ...latestBrowserNavigateEvent.content, + result: [ + ...latestBrowserNavigateEvent.content.result, + { + type: 'image', + path: screenshotFilePath, + }, + ], + }; + + await this.notifyUpdate(); + } + + /** + * Add loading status for tool execution + */ + public async addToolExecutionLoading(toolCall: ToolCall): Promise { + const { description } = getLoadingTipFromToolCall( + toolCall.function.name, + toolCall.function.arguments, + ActionStatus.Running, + ); + return this.addLoadingStatus(description); + } + + public async addUserMessageEvent(message: string): Promise { + return this.addEvent(EventType.UserMessage, message); + } + + /** + * Normalize event stream for prompt context + * Limits both event count and context length + * Returns a string representation of relevant events + */ + public normalizeEventsForPrompt(): string { + // Get last 1000 events + const recentEvents = [...this.historyEvents, ...this.events] + .filter((item) => item.type !== EventType.LoadingStatus) + .slice(-1000); + const MAX_CONTEXT_LENGTH = 50 * 1024 * 4; // 50KB * 4 (assumes 4 bytes per char) + let currentContextLength = 0; + + // Process events from newest to oldest until context limit + const normalizedEvents: { + type: EventType; + content: Partial; + }[] = []; + + for (let i = recentEvents.length - 1; i >= 0; i--) { + const event = recentEvents[i]; + const normalizedEvent = this.normalizeEvent(event); + + // Estimate content length + const eventContentLength = JSON.stringify(normalizedEvent).length * 4; + + // Stop if adding this event would exceed context limit + if (currentContextLength + eventContentLength > MAX_CONTEXT_LENGTH) { + break; + } + + normalizedEvents.unshift(normalizedEvent); + currentContextLength += eventContentLength; + } + + // Convert normalized events to string format + return normalizedEvents + .map((event) => { + const { type, content } = event; + return `[${type}] ${JSON.stringify(content)}`; + }) + .join('\n'); + } + + /** + * Helper method to normalize a single event + */ + private normalizeEvent(event: EventItem): { + type: EventType; + content: Partial; + } { + const base = { + type: event.type, + content: {}, + }; + + switch (event.type) { + case EventType.ToolUsed: + const content = + event.content as EventContentDescriptor[EventType.ToolUsed]; + return { + ...base, + content: { + description: content.description, + status: content.status, + }, + }; + + case EventType.ToolCallStart: + return { + ...base, + content: { + description: ( + event.content as EventContentDescriptor[EventType.ToolCallStart] + ).description, + }, + }; + + case EventType.ChatText: + case EventType.AgentStatus: + case EventType.Observation: + return { + ...base, + content: event.content, + }; + + case EventType.NewPlanStep: + return { + ...base, + content: { + step: ( + event.content as EventContentDescriptor[EventType.NewPlanStep] + ).step, + }, + }; + + case EventType.UserInteruption: + return { + ...base, + content: { + text: ( + event.content as EventContentDescriptor[EventType.UserInteruption] + ).text, + }, + }; + + case EventType.End: + return { + ...base, + content: { + message: (event.content as EventContentDescriptor[EventType.End]) + .message, + }, + }; + + default: + return base; + } + } + + /** + * Add loading status for tool execution with custom loading message + */ + public async updateToolExecutionLoadingMessage( + _toolCall: ToolCall, + message: string, + ): Promise { + // Find the latest loading status event for this tool + const loadingEvents = this.events + .filter((e) => e.type === EventType.LoadingStatus) + .reverse(); + + const latestLoadingEvent = loadingEvents[0]; + + if (latestLoadingEvent) { + // Update the loading message + this.updateEvent(latestLoadingEvent.id, { + content: { title: message } as any, + }); + } else { + // Add a new loading status if none exists + await this.addLoadingStatus(message); + } + } +} diff --git a/apps/omega/src/renderer/src/agent/Executor/index.ts b/apps/omega/src/renderer/src/agent/Executor/index.ts new file mode 100644 index 000000000..c682df833 --- /dev/null +++ b/apps/omega/src/renderer/src/agent/Executor/index.ts @@ -0,0 +1,151 @@ +import { AppContext } from '@renderer/hooks/useAgentFlow'; +import { AgentContext } from '../AgentFlow'; +import { ipcClient } from '@renderer/api'; +import { MCPServerName, Message, ToolCall } from '@agent-infra/shared'; +import { chatMessageTool, idleTool } from './tools'; +import { CompatibilityCallToolResultSchema } from '@modelcontextprotocol/sdk/types.js'; +import { z } from 'zod'; +import { interceptToolCalls } from '@renderer/api/fileSystemInterceptor'; + +export class Executor { + constructor( + private appContext: AppContext, + private agentContext: AgentContext, + private abortSignal: AbortSignal, + ) {} + + private systemPrompt = `You are a tool use expert. You should call the appropriate tools according to the aware status and environment information.You should not output any response text and only return the JSON. + + +- Must respond with a tool use (function calling); plain text responses are forbidden +- Do not mention any specific tool names to users in messages +- Carefully verify available tools; do not fabricate non-existent tools +- Follow the instructions carefully in the aware status. +- Don't repeat the same mean with aware status, you should select the appropriate tool. +- Don't ask user anything, just tell user what you will do next.If some points is not very clear, you should tell user your solution.Don't ask user anything, remember, you are a agent for user. +- You should only respond chat message after you have finished some tools and return the summary in chat message. +- You should not output any response text and only return the tool call. + + + +message as summary in current step.Don't return message first when the step just started. + + + +If you meet the file system permission denied, you should check if the dir or file exists and create it if not. + +Before you interact with filesystem, you must list the allowed dirs and files and check if the dir or file exists and create it if not.Don't write file directly. You should write the file into a safe directory. + + + + +After \`web_search\` called, then you must select web page from the search result, then you see the detail of the page, please call browser tool to do it. + + + +use \`browser_navigate\` to enter the page detail. + +use \`browser_scroll\` to scroll the page.When you use browser to enter the page detail, if the page content is partially visible, you should call browser tool to scroll to get more content, until the page content is fully visible. +use \`browser_click\` to click the element. +use \`browser_form_input_fill\` to fill the form. +use \`browser_select\` to select the element. +use \`browser_hover\` to hover the element. +use \`browser_evaluate\` to evaluate the element. +use \`browser_get_text\` to get the text of the element. + + + +When you use commands, you must cd the allowed dir instead of cwd. + + + +You should use the same language as the user input by default. +`; + + public updateSignal(abortSignal: AbortSignal) { + this.abortSignal = abortSignal; + } + + async run(status: string) { + const environmentInfo = await this.agentContext.getEnvironmentInfo( + this.appContext, + this.agentContext, + ); + + if (this.abortSignal.aborted) { + return []; + } + + const streamId = Math.random().toString(36).substring(7); + return new Promise(async (resolve, reject) => { + const abortHandler = () => { + ipcClient.abortRequest({ requestId: streamId }); + resolve([]); + }; + + try { + this.abortSignal.addEventListener('abort', abortHandler); + const result = await ipcClient.askLLMTool({ + messages: [ + Message.systemMessage(this.systemPrompt), + Message.userMessage(environmentInfo), + Message.userMessage(`Aware status: ${status}`), + ], + tools: [idleTool, chatMessageTool], + mcpServerKeys: [ + MCPServerName.FileSystem, + MCPServerName.Commands, + MCPServerName.Browser, + ], + requestId: streamId, + }); + + const toolCalls = (result.tool_calls || []).filter(Boolean); + + // Intercept tool calls to check file permissions - this will block if permission is needed + const interceptedToolCalls = await interceptToolCalls(toolCalls); + + resolve(interceptedToolCalls); + } catch (error) { + reject(error); + } finally { + this.abortSignal.removeEventListener('abort', abortHandler); + } + }); + } + + async excuteTools(toolCalls: ToolCall[]) { + if (this.abortSignal.aborted) { + throw new DOMException('Aborted', 'AbortError'); + } + + return new Promise[]>( + async (resolve, reject) => { + const abortHandler = () => { + reject(new DOMException('Aborted', 'AbortError')); + }; + + try { + this.abortSignal.addEventListener('abort', abortHandler); + + // Intercept tool calls to check file permissions - this will block if permission is needed + const interceptedToolCalls = await interceptToolCalls(toolCalls); + + const result = await ipcClient.executeTool({ + toolCalls: interceptedToolCalls, + }); + + console.log('Execute result', JSON.stringify(result)); + if (this.abortSignal.aborted) { + throw new DOMException('Aborted', 'AbortError'); + } + resolve(result); + } catch (error) { + reject(error); + } finally { + this.abortSignal.removeEventListener('abort', abortHandler); + } + }, + ); + } +} diff --git a/apps/omega/src/renderer/src/agent/Executor/tools.ts b/apps/omega/src/renderer/src/agent/Executor/tools.ts new file mode 100644 index 000000000..e349734bb --- /dev/null +++ b/apps/omega/src/renderer/src/agent/Executor/tools.ts @@ -0,0 +1,41 @@ +import { MCPServerName } from '@agent-infra/shared'; +import type { ChatCompletionTool } from 'openai/resources/chat'; + +export enum ExecutorToolType { + FileSystem = MCPServerName.FileSystem, + Commands = MCPServerName.Commands, + Idle = 'idle', + ChatMessage = 'chat-message', +} + +export const idleTool: ChatCompletionTool = { + type: 'function', + function: { + name: ExecutorToolType.Idle, + description: + 'If you find the current task is done, and current task is the last task, then you should call this tool to indicate that you are done.', + parameters: { + type: 'object', + properties: {}, + }, + }, +}; + +export const chatMessageTool: ChatCompletionTool = { + type: 'function', + function: { + name: ExecutorToolType.ChatMessage, + description: + 'You can communicate with user by this tool. You should call this tool to output the response text to user.', + parameters: { + type: 'object', + properties: { + text: { + type: 'string', + description: 'The response text to user', + }, + }, + required: ['text'], + }, + }, +}; diff --git a/apps/omega/src/renderer/src/agent/Greeter.ts b/apps/omega/src/renderer/src/agent/Greeter.ts new file mode 100644 index 000000000..6f71d48d1 --- /dev/null +++ b/apps/omega/src/renderer/src/agent/Greeter.ts @@ -0,0 +1,78 @@ +import { MessageType } from '@vendor/chat-ui'; +import { Message } from '@agent-infra/shared'; +import { ipcClient, onMainStreamEvent } from '@renderer/api'; +import { AppContext } from '@renderer/hooks/useAgentFlow'; +import { globalEventEmitter } from '@renderer/state/chat'; + +export class Greeter { + constructor( + private appContext: AppContext, + private abortSignal: AbortSignal, + ) {} + + async run() { + try { + let greetMessage = ''; + const inputText = this.appContext.request.inputText; + + const streamId = await ipcClient.askLLMTextStream({ + messages: [ + Message.systemMessage( + `You are a friendly greeter. Your role is to understand and empathize with users first. Listen carefully to their needs, acknowledge their concerns, and provide a warm, professional response. Before diving into the solution, express your understanding and confirm your commitment to help. Keep your initial response brief and encouraging, without detailing the specific steps you'll take.Don't ask user anything, just greet them.You should be very enthusiastic and positive.Give a warm and friendly greeting to the user.In the meantime, tell the user you will be ready to help them as soon as possible, let user know you are ready to help them.Don't ask user anything.`, + ), + Message.userMessage(inputText), + ], + requestId: Math.random().toString(36).substring(7), + }); + + await new Promise((resolve) => setTimeout(resolve, 200)); + + return new Promise((resolve, reject) => { + if (this.abortSignal.aborted) { + ipcClient.abortRequest({ requestId: streamId }); + resolve(''); + return; + } + + let aborted = false; + globalEventEmitter.addListener(this.appContext.agentFlowId, (event) => { + if (event.type === 'terminate') { + ipcClient.abortRequest({ requestId: streamId }); + resolve(greetMessage); + aborted = true; + cleanup(); + } + }); + + const cleanup = onMainStreamEvent(streamId, { + onData: async (chunk: string) => { + if (aborted) { + return; + } + greetMessage += chunk; + await this.appContext.chatUtils.updateMessage( + { + type: MessageType.PlainText, + content: greetMessage, + }, + { + shouldSyncStorage: true, + }, + ); + }, + onError: (error: Error) => { + reject(error); + cleanup(); + }, + onEnd: async () => { + resolve(greetMessage); + cleanup(); + }, + }); + }); + } catch (error) { + console.log(error); + throw error; + } + } +} diff --git a/apps/omega/src/renderer/src/agent/mockEvents.ts b/apps/omega/src/renderer/src/agent/mockEvents.ts new file mode 100644 index 000000000..874c7a1ae --- /dev/null +++ b/apps/omega/src/renderer/src/agent/mockEvents.ts @@ -0,0 +1,1958 @@ +export const events = [ + { + id: '8b6b8b5d-3d5c-44b7-9abd-884b3481a618', + type: 'plan-update', + content: { + plan: [ + { + id: 'step_001', + title: '搭建Python开发环境', + status: 'doing', + }, + { + id: 'step_002', + title: '学习Python基础语法', + status: 'todo', + }, + { + id: 'step_003', + title: '掌握数据类型和变量', + status: 'todo', + }, + { + id: 'step_004', + title: '理解控制流程', + status: 'todo', + }, + { + id: 'step_005', + title: '学习函数和模块', + status: 'todo', + }, + { + id: 'step_006', + title: '了解面向对象编程', + status: 'todo', + }, + { + id: 'step_007', + title: '实践文件操作和异常处理', + status: 'todo', + }, + { + id: 'step_008', + title: '学习常用标准库', + status: 'todo', + }, + { + id: 'step_009', + title: '完成基础项目实战', + status: 'todo', + }, + { + id: 'step_010', + title: '学习高级特性和最佳实践', + status: 'todo', + }, + ], + step: 1, + }, + timestamp: 1741905924301, + }, + { + id: '594f2bfd-8d63-4fb4-a345-e792911c1e13', + type: 'agent-status', + content: '让我们从Python的基础环境搭建开始,首先需要下载并安装Python。', + timestamp: 1741905924301, + }, + { + id: '37d8d56f-0643-4601-9a83-ea378cb8013b', + type: 'tool-call-start', + content: { + tool: 'run_command', + params: '{"command":"python3 --version"}\n', + description: 'Executing run command...', + value: 'python3 --version', + }, + timestamp: 1741905927646, + }, + { + id: '736314d6-dd68-4585-ae05-1f7eb43b713a', + type: 'tool-used', + content: { + actionId: 'tooluse_E6OsJZ0SQ3y5IXSc-qcObQ', + tool: 'run_command', + params: '{"command":"python3 --version"}\n', + description: 'Using ternimal to run command', + status: 'success', + value: 'python3 --version', + result: [ + { + type: 'text', + text: 'Python 3.11.7\n', + name: 'STDOUT', + }, + ], + }, + timestamp: 1741905927895, + }, + { + id: '6b19d10d-05a7-4c0b-bd3f-0ee89f821030', + type: 'observation', + content: '[{"type":"text","text":"Python 3.11.7\\n","name":"STDOUT"}]', + timestamp: 1741905927895, + }, + { + id: '42decc81-9e5b-4ba9-bc86-c3df0f02597b', + type: 'plan-update', + content: { + plan: [ + { + id: 'step_001', + title: '搭建Python开发环境', + status: 'doing', + }, + { + id: 'step_002', + title: '学习Python基础语法', + status: 'todo', + }, + { + id: 'step_003', + title: '掌握数据类型和变量', + status: 'todo', + }, + { + id: 'step_004', + title: '理解控制流程', + status: 'todo', + }, + { + id: 'step_005', + title: '学习函数和模块', + status: 'todo', + }, + { + id: 'step_006', + title: '了解面向对象编程', + status: 'todo', + }, + { + id: 'step_007', + title: '实践文件操作和异常处理', + status: 'todo', + }, + { + id: 'step_008', + title: '学习常用标准库', + status: 'todo', + }, + { + id: 'step_009', + title: '完成基础项目实战', + status: 'todo', + }, + { + id: 'step_010', + title: '学习高级特性和最佳实践', + status: 'todo', + }, + ], + step: 1, + }, + timestamp: 1741905934566, + }, + { + id: 'e98481ba-9ef3-43c2-8f46-48f320d72972', + type: 'agent-status', + content: + '我们需要安装一个Python集成开发环境(IDE),推荐使用Visual Studio Code,这将帮助你更高效地编写Python代码。', + timestamp: 1741905934567, + }, + { + id: '51a59bd5-f033-40fc-bc5a-afca2e153478', + type: 'tool-call-start', + content: { + tool: 'run_command', + params: '{"command":"which code"}\n', + description: 'Executing run command...', + value: 'which code', + }, + timestamp: 1741905937667, + }, + { + id: '436782d2-b35a-46d0-9856-1c520da772c9', + type: 'tool-used', + content: { + actionId: 'tooluse_aW5B2ch-Qfa0RQQ0rTrqVA', + tool: 'run_command', + params: '{"command":"which code"}\n', + description: 'Using ternimal to run command', + status: 'success', + value: 'which code', + result: [ + { + type: 'text', + text: '/usr/local/bin/code\n', + name: 'STDOUT', + }, + ], + }, + timestamp: 1741905937687, + }, + { + id: '199b62db-e9bb-48fb-bbd3-527cf31bf114', + type: 'observation', + content: + '[{"type":"text","text":"/usr/local/bin/code\\n","name":"STDOUT"}]', + timestamp: 1741905937687, + }, + { + id: '9dfd8a8b-7057-4388-bdc6-3b0490a93ad1', + type: 'plan-update', + content: { + plan: [ + { + id: 'step_001', + title: '搭建Python开发环境', + status: 'done', + }, + { + id: 'step_002', + title: '学习Python基础语法', + status: 'doing', + }, + { + id: 'step_003', + title: '掌握数据类型和变量', + status: 'todo', + }, + { + id: 'step_004', + title: '理解控制流程', + status: 'todo', + }, + { + id: 'step_005', + title: '学习函数和模块', + status: 'todo', + }, + { + id: 'step_006', + title: '了解面向对象编程', + status: 'todo', + }, + { + id: 'step_007', + title: '实践文件操作和异常处理', + status: 'todo', + }, + { + id: 'step_008', + title: '学习常用标准库', + status: 'todo', + }, + { + id: 'step_009', + title: '完成基础项目实战', + status: 'todo', + }, + { + id: 'step_010', + title: '学习高级特性和最佳实践', + status: 'todo', + }, + ], + step: 2, + }, + timestamp: 1741905947799, + }, + { + id: '9a672ee7-5795-44da-b18d-9651373b2d27', + type: 'agent-status', + content: + '让我们开始学习Python的基础语法,请打开VSCode,创建一个新的Python文件,我们将从简单的print语句开始。', + timestamp: 1741905947799, + }, + { + id: '4e509776-b477-4139-b633-a02bd1c9ead8', + type: 'tool-call-start', + content: { + tool: 'list_allowed_directories', + params: 'null\n', + description: 'Executing list allowed directories...', + value: 'executing...', + }, + timestamp: 1741905950682, + }, + { + id: '523d4fae-e5e3-4e0e-a313-8a2f74aa6fb9', + type: 'tool-used', + content: { + actionId: 'tooluse_98e2uPV6Tn-VO9u0srNzdA', + tool: 'list_allowed_directories', + params: 'null\n', + description: 'Using file system to list allowed directories', + status: 'success', + value: 'done', + result: [ + { + type: 'text', + text: 'Allowed directories:\n/Users/bytedance/code/open-agent/app/temp', + }, + ], + }, + timestamp: 1741905950689, + }, + { + id: 'be71298f-7ed7-4249-84fc-b247f4c9eab7', + type: 'observation', + content: + '[{"type":"text","text":"Allowed directories:\\n/Users/bytedance/code/open-agent/app/temp"}]', + timestamp: 1741905950689, + }, + { + id: 'fe7fe97b-ae73-42d3-876b-bcd2314ab1cf', + type: 'plan-update', + content: { + plan: [ + { + id: 'step_001', + title: '搭建Python开发环境', + status: 'done', + }, + { + id: 'step_002', + title: '学习Python基础语法', + status: 'doing', + }, + { + id: 'step_003', + title: '掌握数据类型和变量', + status: 'todo', + }, + { + id: 'step_004', + title: '理解控制流程', + status: 'todo', + }, + { + id: 'step_005', + title: '学习函数和模块', + status: 'todo', + }, + { + id: 'step_006', + title: '了解面向对象编程', + status: 'todo', + }, + { + id: 'step_007', + title: '实践文件操作和异常处理', + status: 'todo', + }, + { + id: 'step_008', + title: '学习常用标准库', + status: 'todo', + }, + { + id: 'step_009', + title: '完成基础项目实战', + status: 'todo', + }, + { + id: 'step_010', + title: '学习高级特性和最佳实践', + status: 'todo', + }, + ], + step: 2, + }, + timestamp: 1741905962397, + }, + { + id: '3c4e861d-42ed-46aa-89e5-5b303336a859', + type: 'agent-status', + content: + '我将创建一个示例Python文件,向你展示Python的基本语法规则和注释的使用方法。', + timestamp: 1741905962397, + }, + { + id: '5cb3bacf-20d1-4f57-901b-0cd63d05f2ab', + type: 'tool-call-start', + content: { + tool: 'create_directory', + params: + '{"path":"/Users/bytedance/code/open-agent/app/temp/python_tutorial"}\n', + description: 'Executing create directory...', + value: '/Users/bytedance/code/open-agent/app/temp/python_tutorial', + }, + timestamp: 1741905965678, + }, + { + id: '3e2a5770-223d-46e8-8719-0e624b440b0f', + type: 'tool-used', + content: { + actionId: 'tooluse_eOHryav2RLeRikD4x0YGog', + tool: 'create_directory', + params: + '{"path":"/Users/bytedance/code/open-agent/app/temp/python_tutorial"}\n', + description: 'Using file system to create directory', + status: 'success', + value: '/Users/bytedance/code/open-agent/app/temp/python_tutorial', + result: [ + { + type: 'text', + text: 'Successfully created directory /Users/bytedance/code/open-agent/app/temp/python_tutorial', + }, + ], + }, + timestamp: 1741905965688, + }, + { + id: '83f58768-da39-4e94-b935-8df5629a8043', + type: 'observation', + content: + '[{"type":"text","text":"Successfully created directory /Users/bytedance/code/open-agent/app/temp/python_tutorial"}]', + timestamp: 1741905965688, + }, + { + id: 'da3cadda-58e7-48bf-ab5e-9f3aac08d954', + type: 'plan-update', + content: { + plan: [ + { + id: 'step_001', + title: '搭建Python开发环境', + status: 'done', + }, + { + id: 'step_002', + title: '学习Python基础语法', + status: 'doing', + }, + { + id: 'step_003', + title: '掌握数据类型和变量', + status: 'todo', + }, + { + id: 'step_004', + title: '理解控制流程', + status: 'todo', + }, + { + id: 'step_005', + title: '学习函数和模块', + status: 'todo', + }, + { + id: 'step_006', + title: '了解面向对象编程', + status: 'todo', + }, + { + id: 'step_007', + title: '实践文件操作和异常处理', + status: 'todo', + }, + { + id: 'step_008', + title: '学习常用标准库', + status: 'todo', + }, + { + id: 'step_009', + title: '完成基础项目实战', + status: 'todo', + }, + { + id: 'step_010', + title: '学习高级特性和最佳实践', + status: 'todo', + }, + ], + step: 2, + }, + timestamp: 1741905979435, + }, + { + id: '20d2e493-5c66-4b70-bd08-b1ee9910b600', + type: 'agent-status', + content: '我将创建一个基础Python示例文件来演示变量、数据类型和基本运算。', + timestamp: 1741905979435, + }, + { + id: 'ef0132ee-d07a-4daf-8130-19a8bf6afb33', + type: 'tool-call-start', + content: { + tool: 'write_file', + params: + '{"content":"# 这是一个Python基础语法示例\\n\\n# 1. 打印输出\\nprint(\\"Hello, Python!\\") # 这是一个简单的打印语句\\n\\n# 2. 变量和基本数据类型\\nname = \\"小明\\" # 字符串类型\\nage = 18 # 整数类型\\nheight = 1.75 # 浮点数类型\\nis_student = True # 布尔类型\\n\\n# 3. 基本运算\\na = 10\\nb = 3\\nprint(\\"\\\\n基本运算示例:\\")\\nprint(\\"加法:\\", a + b) # 13\\nprint(\\"减法:\\", a - b) # 7\\nprint(\\"乘法:\\", a * b) # 30\\nprint(\\"除法:\\", a / b) # 3.3333...\\nprint(\\"整除:\\", a // b) # 3\\nprint(\\"取余:\\", a % b) # 1\\nprint(\\"幂运算:\\", a ** b) # 1000\\n\\n# 4. 字符串操作\\nprint(\\"\\\\n字符串操作示例:\\")\\nfirst_name = \\"Python\\"\\nlast_name = \\"编程\\"\\nfull_name = first_name + \\" \\" + last_name # 字符串拼接\\nprint(\\"完整名称:\\", full_name)\\nprint(\\"字符串重复:\\", \\"Python\\" * 3) # 重复字符串\\n\\n# 5. 类型转换\\nnum_str = \\"100\\"\\nnum_int = int(num_str) # 字符串转整数\\nprint(\\"\\\\n类型转换:\\", num_int + 50) # 可以进行数学运算","path":"/Users/bytedance/code/open-agent/app/temp/python_tutorial/basic_syntax.py"}\n', + description: 'Executing write file...', + value: + '/Users/bytedance/code/open-agent/app/temp/python_tutorial/basic_syntax.py', + }, + timestamp: 1741905989879, + }, + { + id: '1233d723-42bc-4df4-9ab2-27338eba4f62', + type: 'tool-used', + content: { + actionId: 'tooluse_dnvzYnS3Q2CX-UiyPzwTuQ', + tool: 'write_file', + params: + '{"content":"# 这是一个Python基础语法示例\\n\\n# 1. 打印输出\\nprint(\\"Hello, Python!\\") # 这是一个简单的打印语句\\n\\n# 2. 变量和基本数据类型\\nname = \\"小明\\" # 字符串类型\\nage = 18 # 整数类型\\nheight = 1.75 # 浮点数类型\\nis_student = True # 布尔类型\\n\\n# 3. 基本运算\\na = 10\\nb = 3\\nprint(\\"\\\\n基本运算示例:\\")\\nprint(\\"加法:\\", a + b) # 13\\nprint(\\"减法:\\", a - b) # 7\\nprint(\\"乘法:\\", a * b) # 30\\nprint(\\"除法:\\", a / b) # 3.3333...\\nprint(\\"整除:\\", a // b) # 3\\nprint(\\"取余:\\", a % b) # 1\\nprint(\\"幂运算:\\", a ** b) # 1000\\n\\n# 4. 字符串操作\\nprint(\\"\\\\n字符串操作示例:\\")\\nfirst_name = \\"Python\\"\\nlast_name = \\"编程\\"\\nfull_name = first_name + \\" \\" + last_name # 字符串拼接\\nprint(\\"完整名称:\\", full_name)\\nprint(\\"字符串重复:\\", \\"Python\\" * 3) # 重复字符串\\n\\n# 5. 类型转换\\nnum_str = \\"100\\"\\nnum_int = int(num_str) # 字符串转整数\\nprint(\\"\\\\n类型转换:\\", num_int + 50) # 可以进行数学运算","path":"/Users/bytedance/code/open-agent/app/temp/python_tutorial/basic_syntax.py"}\n', + description: 'Using file system to write file', + status: 'success', + value: + '/Users/bytedance/code/open-agent/app/temp/python_tutorial/basic_syntax.py', + result: [ + { + type: 'text', + text: 'Successfully wrote to /Users/bytedance/code/open-agent/app/temp/python_tutorial/basic_syntax.py', + }, + ], + }, + timestamp: 1741905989895, + }, + { + id: '6a33a6b1-44c4-4a84-9595-f00061264a84', + type: 'observation', + content: + '[{"type":"text","text":"Successfully wrote to /Users/bytedance/code/open-agent/app/temp/python_tutorial/basic_syntax.py"}]', + timestamp: 1741905989895, + }, + { + id: '1a4a8e12-8af3-4f88-96a2-d4bde3b52283', + type: 'plan-update', + content: { + plan: [ + { + id: 'step_001', + title: '搭建Python开发环境', + status: 'done', + }, + { + id: 'step_002', + title: '学习Python基础语法', + status: 'doing', + }, + { + id: 'step_003', + title: '掌握数据类型和变量', + status: 'todo', + }, + { + id: 'step_004', + title: '理解控制流程', + status: 'todo', + }, + { + id: 'step_005', + title: '学习函数和模块', + status: 'todo', + }, + { + id: 'step_006', + title: '了解面向对象编程', + status: 'todo', + }, + { + id: 'step_007', + title: '实践文件操作和异常处理', + status: 'todo', + }, + { + id: 'step_008', + title: '学习常用标准库', + status: 'todo', + }, + { + id: 'step_009', + title: '完成基础项目实战', + status: 'todo', + }, + { + id: 'step_010', + title: '学习高级特性和最佳实践', + status: 'todo', + }, + ], + step: 2, + }, + timestamp: 1741905997226, + }, + { + id: '546e9c1c-fef0-462c-9f58-0a81099094ab', + type: 'agent-status', + content: + '让我们运行basic_syntax.py文件,查看Python基础语法的运行结果和输出。', + timestamp: 1741905997226, + }, + { + id: '49c4ef9d-d6a9-4e58-ba48-757c882c2f41', + type: 'tool-call-start', + content: { + tool: 'run_command', + params: + '{"command":"cd /Users/bytedance/code/open-agent/app/temp/python_tutorial && python basic_syntax.py"}\n', + description: 'Executing run command...', + value: + 'cd /Users/bytedance/code/open-agent/app/temp/python_tutorial && python basic_syntax.py', + }, + timestamp: 1741906000640, + }, + { + id: '38d8b4a8-3eb8-4537-bc9f-bfcbb6dbb787', + type: 'tool-used', + content: { + actionId: 'tooluse_Xr2BvdeFSN6b37CRoP1uEQ', + tool: 'run_command', + params: + '{"command":"cd /Users/bytedance/code/open-agent/app/temp/python_tutorial && python basic_syntax.py"}\n', + description: 'Using ternimal to run command', + status: 'success', + value: + 'cd /Users/bytedance/code/open-agent/app/temp/python_tutorial && python basic_syntax.py', + result: [ + { + type: 'text', + text: 'Hello, Python!\n\n基本运算示例:\n加法: 13\n减法: 7\n乘法: 30\n除法: 3.3333333333333335\n整除: 3\n取余: 1\n幂运算: 1000\n\n字符串操作示例:\n完整名称: Python 编程\n字符串重复: PythonPythonPython\n\n类型转换: 150\n', + name: 'STDOUT', + }, + ], + }, + timestamp: 1741906000875, + }, + { + id: 'e8d428bc-a2ab-498a-b0ff-3def11b20516', + type: 'observation', + content: + '[{"type":"text","text":"Hello, Python!\\n\\n基本运算示例:\\n加法: 13\\n减法: 7\\n乘法: 30\\n除法: 3.3333333333333335\\n整除: 3\\n取余: 1\\n幂运算: 1000\\n\\n字符串操作示例:\\n完整名称: Python 编程\\n字符串重复: PythonPythonPython\\n\\n类型转换: 150\\n","name":"STDOUT"}]', + timestamp: 1741906000875, + }, + { + id: 'a21f81dc-a8eb-4b74-9d03-914a6c82c607', + type: 'plan-update', + content: { + plan: [ + { + id: 'step_001', + title: '搭建Python开发环境', + status: 'done', + }, + { + id: 'step_002', + title: '学习Python基础语法', + status: 'doing', + }, + { + id: 'step_003', + title: '掌握数据类型和变量', + status: 'todo', + }, + { + id: 'step_004', + title: '理解控制流程', + status: 'todo', + }, + { + id: 'step_005', + title: '学习函数和模块', + status: 'todo', + }, + { + id: 'step_006', + title: '了解面向对象编程', + status: 'todo', + }, + { + id: 'step_007', + title: '实践文件操作和异常处理', + status: 'todo', + }, + { + id: 'step_008', + title: '学习常用标准库', + status: 'todo', + }, + { + id: 'step_009', + title: '完成基础项目实战', + status: 'todo', + }, + { + id: 'step_010', + title: '学习高级特性和最佳实践', + status: 'todo', + }, + ], + step: 2, + }, + timestamp: 1741906014694, + }, + { + id: 'ac8b6273-8cbe-4f66-a858-7e53b3290ced', + type: 'agent-status', + content: '我将创建一个新的示例文件来演示Python的比较运算符和布尔运算。', + timestamp: 1741906014694, + }, + { + id: '2bc09291-dac2-4efb-9cab-0ef0fe5d0242', + type: 'tool-call-start', + content: { + tool: 'write_file', + params: + '{"content":"# Python比较运算符和布尔运算示例\\n\\n# 比较运算符\\nx = 10\\ny = 5\\n\\nprint(\\"比较运算符示例:\\")\\nprint(f\\"{x} > {y}:\\", x > y) # 大于\\nprint(f\\"{x} < {y}:\\", x < y) # 小于\\nprint(f\\"{x} >= {y}:\\", x >= y) # 大于等于\\nprint(f\\"{x} <= {y}:\\", x <= y) # 小于等于\\nprint(f\\"{x} == {y}:\\", x == y) # 等于\\nprint(f\\"{x} != {y}:\\", x != y) # 不等于\\n\\nprint(\\"\\\\n布尔运算示例:\\")\\na = True\\nb = False\\n\\nprint(\\"a =\\", a)\\nprint(\\"b =\\", b)\\nprint(\\"a and b =\\", a and b) # 与运算\\nprint(\\"a or b =\\", a or b) # 或运算\\nprint(\\"not a =\\", not a) # 非运算\\n\\n# 复合条件示例\\nage = 25\\nhas_id = True\\n\\nprint(\\"\\\\n复合条件示例:\\")\\nprint(\\"年龄大于18且有身份证:\\", age >= 18 and has_id)\\nprint(\\"年龄小于18或没有身份证:\\", age < 18 or not has_id)","path":"/Users/bytedance/code/open-agent/app/temp/python_tutorial/comparison_operators.py"}\n', + description: 'Executing write file...', + value: + '/Users/bytedance/code/open-agent/app/temp/python_tutorial/comparison_operators.py', + }, + timestamp: 1741906025586, + }, + { + id: 'eb5e0d02-2856-4d70-859b-983eaa34ea5f', + type: 'tool-used', + content: { + actionId: 'tooluse_D3y7k_JsS7ChbrbemGTYBA', + tool: 'write_file', + params: + '{"content":"# Python比较运算符和布尔运算示例\\n\\n# 比较运算符\\nx = 10\\ny = 5\\n\\nprint(\\"比较运算符示例:\\")\\nprint(f\\"{x} > {y}:\\", x > y) # 大于\\nprint(f\\"{x} < {y}:\\", x < y) # 小于\\nprint(f\\"{x} >= {y}:\\", x >= y) # 大于等于\\nprint(f\\"{x} <= {y}:\\", x <= y) # 小于等于\\nprint(f\\"{x} == {y}:\\", x == y) # 等于\\nprint(f\\"{x} != {y}:\\", x != y) # 不等于\\n\\nprint(\\"\\\\n布尔运算示例:\\")\\na = True\\nb = False\\n\\nprint(\\"a =\\", a)\\nprint(\\"b =\\", b)\\nprint(\\"a and b =\\", a and b) # 与运算\\nprint(\\"a or b =\\", a or b) # 或运算\\nprint(\\"not a =\\", not a) # 非运算\\n\\n# 复合条件示例\\nage = 25\\nhas_id = True\\n\\nprint(\\"\\\\n复合条件示例:\\")\\nprint(\\"年龄大于18且有身份证:\\", age >= 18 and has_id)\\nprint(\\"年龄小于18或没有身份证:\\", age < 18 or not has_id)","path":"/Users/bytedance/code/open-agent/app/temp/python_tutorial/comparison_operators.py"}\n', + description: 'Using file system to write file', + status: 'success', + value: + '/Users/bytedance/code/open-agent/app/temp/python_tutorial/comparison_operators.py', + result: [ + { + type: 'text', + text: 'Successfully wrote to /Users/bytedance/code/open-agent/app/temp/python_tutorial/comparison_operators.py', + }, + ], + }, + timestamp: 1741906025595, + }, + { + id: '66cba1fa-90fe-4a8b-b2fb-d89da0fbf4f9', + type: 'observation', + content: + '[{"type":"text","text":"Successfully wrote to /Users/bytedance/code/open-agent/app/temp/python_tutorial/comparison_operators.py"}]', + timestamp: 1741906025595, + }, + { + id: '5563ded0-b831-442d-974e-6cefad864a6e', + type: 'plan-update', + content: { + plan: [ + { + id: 'step_001', + title: '搭建Python开发环境', + status: 'done', + }, + { + id: 'step_002', + title: '学习Python基础语法', + status: 'doing', + }, + { + id: 'step_003', + title: '掌握数据类型和变量', + status: 'todo', + }, + { + id: 'step_004', + title: '理解控制流程', + status: 'todo', + }, + { + id: 'step_005', + title: '学习函数和模块', + status: 'todo', + }, + { + id: 'step_006', + title: '了解面向对象编程', + status: 'todo', + }, + { + id: 'step_007', + title: '实践文件操作和异常处理', + status: 'todo', + }, + { + id: 'step_008', + title: '学习常用标准库', + status: 'todo', + }, + { + id: 'step_009', + title: '完成基础项目实战', + status: 'todo', + }, + { + id: 'step_010', + title: '学习高级特性和最佳实践', + status: 'todo', + }, + ], + step: 2, + }, + timestamp: 1741906035063, + }, + { + id: 'a30a482a-26ea-4aba-9da3-03c3f8c0aa32', + type: 'agent-status', + content: + '让我们运行comparison_operators.py文件,学习Python的比较运算符和布尔运算。', + timestamp: 1741906035063, + }, + { + id: '123d0762-e9ad-493c-9ccd-0c22331f2688', + type: 'tool-call-start', + content: { + tool: 'run_command', + params: + '{"command":"cd /Users/bytedance/code/open-agent/app/temp/python_tutorial && python3 comparison_operators.py"}\n', + description: 'Executing run command...', + value: + 'cd /Users/bytedance/code/open-agent/app/temp/python_tutorial && python3 comparison_operators.py', + }, + timestamp: 1741906038278, + }, + { + id: 'e3477776-11da-49e2-b57c-20fa466333ea', + type: 'tool-used', + content: { + actionId: 'tooluse_ZOG8qYpOTK-UqRs6C79YUA', + tool: 'run_command', + params: + '{"command":"cd /Users/bytedance/code/open-agent/app/temp/python_tutorial && python3 comparison_operators.py"}\n', + description: 'Using ternimal to run command', + status: 'success', + value: + 'cd /Users/bytedance/code/open-agent/app/temp/python_tutorial && python3 comparison_operators.py', + result: [ + { + type: 'text', + text: '比较运算符示例:\n10 > 5: True\n10 < 5: False\n10 >= 5: True\n10 <= 5: False\n10 == 5: False\n10 != 5: True\n\n布尔运算示例:\na = True\nb = False\na and b = False\na or b = True\nnot a = False\n\n复合条件示例:\n年龄大于18且有身份证: True\n年龄小于18或没有身份证: False\n', + name: 'STDOUT', + }, + ], + }, + timestamp: 1741906038347, + }, + { + id: '0106f2b7-b5a2-46f0-b356-3751ea762710', + type: 'observation', + content: + '[{"type":"text","text":"比较运算符示例:\\n10 > 5: True\\n10 < 5: False\\n10 >= 5: True\\n10 <= 5: False\\n10 == 5: False\\n10 != 5: True\\n\\n布尔运算示例:\\na = True\\nb = False\\na and b = False\\na or b = True\\nnot a = False\\n\\n复合条件示例:\\n年龄大于18且有身份证: True\\n年龄小于18或没有身份证: False\\n","name":"STDOUT"}]', + timestamp: 1741906038347, + }, + { + id: 'ffd37dff-8f49-430e-bd68-4fbcb34e1e9b', + type: 'plan-update', + content: { + plan: [ + { + id: 'step_001', + title: '搭建Python开发环境', + status: 'done', + }, + { + id: 'step_002', + title: '学习Python基础语法', + status: 'done', + }, + { + id: 'step_003', + title: '掌握数据类型和变量', + status: 'doing', + }, + { + id: 'step_004', + title: '理解控制流程', + status: 'todo', + }, + { + id: 'step_005', + title: '学习函数和模块', + status: 'todo', + }, + { + id: 'step_006', + title: '了解面向对象编程', + status: 'todo', + }, + { + id: 'step_007', + title: '实践文件操作和异常处理', + status: 'todo', + }, + { + id: 'step_008', + title: '学习常用标准库', + status: 'todo', + }, + { + id: 'step_009', + title: '完成基础项目实战', + status: 'todo', + }, + { + id: 'step_010', + title: '学习高级特性和最佳实践', + status: 'todo', + }, + ], + step: 3, + }, + timestamp: 1741906046269, + }, + { + id: 'f91a7684-f69f-4cd5-93d7-09bcda0e9f54', + type: 'agent-status', + content: + '让我们开始学习Python的数据类型和变量,我将创建一个新的示例文件来演示Python的各种数据类型。', + timestamp: 1741906046269, + }, + { + id: 'b7809ee8-9d7b-4137-8f16-033adf04d4b3', + type: 'tool-call-start', + content: { + tool: 'write_file', + params: + '{"content":"# Python 数据类型示例\\n\\n# 1. 数值类型\\n# 整数 (int)\\nage = 25\\nprint(\\"整数示例:\\", age)\\n\\n# 浮点数 (float)\\nheight = 1.75\\nprint(\\"浮点数示例:\\", height)\\n\\n# 复数 (complex)\\ncomplex_num = 3 + 4j\\nprint(\\"复数示例:\\", complex_num)\\n\\n# 2. 字符串类型 (str)\\nname = \\"Python\\"\\ndescription = \'\'\'这是一个\\n多行字符串示例\'\'\'\\nprint(\\"\\\\n字符串示例:\\")\\nprint(\\"名称:\\", name)\\nprint(\\"描述:\\", description)\\n\\n# 3. 列表类型 (list) - 可变序列\\nfruits = [\\"苹果\\", \\"香蕉\\", \\"橙子\\"]\\nprint(\\"\\\\n列表示例:\\")\\nprint(\\"水果列表:\\", fruits)\\nprint(\\"第一个水果:\\", fruits[0])\\nfruits.append(\\"葡萄\\")\\nprint(\\"添加后的水果列表:\\", fruits)\\n\\n# 4. 元组类型 (tuple) - 不可变序列\\ncoordinates = (10, 20)\\nprint(\\"\\\\n元组示例:\\")\\nprint(\\"坐标:\\", coordinates)\\nprint(\\"x坐标:\\", coordinates[0])\\n\\n# 5. 字典类型 (dict) - 键值对\\nperson = {\\n \\"name\\": \\"张三\\",\\n \\"age\\": 30,\\n \\"city\\": \\"北京\\"\\n}\\nprint(\\"\\\\n字典示例:\\")\\nprint(\\"个人信息:\\", person)\\nprint(\\"姓名:\\", person[\\"name\\"])\\n\\n# 6. 集合类型 (set) - 无序不重复元素集合\\nnumbers = {1, 2, 3, 3, 4, 4, 5}\\nprint(\\"\\\\n集合示例:\\")\\nprint(\\"数字集合(重复元素会被自动去除):\\", numbers)\\n\\n# 7. 布尔类型 (bool)\\nis_student = True\\nis_working = False\\nprint(\\"\\\\n布尔类型示例:\\")\\nprint(\\"是学生吗?\\", is_student)\\nprint(\\"在工作吗?\\", is_working)\\n\\n# 8. 类型转换示例\\nprint(\\"\\\\n类型转换示例:\\")\\nnum_str = \\"100\\"\\nnum_int = int(num_str)\\nprint(\\"字符串转整数:\\", num_int)\\nprint(\\"整数转浮点数:\\", float(num_int))\\nprint(\\"数字转字符串:\\", str(num_int))\\n\\n# 9. 变量的特性\\nprint(\\"\\\\n变量的特性:\\")\\nx = 10\\ny = x # 变量赋值\\nprint(\\"x =\\", x)\\nprint(\\"y =\\", y)\\nx = 20 # 修改x的值\\nprint(\\"修改后:\\")\\nprint(\\"x =\\", x)\\nprint(\\"y =\\", y) # y的值不会改变\\n\\n# 10. None类型\\nempty_value = None\\nprint(\\"\\\\nNone类型示例:\\")\\nprint(\\"空值:\\", empty_value)","path":"/Users/bytedance/code/open-agent/app/temp/python_tutorial/data_types.py"}\n', + description: 'Executing write file...', + value: + '/Users/bytedance/code/open-agent/app/temp/python_tutorial/data_types.py', + }, + timestamp: 1741906064958, + }, + { + id: 'f9d64090-f094-40e7-ba78-46156319cc90', + type: 'tool-used', + content: { + actionId: 'tooluse_zhr8G6zZTjmmI8Iu2OdIiQ', + tool: 'write_file', + params: + '{"content":"# Python 数据类型示例\\n\\n# 1. 数值类型\\n# 整数 (int)\\nage = 25\\nprint(\\"整数示例:\\", age)\\n\\n# 浮点数 (float)\\nheight = 1.75\\nprint(\\"浮点数示例:\\", height)\\n\\n# 复数 (complex)\\ncomplex_num = 3 + 4j\\nprint(\\"复数示例:\\", complex_num)\\n\\n# 2. 字符串类型 (str)\\nname = \\"Python\\"\\ndescription = \'\'\'这是一个\\n多行字符串示例\'\'\'\\nprint(\\"\\\\n字符串示例:\\")\\nprint(\\"名称:\\", name)\\nprint(\\"描述:\\", description)\\n\\n# 3. 列表类型 (list) - 可变序列\\nfruits = [\\"苹果\\", \\"香蕉\\", \\"橙子\\"]\\nprint(\\"\\\\n列表示例:\\")\\nprint(\\"水果列表:\\", fruits)\\nprint(\\"第一个水果:\\", fruits[0])\\nfruits.append(\\"葡萄\\")\\nprint(\\"添加后的水果列表:\\", fruits)\\n\\n# 4. 元组类型 (tuple) - 不可变序列\\ncoordinates = (10, 20)\\nprint(\\"\\\\n元组示例:\\")\\nprint(\\"坐标:\\", coordinates)\\nprint(\\"x坐标:\\", coordinates[0])\\n\\n# 5. 字典类型 (dict) - 键值对\\nperson = {\\n \\"name\\": \\"张三\\",\\n \\"age\\": 30,\\n \\"city\\": \\"北京\\"\\n}\\nprint(\\"\\\\n字典示例:\\")\\nprint(\\"个人信息:\\", person)\\nprint(\\"姓名:\\", person[\\"name\\"])\\n\\n# 6. 集合类型 (set) - 无序不重复元素集合\\nnumbers = {1, 2, 3, 3, 4, 4, 5}\\nprint(\\"\\\\n集合示例:\\")\\nprint(\\"数字集合(重复元素会被自动去除):\\", numbers)\\n\\n# 7. 布尔类型 (bool)\\nis_student = True\\nis_working = False\\nprint(\\"\\\\n布尔类型示例:\\")\\nprint(\\"是学生吗?\\", is_student)\\nprint(\\"在工作吗?\\", is_working)\\n\\n# 8. 类型转换示例\\nprint(\\"\\\\n类型转换示例:\\")\\nnum_str = \\"100\\"\\nnum_int = int(num_str)\\nprint(\\"字符串转整数:\\", num_int)\\nprint(\\"整数转浮点数:\\", float(num_int))\\nprint(\\"数字转字符串:\\", str(num_int))\\n\\n# 9. 变量的特性\\nprint(\\"\\\\n变量的特性:\\")\\nx = 10\\ny = x # 变量赋值\\nprint(\\"x =\\", x)\\nprint(\\"y =\\", y)\\nx = 20 # 修改x的值\\nprint(\\"修改后:\\")\\nprint(\\"x =\\", x)\\nprint(\\"y =\\", y) # y的值不会改变\\n\\n# 10. None类型\\nempty_value = None\\nprint(\\"\\\\nNone类型示例:\\")\\nprint(\\"空值:\\", empty_value)","path":"/Users/bytedance/code/open-agent/app/temp/python_tutorial/data_types.py"}\n', + description: 'Using file system to write file', + status: 'success', + value: + '/Users/bytedance/code/open-agent/app/temp/python_tutorial/data_types.py', + result: [ + { + type: 'text', + text: 'Successfully wrote to /Users/bytedance/code/open-agent/app/temp/python_tutorial/data_types.py', + }, + ], + }, + timestamp: 1741906064975, + }, + { + id: 'fdb6371a-2574-4846-8161-ed617af29ffe', + type: 'observation', + content: + '[{"type":"text","text":"Successfully wrote to /Users/bytedance/code/open-agent/app/temp/python_tutorial/data_types.py"}]', + timestamp: 1741906064976, + }, + { + id: 'b5004433-372e-42e2-ae94-5495c35c057d', + type: 'plan-update', + content: { + plan: [ + { + id: 'step_001', + title: '搭建Python开发环境', + status: 'done', + }, + { + id: 'step_002', + title: '学习Python基础语法', + status: 'done', + }, + { + id: 'step_003', + title: '掌握数据类型和变量', + status: 'doing', + }, + { + id: 'step_004', + title: '理解控制流程', + status: 'todo', + }, + { + id: 'step_005', + title: '学习函数和模块', + status: 'todo', + }, + { + id: 'step_006', + title: '了解面向对象编程', + status: 'todo', + }, + { + id: 'step_007', + title: '实践文件操作和异常处理', + status: 'todo', + }, + { + id: 'step_008', + title: '学习常用标准库', + status: 'todo', + }, + { + id: 'step_009', + title: '完成基础项目实战', + status: 'todo', + }, + { + id: 'step_010', + title: '学习高级特性和最佳实践', + status: 'todo', + }, + ], + step: 3, + }, + timestamp: 1741906073615, + }, + { + id: '411c3f77-eb48-445e-b353-095ca3dec436', + type: 'agent-status', + content: + '让我们运行data_types.py文件,学习Python的各种数据类型及其使用方法。', + timestamp: 1741906073615, + }, + { + id: '5b072d7b-b013-4e21-84a5-0121a70bc145', + type: 'tool-call-start', + content: { + tool: 'run_command', + params: + '{"command":"cd /Users/bytedance/code/open-agent/app/temp/python_tutorial && python data_types.py"}\n', + description: 'Executing run command...', + value: + 'cd /Users/bytedance/code/open-agent/app/temp/python_tutorial && python data_types.py', + }, + timestamp: 1741906077354, + }, + { + id: '012479e1-136c-40cd-8b43-b84569fee1e7', + type: 'tool-used', + content: { + actionId: 'tooluse_jyavuqOqQ725JIPqoBX03A', + tool: 'run_command', + params: + '{"command":"cd /Users/bytedance/code/open-agent/app/temp/python_tutorial && python data_types.py"}\n', + description: 'Using ternimal to run command', + status: 'success', + value: + 'cd /Users/bytedance/code/open-agent/app/temp/python_tutorial && python data_types.py', + result: [ + { + type: 'text', + text: "整数示例: 25\n浮点数示例: 1.75\n复数示例: (3+4j)\n\n字符串示例:\n名称: Python\n描述: 这是一个\n多行字符串示例\n\n列表示例:\n水果列表: ['苹果', '香蕉', '橙子']\n第一个水果: 苹果\n添加后的水果列表: ['苹果', '香蕉', '橙子', '葡萄']\n\n元组示例:\n坐标: (10, 20)\nx坐标: 10\n\n字典示例:\n个人信息: {'name': '张三', 'age': 30, 'city': '北京'}\n姓名: 张三\n\n集合示例:\n数字集合(重复元素会被自动去除): {1, 2, 3, 4, 5}\n\n布尔类型示例:\n是学生吗? True\n在工作吗? False\n\n类型转换示例:\n字符串转整数: 100\n整数转浮点数: 100.0\n数字转字符串: 100\n\n变量的特性:\nx = 10\ny = 10\n修改后:\nx = 20\ny = 10\n\nNone类型示例:\n空值: None\n", + name: 'STDOUT', + }, + ], + }, + timestamp: 1741906077442, + }, + { + id: 'a59fbc1a-39d0-4aa7-a6dc-d1b1f631e17b', + type: 'observation', + content: + "[{\"type\":\"text\",\"text\":\"整数示例: 25\\n浮点数示例: 1.75\\n复数示例: (3+4j)\\n\\n字符串示例:\\n名称: Python\\n描述: 这是一个\\n多行字符串示例\\n\\n列表示例:\\n水果列表: ['苹果', '香蕉', '橙子']\\n第一个水果: 苹果\\n添加后的水果列表: ['苹果', '香蕉', '橙子', '葡萄']\\n\\n元组示例:\\n坐标: (10, 20)\\nx坐标: 10\\n\\n字典示例:\\n个人信息: {'name': '张三', 'age': 30, 'city': '北京'}\\n姓名: 张三\\n\\n集合示例:\\n数字集合(重复元素会被自动去除): {1, 2, 3, 4, 5}\\n\\n布尔类型示例:\\n是学生吗? True\\n在工作吗? False\\n\\n类型转换示例:\\n字符串转整数: 100\\n整数转浮点数: 100.0\\n数字转字符串: 100\\n\\n变量的特性:\\nx = 10\\ny = 10\\n修改后:\\nx = 20\\ny = 10\\n\\nNone类型示例:\\n空值: None\\n\",\"name\":\"STDOUT\"}]", + timestamp: 1741906077442, + }, + { + id: '574273e0-2073-4c87-bc14-9fbbb4b82f0b', + type: 'plan-update', + content: { + plan: [ + { + id: 'step_001', + title: '搭建Python开发环境', + status: 'done', + }, + { + id: 'step_002', + title: '学习Python基础语法', + status: 'done', + }, + { + id: 'step_003', + title: '掌握数据类型和变量', + status: 'done', + }, + { + id: 'step_004', + title: '理解控制流程', + status: 'doing', + }, + { + id: 'step_005', + title: '学习函数和模块', + status: 'todo', + }, + { + id: 'step_006', + title: '了解面向对象编程', + status: 'todo', + }, + { + id: 'step_007', + title: '实践文件操作和异常处理', + status: 'todo', + }, + { + id: 'step_008', + title: '学习常用标准库', + status: 'todo', + }, + { + id: 'step_009', + title: '完成基础项目实战', + status: 'todo', + }, + { + id: 'step_010', + title: '学习高级特性和最佳实践', + status: 'todo', + }, + ], + step: 4, + }, + timestamp: 1741906086514, + }, + { + id: 'c76e3d36-d571-4f3c-967e-6a32c0f8dea4', + type: 'agent-status', + content: '让我创建一个新的示例文件来演示Python的条件语句(if-elif-else)。', + timestamp: 1741906086515, + }, + { + id: 'f7948054-4ea4-42f8-845b-f03c8ed53273', + type: 'tool-call-start', + content: { + tool: 'write_file', + params: + '{"content":"# Python条件语句示例\\n\\n# 简单的if语句\\nage = 18\\nif age >= 18:\\n print(\\"你已经成年了\\")\\n\\n# if-else语句\\nscore = 75\\nif score >= 60:\\n print(\\"考试及格\\")\\nelse:\\n print(\\"考试不及格\\")\\n\\n# if-elif-else语句\\ngrade = 85\\nprint(\\"\\\\n成绩等级判断:\\")\\nif grade >= 90:\\n print(\\"优秀\\")\\nelif grade >= 80:\\n print(\\"良好\\")\\nelif grade >= 60:\\n print(\\"及格\\")\\nelse:\\n print(\\"不及格\\")\\n\\n# 嵌套的if语句\\nprint(\\"\\\\n购票判断:\\")\\nage = 25\\nvip = True\\n\\nif age >= 18:\\n if vip:\\n print(\\"成人VIP票价:80元\\")\\n else:\\n print(\\"成人普通票价:100元\\")\\nelse:\\n if vip:\\n print(\\"儿童VIP票价:40元\\")\\n else:\\n print(\\"儿童普通票价:50元\\")\\n\\n# 使用and和or的复合条件\\ntemperature = 35\\nhumidity = 80\\n\\nprint(\\"\\\\n天气状况判断:\\")\\nif temperature > 30 and humidity > 60:\\n print(\\"天气闷热\\")\\nelif temperature > 30 or humidity > 60:\\n print(\\"天气不适宜\\")\\nelse:\\n print(\\"天气适宜\\")","path":"/Users/bytedance/code/open-agent/app/temp/python_tutorial/conditional_statements.py"}\n', + description: 'Executing write file...', + value: + '/Users/bytedance/code/open-agent/app/temp/python_tutorial/conditional_statements.py', + }, + timestamp: 1741906097522, + }, + { + id: 'b7bc89b8-e6ea-4e0c-a9ff-ae792ce34131', + type: 'tool-used', + content: { + actionId: 'tooluse_FSexS_elQDmkaVTswTriWA', + tool: 'write_file', + params: + '{"content":"# Python条件语句示例\\n\\n# 简单的if语句\\nage = 18\\nif age >= 18:\\n print(\\"你已经成年了\\")\\n\\n# if-else语句\\nscore = 75\\nif score >= 60:\\n print(\\"考试及格\\")\\nelse:\\n print(\\"考试不及格\\")\\n\\n# if-elif-else语句\\ngrade = 85\\nprint(\\"\\\\n成绩等级判断:\\")\\nif grade >= 90:\\n print(\\"优秀\\")\\nelif grade >= 80:\\n print(\\"良好\\")\\nelif grade >= 60:\\n print(\\"及格\\")\\nelse:\\n print(\\"不及格\\")\\n\\n# 嵌套的if语句\\nprint(\\"\\\\n购票判断:\\")\\nage = 25\\nvip = True\\n\\nif age >= 18:\\n if vip:\\n print(\\"成人VIP票价:80元\\")\\n else:\\n print(\\"成人普通票价:100元\\")\\nelse:\\n if vip:\\n print(\\"儿童VIP票价:40元\\")\\n else:\\n print(\\"儿童普通票价:50元\\")\\n\\n# 使用and和or的复合条件\\ntemperature = 35\\nhumidity = 80\\n\\nprint(\\"\\\\n天气状况判断:\\")\\nif temperature > 30 and humidity > 60:\\n print(\\"天气闷热\\")\\nelif temperature > 30 or humidity > 60:\\n print(\\"天气不适宜\\")\\nelse:\\n print(\\"天气适宜\\")","path":"/Users/bytedance/code/open-agent/app/temp/python_tutorial/conditional_statements.py"}\n', + description: 'Using file system to write file', + status: 'success', + value: + '/Users/bytedance/code/open-agent/app/temp/python_tutorial/conditional_statements.py', + result: [ + { + type: 'text', + text: 'Successfully wrote to /Users/bytedance/code/open-agent/app/temp/python_tutorial/conditional_statements.py', + }, + ], + }, + timestamp: 1741906097551, + }, + { + id: 'cb814a10-e413-4f7a-a6fd-3f01ea674351', + type: 'observation', + content: + '[{"type":"text","text":"Successfully wrote to /Users/bytedance/code/open-agent/app/temp/python_tutorial/conditional_statements.py"}]', + timestamp: 1741906097552, + }, + { + id: 'da519868-a90e-45b4-82a2-cfe4b47dc212', + type: 'plan-update', + content: { + plan: [ + { + id: 'step_001', + title: '搭建Python开发环境', + status: 'done', + }, + { + id: 'step_002', + title: '学习Python基础语法', + status: 'done', + }, + { + id: 'step_003', + title: '掌握数据类型和变量', + status: 'done', + }, + { + id: 'step_004', + title: '理解控制流程', + status: 'doing', + }, + { + id: 'step_005', + title: '学习函数和模块', + status: 'todo', + }, + { + id: 'step_006', + title: '了解面向对象编程', + status: 'todo', + }, + { + id: 'step_007', + title: '实践文件操作和异常处理', + status: 'todo', + }, + { + id: 'step_008', + title: '学习常用标准库', + status: 'todo', + }, + { + id: 'step_009', + title: '完成基础项目实战', + status: 'todo', + }, + { + id: 'step_010', + title: '学习高级特性和最佳实践', + status: 'todo', + }, + ], + step: 4, + }, + timestamp: 1741906104726, + }, + { + id: 'df12aa35-c3b5-46ee-8b77-20a384ae03a0', + type: 'agent-status', + content: + '让我们运行conditional_statements.py文件,学习Python的条件语句(if-elif-else)的使用。', + timestamp: 1741906104726, + }, + { + id: '7859decc-b4f9-4a61-894e-b2c97e6d2740', + type: 'tool-call-start', + content: { + tool: 'run_command', + params: + '{"command":"cd /Users/bytedance/code/open-agent/app/temp/python_tutorial && python conditional_statements.py"}\n', + description: 'Executing run command...', + value: + 'cd /Users/bytedance/code/open-agent/app/temp/python_tutorial && python conditional_statements.py', + }, + timestamp: 1741906108429, + }, + { + id: '87cfeee5-0d73-4c74-b8f5-e581ac151455', + type: 'tool-used', + content: { + actionId: 'tooluse_jDuvA4MERGim0tud0LiKgQ', + tool: 'run_command', + params: + '{"command":"cd /Users/bytedance/code/open-agent/app/temp/python_tutorial && python conditional_statements.py"}\n', + description: 'Using ternimal to run command', + status: 'success', + value: + 'cd /Users/bytedance/code/open-agent/app/temp/python_tutorial && python conditional_statements.py', + result: [ + { + type: 'text', + text: '你已经成年了\n考试及格\n\n成绩等级判断:\n良好\n\n购票判断:\n成人VIP票价:80元\n\n天气状况判断:\n天气闷热\n', + name: 'STDOUT', + }, + ], + }, + timestamp: 1741906108511, + }, + { + id: '0966d4c2-ddc8-4f1f-9780-c8d431258341', + type: 'observation', + content: + '[{"type":"text","text":"你已经成年了\\n考试及格\\n\\n成绩等级判断:\\n良好\\n\\n购票判断:\\n成人VIP票价:80元\\n\\n天气状况判断:\\n天气闷热\\n","name":"STDOUT"}]', + timestamp: 1741906108511, + }, + { + id: 'c1bec99f-fca3-49c4-bf57-e1960aba1c42', + type: 'plan-update', + content: { + plan: [ + { + id: 'step_001', + title: '搭建Python开发环境', + status: 'done', + }, + { + id: 'step_002', + title: '学习Python基础语法', + status: 'done', + }, + { + id: 'step_003', + title: '掌握数据类型和变量', + status: 'done', + }, + { + id: 'step_004', + title: '理解控制流程', + status: 'doing', + }, + { + id: 'step_005', + title: '学习函数和模块', + status: 'todo', + }, + { + id: 'step_006', + title: '了解面向对象编程', + status: 'todo', + }, + { + id: 'step_007', + title: '实践文件操作和异常处理', + status: 'todo', + }, + { + id: 'step_008', + title: '学习常用标准库', + status: 'todo', + }, + { + id: 'step_009', + title: '完成基础项目实战', + status: 'todo', + }, + { + id: 'step_010', + title: '学习高级特性和最佳实践', + status: 'todo', + }, + ], + step: 4, + }, + timestamp: 1741906116602, + }, + { + id: '1577a804-78e0-4e30-8f3a-66f15310abfe', + type: 'agent-status', + content: '我将创建一个新的示例文件来演示Python的循环语句(for和while)。', + timestamp: 1741906116602, + }, + { + id: 'feef991a-c50b-4641-b681-6f2e3b7be90f', + type: 'tool-call-start', + content: { + tool: 'write_file', + params: + '{"content":"# for循环示例\\nprint(\\"for循环示例:\\")\\nprint(\\"\\\\n1. 遍历数字序列:\\")\\nfor i in range(5):\\n print(f\\"计数:{i}\\")\\n\\nprint(\\"\\\\n2. 遍历列表:\\")\\nfruits = [\\"苹果\\", \\"香蕉\\", \\"橙子\\"]\\nfor fruit in fruits:\\n print(f\\"水果:{fruit}\\")\\n\\nprint(\\"\\\\n3. 遍历字符串:\\")\\nname = \\"Python\\"\\nfor char in name:\\n print(f\\"字母:{char}\\")\\n\\nprint(\\"\\\\n4. 使用enumerate遍历带索引的列表:\\")\\nfor index, fruit in enumerate(fruits):\\n print(f\\"索引 {index}: {fruit}\\")\\n\\nprint(\\"\\\\n5. break语句示例:\\")\\nfor i in range(10):\\n if i == 5:\\n print(\\"遇到5,退出循环\\")\\n break\\n print(f\\"数字:{i}\\")\\n\\nprint(\\"\\\\n6. continue语句示例:\\")\\nfor i in range(5):\\n if i == 2:\\n print(\\"跳过2\\")\\n continue\\n print(f\\"数字:{i}\\")\\n\\nprint(\\"\\\\nwhile循环示例:\\")\\nprint(\\"\\\\n1. 基本while循环:\\")\\ncount = 0\\nwhile count < 5:\\n print(f\\"计数:{count}\\")\\n count += 1\\n\\nprint(\\"\\\\n2. while循环带break:\\")\\nnumber = 0\\nwhile True:\\n print(f\\"数字:{number}\\")\\n number += 1\\n if number >= 5:\\n print(\\"达到5,退出循环\\")\\n break\\n\\nprint(\\"\\\\n3. while循环带continue:\\")\\ni = 0\\nwhile i < 5:\\n i += 1\\n if i == 3:\\n print(\\"跳过3\\")\\n continue\\n print(f\\"数字:{i}\\")\\n\\n# 嵌套循环示例\\nprint(\\"\\\\n嵌套循环示例:\\")\\nfor i in range(3):\\n for j in range(3):\\n print(f\\"({i}, {j})\\", end=\\" \\")\\n print()","path":"/Users/bytedance/code/open-agent/app/temp/python_tutorial/loops.py"}\n', + description: 'Executing write file...', + value: + '/Users/bytedance/code/open-agent/app/temp/python_tutorial/loops.py', + }, + timestamp: 1741906130155, + }, + { + id: '7f351b06-b4f2-4158-9444-b45264383361', + type: 'tool-used', + content: { + actionId: 'tooluse_L6-kJc3RSjWAi4IN1RXMEw', + tool: 'write_file', + params: + '{"content":"# for循环示例\\nprint(\\"for循环示例:\\")\\nprint(\\"\\\\n1. 遍历数字序列:\\")\\nfor i in range(5):\\n print(f\\"计数:{i}\\")\\n\\nprint(\\"\\\\n2. 遍历列表:\\")\\nfruits = [\\"苹果\\", \\"香蕉\\", \\"橙子\\"]\\nfor fruit in fruits:\\n print(f\\"水果:{fruit}\\")\\n\\nprint(\\"\\\\n3. 遍历字符串:\\")\\nname = \\"Python\\"\\nfor char in name:\\n print(f\\"字母:{char}\\")\\n\\nprint(\\"\\\\n4. 使用enumerate遍历带索引的列表:\\")\\nfor index, fruit in enumerate(fruits):\\n print(f\\"索引 {index}: {fruit}\\")\\n\\nprint(\\"\\\\n5. break语句示例:\\")\\nfor i in range(10):\\n if i == 5:\\n print(\\"遇到5,退出循环\\")\\n break\\n print(f\\"数字:{i}\\")\\n\\nprint(\\"\\\\n6. continue语句示例:\\")\\nfor i in range(5):\\n if i == 2:\\n print(\\"跳过2\\")\\n continue\\n print(f\\"数字:{i}\\")\\n\\nprint(\\"\\\\nwhile循环示例:\\")\\nprint(\\"\\\\n1. 基本while循环:\\")\\ncount = 0\\nwhile count < 5:\\n print(f\\"计数:{count}\\")\\n count += 1\\n\\nprint(\\"\\\\n2. while循环带break:\\")\\nnumber = 0\\nwhile True:\\n print(f\\"数字:{number}\\")\\n number += 1\\n if number >= 5:\\n print(\\"达到5,退出循环\\")\\n break\\n\\nprint(\\"\\\\n3. while循环带continue:\\")\\ni = 0\\nwhile i < 5:\\n i += 1\\n if i == 3:\\n print(\\"跳过3\\")\\n continue\\n print(f\\"数字:{i}\\")\\n\\n# 嵌套循环示例\\nprint(\\"\\\\n嵌套循环示例:\\")\\nfor i in range(3):\\n for j in range(3):\\n print(f\\"({i}, {j})\\", end=\\" \\")\\n print()","path":"/Users/bytedance/code/open-agent/app/temp/python_tutorial/loops.py"}\n', + description: 'Using file system to write file', + status: 'success', + value: + '/Users/bytedance/code/open-agent/app/temp/python_tutorial/loops.py', + result: [ + { + type: 'text', + text: 'Successfully wrote to /Users/bytedance/code/open-agent/app/temp/python_tutorial/loops.py', + }, + ], + }, + timestamp: 1741906130182, + }, + { + id: '14706e38-0e27-4513-8687-7bf9e9c91237', + type: 'observation', + content: + '[{"type":"text","text":"Successfully wrote to /Users/bytedance/code/open-agent/app/temp/python_tutorial/loops.py"}]', + timestamp: 1741906130182, + }, + { + id: '15464214-8665-4446-b91f-ff82aa137f65', + type: 'plan-update', + content: { + plan: [ + { + id: 'step_001', + title: '搭建Python开发环境', + status: 'done', + }, + { + id: 'step_002', + title: '学习Python基础语法', + status: 'done', + }, + { + id: 'step_003', + title: '掌握数据类型和变量', + status: 'done', + }, + { + id: 'step_004', + title: '理解控制流程', + status: 'doing', + }, + { + id: 'step_005', + title: '学习函数和模块', + status: 'todo', + }, + { + id: 'step_006', + title: '了解面向对象编程', + status: 'todo', + }, + { + id: 'step_007', + title: '实践文件操作和异常处理', + status: 'todo', + }, + { + id: 'step_008', + title: '学习常用标准库', + status: 'todo', + }, + { + id: 'step_009', + title: '完成基础项目实战', + status: 'todo', + }, + { + id: 'step_010', + title: '学习高级特性和最佳实践', + status: 'todo', + }, + ], + step: 4, + }, + timestamp: 1741906136968, + }, + { + id: '8e05df64-7b7b-4981-b4c2-54e6dce66c36', + type: 'agent-status', + content: + '让我们运行loops.py文件,学习Python的循环语句(for和while)的使用方法。', + timestamp: 1741906136969, + }, + { + id: '270f9869-1aa6-427f-a0b6-9a073ddf9897', + type: 'tool-call-start', + content: { + tool: 'run_command', + params: + '{"command":"cd /Users/bytedance/code/open-agent/app/temp/python_tutorial && python loops.py"}\n', + description: 'Executing run command...', + value: + 'cd /Users/bytedance/code/open-agent/app/temp/python_tutorial && python loops.py', + }, + timestamp: 1741906140203, + }, + { + id: 'dfc13bbf-d08e-4989-8944-df56bf06a8e5', + type: 'tool-used', + content: { + actionId: 'tooluse_sugHWo-sQpW2GX67OR8aGw', + tool: 'run_command', + params: + '{"command":"cd /Users/bytedance/code/open-agent/app/temp/python_tutorial && python loops.py"}\n', + description: 'Using ternimal to run command', + status: 'success', + value: + 'cd /Users/bytedance/code/open-agent/app/temp/python_tutorial && python loops.py', + result: [ + { + type: 'text', + text: 'for循环示例:\n\n1. 遍历数字序列:\n计数:0\n计数:1\n计数:2\n计数:3\n计数:4\n\n2. 遍历列表:\n水果:苹果\n水果:香蕉\n水果:橙子\n\n3. 遍历字符串:\n字母:P\n字母:y\n字母:t\n字母:h\n字母:o\n字母:n\n\n4. 使用enumerate遍历带索引的列表:\n索引 0: 苹果\n索引 1: 香蕉\n索引 2: 橙子\n\n5. break语句示例:\n数字:0\n数字:1\n数字:2\n数字:3\n数字:4\n遇到5,退出循环\n\n6. continue语句示例:\n数字:0\n数字:1\n跳过2\n数字:3\n数字:4\n\nwhile循环示例:\n\n1. 基本while循环:\n计数:0\n计数:1\n计数:2\n计数:3\n计数:4\n\n2. while循环带break:\n数字:0\n数字:1\n数字:2\n数字:3\n数字:4\n达到5,退出循环\n\n3. while循环带continue:\n数字:1\n数字:2\n跳过3\n数字:4\n数字:5\n\n嵌套循环示例:\n(0, 0) (0, 1) (0, 2) \n(1, 0) (1, 1) (1, 2) \n(2, 0) (2, 1) (2, 2) \n', + name: 'STDOUT', + }, + ], + }, + timestamp: 1741906140275, + }, + { + id: '3f5890bf-bd39-44f6-b77b-0bbbbb45ebe2', + type: 'observation', + content: + '[{"type":"text","text":"for循环示例:\\n\\n1. 遍历数字序列:\\n计数:0\\n计数:1\\n计数:2\\n计数:3\\n计数:4\\n\\n2. 遍历列表:\\n水果:苹果\\n水果:香蕉\\n水果:橙子\\n\\n3. 遍历字符串:\\n字母:P\\n字母:y\\n字母:t\\n字母:h\\n字母:o\\n字母:n\\n\\n4. 使用enumerate遍历带索引的列表:\\n索引 0: 苹果\\n索引 1: 香蕉\\n索引 2: 橙子\\n\\n5. break语句示例:\\n数字:0\\n数字:1\\n数字:2\\n数字:3\\n数字:4\\n遇到5,退出循环\\n\\n6. continue语句示例:\\n数字:0\\n数字:1\\n跳过2\\n数字:3\\n数字:4\\n\\nwhile循环示例:\\n\\n1. 基本while循环:\\n计数:0\\n计数:1\\n计数:2\\n计数:3\\n计数:4\\n\\n2. while循环带break:\\n数字:0\\n数字:1\\n数字:2\\n数字:3\\n数字:4\\n达到5,退出循环\\n\\n3. while循环带continue:\\n数字:1\\n数字:2\\n跳过3\\n数字:4\\n数字:5\\n\\n嵌套循环示例:\\n(0, 0) (0, 1) (0, 2) \\n(1, 0) (1, 1) (1, 2) \\n(2, 0) (2, 1) (2, 2) \\n","name":"STDOUT"}]', + timestamp: 1741906140275, + }, + { + id: '65798fe9-2afa-489c-ba94-5fb5f8a8e4f7', + type: 'plan-update', + content: { + plan: [ + { + id: 'step_001', + title: '搭建Python开发环境', + status: 'done', + }, + { + id: 'step_002', + title: '学习Python基础语法', + status: 'done', + }, + { + id: 'step_003', + title: '掌握数据类型和变量', + status: 'done', + }, + { + id: 'step_004', + title: '理解控制流程', + status: 'done', + }, + { + id: 'step_005', + title: '学习函数和模块', + status: 'doing', + }, + { + id: 'step_006', + title: '了解面向对象编程', + status: 'todo', + }, + { + id: 'step_007', + title: '实践文件操作和异常处理', + status: 'todo', + }, + { + id: 'step_008', + title: '学习常用标准库', + status: 'todo', + }, + { + id: 'step_009', + title: '完成基础项目实战', + status: 'todo', + }, + { + id: 'step_010', + title: '学习高级特性和最佳实践', + status: 'todo', + }, + ], + step: 5, + }, + timestamp: 1741906149363, + }, + { + id: 'd8ad958c-ca07-468e-835d-ca77be4047a4', + type: 'agent-status', + content: + '让我们开始学习Python的函数和模块,我将创建示例来展示如何定义和使用函数。', + timestamp: 1741906149364, + }, + { + id: 'ee4942bb-1a6e-4caf-86a7-d7b55c8f0134', + type: 'user-interuption', + content: { + text: '直接到最后一步', + }, + timestamp: 1741906163649, + }, + { + id: 'f2cca6a7-cc0c-474c-89dc-a65c40c65202', + type: 'plan-update', + content: { + plan: [ + { + id: 'step_001', + title: '搭建Python开发环境', + status: 'done', + }, + { + id: 'step_002', + title: '学习Python基础语法', + status: 'done', + }, + { + id: 'step_003', + title: '掌握数据类型和变量', + status: 'done', + }, + { + id: 'step_004', + title: '理解控制流程', + status: 'done', + }, + { + id: 'step_005', + title: '学习函数和模块', + status: 'done', + }, + { + id: 'step_006', + title: '了解面向对象编程', + status: 'done', + }, + { + id: 'step_007', + title: '实践文件操作和异常处理', + status: 'done', + }, + { + id: 'step_008', + title: '学习常用标准库', + status: 'done', + }, + { + id: 'step_009', + title: '完成基础项目实战', + status: 'done', + }, + { + id: 'step_010', + title: '学习高级特性和最佳实践', + status: 'doing', + }, + ], + step: 10, + }, + timestamp: 1741906174863, + }, + { + id: 'ed4c9281-c6a4-4809-839c-ef25819a61b1', + type: 'agent-status', + content: + '我将创建一个示例文件来展示Python的高级特性,包括装饰器、生成器、上下文管理器等内容。', + timestamp: 1741906174863, + }, + { + id: 'a19ddd1e-d82e-42f9-acfa-4644a38535bb', + type: 'tool-call-start', + content: { + tool: 'write_file', + params: + '{"content":"#!/usr/bin/env python3\\n# -*- coding: utf-8 -*-\\n\\n\\"\\"\\"\\nPython高级特性示例\\n包含:装饰器、生成器、上下文管理器、属性装饰器等\\n\\"\\"\\"\\n\\nimport time\\nfrom contextlib import contextmanager\\n\\n# 1. 装饰器示例\\ndef timing_decorator(func):\\n def wrapper(*args, **kwargs):\\n start_time = time.time()\\n result = func(*args, **kwargs)\\n end_time = time.time()\\n print(f\\"函数 {func.__name__} 执行时间: {end_time - start_time:.4f} 秒\\")\\n return result\\n return wrapper\\n\\n@timing_decorator\\ndef slow_function():\\n \\"\\"\\"示例:被装饰的慢速函数\\"\\"\\"\\n time.sleep(1)\\n return \\"函数执行完成\\"\\n\\n# 2. 生成器示例\\ndef fibonacci_generator(n):\\n \\"\\"\\"生成斐波那契数列的生成器\\"\\"\\"\\n a, b = 0, 1\\n for _ in range(n):\\n yield a\\n a, b = b, a + b\\n\\n# 3. 上下文管理器示例\\n@contextmanager\\ndef timer_context():\\n \\"\\"\\"计时器上下文管理器\\"\\"\\"\\n start = time.time()\\n yield\\n end = time.time()\\n print(f\\"代码块执行时间: {end - start:.4f} 秒\\")\\n\\n# 4. 属性装饰器示例\\nclass Temperature:\\n def __init__(self, celsius=0):\\n self._celsius = celsius\\n\\n @property\\n def celsius(self):\\n return self._celsius\\n \\n @celsius.setter\\n def celsius(self, value):\\n if value < -273.15:\\n raise ValueError(\\"温度不能低于绝对零度\\")\\n self._celsius = value\\n \\n @property\\n def fahrenheit(self):\\n return self._celsius * 9/5 + 32\\n\\nprint(\\"1. 装饰器示例:\\")\\nresult = slow_function()\\nprint(result)\\nprint()\\n\\nprint(\\"2. 生成器示例:\\")\\nprint(\\"斐波那契数列前10个数:\\")\\nfor num in fibonacci_generator(10):\\n print(num, end=\\" \\")\\nprint(\\"\\\\n\\")\\n\\nprint(\\"3. 上下文管理器示例:\\")\\nwith timer_context():\\n # 模拟一些耗时操作\\n time.sleep(0.5)\\nprint()\\n\\nprint(\\"4. 属性装饰器示例:\\")\\ntemp = Temperature(25)\\nprint(f\\"摄氏度:{temp.celsius}°C\\")\\nprint(f\\"华氏度:{temp.fahrenheit}°F\\")\\ntemp.celsius = 30\\nprint(f\\"更新后的摄氏度:{temp.celsius}°C\\")\\nprint(f\\"更新后的华氏度:{temp.fahrenheit}°F\\")\\n\\ntry:\\n temp.celsius = -300 # 尝试设置一个无效温度\\nexcept ValueError as e:\\n print(f\\"错误:{e}\\")","path":"/Users/bytedance/code/open-agent/app/temp/python_tutorial/advanced_features.py"}\n', + description: 'Executing write file...', + value: + '/Users/bytedance/code/open-agent/app/temp/python_tutorial/advanced_features.py', + }, + timestamp: 1741906192997, + }, + { + id: 'ff175ce2-c89e-48d4-801e-fff76d8b2d32', + type: 'tool-used', + content: { + actionId: 'tooluse_Bn98YAYBS0OcPOz7A5AD8Q', + tool: 'write_file', + params: + '{"content":"#!/usr/bin/env python3\\n# -*- coding: utf-8 -*-\\n\\n\\"\\"\\"\\nPython高级特性示例\\n包含:装饰器、生成器、上下文管理器、属性装饰器等\\n\\"\\"\\"\\n\\nimport time\\nfrom contextlib import contextmanager\\n\\n# 1. 装饰器示例\\ndef timing_decorator(func):\\n def wrapper(*args, **kwargs):\\n start_time = time.time()\\n result = func(*args, **kwargs)\\n end_time = time.time()\\n print(f\\"函数 {func.__name__} 执行时间: {end_time - start_time:.4f} 秒\\")\\n return result\\n return wrapper\\n\\n@timing_decorator\\ndef slow_function():\\n \\"\\"\\"示例:被装饰的慢速函数\\"\\"\\"\\n time.sleep(1)\\n return \\"函数执行完成\\"\\n\\n# 2. 生成器示例\\ndef fibonacci_generator(n):\\n \\"\\"\\"生成斐波那契数列的生成器\\"\\"\\"\\n a, b = 0, 1\\n for _ in range(n):\\n yield a\\n a, b = b, a + b\\n\\n# 3. 上下文管理器示例\\n@contextmanager\\ndef timer_context():\\n \\"\\"\\"计时器上下文管理器\\"\\"\\"\\n start = time.time()\\n yield\\n end = time.time()\\n print(f\\"代码块执行时间: {end - start:.4f} 秒\\")\\n\\n# 4. 属性装饰器示例\\nclass Temperature:\\n def __init__(self, celsius=0):\\n self._celsius = celsius\\n\\n @property\\n def celsius(self):\\n return self._celsius\\n \\n @celsius.setter\\n def celsius(self, value):\\n if value < -273.15:\\n raise ValueError(\\"温度不能低于绝对零度\\")\\n self._celsius = value\\n \\n @property\\n def fahrenheit(self):\\n return self._celsius * 9/5 + 32\\n\\nprint(\\"1. 装饰器示例:\\")\\nresult = slow_function()\\nprint(result)\\nprint()\\n\\nprint(\\"2. 生成器示例:\\")\\nprint(\\"斐波那契数列前10个数:\\")\\nfor num in fibonacci_generator(10):\\n print(num, end=\\" \\")\\nprint(\\"\\\\n\\")\\n\\nprint(\\"3. 上下文管理器示例:\\")\\nwith timer_context():\\n # 模拟一些耗时操作\\n time.sleep(0.5)\\nprint()\\n\\nprint(\\"4. 属性装饰器示例:\\")\\ntemp = Temperature(25)\\nprint(f\\"摄氏度:{temp.celsius}°C\\")\\nprint(f\\"华氏度:{temp.fahrenheit}°F\\")\\ntemp.celsius = 30\\nprint(f\\"更新后的摄氏度:{temp.celsius}°C\\")\\nprint(f\\"更新后的华氏度:{temp.fahrenheit}°F\\")\\n\\ntry:\\n temp.celsius = -300 # 尝试设置一个无效温度\\nexcept ValueError as e:\\n print(f\\"错误:{e}\\")","path":"/Users/bytedance/code/open-agent/app/temp/python_tutorial/advanced_features.py"}\n', + description: 'Using file system to write file', + status: 'success', + value: + '/Users/bytedance/code/open-agent/app/temp/python_tutorial/advanced_features.py', + result: [ + { + type: 'text', + text: 'Successfully wrote to /Users/bytedance/code/open-agent/app/temp/python_tutorial/advanced_features.py', + }, + ], + }, + timestamp: 1741906193047, + }, + { + id: 'd7648063-736e-4a07-bbad-47b2f2de17fa', + type: 'observation', + content: + '[{"type":"text","text":"Successfully wrote to /Users/bytedance/code/open-agent/app/temp/python_tutorial/advanced_features.py"}]', + timestamp: 1741906193048, + }, + { + id: '30e4b039-6c28-4b98-a2ee-3ef772ee8b9c', + type: 'plan-update', + content: { + plan: [ + { + id: 'step_001', + title: '搭建Python开发环境', + status: 'done', + }, + { + id: 'step_002', + title: '学习Python基础语法', + status: 'done', + }, + { + id: 'step_003', + title: '掌握数据类型和变量', + status: 'done', + }, + { + id: 'step_004', + title: '理解控制流程', + status: 'done', + }, + { + id: 'step_005', + title: '学习函数和模块', + status: 'done', + }, + { + id: 'step_006', + title: '了解面向对象编程', + status: 'done', + }, + { + id: 'step_007', + title: '实践文件操作和异常处理', + status: 'done', + }, + { + id: 'step_008', + title: '学习常用标准库', + status: 'done', + }, + { + id: 'step_009', + title: '完成基础项目实战', + status: 'done', + }, + { + id: 'step_010', + title: '学习高级特性和最佳实践', + status: 'doing', + }, + ], + step: 10, + }, + timestamp: 1741906199428, + }, + { + id: 'f179f65b-6a28-4713-8ea9-73968f16759c', + type: 'agent-status', + content: + '让我们运行advanced_features.py文件,学习Python的高级特性和最佳实践。', + timestamp: 1741906199428, + }, + { + id: '8dac5c5f-4404-4c89-b01a-7b5c1574b02d', + type: 'tool-call-start', + content: { + tool: 'run_command', + params: + '{"command":"cd /Users/bytedance/code/open-agent/app/temp/python_tutorial && python advanced_features.py"}\n', + description: 'Executing run command...', + value: + 'cd /Users/bytedance/code/open-agent/app/temp/python_tutorial && python advanced_features.py', + }, + timestamp: 1741906203559, + }, + { + id: 'dd496c34-93e0-40b7-a4a8-bff290920d5a', + type: 'tool-used', + content: { + actionId: 'tooluse_b_9v8no7QWueMlP6YNqv-w', + tool: 'run_command', + params: + '{"command":"cd /Users/bytedance/code/open-agent/app/temp/python_tutorial && python advanced_features.py"}\n', + description: 'Using ternimal to run command', + status: 'success', + value: + 'cd /Users/bytedance/code/open-agent/app/temp/python_tutorial && python advanced_features.py', + result: [ + { + type: 'text', + text: '1. 装饰器示例:\n函数 slow_function 执行时间: 1.0017 秒\n函数执行完成\n\n2. 生成器示例:\n斐波那契数列前10个数:\n0 1 1 2 3 5 8 13 21 34 \n\n3. 上下文管理器示例:\n代码块执行时间: 0.5051 秒\n\n4. 属性装饰器示例:\n摄氏度:25°C\n华氏度:77.0°F\n更新后的摄氏度:30°C\n更新后的华氏度:86.0°F\n错误:温度不能低于绝对零度\n', + name: 'STDOUT', + }, + ], + }, + timestamp: 1741906205169, + }, + { + id: 'f5cc4833-4201-40a7-aaa9-8cf4020a0673', + type: 'observation', + content: + '[{"type":"text","text":"1. 装饰器示例:\\n函数 slow_function 执行时间: 1.0017 秒\\n函数执行完成\\n\\n2. 生成器示例:\\n斐波那契数列前10个数:\\n0 1 1 2 3 5 8 13 21 34 \\n\\n3. 上下文管理器示例:\\n代码块执行时间: 0.5051 秒\\n\\n4. 属性装饰器示例:\\n摄氏度:25°C\\n华氏度:77.0°F\\n更新后的摄氏度:30°C\\n更新后的华氏度:86.0°F\\n错误:温度不能低于绝对零度\\n","name":"STDOUT"}]', + timestamp: 1741906205169, + }, + { + id: '31a4d9fa-d9c9-4784-a9b1-e4d8407c764e', + type: 'plan-update', + content: { + plan: [ + { + id: 'step_001', + title: '搭建Python开发环境', + status: 'done', + }, + { + id: 'step_002', + title: '学习Python基础语法', + status: 'done', + }, + { + id: 'step_003', + title: '掌握数据类型和变量', + status: 'done', + }, + { + id: 'step_004', + title: '理解控制流程', + status: 'done', + }, + { + id: 'step_005', + title: '学习函数和模块', + status: 'done', + }, + { + id: 'step_006', + title: '了解面向对象编程', + status: 'done', + }, + { + id: 'step_007', + title: '实践文件操作和异常处理', + status: 'done', + }, + { + id: 'step_008', + title: '学习常用标准库', + status: 'done', + }, + { + id: 'step_009', + title: '完成基础项目实战', + status: 'done', + }, + { + id: 'step_010', + title: '学习高级特性和最佳实践', + status: 'doing', + }, + ], + step: 10, + }, + timestamp: 1741906213931, + }, + { + id: 'ce3642cb-63ac-4287-af18-146804c4ad6d', + type: 'agent-status', + content: + '恭喜你已经完成了Python的基础学习!建议你现在可以开始一个实际的项目来运用所学知识。', + timestamp: 1741906213931, + }, + { + id: '69c990e8-2553-4723-bcfb-ba2a265508f4', + type: 'tool-call-start', + content: { + tool: 'chat-message', + params: + '{"text":"恭喜你已经完成了Python的全部基础学习!你现在已经掌握了包括基础语法、数据类型、控制流程、函数、面向对象编程,以及高级特性(如装饰器、生成器和上下文管理器)等知识。建议你接下来可以:\\n\\n1. 选择一个实际项目来练习,比如开发一个简单的网站、爬虫或数据分析应用\\n2. 深入学习Python的一些专业领域,如Web开发、数据科学或人工智能\\n3. 参与开源项目来提升实战经验\\n\\n记住,编程最重要的是实践,多写代码,多解决实际问题!"}\n', + description: 'Executing chat-message...', + value: 'executing...', + }, + timestamp: 1741906222165, + }, + { + id: 'ac49a988-e803-4ad6-8cfa-a93d4160af6c', + type: 'chat-text', + content: + '恭喜你已经完成了Python的全部基础学习!你现在已经掌握了包括基础语法、数据类型、控制流程、函数、面向对象编程,以及高级特性(如装饰器、生成器和上下文管理器)等知识。建议你接下来可以:\n\n1. 选择一个实际项目来练习,比如开发一个简单的网站、爬虫或数据分析应用\n2. 深入学习Python的一些专业领域,如Web开发、数据科学或人工智能\n3. 参与开源项目来提升实战经验\n\n记住,编程最重要的是实践,多写代码,多解决实际问题!', + timestamp: 1741906222165, + }, + { + id: '48d8c516-a73f-4ce5-ae43-544a52e3db49', + type: 'tool-call-start', + content: { + tool: 'idle', + params: 'null\n', + description: 'Executing idle...', + value: 'executing...', + }, + timestamp: 1741906222165, + }, + { + id: 'e9df1e70-5de3-4180-b77e-85ab87362900', + type: 'plan-update', + content: { + plan: [ + { + id: 'step_001', + title: '搭建Python开发环境', + status: 'done', + }, + { + id: 'step_002', + title: '学习Python基础语法', + status: 'done', + }, + { + id: 'step_003', + title: '掌握数据类型和变量', + status: 'done', + }, + { + id: 'step_004', + title: '理解控制流程', + status: 'done', + }, + { + id: 'step_005', + title: '学习函数和模块', + status: 'done', + }, + { + id: 'step_006', + title: '了解面向对象编程', + status: 'done', + }, + { + id: 'step_007', + title: '实践文件操作和异常处理', + status: 'done', + }, + { + id: 'step_008', + title: '学习常用标准库', + status: 'done', + }, + { + id: 'step_009', + title: '完成基础项目实战', + status: 'done', + }, + { + id: 'step_010', + title: '学习高级特性和最佳实践', + status: 'done', + }, + ], + step: 10, + }, + timestamp: 1741906222166, + }, + { + id: 'f65c6a4d-3bab-4246-a4b1-f45344133518', + type: 'end', + content: { + message: '> Omega Agent has finished.', + }, + timestamp: 1741906222166, + }, +]; diff --git a/apps/omega/src/renderer/src/api/fileSystemInterceptor.ts b/apps/omega/src/renderer/src/api/fileSystemInterceptor.ts new file mode 100644 index 000000000..be4cc1d58 --- /dev/null +++ b/apps/omega/src/renderer/src/api/fileSystemInterceptor.ts @@ -0,0 +1,116 @@ +import { ToolCallType } from '@renderer/type/agent'; +import { + checkPathPermission, + normalizePath, +} from '@renderer/services/filePermissionService'; +import toast from 'react-hot-toast'; +import { ToolCall } from '@agent-infra/shared'; + +// File operation tools that require path permission checks +const FILE_OPERATION_TOOLS = [ + ToolCallType.ReadFile, + ToolCallType.WriteFile, + ToolCallType.ReadMultipleFiles, + ToolCallType.EditFile, + ToolCallType.CreateDirectory, + ToolCallType.ListDirectory, + ToolCallType.DirectoryTree, + ToolCallType.MoveFile, + ToolCallType.SearchFiles, + ToolCallType.GetFileInfo, +]; + +/** + * Intercepts tool calls to check file path permissions + * @param toolCalls The tool calls to intercept + * @returns Promise resolving to the intercepted tool calls + */ +export async function interceptToolCalls( + toolCalls: ToolCall[], +): Promise { + const interceptedCalls: ToolCall[] = []; + + for (const toolCall of toolCalls) { + const toolName = toolCall.function.name as ToolCallType; + + // Skip tools that don't need path permission checks + if (!FILE_OPERATION_TOOLS.includes(toolName)) { + interceptedCalls.push(toolCall); + continue; + } + + try { + const params = JSON.parse(toolCall.function.arguments); + + // Check which paths need permission + let pathsToCheck: string[] = []; + + if ( + toolName === ToolCallType.ReadFile || + toolName === ToolCallType.WriteFile || + toolName === ToolCallType.EditFile || + toolName === ToolCallType.CreateDirectory || + toolName === ToolCallType.ListDirectory || + toolName === ToolCallType.DirectoryTree || + toolName === ToolCallType.GetFileInfo + ) { + pathsToCheck = [params.path]; + } else if (toolName === ToolCallType.ReadMultipleFiles) { + pathsToCheck = params.paths || []; + } else if (toolName === ToolCallType.MoveFile) { + pathsToCheck = [params.source, params.destination]; + } else if (toolName === ToolCallType.SearchFiles) { + pathsToCheck = [params.path]; + } + + // Check permissions for all paths - this will now block until user decides + let allPathsAllowed = true; + for (const pathToCheck of pathsToCheck) { + const allowed = await checkPathPermission(pathToCheck); + if (!allowed) { + allPathsAllowed = false; + toast.error(`Access denied to path: ${pathToCheck}`); + break; + } + } + + if (allPathsAllowed) { + // If all paths are allowed, normalize them in the tool call + const updatedParams = { ...params }; + + if ( + toolName === ToolCallType.ReadFile || + toolName === ToolCallType.WriteFile || + toolName === ToolCallType.EditFile || + toolName === ToolCallType.CreateDirectory || + toolName === ToolCallType.ListDirectory || + toolName === ToolCallType.DirectoryTree || + toolName === ToolCallType.GetFileInfo + ) { + updatedParams.path = normalizePath(params.path); + } else if (toolName === ToolCallType.ReadMultipleFiles) { + updatedParams.paths = (params.paths || []).map(normalizePath); + } else if (toolName === ToolCallType.MoveFile) { + updatedParams.source = normalizePath(params.source); + updatedParams.destination = normalizePath(params.destination); + } else if (toolName === ToolCallType.SearchFiles) { + updatedParams.path = normalizePath(params.path); + } + + // Update the tool call with normalized paths + interceptedCalls.push({ + ...toolCall, + function: { + ...toolCall.function, + arguments: JSON.stringify(updatedParams), + }, + }); + } + } catch (error) { + console.error(`Error intercepting tool call ${toolName}:`, error); + interceptedCalls.push(toolCall); + } + } + + return interceptedCalls; +} diff --git a/apps/omega/src/renderer/src/api/index.ts b/apps/omega/src/renderer/src/api/index.ts new file mode 100644 index 000000000..c2b531625 --- /dev/null +++ b/apps/omega/src/renderer/src/api/index.ts @@ -0,0 +1,29 @@ +import { createClient } from '@ui-tars/electron-ipc/renderer'; +import type { Router } from '../../../main/ipcRoutes'; + +export const ipcClient = createClient({ + ipcInvoke: window.electron.ipcRenderer.invoke, +}); + +export const onMainStreamEvent = ( + streamId: string, + handlers: { + onData: (chunk: string) => void; + onError: (error: Error) => void; + onEnd: () => void; + }, +) => { + const dataListener = (data: string) => handlers.onData(data); + const errorListener = (error: Error) => handlers.onError(error); + const endListener = () => handlers.onEnd(); + + window.api.on(`llm:stream:${streamId}:data`, dataListener); + window.api.on(`llm:stream:${streamId}:error`, errorListener); + window.api.on(`llm:stream:${streamId}:end`, endListener); + + return () => { + window.api.off(`llm:stream:${streamId}:data`, dataListener); + window.api.off(`llm:stream:${streamId}:error`, errorListener); + window.api.off(`llm:stream:${streamId}:end`, endListener); + }; +}; diff --git a/apps/omega/src/renderer/src/api/llmConfig.ts b/apps/omega/src/renderer/src/api/llmConfig.ts new file mode 100644 index 000000000..f75ae7256 --- /dev/null +++ b/apps/omega/src/renderer/src/api/llmConfig.ts @@ -0,0 +1,30 @@ +import { ipcClient } from './index'; +import { ModelSettings } from '../components/LeftSidebar/Settings/types'; +import { getLLMProviderConfig } from '../services/llmSettings'; + +/** + * Update the LLM configuration in the main process + */ +export async function updateLLMConfig( + settings: ModelSettings, +): Promise { + try { + const config = getLLMProviderConfig(settings); + return await ipcClient.updateLLMConfig(config); + } catch (error) { + console.error('Failed to update LLM configuration:', error); + return false; + } +} + +/** + * Get available LLM providers from the main process + */ +export async function getAvailableProviders(): Promise { + try { + return await ipcClient.getAvailableProviders(); + } catch (error) { + console.error('Failed to get available providers:', error); + return []; + } +} diff --git a/apps/omega/src/renderer/src/assets/Mistral.tsx b/apps/omega/src/renderer/src/assets/Mistral.tsx new file mode 100644 index 000000000..84f9f3e2b --- /dev/null +++ b/apps/omega/src/renderer/src/assets/Mistral.tsx @@ -0,0 +1,45 @@ +import React from 'react'; + +interface MistralIconProps { + className?: string; + width?: string | number; + height?: string | number; +} + +const MistralIcon: React.FC = ({ + className, + width = '1em', + height = '1em', +}) => { + return ( + + Mistral + + + + + + + ); +}; + +export default MistralIcon; diff --git a/apps/omega/src/renderer/src/assets/base.css b/apps/omega/src/renderer/src/assets/base.css new file mode 100644 index 000000000..5ed6406a3 --- /dev/null +++ b/apps/omega/src/renderer/src/assets/base.css @@ -0,0 +1,67 @@ +:root { + --ev-c-white: #ffffff; + --ev-c-white-soft: #f8f8f8; + --ev-c-white-mute: #f2f2f2; + + --ev-c-black: #1b1b1f; + --ev-c-black-soft: #222222; + --ev-c-black-mute: #282828; + + --ev-c-gray-1: #515c67; + --ev-c-gray-2: #414853; + --ev-c-gray-3: #32363f; + + --ev-c-text-1: rgba(255, 255, 245, 0.86); + --ev-c-text-2: rgba(235, 235, 245, 0.6); + --ev-c-text-3: rgba(235, 235, 245, 0.38); + + --ev-button-alt-border: transparent; + --ev-button-alt-text: var(--ev-c-text-1); + --ev-button-alt-bg: var(--ev-c-gray-3); + --ev-button-alt-hover-border: transparent; + --ev-button-alt-hover-text: var(--ev-c-text-1); + --ev-button-alt-hover-bg: var(--ev-c-gray-2); +} + +:root { + --color-background: var(--ev-c-black); + --color-background-soft: var(--ev-c-black-soft); + --color-background-mute: var(--ev-c-black-mute); + + --color-text: var(--ev-c-text-1); +} + +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + font-weight: normal; +} + +ul { + list-style: none; +} + +body { + min-height: 100vh; + color: var(--color-text); + background: var(--color-background); + line-height: 1.6; + font-family: + Inter, + -apple-system, + BlinkMacSystemFont, + 'Segoe UI', + Roboto, + Oxygen, + Ubuntu, + Cantarell, + 'Fira Sans', + 'Droid Sans', + 'Helvetica Neue', + sans-serif; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/apps/omega/src/renderer/src/assets/electron.svg b/apps/omega/src/renderer/src/assets/electron.svg new file mode 100644 index 000000000..45ef09cf4 --- /dev/null +++ b/apps/omega/src/renderer/src/assets/electron.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/apps/omega/src/renderer/src/assets/logo.png b/apps/omega/src/renderer/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6e9a3a18534b7acae5b73e24ba3336ed5bd6dd19 GIT binary patch literal 47979 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

    8peIeP{Y)n2Hb(`N*gsKP%c++M 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 b007_#yjGG + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/omega/src/renderer/src/components/AgentApp/index.tsx b/apps/omega/src/renderer/src/components/AgentApp/index.tsx new file mode 100644 index 000000000..063af6e88 --- /dev/null +++ b/apps/omega/src/renderer/src/components/AgentApp/index.tsx @@ -0,0 +1,57 @@ +import { OpenAgentChatUI } from '@renderer/components/ChatUI'; +import { showCanvasAtom } from '@renderer/state/canvas'; +import { motion, AnimatePresence } from 'framer-motion'; +import { useAtom } from 'jotai'; +import { CanvasPanel } from '../CanvasPanel'; +import { LeftSidebar } from '../LeftSidebar'; +import { Toaster } from 'react-hot-toast'; +import { isReportHtmlMode } from '@renderer/constants'; +import { FilePermissionHandler } from '../FilePermissionHandler'; +import { useFileSystemSettings } from '@renderer/hooks/useFileSystemSettings'; + +export function AgentApp() { + const [showCanvas] = useAtom(showCanvasAtom); + // Initialize file system settings + useFileSystemSettings(); + + return ( +

    + {!isReportHtmlMode ? ( +
    + +
    + ) : null} + +
    + + + + + + {showCanvas && ( + + + + )} + +
    + + +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/AgentFlowMessage/EventRenderer.tsx b/apps/omega/src/renderer/src/components/AgentFlowMessage/EventRenderer.tsx new file mode 100644 index 000000000..29443fbef --- /dev/null +++ b/apps/omega/src/renderer/src/components/AgentFlowMessage/EventRenderer.tsx @@ -0,0 +1,35 @@ +import { EventItem, EventType } from '@renderer/type/event'; +import { LoadingStatus } from './events/LoadingStatus'; +import { ToolUsed } from './events/ToolUsed'; +import { AgentStatus } from './events/AgentStatus'; +import { ChatText } from './events/ChatText'; +// import { Observation } from './events/Observation'; +import { UserInteruption } from './events/UserInteruption'; +import { AgentFlowEnd } from './events/End'; + +export function EventRenderer({ + event, + isLastEvent, +}: { + event: EventItem; + isLastEvent: boolean; +}) { + const components = { + [EventType.LoadingStatus]: LoadingStatus, + [EventType.ToolUsed]: ToolUsed, + [EventType.AgentStatus]: AgentStatus, + [EventType.ChatText]: ChatText, + // [EventType.Observation]: Observation, + [EventType.UserInteruption]: UserInteruption, + [EventType.End]: AgentFlowEnd, + }; + + const Component = components[event.type]; + if (!Component) return null; + + return ( +
    + +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/AgentFlowMessage/GroupSection.tsx b/apps/omega/src/renderer/src/components/AgentFlowMessage/GroupSection.tsx new file mode 100644 index 000000000..1aef269af --- /dev/null +++ b/apps/omega/src/renderer/src/components/AgentFlowMessage/GroupSection.tsx @@ -0,0 +1,61 @@ +import { UIGroup, UIGroupType } from '@renderer/utils/parseEvents'; +import { StepSection } from './StepSection'; +import { ChatText } from './events/ChatText'; +import { PlanTask } from '@renderer/type/agent'; +import { LoadingStatus } from './events/LoadingStatus'; +import { AgentFlowEnd } from './events/End'; +import { EventType } from '@renderer/type/event'; + +interface GroupSectionProps { + group: UIGroup; + planTasks: PlanTask[]; + stepIndex?: number; + groups: UIGroup[]; +} + +export function GroupSection({ + group, + planTasks, + stepIndex, + groups, +}: GroupSectionProps) { + if (group.type === UIGroupType.ChatText) { + return ; + } + + if (group.type === UIGroupType.Loading) { + return ; + } + + if (group.type === UIGroupType.End) { + return ; + } + + if (group.type === UIGroupType.PlanStep && stepIndex) { + const previousGroups = groups.slice(0, groups.indexOf(group)); + + const lastPlanStepGroup = [...previousGroups] + .reverse() + .find((g) => g.type === UIGroupType.PlanStep); + + const isContinuation = lastPlanStepGroup?.step === stepIndex; + const isEnded = groups.find((g) => g.type === UIGroupType.End); + const events = groups.flatMap((g) => g.events); + const currentStep = + events.find((e) => e.type === EventType.NewPlanStep) || 0; + + return ( + + ); + } + + return null; +} diff --git a/apps/omega/src/renderer/src/components/AgentFlowMessage/ProgressBar.tsx b/apps/omega/src/renderer/src/components/AgentFlowMessage/ProgressBar.tsx new file mode 100644 index 000000000..51e41bb29 --- /dev/null +++ b/apps/omega/src/renderer/src/components/AgentFlowMessage/ProgressBar.tsx @@ -0,0 +1,38 @@ +import { motion } from 'framer-motion'; +import { cn } from '@renderer/utils'; + +interface ProgressBarProps { + progress: number; + className?: string; +} + +export function ProgressBar({ progress, className }: ProgressBarProps) { + return ( +
    + {/* Glow effect */} +
    + + {/* Progress indicator */} + + {/* Main progress bar */} +
    + {/* Shine effect */} +
    +
    + + {/* Glow overlay */} +
    + +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/AgentFlowMessage/StepSection.tsx b/apps/omega/src/renderer/src/components/AgentFlowMessage/StepSection.tsx new file mode 100644 index 000000000..7a1f5bbc3 --- /dev/null +++ b/apps/omega/src/renderer/src/components/AgentFlowMessage/StepSection.tsx @@ -0,0 +1,131 @@ +import { useState } from 'react'; +import { EventItem } from '@renderer/type/event'; +import { PlanTask, PlanTaskStatus } from '@renderer/type/agent'; +import { CheckCircle, Loader2 } from 'lucide-react'; +import { HiOutlineChevronUpDown } from 'react-icons/hi2'; +import { EventRenderer } from './EventRenderer'; + +interface StepSectionProps { + step: number; + events: EventItem[]; + isCurrentStep: boolean; + planTasks: PlanTask[]; + isContinuation?: boolean; +} + +export function StepSection({ + step, + events, + isCurrentStep, + planTasks, + isContinuation = false, +}: StepSectionProps) { + const [isExpanded, setIsExpanded] = useState(true); + const stepInfo = planTasks[step - 1]; + + if (!stepInfo) { + console.error('Step info not found for step:', step); + return null; + } + + const { status, title } = stepInfo; + const isSingleTask = planTasks.length === 1; + + return ( +
    +
    !isSingleTask && setIsExpanded(!isExpanded)} + > +
    + {!isSingleTask && ( + + Step {step} + {isContinuation && ( + + + + + + Continue + + )} + + )} + {!isSingleTask && ( + + )} +
    +
    + + {title} + +
    + {status === PlanTaskStatus.Done && ( + + )} + {status === PlanTaskStatus.Doing && ( + + )} +
    +
    +
    + +
    +
    + {events.map((event, index) => ( + + ))} +
    +
    +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/AgentFlowMessage/events/AgentStatus.tsx b/apps/omega/src/renderer/src/components/AgentFlowMessage/events/AgentStatus.tsx new file mode 100644 index 000000000..ea05f6999 --- /dev/null +++ b/apps/omega/src/renderer/src/components/AgentFlowMessage/events/AgentStatus.tsx @@ -0,0 +1,12 @@ +import { MarkdownRenderer } from '@vendor/chat-ui'; +import { EventItem } from '@renderer/type/event'; + +export function AgentStatus({ event }: { event: EventItem }) { + return ( +
    +
    + +
    +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/AgentFlowMessage/events/ChatText.tsx b/apps/omega/src/renderer/src/components/AgentFlowMessage/events/ChatText.tsx new file mode 100644 index 000000000..a0fc83cf3 --- /dev/null +++ b/apps/omega/src/renderer/src/components/AgentFlowMessage/events/ChatText.tsx @@ -0,0 +1,15 @@ +import { MarkdownRenderer } from '@vendor/chat-ui'; +import { EventItem } from '@renderer/type/event'; +import { ErrorBoundary } from '@renderer/components/ErrorBoundary'; + +export function ChatText({ event }: { event: EventItem }) { + return ( +
    + {event.content}
    } + > + + +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/AgentFlowMessage/events/End.tsx b/apps/omega/src/renderer/src/components/AgentFlowMessage/events/End.tsx new file mode 100644 index 000000000..f6825f89a --- /dev/null +++ b/apps/omega/src/renderer/src/components/AgentFlowMessage/events/End.tsx @@ -0,0 +1,11 @@ +import { MarkdownRenderer } from '@vendor/chat-ui'; +import { EventItem } from '@renderer/type/event'; + +export function AgentFlowEnd({ event }: { event: EventItem }) { + const defaultEndMessage = + '> I have finished the tasks. Thank you for your time. Goodbye.'; + + return ( + + ); +} diff --git a/apps/omega/src/renderer/src/components/AgentFlowMessage/events/LoadingStatus.tsx b/apps/omega/src/renderer/src/components/AgentFlowMessage/events/LoadingStatus.tsx new file mode 100644 index 000000000..bcec92efc --- /dev/null +++ b/apps/omega/src/renderer/src/components/AgentFlowMessage/events/LoadingStatus.tsx @@ -0,0 +1,60 @@ +import { EventItem } from '@renderer/type/event'; +import { useEffect, useState } from 'react'; + +const colors = [ + 'rgb(239, 68, 68)', // red-500 + 'rgb(249, 115, 22)', // orange-500 + 'rgb(234, 179, 8)', // yellow-500 + 'rgb(34, 197, 94)', // green-500 + 'rgb(59, 130, 246)', // blue-500 + 'rgb(168, 85, 247)', // purple-500 +]; + +export function LoadingStatus({ + title, + event, +}: { + title: string; + event?: EventItem; +}) { + const [colorIndex, setColorIndex] = useState(0); + const loadingTitle = event?.content.title ?? title; + + useEffect(() => { + const interval = setInterval(() => { + setColorIndex((i) => (i + 1) % colors.length); + }, 2000); + return () => clearInterval(interval); + }, []); + + return ( +
    +
    +
    +
    +
    +
    +
    +
    +

    + {loadingTitle} +

    +
    +
    +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/AgentFlowMessage/events/Observation.tsx b/apps/omega/src/renderer/src/components/AgentFlowMessage/events/Observation.tsx new file mode 100644 index 000000000..d634a9902 --- /dev/null +++ b/apps/omega/src/renderer/src/components/AgentFlowMessage/events/Observation.tsx @@ -0,0 +1,19 @@ +import { EventItem } from '@renderer/type/event'; + +export function Observation({ event }: { event: EventItem }) { + const contentString = + typeof event.content === 'object' + ? JSON.stringify(event.content, null, 2) + : String(event.content); + + return ( +
    +

    + Observation +

    +
    +        {contentString}
    +      
    +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/AgentFlowMessage/events/ToolUsed.tsx b/apps/omega/src/renderer/src/components/AgentFlowMessage/events/ToolUsed.tsx new file mode 100644 index 000000000..aafb18d29 --- /dev/null +++ b/apps/omega/src/renderer/src/components/AgentFlowMessage/events/ToolUsed.tsx @@ -0,0 +1,130 @@ +import { EventContentDescriptor, EventItem } from '@renderer/type/event'; +import { + ActionStatus, + ToolPlatform, + toolToPlatformMap, +} from '@renderer/type/agent'; +import { FiCheck, FiX, FiLoader, FiSearch, FiGlobe } from 'react-icons/fi'; +import { + FiFolder, // FileSystem + FiTerminal, // CommandLine + FiSettings, // System + FiBox, // Default +} from 'react-icons/fi'; +import { getLoadingTipFromToolCall } from '@renderer/utils/getLoadingTipForToolCall'; +import { getFileIcon } from '@vendor/chat-ui'; +import { useAtom } from 'jotai'; +import { canvasStateManager } from '@renderer/state/canvas'; +import { CanvasType } from '@renderer/type/canvas'; +import { currentEventIdAtom } from '@renderer/state/chat'; + +const platformIcons = { + [ToolPlatform.FileSystem]: FiFolder, + [ToolPlatform.CommandLine]: FiTerminal, + [ToolPlatform.System]: FiSettings, + [ToolPlatform.Search]: FiSearch, + [ToolPlatform.Browser]: FiGlobe, + default: FiBox, +}; + +const statusIcons = { + [ActionStatus.Success]: FiCheck, + [ActionStatus.Failed]: FiX, + [ActionStatus.Running]: FiLoader, +}; + +const statusClasses = { + [ActionStatus.Success]: 'text-emerald-500 dark:text-emerald-400', + [ActionStatus.Failed]: 'text-rose-500 dark:text-rose-400', + [ActionStatus.Running]: 'text-sky-500 dark:text-sky-400 animate-spin', +}; + +export function ToolUsed({ event }: { event: EventItem }) { + const content = event.content as EventContentDescriptor['tool-used']; + const { value, description } = getLoadingTipFromToolCall( + content.tool, + content.params, + content.status, + ); + const [, setCurrentEventId] = useAtom(currentEventIdAtom); + const platform = toolToPlatformMap[content.tool] || ToolPlatform.System; + const PlatformIcon = platformIcons[platform] || platformIcons.default; + const StatusIcon = statusIcons[content.status]; + const [, updateCanvasState] = useAtom(canvasStateManager.updateState); + const getSymbolIcon = () => { + if (platform === ToolPlatform.FileSystem && content.tool.includes('file')) { + // Pass on the file path to getFileIcon + // Display the file icon according to the file extension + return getFileIcon(value); + } + + // For other platforms, return the platform icon + return ( + + ); + }; + + const handleClick = () => { + updateCanvasState({ + isVisible: true, + dataSource: { + type: CanvasType.EventPlayer, + data: {}, + }, + }); + setCurrentEventId(event.id); + }; + + return ( +
    +
    + {/* Platform Icon */} +
    + {platform === ToolPlatform.FileSystem ? ( +
    + {getSymbolIcon()} +
    + ) : ( + + )} +
    + + {/* Content */} +
    +
    + {description} +
    +
    + {value} +
    +
    + + {/* Status Icon */} +
    + +
    +
    + + {/* Hover Effect Overlay */} +
    +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/AgentFlowMessage/events/UserInteruption.tsx b/apps/omega/src/renderer/src/components/AgentFlowMessage/events/UserInteruption.tsx new file mode 100644 index 000000000..9382a1474 --- /dev/null +++ b/apps/omega/src/renderer/src/components/AgentFlowMessage/events/UserInteruption.tsx @@ -0,0 +1,89 @@ +import { motion } from 'framer-motion'; +import { EventItem } from '@renderer/type/event'; +import { AlertCircle, Clock } from 'lucide-react'; +import dayjs from 'dayjs'; +import relativeTime from 'dayjs/plugin/relativeTime'; + +dayjs.extend(relativeTime); + +export function UserInteruption({ + event, + isLastEvent, +}: { + event: EventItem; + isLastEvent: boolean; +}) { + const timestamp = dayjs(event.timestamp); + + return ( + +
    + {/* Glow Effect */} +
    + + {/* Content Container */} +
    + {/* Header */} +
    +
    +
    + +
    +
    + User Interruption Detected +
    +
    + +
    + + + {timestamp.fromNow()} + +
    +
    + + {/* Message */} +
    +
    + {(event.content as any).text} +
    + + {/* Tech Pattern Background */} +
    +
    +
    +
    +
    +
    +
    + + ); +} diff --git a/apps/omega/src/renderer/src/components/AgentFlowMessage/icons.tsx b/apps/omega/src/renderer/src/components/AgentFlowMessage/icons.tsx new file mode 100644 index 000000000..a30b4d780 --- /dev/null +++ b/apps/omega/src/renderer/src/components/AgentFlowMessage/icons.tsx @@ -0,0 +1,12 @@ +import { FileEdit, Search, Code, Terminal, Globe, Image } from 'lucide-react'; + +export const toolIcons = { + file: FileEdit, + editor: FileEdit, + search: Search, + code: Code, + terminal: Terminal, + browser: Globe, + image: Image, + default: Code, +}; diff --git a/apps/omega/src/renderer/src/components/AgentFlowMessage/index.tsx b/apps/omega/src/renderer/src/components/AgentFlowMessage/index.tsx new file mode 100644 index 000000000..92f1a78e6 --- /dev/null +++ b/apps/omega/src/renderer/src/components/AgentFlowMessage/index.tsx @@ -0,0 +1,37 @@ +import { MessageItem, OmegaAgentData } from '@renderer/type/chatMessage'; +import { extractEventStreamUIMeta, UIGroupType } from '../../utils/parseEvents'; +import { GroupSection } from './GroupSection'; + +export function AgentFlowMessage({ message }: { message: MessageItem }) { + const flowDataEvents = (message.content as OmegaAgentData).events || []; + const meta = extractEventStreamUIMeta(flowDataEvents); + + if (flowDataEvents.length === 0) { + return ( +
    + No events to display +
    + ); + } + + return ( +
    +
    + {meta.eventGroups.map((group, index) => { + const currentStepIndex = + group.type === UIGroupType.PlanStep ? group.step : undefined; + + return ( + + ); + })} +
    +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/PlayerControls.tsx b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/PlayerControls.tsx new file mode 100644 index 000000000..ad19a8698 --- /dev/null +++ b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/PlayerControls.tsx @@ -0,0 +1,101 @@ +import { useCallback, useState } from 'react'; +import { FiSkipBack, FiSkipForward } from 'react-icons/fi'; + +interface PlayerControlsProps { + currentTime: number; + startTime: number; + endTime: number; + onPrevious: () => void; + onNext: () => void; + onSeek: (timestamp: number) => void; +} + +export function PlayerControls({ + currentTime, + startTime, + endTime, + onPrevious, + onNext, + onSeek, +}: PlayerControlsProps) { + const [hoverTime, setHoverTime] = useState(null); + + const formatTime = useCallback( + (timestamp: number) => { + const duration = Math.floor((timestamp - startTime) / 1000); // 转换为秒 + const minutes = Math.floor(duration / 60); + const seconds = duration % 60; + return `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`; + }, + [startTime], + ); + + const progress = ((currentTime - startTime) / (endTime - startTime)) * 100; + + const handleSeek = (value: number) => { + const timestamp = startTime + ((endTime - startTime) * value) / 100; + onSeek(timestamp); + }; + + const handleMouseMove = (e: React.MouseEvent) => { + const rect = e.currentTarget.getBoundingClientRect(); + const percentage = (e.clientX - rect.left) / rect.width; + const timestamp = startTime + (endTime - startTime) * percentage; + setHoverTime(timestamp); + }; + + return ( +
    +
    + + +
    + +
    + + 00:00 + +
    setHoverTime(null)} + > + handleSeek(Number(e.target.value))} + className="w-full h-1 bg-gray-200 dark:bg-gray-700 rounded-full appearance-none cursor-pointer" + style={{ + marginTop: '2px', // 微调垂直位置 + }} + /> + {hoverTime && ( +
    + {formatTime(hoverTime)} +
    + )} +
    + + {formatTime(endTime)} + +
    +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/index.tsx b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/index.tsx new file mode 100644 index 000000000..075e484ce --- /dev/null +++ b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/index.tsx @@ -0,0 +1,210 @@ +import { useAtom } from 'jotai'; +import { + FiX, + FiMonitor, + FiCheck, + FiLoader, + FiAlertCircle, + FiInbox, +} from 'react-icons/fi'; +import { showCanvasAtom, canvasDataSourceAtom } from '@renderer/state/canvas'; +import { + currentEventIdAtom, + eventsAtom, + planTasksAtom, +} from '@renderer/state/chat'; +import { PlayerControls } from './PlayerControls'; +import { ActionStatus } from '@renderer/type/agent'; +import { useCallback, useEffect, useMemo, useState } from 'react'; +import { + EventContentDescriptor, + EventItem, + EventType, +} from '@renderer/type/event'; +import { renderPlatformPanel } from './renderPlatformPanel'; + +const StatusIcon = ({ status }: { status: ActionStatus }) => { + switch (status) { + case ActionStatus.Success: + return ; + case ActionStatus.Running: + return ; + case ActionStatus.Failed: + return ; + default: + return null; + } +}; + +export function EventPlayer() { + const [, setShowCanvas] = useAtom(showCanvasAtom); + const [dataSource] = useAtom(canvasDataSourceAtom); + const [events] = useAtom(eventsAtom); + const [currentEvent, setCurrentEvent] = useState(); + const [, setPlanTasks] = useAtom(planTasksAtom); + const [eventId] = useAtom(currentEventIdAtom); + + const toolEvents = useMemo(() => { + return events + .filter((event) => event.type === EventType.ToolUsed) + .sort((a, b) => a.timestamp - b.timestamp); + }, [events]); + + const timeRange = useMemo(() => { + if (toolEvents.length === 0) return { start: Date.now(), end: Date.now() }; + return { + start: toolEvents[0].timestamp, + end: toolEvents[toolEvents.length - 1].timestamp, + }; + }, [toolEvents]); + + const findEventByTimestamp = useCallback( + (timestamp: number) => { + return toolEvents.reduce( + (prev, curr) => { + if (!prev) return curr; + return Math.abs(curr.timestamp - timestamp) < + Math.abs(prev.timestamp - timestamp) + ? curr + : prev; + }, + undefined as EventItem | undefined, + ); + }, + [toolEvents], + ); + + const handlePrevious = useCallback(() => { + if (!currentEvent || toolEvents.length === 0) return; + const currentIndex = toolEvents.findIndex((e) => e.id === currentEvent.id); + if (currentIndex > 0) { + setCurrentEvent(toolEvents[currentIndex - 1]); + } + }, [currentEvent, toolEvents]); + + const handleNext = useCallback(() => { + if (!currentEvent || toolEvents.length === 0) return; + const currentIndex = toolEvents.findIndex((e) => e.id === currentEvent.id); + if (currentIndex < toolEvents.length - 1) { + setCurrentEvent(toolEvents[currentIndex + 1]); + } + }, [currentEvent, toolEvents]); + + const handleSeek = useCallback( + (timestamp: number) => { + const event = findEventByTimestamp(timestamp); + const currentEventIndex = toolEvents.findIndex((e) => e.id === event?.id); + const lastPlanUpdateEvent = toolEvents + .slice(0, currentEventIndex) + .reverse() + .find((e) => e.type === EventType.PlanUpdate); + setPlanTasks(lastPlanUpdateEvent?.content?.planTasks || []); + setCurrentEvent(event); + }, + [findEventByTimestamp], + ); + + useEffect(() => { + const event = toolEvents.find((item) => item.id === eventId); + setCurrentEvent(event || toolEvents[0]); + }, [dataSource, toolEvents]); + + const eventData = + currentEvent?.content as EventContentDescriptor['tool-used']; + + const renderContent = () => { + if (!currentEvent || toolEvents.length === 0) { + return ( +
    +
    + +

    + No events to display +

    +

    + Please select an event to view its details and execution progress +

    +
    +
    + ); + } + + return ( +
    +
    +
    +

    + {eventData?.tool} +

    + + {eventData?.value} + +
    + {eventData?.status && ( + + )} +
    +
    + {currentEvent && renderPlatformPanel({ event: currentEvent })} +
    +
    + ); + }; + + return ( +
    + {/* Header */} +
    +

    + My Computer +

    + +
    + + {/* Tool Info */} +
    + + + {eventData?.description || 'Tool execution details'} + +
    + + {/* Main Content Area */} +
    {renderContent()}
    + + {/* Player Controls */} +
    + +
    + + {/* Progress Bar */} + {/*
    +
    +
    +
    +
    */} +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/BrowserPanel/IconMapping.tsx b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/BrowserPanel/IconMapping.tsx new file mode 100644 index 000000000..28d8170b5 --- /dev/null +++ b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/BrowserPanel/IconMapping.tsx @@ -0,0 +1,40 @@ +import { ToolCallType } from '@renderer/type/agent'; +import { + FiGlobe, + FiCamera, + FiMousePointer, + FiType, + FiList, + FiCode, + FiArrowDown, + FiColumns, +} from 'react-icons/fi'; + +export function getIconForTool(tool: ToolCallType) { + switch (tool) { + case ToolCallType.BrowserNavigate: + return ; + case ToolCallType.BrowserScreenshot: + return ; + case ToolCallType.BrowserClick: + case ToolCallType.BrowserHover: + return ; + case ToolCallType.BrowserFormInputFill: + case ToolCallType.BrowserSelect: + return ; + case ToolCallType.BrowserGetHtml: + case ToolCallType.BrowserGetText: + case ToolCallType.BrowserReadLinks: + return ; + case ToolCallType.BrowserEvaluate: + return ; + case ToolCallType.BrowserScroll: + return ; // 替换 FiScroll + case ToolCallType.BrowserNewTab: + case ToolCallType.BrowserCloseTab: + case ToolCallType.BrowserSwitchTab: + return ; + default: + return ; + } +} diff --git a/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/BrowserPanel/components/DefaultContent.tsx b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/BrowserPanel/components/DefaultContent.tsx new file mode 100644 index 000000000..90f6c0170 --- /dev/null +++ b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/BrowserPanel/components/DefaultContent.tsx @@ -0,0 +1,39 @@ +import { ContentProps } from '../types'; +import { getIconForTool } from '../IconMapping'; + +export function DefaultContent({ tool, result }: ContentProps) { + const getScreenshotPath = () => { + if (Array.isArray(result)) { + const screenshot = result.find((item) => item.type === 'image'); + return screenshot?.path + ? `file://${screenshot.path}` + : screenshot?.content; + } + return null; + }; + + const screenshotPath = getScreenshotPath(); + return ( +
    +
    +
    + {getIconForTool(tool)} +

    + {String(tool) + .replace(/^browser_/, '') + .replace(/_/g, ' ')} +

    +
    + {screenshotPath && ( +
    + Screenshot +
    + )} +
    +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/BrowserPanel/components/LinksContent.tsx b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/BrowserPanel/components/LinksContent.tsx new file mode 100644 index 000000000..557b304d7 --- /dev/null +++ b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/BrowserPanel/components/LinksContent.tsx @@ -0,0 +1,32 @@ +import { FiGlobe } from 'react-icons/fi'; +import { ContentProps } from '../types'; +import { DefaultTip } from '../../DefaultTip'; + +export function LinksContent({ result }: ContentProps) { + if (!Array.isArray(result)) { + return ; + } + + return ( +
    +
    + {result.map((link, index) => ( + + ))} +
    +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/BrowserPanel/components/ScreenshotContent.tsx b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/BrowserPanel/components/ScreenshotContent.tsx new file mode 100644 index 000000000..f343f6af1 --- /dev/null +++ b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/BrowserPanel/components/ScreenshotContent.tsx @@ -0,0 +1,22 @@ +import { ContentProps } from '../types'; +import { DefaultTip } from '../../DefaultTip'; + +export function ScreenshotContent({ params, result }: ContentProps) { + if (!result) { + return ; + } + + return ( +
    + Screenshot +
    + Screenshot: {params.name} + {params.selector && ({params.selector})} +
    +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/BrowserPanel/components/TextContent.tsx b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/BrowserPanel/components/TextContent.tsx new file mode 100644 index 000000000..2b5215b3c --- /dev/null +++ b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/BrowserPanel/components/TextContent.tsx @@ -0,0 +1,21 @@ +import { ContentProps } from '../types'; +import { MonacoEditor } from '@renderer/components/MonacoEditor'; + +export function TextContent({ result }: ContentProps) { + const content = + result + ?.map((item: { type: string; text: string }) => item.text) + .join('\n') || ''; + + return ( +
    + {content ? ( + + ) : ( +
    + Loading content... +
    + )} +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/BrowserPanel/index.tsx b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/BrowserPanel/index.tsx new file mode 100644 index 000000000..a91e25b42 --- /dev/null +++ b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/BrowserPanel/index.tsx @@ -0,0 +1,27 @@ +import { ToolCallType } from '@renderer/type/agent'; +import { BrowserPanelProps } from './types'; +import { ScreenshotContent } from './components/ScreenshotContent'; +import { TextContent } from './components/TextContent'; +import { LinksContent } from './components/LinksContent'; +import { DefaultContent } from './components/DefaultContent'; + +export function BrowserPanel({ tool, params, result }: BrowserPanelProps) { + const toolType = tool as ToolCallType; + const contentProps = { tool: toolType, params, result }; + + const renderContent = () => { + switch (toolType) { + case ToolCallType.BrowserScreenshot: + return ; + case ToolCallType.BrowserGetHtml: + case ToolCallType.BrowserGetText: + return ; + case ToolCallType.BrowserReadLinks: + return ; + default: + return ; + } + }; + + return
    {renderContent()}
    ; +} diff --git a/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/BrowserPanel/types.ts b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/BrowserPanel/types.ts new file mode 100644 index 000000000..542e0184f --- /dev/null +++ b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/BrowserPanel/types.ts @@ -0,0 +1,13 @@ +import { ToolCallType } from '@renderer/type/agent'; + +export interface BrowserPanelProps { + tool: string; + params: any; + result?: any; +} + +export interface ContentProps { + tool: ToolCallType; + params: any; + result?: any; +} diff --git a/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/DefaultTip.tsx b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/DefaultTip.tsx new file mode 100644 index 000000000..be45c7480 --- /dev/null +++ b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/DefaultTip.tsx @@ -0,0 +1,17 @@ +import { ActionStatus } from '@renderer/type/agent'; +import { FiCheckCircle } from 'react-icons/fi'; + +export function DefaultTip({ + description, +}: { + description?: string; + status?: ActionStatus; +}) { + return ( +
    + +

    Operation completed successfully

    +

    {description}

    +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/FSPanel.tsx b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/FSPanel.tsx new file mode 100644 index 000000000..973da92a2 --- /dev/null +++ b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/FSPanel.tsx @@ -0,0 +1,40 @@ +import { useMemo } from 'react'; +import { DefaultTip } from './DefaultTip'; +import { MonacoEditor } from '@renderer/components/MonacoEditor'; + +export function FsPanel({ path, content }: { path: string; content: string }) { + // Determine language based on file extension + const language = useMemo(() => { + const ext = path.split('.').pop()?.toLowerCase(); + switch (ext) { + case 'js': + return 'javascript'; + case 'jsx': + return 'javascript'; + case 'ts': + return 'typescript'; + case 'tsx': + return 'typescript'; + case 'json': + return 'json'; + case 'md': + return 'markdown'; + case 'css': + return 'css'; + case 'html': + return 'html'; + default: + return 'plaintext'; + } + }, [path]); + + return ( +
    + {content ? ( + + ) : ( + + )} +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/SearchPanel.tsx b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/SearchPanel.tsx new file mode 100644 index 000000000..977092be5 --- /dev/null +++ b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/SearchPanel.tsx @@ -0,0 +1,67 @@ +import { SearchResult } from '@agent-infra/search'; +import { FiExternalLink, FiSearch } from 'react-icons/fi'; + +interface SearchPanelProps { + query: string; + result: SearchResult; +} + +export function SearchPanel({ + query, + result = { pages: [] }, +}: SearchPanelProps) { + return ( +
    + {/* Search Query Section */} +
    + + + Search results for: "{query}" + +
    + + {/* Results List */} +
    + {(result.pages || []).map((page, index) => ( +
    +
    +

    + {page.title} +

    + + + +
    + + + {page.url} + + +

    + {page.content} +

    +
    + ))} +
    + + {(result.pages || []).length === 0 && ( +
    +

    No results found

    +
    + )} +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/TerminalPanel.tsx b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/TerminalPanel.tsx new file mode 100644 index 000000000..57d09735d --- /dev/null +++ b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/platform/TerminalPanel.tsx @@ -0,0 +1,130 @@ +import { useThemeMode } from '@renderer/hooks/useThemeMode'; +import { useEffect, useRef } from 'react'; +import { Terminal } from 'xterm'; +import { FitAddon } from 'xterm-addon-fit'; +import { WebLinksAddon } from 'xterm-addon-web-links'; +import 'xterm/css/xterm.css'; + +interface TerminalPanelProps { + command: string; + result?: any; +} + +export function TerminalPanel({ command, result }: TerminalPanelProps) { + const terminalRef = useRef(null); + const xtermRef = useRef(null); + const isDarkMode = useThemeMode(); + + useEffect(() => { + if (!terminalRef.current) return; + + const lightTheme = { + background: '#ffffff', + foreground: '#2e2e2e', + cursor: '#333333', + selectionBackground: '#b3d7ff', + black: '#2e2e2e', + brightBlack: '#666666', + red: '#e34747', + brightRed: '#f14c4c', + green: '#09a16d', + brightGreen: '#23d18b', + yellow: '#c5a332', + brightYellow: '#f5f543', + blue: '#0098dd', + brightBlue: '#3b8eea', + magenta: '#bc3fbc', + brightMagenta: '#d670d6', + cyan: '#11a8cd', + brightCyan: '#29b8db', + white: '#e5e5e5', + brightWhite: '#ffffff', + }; + + const darkTheme = { + background: '#1e1e1e', + foreground: '#d4d4d4', + cursor: '#ffffff', + selectionBackground: '#264f78', + black: '#000000', + brightBlack: '#666666', + red: '#cd3131', + brightRed: '#f14c4c', + green: '#0dbc79', + brightGreen: '#23d18b', + yellow: '#e5e510', + brightYellow: '#f5f543', + blue: '#2472c8', + brightBlue: '#3b8eea', + magenta: '#bc3fbc', + brightMagenta: '#d670d6', + cyan: '#11a8cd', + brightCyan: '#29b8db', + white: '#e5e5e5', + brightWhite: '#ffffff', + }; + + const term = new Terminal({ + theme: isDarkMode.value ? darkTheme : lightTheme, + fontFamily: 'Menlo, Monaco, "Courier New", monospace', + fontSize: 13, + lineHeight: 1.4, + cursorBlink: true, + cursorStyle: 'block', + scrollback: 5000, + // padding: 8, + // rendererType: 'canvas', + allowTransparency: true, + }); + + const fitAddon = new FitAddon(); + term.loadAddon(fitAddon); + term.loadAddon(new WebLinksAddon()); + + xtermRef.current = term; + term.open(terminalRef.current); + fitAddon.fit(); + + const updateTerminalSize = () => { + if (terminalRef.current && xtermRef.current) { + const { offsetWidth, offsetHeight } = terminalRef.current; + const cols = Math.floor(offsetWidth / 9); + const rows = Math.floor(offsetHeight / 17); + xtermRef.current.resize(cols, rows); + fitAddon.fit(); + } + }; + + const resizeObserver = new ResizeObserver(updateTerminalSize); + resizeObserver.observe(terminalRef.current); + + term.writeln('\x1b[32m$\x1b[0m ' + command); + + if (result) { + result.forEach((item) => { + term.writeln(item.text); + }); + } + + const resizeHandler = () => fitAddon.fit(); + window.addEventListener('resize', resizeHandler); + + return () => { + resizeObserver.disconnect(); + window.removeEventListener('resize', resizeHandler); + term.dispose(); + }; + }, [command, result, isDarkMode.value]); + + return ( +
    +
    +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/renderPlatformPanel.tsx b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/renderPlatformPanel.tsx new file mode 100644 index 000000000..8309387a3 --- /dev/null +++ b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/renderPlatformPanel.tsx @@ -0,0 +1,77 @@ +import { ToolPlatform, toolToPlatformMap } from '@renderer/type/agent'; +import { FsPanel } from './platform/FSPanel'; +import { TerminalPanel } from './platform/TerminalPanel'; +import { SearchPanel } from './platform/SearchPanel'; +import { EventContentDescriptor, EventItem } from '@renderer/type/event'; +import { SearchResult } from '@agent-infra/search'; +import { BrowserPanel } from './platform/BrowserPanel'; + +export interface PanelDataForPlatform { + [ToolPlatform.CommandLine]: { + command: string; + result: string; + }; + [ToolPlatform.FileSystem]: { + path: string; + content: string; + }; + [ToolPlatform.Search]: { + query: string; + result: SearchResult; + }; + [ToolPlatform.Browser]: { + tool: string; + params: any; + result?: any; + }; +} + +export function renderPlatformPanel({ event }: { event: EventItem }) { + const data = event.content as EventContentDescriptor['tool-used']; + const platform = toolToPlatformMap[data.tool]; + let platformData; + + switch (platform) { + case ToolPlatform.CommandLine: + platformData = { + command: data.value, + result: data.result, + }; + break; + case ToolPlatform.FileSystem: + const toolCallParam = JSON.parse(data.params || '{}') || {}; + platformData = { + path: data.value, + content: toolCallParam.content || data.result?.[0].text, + } as PanelDataForPlatform[ToolPlatform.FileSystem]; + break; + case ToolPlatform.Search: + platformData = { + query: data.value, + result: data.result, + } as PanelDataForPlatform[ToolPlatform.Search]; + break; + case ToolPlatform.Browser: + platformData = { + tool: data.tool, + params: JSON.parse(data.params || '{}'), + result: data.result, + } as PanelDataForPlatform[ToolPlatform.Browser]; + break; + default: + return null; + } + + switch (platform) { + case ToolPlatform.FileSystem: + return ; + case ToolPlatform.CommandLine: + return ; + case ToolPlatform.Search: + return ; + case ToolPlatform.Browser: + return ; + default: + return null; + } +} diff --git a/apps/omega/src/renderer/src/components/CanvasPanel/index.tsx b/apps/omega/src/renderer/src/components/CanvasPanel/index.tsx new file mode 100644 index 000000000..38563cade --- /dev/null +++ b/apps/omega/src/renderer/src/components/CanvasPanel/index.tsx @@ -0,0 +1,15 @@ +import { EventPlayer } from './EventPlayer'; + +export function CanvasPanel() { + // const [dataSource] = useAtom(canvasDataSourceAtom); + + // if (!dataSource) return null; + + return ; + // switch (dataSource.type) { + // case 'EventPlayer': + // return ; + // default: + // return null; + // } +} diff --git a/apps/omega/src/renderer/src/components/ChatUI/AgentStatusTip/index.tsx b/apps/omega/src/renderer/src/components/ChatUI/AgentStatusTip/index.tsx new file mode 100644 index 000000000..61aded543 --- /dev/null +++ b/apps/omega/src/renderer/src/components/ChatUI/AgentStatusTip/index.tsx @@ -0,0 +1,33 @@ +import { agentStatusTipAtom } from '@renderer/state/chat'; +import { motion, AnimatePresence } from 'framer-motion'; +import { useAtom } from 'jotai'; +import { RiSparklingFill } from 'react-icons/ri'; + +export function AgentStatusTip() { + const [currentStatusTip] = useAtom(agentStatusTipAtom); + + return ( +
    +
    + +
    + + + {currentStatusTip} + + +
    +
    +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/ChatUI/BeforeInputContainer.tsx b/apps/omega/src/renderer/src/components/ChatUI/BeforeInputContainer.tsx new file mode 100644 index 000000000..4c79488de --- /dev/null +++ b/apps/omega/src/renderer/src/components/ChatUI/BeforeInputContainer.tsx @@ -0,0 +1,28 @@ +import { useAppChat } from '@renderer/hooks/useAppChat'; +import { UserInteruptArea } from './UserInteruptArea'; +import { useThemeMode } from '@renderer/hooks/useThemeMode'; +import { PlanTaskStatus } from './PlanTaskStatus'; +import { Replay } from './Replay'; +// import { PlanTaskStatus } from './PlanTaskStatus'; + +export function BeforeInputContainer() { + const { messageSending } = useAppChat(); + const isDarkMode = useThemeMode(); + return ( +
    + {messageSending ? ( +
    + + +
    + ) : null} + {!messageSending ? : null} +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/ChatUI/MenuHeader.tsx b/apps/omega/src/renderer/src/components/ChatUI/MenuHeader.tsx new file mode 100644 index 000000000..6e29c16cd --- /dev/null +++ b/apps/omega/src/renderer/src/components/ChatUI/MenuHeader.tsx @@ -0,0 +1,130 @@ +import Logo from '../../assets/logo.png'; +import { IoShareSocialOutline } from 'react-icons/io5'; +import { + HiOutlineChevronDoubleLeft, + HiOutlineChevronDoubleRight, +} from 'react-icons/hi'; +import { useAtom } from 'jotai'; +import { showCanvasAtom } from '@renderer/state/canvas'; +import { isReportHtmlMode } from '@renderer/constants'; +import { useAppChat } from '@renderer/hooks/useAppChat'; +import { useDisclosure } from '@nextui-org/react'; +import { ShareModal } from './ShareModal'; +import { motion } from 'framer-motion'; +import { useState } from 'react'; + +export function MenuHeader() { + const [showCanvas, setShowCanvas] = useAtom(showCanvasAtom); + const { messages } = useAppChat(); + const { isOpen, onOpen, onClose } = useDisclosure(); + const [isShareHovered, setIsShareHovered] = useState(false); + const [isPanelHovered, setIsPanelHovered] = useState(false); + + return ( + +
    + + {/* Logo */} +
    + +
    + + {/* Brand name */} + + Omega + +
    + +
    + {!isReportHtmlMode && ( + setIsShareHovered(true)} + onMouseLeave={() => setIsShareHovered(false)} + onClick={onOpen} + className="p-2.5 rounded-xl bg-background hover:bg-primary/5 border border-divider hover:border-primary/30 transition-all duration-200 relative group" + title="Share" + whileHover={{ scale: 1.05 }} + whileTap={{ scale: 0.98 }} + > + + + Share + + + )} + + {/* Toggle Panel Button */} + setIsPanelHovered(true)} + onMouseLeave={() => setIsPanelHovered(false)} + onClick={() => setShowCanvas(!showCanvas)} + className="p-3 rounded-xl bg-background hover:bg-primary/5 border border-divider hover:border-primary/30 transition-all duration-200 relative group" + title={showCanvas ? 'Hide Panel' : 'Show Panel'} + whileHover={{ scale: 1.05 }} + whileTap={{ scale: 0.98 }} + > + + {showCanvas ? ( + + ) : ( + + )} + + + {showCanvas ? 'Hide' : 'Show'} + + +
    +
    + + +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/ChatUI/PlanTaskStatus/index.tsx b/apps/omega/src/renderer/src/components/ChatUI/PlanTaskStatus/index.tsx new file mode 100644 index 000000000..4627ff9b2 --- /dev/null +++ b/apps/omega/src/renderer/src/components/ChatUI/PlanTaskStatus/index.tsx @@ -0,0 +1,102 @@ +import { planTasksAtom } from '@renderer/state/chat'; +import { useAtom } from 'jotai'; +import { useState } from 'react'; +import { PlanTaskStatus as TaskStatus } from '@renderer/type/agent'; +import { Popover, PopoverTrigger, PopoverContent } from '@nextui-org/react'; +import { motion } from 'framer-motion'; +import { FiClock, FiCheck, FiX } from 'react-icons/fi'; + +export function PlanTaskStatus() { + const [planTasks] = useAtom(planTasksAtom); + const [isOpen, setIsOpen] = useState(false); + const completedTasks = + planTasks?.filter((task) => task.status === TaskStatus.Done).length || 0; + + const getStatusIcon = (status: TaskStatus) => { + switch (status) { + case TaskStatus.Done: + return ; + case TaskStatus.Doing: + return ; + case TaskStatus.Skipped: + return ; + default: + return null; + } + }; + + if (!planTasks?.length) return null; + + return ( + + +
    +
    +
    + + + Plan Steps + +
    + + {completedTasks}/{planTasks.length} completed + +
    +
    +
    + + +
    +
    +

    + Plan Progress +

    +
    +
    + {planTasks.map((task, index) => ( + +
    +
    + {getStatusIcon(task.status)} +
    +
    +

    + {task.title} +

    + {task.error && ( +

    + {task.error} +

    + )} +
    +
    +
    + ))} +
    +
    +
    +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/ChatUI/Replay.tsx b/apps/omega/src/renderer/src/components/ChatUI/Replay.tsx new file mode 100644 index 000000000..748eb982d --- /dev/null +++ b/apps/omega/src/renderer/src/components/ChatUI/Replay.tsx @@ -0,0 +1,125 @@ +import { useAppChat } from '@renderer/hooks/useAppChat'; +import { currentEventIdAtom, eventsAtom } from '@renderer/state/chat'; +import { MessageItem, MessageType } from '@renderer/type/chatMessage'; +import { EventItem, EventType } from '@renderer/type/event'; +import { ChatMessageUtil } from '@renderer/utils/ChatMessageUtils'; +import { useAtom } from 'jotai'; +import { useState, useEffect, useRef } from 'react'; +import { FiPlay, FiSquare } from 'react-icons/fi'; + +export function Replay() { + const [, setEvents] = useAtom(eventsAtom); + const [, setEventId] = useAtom(currentEventIdAtom); + const { addMessage, updateMessage, setMessages, messageEndRef, messages } = + useAppChat(); + const [isPlaying, setIsPlaying] = useState(false); + const timerRef = useRef(); + + const clearPlayTimer = () => { + if (timerRef.current) { + clearInterval(timerRef.current); + timerRef.current = undefined; + } + }; + + useEffect(() => { + return () => clearPlayTimer(); + }, []); + + const handleTogglePlay = () => { + setIsPlaying((prev) => !prev); + if (!isPlaying) { + let totalMessages: MessageItem[] = [...messages]; + setMessages((messages) => { + totalMessages = [...messages]; + return []; + }); + console.log('totalMessages', totalMessages); + let currentIndex = 0; + let eventIndex = 0; + + timerRef.current = setInterval(async () => { + const message = totalMessages[currentIndex]; + + if (!message) { + clearPlayTimer(); + setIsPlaying(false); + return; + } + + if (message.type === MessageType.OmegaAgent) { + const messageContent = message.content as { events: EventItem[] }; + const events = messageContent.events; + if (eventIndex === 0) { + await addMessage( + ChatMessageUtil.assistantOmegaMessage({ + events: [], + }), + ); + } + + if (eventIndex >= events.length) { + currentIndex++; + eventIndex = 0; + } else { + const currentEvents = events.slice(0, eventIndex + 1); + await updateMessage( + { + ...message, + content: { events: currentEvents }, + }, + { + shouldSyncStorage: false, + }, + ); + messageEndRef.current?.scrollIntoView({ + behavior: 'smooth', + block: 'nearest', + inline: 'nearest', + }); + eventIndex++; + setEvents(currentEvents); + const currentToolUseEvent = [...currentEvents] + .reverse() + .find((e) => e.type === EventType.ToolUsed); + if (currentToolUseEvent) setEventId(currentToolUseEvent.id); + } + } else { + await addMessage(message, { + shouldSyncStorage: false, + }); + currentIndex++; + } + }, 100); + } else { + clearPlayTimer(); + setMessages(messages); + } + }; + + return ( + + ); +} diff --git a/apps/omega/src/renderer/src/components/ChatUI/ShareModal.tsx b/apps/omega/src/renderer/src/components/ChatUI/ShareModal.tsx new file mode 100644 index 000000000..78aaa2192 --- /dev/null +++ b/apps/omega/src/renderer/src/components/ChatUI/ShareModal.tsx @@ -0,0 +1,153 @@ +import { + Modal, + ModalContent, + ModalHeader, + ModalBody, + ModalFooter, + Button, + Input, + Tab, + Tabs, + Link, + Tooltip, +} from '@nextui-org/react'; +import { useState, useEffect } from 'react'; +import { ipcClient } from '@renderer/api'; + +const API_URL_STORAGE_KEY = 'report-api-url'; + +interface ShareModalProps { + isOpen: boolean; + onClose: () => void; + messages: any[]; +} + +export function ShareModal({ isOpen, onClose, messages }: ShareModalProps) { + const [apiUrl, setApiUrl] = useState(''); + const [isLoading, setIsLoading] = useState(false); + const [resultUrl, setResultUrl] = useState(''); + const [error, setError] = useState(''); + + // Load saved API URL from localStorage when component mounts + useEffect(() => { + const savedApiUrl = localStorage.getItem(API_URL_STORAGE_KEY); + if (savedApiUrl) { + setApiUrl(savedApiUrl); + } + }, []); + + const handleShare = async (type: 'local' | 'remote') => { + try { + setIsLoading(true); + setError(''); + + const url = await ipcClient.saveReportHtml({ + messages, + reportApiUrl: type === 'remote' ? apiUrl : undefined, + }); + + // Save API URL if remote upload is successful + if (type === 'remote' && url) { + localStorage.setItem(API_URL_STORAGE_KEY, apiUrl); + } + + setResultUrl(url); + } catch (err) { + setError(err instanceof Error ? err.message : 'Share failed'); + } finally { + setIsLoading(false); + } + }; + + return ( + + + Share Conversation + + + +
    + +
    +
    + +
    +
    + + API URL + +

    API Requirements:

    +
      +
    • Accept POST requests
    • +
    • Request body as multipart/form-data
    • +
    • File field name: 'file'
    • +
    • + Response format:{' '} + {'{ "url": "file access URL" }'} +
    • +
    +
    + } + > + + (?) + + +
    + } + placeholder="Enter upload API URL" + value={apiUrl} + onChange={(e) => setApiUrl(e.target.value)} + description={ + localStorage.getItem(API_URL_STORAGE_KEY) + ? 'Last used API URL auto-filled' + : 'API URL will be saved after successful upload' + } + /> +
    + +
    + + + + {error &&
    {error}
    } + + {resultUrl && ( +
    +
    Share Link:
    + + {resultUrl} + +
    + )} + + + + + + + ); +} diff --git a/apps/omega/src/renderer/src/components/ChatUI/StatusBar.tsx b/apps/omega/src/renderer/src/components/ChatUI/StatusBar.tsx new file mode 100644 index 000000000..56f63667f --- /dev/null +++ b/apps/omega/src/renderer/src/components/ChatUI/StatusBar.tsx @@ -0,0 +1,76 @@ +import { Loader2 } from 'lucide-react'; +import { ProgressBar } from '../AgentFlowMessage/ProgressBar'; +import { + EventStreamUIMeta, + extractEventStreamUIMeta, +} from '@renderer/utils/parseEvents'; +import { PlanTaskStatus } from '@renderer/type/agent'; +import { useEffect, useState } from 'react'; +import { useAtomValue } from 'jotai'; +import { eventsAtom } from '@renderer/state/chat'; + +export function StatusBar() { + const [uiMeta, setUIMeta] = useState(null); + const events = useAtomValue(eventsAtom); + useEffect(() => { + if (events.length > 0) { + const meta = extractEventStreamUIMeta(events); + if (meta.planTasks.length > 0) { + setUIMeta(meta); + } + } + }, [events]); + + if (!uiMeta) { + return null; + } + + const { currentStepIndex, planTasks } = uiMeta; + + const lastFinishedTask = [...planTasks] + .reverse() + .find((task) => task.status === PlanTaskStatus.Done); + + const progress = (currentStepIndex / Math.max(planTasks.length, 1)) * 100; + + const isLoading = planTasks.some( + (task) => task.status === PlanTaskStatus.Doing, + ); + + const getStatusText = () => { + if (isLoading) { + const currentTask = planTasks[currentStepIndex - 1]; + return currentTask?.title || 'Processing...'; + } + return lastFinishedTask?.title; + }; + + return ( +
    + {/* Glass morphism background */} +
    + + {/* Content */} +
    +
    +
    + {isLoading && ( + + )} + + {getStatusText()} + +
    +
    + Step {currentStepIndex} of {planTasks.length} +
    +
    + + +
    +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/ChatUI/UserInteruptArea/index.tsx b/apps/omega/src/renderer/src/components/ChatUI/UserInteruptArea/index.tsx new file mode 100644 index 000000000..bb8230662 --- /dev/null +++ b/apps/omega/src/renderer/src/components/ChatUI/UserInteruptArea/index.tsx @@ -0,0 +1,195 @@ +import { useState } from 'react'; +import { + currentAgentFlowIdRefAtom, + globalEventEmitter, +} from '@renderer/state/chat'; +import { useAtom } from 'jotai'; +import styled, { keyframes } from 'styled-components'; +import { Send } from 'lucide-react'; + +interface UserInteruptAreaProps { + isDark?: boolean; + onSubmit?: (value: string) => void; +} + +const flowAnimation = keyframes` + 0% { + background-position: 0% 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0% 50%; + } +`; + +const FlowContainer = styled.div<{ isDark: boolean }>` + position: relative; + width: 100%; + padding: 2px; + border-radius: 16px; + background: linear-gradient( + 90deg, + rgba(160, 124, 254, 0.8), + rgba(254, 143, 181, 0.8), + rgba(1, 111, 238, 0.8), + rgba(160, 124, 254, 0.8) + ); + background-size: 300% 300%; + animation: ${flowAnimation} 8s linear infinite; + + &::after { + content: ''; + position: absolute; + inset: 1px; + border-radius: 15px; + background: ${(props) => (props.isDark ? '#1a1a1a' : '#ffffff')}; + z-index: 0; + } +`; + +const ContentWrapper = styled.div` + position: relative; + z-index: 1; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 8px; +`; + +const StyledInput = styled.input<{ isDark: boolean }>` + flex: 1; + background: transparent; + border: none; + outline: none; + color: ${(props) => (props.isDark ? '#ffffff' : '#000000')}; + font-size: 0.95rem; + padding: 2px 0; + &::placeholder { + color: ${(props) => (props.isDark ? '#666666' : '#999999')}; + } +`; + +const StyledButton = styled.button<{ isDark: boolean; disabled?: boolean }>` + position: relative; + background: ${(props) => + props.isDark + ? 'linear-gradient(135deg, rgba(1, 111, 238, 0.9), rgba(1, 86, 208, 0.9))' + : 'linear-gradient(135deg, rgba(1, 119, 255, 0.9), rgba(1, 111, 238, 0.9))'}; + color: white; + border: none; + padding: 8px; + margin: 2px; + width: 30px; + height: 30px; + border-radius: 12px; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + cursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')}; + opacity: ${(props) => (props.disabled ? 0.6 : 1)}; + backdrop-filter: blur(10px); + box-shadow: 0 2px 8px + ${(props) => + props.isDark ? 'rgba(1, 111, 238, 0.2)' : 'rgba(1, 111, 238, 0.15)'}; + + svg { + width: 18px; + height: 18px; + transition: transform 0.3s ease; + } + + &:hover:not(:disabled) { + transform: translateY(-2px) scale(1.02); + box-shadow: 0 4px 16px + ${(props) => + props.isDark ? 'rgba(1, 111, 238, 0.4)' : 'rgba(1, 111, 238, 0.25)'}; + background: ${(props) => + props.isDark + ? 'linear-gradient(135deg, rgba(1, 119, 255, 0.95), rgba(1, 86, 208, 0.95))' + : 'linear-gradient(135deg, rgba(1, 127, 255, 0.95), rgba(1, 111, 238, 0.95))'}; + + svg { + transform: translate(1px, -1px); + } + } + + &:active { + transform: translateY(0) scale(0.98); + box-shadow: 0 2px 4px + ${(props) => + props.isDark ? 'rgba(1, 111, 238, 0.3)' : 'rgba(1, 111, 238, 0.2)'}; + } + + &::after { + content: ''; + position: absolute; + inset: -1px; + border-radius: 14px; + background: linear-gradient( + 135deg, + rgba(255, 255, 255, 0.1), + transparent 50% + ); + pointer-events: none; + } +`; + +export function UserInteruptArea({ + isDark = true, + onSubmit, +}: UserInteruptAreaProps) { + const [input, setInput] = useState(''); + const [isSubmitting, setIsSubmitting] = useState(false); + const [currentAgentFlowIdRef] = useAtom(currentAgentFlowIdRefAtom); + + const handleSubmit = async () => { + if (input.trim() && currentAgentFlowIdRef.current && !isSubmitting) { + setIsSubmitting(true); + try { + onSubmit?.(input); + globalEventEmitter.emit(currentAgentFlowIdRef.current, { + type: 'user-interrupt', + text: input.trim(), + }); + setInput(''); + } finally { + setIsSubmitting(false); + } + } + }; + + const handleKeyDown = (e: React.KeyboardEvent) => { + if (e.key === 'Enter' && !e.shiftKey) { + e.preventDefault(); + handleSubmit(); + } + }; + + return ( +
    + + + setInput(e.target.value)} + onKeyDown={handleKeyDown} + placeholder="Insert new instructions in the process..." + isDark={isDark} + disabled={isSubmitting} + /> + + + + + +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/ChatUI/index.scss b/apps/omega/src/renderer/src/components/ChatUI/index.scss new file mode 100644 index 000000000..ebe1bce59 --- /dev/null +++ b/apps/omega/src/renderer/src/components/ChatUI/index.scss @@ -0,0 +1,18 @@ +.ai-app-chat-container { + height: 100vh !important; + background-color: var(--ai-color-bg-primary) !important; + transition: width 0.3s ease !important; +} + +.ai-app-input-section-container { + background-color: var(--ai-color-bg-tertiary) !important; + border-radius: var(--radius-lg) !important; +} + +.ai-app-chat-messages { + margin-top: 16px !important; +} + +.ai-app-input-section-wrapper { + padding-top: 15px !important; +} diff --git a/apps/omega/src/renderer/src/components/ChatUI/index.tsx b/apps/omega/src/renderer/src/components/ChatUI/index.tsx new file mode 100644 index 000000000..304c373be --- /dev/null +++ b/apps/omega/src/renderer/src/components/ChatUI/index.tsx @@ -0,0 +1,143 @@ +import { ChatUI as BaseChatUI, InputFile } from '@vendor/chat-ui'; +import './index.scss'; +import { MenuHeader } from './MenuHeader'; +import { isReportHtmlMode, STORAGE_DB_NAME } from '@renderer/constants'; +import { useCallback, useEffect, useRef, useState } from 'react'; +import { useAddUserMessage } from '@renderer/hooks/useAddUserMessage'; +import { useAgentFlow } from '@renderer/hooks/useAgentFlow'; +import { renderMessageUI } from './renderMessageUI'; +import { MessageItem } from '@renderer/type/chatMessage'; +import { useThemeMode } from '@renderer/hooks/useThemeMode'; +import { useAtom, useAtomValue } from 'jotai'; +import { + currentAgentFlowIdRefAtom, + eventsAtom, + globalEventEmitter, +} from '@renderer/state/chat'; +import { BeforeInputContainer } from './BeforeInputContainer'; +import { AgentStatusTip } from './AgentStatusTip'; +import { useAppChat } from '@renderer/hooks/useAppChat'; +import { extractHistoryEvents } from '@renderer/utils/extractHistoryEvents'; +import { useChatSessions } from '@renderer/hooks/useChatSession'; +import { DEFAULT_APP_ID } from '../LeftSidebar'; + +declare global { + interface Window { + __OMEGA_REPORT_DATA__?: MessageItem[]; + } +} + +export function OpenAgentChatUI() { + const [isSending, setIsSending] = useState(false); + const addUserMessage = useAddUserMessage(); + const launchAgentFlow = useAgentFlow(); + const chatUIRef = useRef<{ + getInputTextArea: () => HTMLTextAreaElement | null; + triggerCommand: (command: string) => void; + focusInput: () => void; + }>(null); + const isDarkMode = useThemeMode(); + const { initMessages, setMessages } = useAppChat(); + const [, setEvents] = useAtom(eventsAtom); + const currentAgentFlowIdRef = useAtomValue(currentAgentFlowIdRefAtom); + const { currentSessionId } = useChatSessions({ + appId: DEFAULT_APP_ID, + }); + const sendMessage = useCallback( + async (inputText: string, inputFiles: InputFile[]) => { + try { + const inputEle = chatUIRef.current?.getInputTextArea(); + if (inputEle) { + inputEle.disabled = true; + inputEle.style.cursor = 'not-allowed'; + } + setIsSending(true); + await addUserMessage(inputText, inputFiles); + // Launch! + await launchAgentFlow(inputText, inputFiles); + } finally { + setIsSending(false); + const inputEle = chatUIRef.current?.getInputTextArea(); + if (inputEle) { + inputEle.disabled = false; + inputEle.style.cursor = 'auto'; + } + } + }, + [addUserMessage, launchAgentFlow], + ); + + useEffect(() => { + async function init() { + const messages = window.__OMEGA_REPORT_DATA__ ?? (await initMessages()); + setMessages(messages || []); + const events = extractHistoryEvents(messages as unknown as MessageItem[]); + setEvents(events); + } + init(); + }, [currentSessionId]); + + return ( + <> + { + return renderMessageUI({ + message: message as unknown as MessageItem, + }); + }} + isDark={isDarkMode.value} + onMessageSend={sendMessage} + storageDbName={STORAGE_DB_NAME} + features={{ + clearConversationHistory: true, + uploadFiles: true, + }} + onMessageAbort={() => { + setIsSending(false); + const inputEle = chatUIRef.current?.getInputTextArea(); + if (inputEle) { + inputEle.disabled = false; + inputEle.style.cursor = 'auto'; + } + if (currentAgentFlowIdRef.current) { + globalEventEmitter.emit(currentAgentFlowIdRef.current, { + type: 'terminate', + }); + } + }} + slots={{ + beforeMessageList: , + beforeInputContainer: , + customFeatures: ( + <> +
    + {isSending ? : null} + {/* */} +
    + + ), + }} + classNames={{ + messageList: 'scrollbar', + }} + conversationId={currentSessionId || 'default'} + inputPlaceholder={ + isSending + ? 'Agent is working, please wait...' + : 'Type your message here...' + } + /> + + ); +} diff --git a/apps/omega/src/renderer/src/components/ChatUI/renderMessageUI.tsx b/apps/omega/src/renderer/src/components/ChatUI/renderMessageUI.tsx new file mode 100644 index 000000000..d3c8f2abd --- /dev/null +++ b/apps/omega/src/renderer/src/components/ChatUI/renderMessageUI.tsx @@ -0,0 +1,20 @@ +import { MarkdownRenderer } from '@vendor/chat-ui'; +import { MessageItem, MessageType } from '@renderer/type/chatMessage'; +import { AgentFlowMessage } from '../AgentFlowMessage'; +import { MessageRole } from '@vendor/chat-ui'; + +export function renderMessageUI({ message }: { message: MessageItem }) { + switch (message.type) { + case MessageType.PlainText: + return ( + + ); + case MessageType.OmegaAgent: + return ; + default: + return null; + } +} diff --git a/apps/omega/src/renderer/src/components/ErrorBoundary.tsx b/apps/omega/src/renderer/src/components/ErrorBoundary.tsx new file mode 100644 index 000000000..3748d221a --- /dev/null +++ b/apps/omega/src/renderer/src/components/ErrorBoundary.tsx @@ -0,0 +1,37 @@ +import { Component, ErrorInfo, ReactNode } from 'react'; + +interface Props { + children: ReactNode; + fallback?: ReactNode; +} + +interface State { + hasError: boolean; +} + +export class ErrorBoundary extends Component { + constructor(props: Props) { + super(props); + this.state = { hasError: false }; + } + + static getDerivedStateFromError(_: Error): State { + return { hasError: true }; + } + + componentDidCatch(error: Error, errorInfo: ErrorInfo) { + console.error('Error caught by ErrorBoundary:', error, errorInfo); + } + + render() { + if (this.state.hasError) { + return ( + this.props.fallback || ( +
    Rendering error
    + ) + ); + } + + return this.props.children; + } +} diff --git a/apps/omega/src/renderer/src/components/FilePermissionHandler/index.tsx b/apps/omega/src/renderer/src/components/FilePermissionHandler/index.tsx new file mode 100644 index 000000000..3a6cd5a98 --- /dev/null +++ b/apps/omega/src/renderer/src/components/FilePermissionHandler/index.tsx @@ -0,0 +1,14 @@ +import { useAtom } from 'jotai'; +import { pendingPermissionRequestAtom } from '@renderer/services/filePermissionService'; +import { FilePermissionModal } from '../FilePermissionModal'; + +export function FilePermissionHandler() { + const [pendingRequest] = useAtom(pendingPermissionRequestAtom); + + return ( + + ); +} diff --git a/apps/omega/src/renderer/src/components/FilePermissionModal/index.tsx b/apps/omega/src/renderer/src/components/FilePermissionModal/index.tsx new file mode 100644 index 000000000..f082c8aa9 --- /dev/null +++ b/apps/omega/src/renderer/src/components/FilePermissionModal/index.tsx @@ -0,0 +1,121 @@ +import { useState } from 'react'; +import { + Modal, + ModalContent, + ModalHeader, + ModalBody, + ModalFooter, + Button, + Spinner, +} from '@nextui-org/react'; +import { IoWarningOutline } from 'react-icons/io5'; +import { ipcClient } from '@renderer/api'; +import { + loadFileSystemSettings, + saveFileSystemSettings, +} from '@renderer/services/fileSystemSettings'; +import path from 'path-browserify'; +import { resolvePermission } from '@renderer/services/filePermissionService'; +import { useAppSettings } from '../LeftSidebar/Settings/useAppSettings'; + +interface FilePermissionModalProps { + isOpen: boolean; + filePath: string; +} + +export function FilePermissionModal({ + isOpen, + filePath, +}: FilePermissionModalProps) { + const [isProcessing, setIsProcessing] = useState(false); + const { setSettings } = useAppSettings(); + const directoryPath = path.dirname(filePath); + + const handleAllow = async () => { + setIsProcessing(true); + try { + // Add this directory to allowed directories + const settings = loadFileSystemSettings() || { + availableDirectories: [], + }; + if (!settings.availableDirectories.includes(directoryPath)) { + settings.availableDirectories.push(directoryPath); + saveFileSystemSettings(settings); + setSettings((appSettings) => { + return { + ...appSettings, + fileSystem: { + ...appSettings.fileSystem, + availableDirectories: settings.availableDirectories, + }, + }; + }); + await ipcClient.updateFileSystemConfig(settings); + } + + // Resolve the permission promise with true (allowed) + resolvePermission(true); + } catch (error) { + console.error('Failed to update file system permissions:', error); + resolvePermission(false); + } finally { + setIsProcessing(false); + } + }; + + const handleDeny = () => { + // Resolve the permission promise with false (denied) + resolvePermission(false); + }; + + return ( + + + {() => ( + <> + + + Permission Required + + +

    + The application is trying to access a file outside of allowed + directories: +

    +
    + {filePath} +
    +

    + Do you want to allow access to this directory and add it to the + list of allowed directories? +

    +
    + + + + + + )} +
    +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/LeftSidebar/BottomBar.tsx b/apps/omega/src/renderer/src/components/LeftSidebar/BottomBar.tsx new file mode 100644 index 000000000..b31e1cef1 --- /dev/null +++ b/apps/omega/src/renderer/src/components/LeftSidebar/BottomBar.tsx @@ -0,0 +1,22 @@ +import { FiSettings } from 'react-icons/fi'; +import { Tooltip } from '@nextui-org/react'; +import styles from './index.module.scss'; + +interface BottomBarProps { + isCollapsed: boolean; + onOpenSettings: () => void; +} + +export function BottomBar({ isCollapsed, onOpenSettings }: BottomBarProps) { + return ( +
    + + + +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/LeftSidebar/DeleteModal.tsx b/apps/omega/src/renderer/src/components/LeftSidebar/DeleteModal.tsx new file mode 100644 index 000000000..89060a903 --- /dev/null +++ b/apps/omega/src/renderer/src/components/LeftSidebar/DeleteModal.tsx @@ -0,0 +1,42 @@ +import { + Button, + Modal, + ModalContent, + ModalHeader, + ModalBody, + ModalFooter, +} from '@nextui-org/react'; + +interface DeleteModalProps { + isOpen: boolean; + onClose: () => void; + onConfirm: () => void; +} + +export function DeleteModal({ isOpen, onClose, onConfirm }: DeleteModalProps) { + return ( + + + {(onModalClose) => ( + <> + Confirm + +

    + Are you sure to delete this session? This operation is + irreversible. +

    +
    + + + + + + )} +
    +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/LeftSidebar/SessionItem.tsx b/apps/omega/src/renderer/src/components/LeftSidebar/SessionItem.tsx new file mode 100644 index 000000000..46b9f1bc7 --- /dev/null +++ b/apps/omega/src/renderer/src/components/LeftSidebar/SessionItem.tsx @@ -0,0 +1,107 @@ +import { BiCheck, BiEdit } from 'react-icons/bi'; +import { BsThreeDotsVertical, BsTrash } from 'react-icons/bs'; +import { + Dropdown, + DropdownTrigger, + DropdownMenu, + DropdownItem, +} from '@nextui-org/react'; +import styles from './index.module.scss'; + +interface SessionItemProps { + session: { + id: string; + name: string; + }; + isActive: boolean; + isEditing: boolean; + editingName: string; + onEditingNameChange: (value: string) => void; + onKeyDown: (e: React.KeyboardEvent, sessionId: string) => void; + onSaveEdit: (sessionId: string, e: React.MouseEvent) => void; + onEditSession: (sessionId: string, name: string, e: React.MouseEvent) => void; + onDeleteSession: (sessionId: string, e: React.MouseEvent) => void; + onClick: () => void; +} + +export function SessionItem({ + session, + isActive, + isEditing, + editingName, + onEditingNameChange, + onKeyDown, + onSaveEdit, + onEditSession, + onDeleteSession, + onClick, +}: SessionItemProps) { + return ( +
    + {isEditing ? ( +
    e.stopPropagation()} + > + onEditingNameChange(e.target.value)} + onKeyDown={(e) => onKeyDown(e, session.id)} + autoFocus + /> + +
    + ) : ( +
    + {session.name} + + + + + { + if (key === 'edit') { + onEditSession( + session.id, + session.name, + new MouseEvent('click') as any, + ); + } else if (key === 'delete') { + onDeleteSession(session.id, new MouseEvent('click') as any); + } + }} + > + }> + Edit + + } + > + Delete + + + +
    + )} +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/LeftSidebar/SessionList/index.tsx b/apps/omega/src/renderer/src/components/LeftSidebar/SessionList/index.tsx new file mode 100644 index 000000000..89e44f8e7 --- /dev/null +++ b/apps/omega/src/renderer/src/components/LeftSidebar/SessionList/index.tsx @@ -0,0 +1,114 @@ +import { useMemo } from 'react'; +import { + isToday, + isYesterday, + isThisWeek, + isThisMonth, + subWeeks, + isSameWeek, +} from 'date-fns'; +import { SessionItem } from '../SessionItem'; +import { ChatSession } from '../type'; + +interface SessionListProps { + sessions: ChatSession[]; + currentSessionId: string | null; + editingSessionId: string | null; + editingName: string; + onEditingNameChange: (value: string) => void; + onKeyDown: (e: React.KeyboardEvent, sessionId: string) => void; + onSaveEdit: (sessionId: string, e: React.MouseEvent) => void; + onEditSession: ( + sessionId: string, + currentName: string, + e: React.MouseEvent, + ) => void; + onDeleteSession: (sessionId: string, e: React.MouseEvent) => void; + onClick: (sessionId: string) => void; +} + +interface GroupedSessions { + title: string; + sessions: ChatSession[]; +} + +export function SessionList({ + sessions, + currentSessionId, + editingSessionId, + editingName, + onEditingNameChange, + onKeyDown, + onSaveEdit, + onEditSession, + onDeleteSession, + onClick, +}: SessionListProps) { + const groupedSessions = useMemo(() => { + const groups: GroupedSessions[] = [ + { title: 'Today', sessions: [] }, + { title: 'Yesterday', sessions: [] }, + { title: 'This Week', sessions: [] }, + { title: 'Last Week', sessions: [] }, + { title: 'This Month', sessions: [] }, + { title: 'Earlier', sessions: [] }, + ]; + + const lastWeekStart = subWeeks(new Date(), 1); + + sessions.forEach((session) => { + const date = new Date(session.updatedAt!); + + if (isToday(date)) { + groups[0].sessions.push(session); + } else if (isYesterday(date)) { + groups[1].sessions.push(session); + } else if (isThisWeek(date)) { + groups[2].sessions.push(session); + } else if (isSameWeek(date, lastWeekStart)) { + groups[3].sessions.push(session); + } else if (isThisMonth(date)) { + groups[4].sessions.push(session); + } else { + groups[5].sessions.push(session); + } + }); + + return groups.filter((group) => group.sessions.length > 0); + }, [sessions]); + + if (sessions.length === 0) { + return ( +
    + No sessions +
    + ); + } + + return ( +
    + {groupedSessions.map((group) => ( +
    +
    + {group.title} +
    + {group.sessions.map((session) => ( + onClick(session.id)} + /> + ))} +
    + ))} +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/LeftSidebar/Settings/FileSystemSettingsTab.tsx b/apps/omega/src/renderer/src/components/LeftSidebar/Settings/FileSystemSettingsTab.tsx new file mode 100644 index 000000000..8be6e3e35 --- /dev/null +++ b/apps/omega/src/renderer/src/components/LeftSidebar/Settings/FileSystemSettingsTab.tsx @@ -0,0 +1,83 @@ +import { useState } from 'react'; +import { Button, Chip, Input } from '@nextui-org/react'; +import { IoMdAdd } from 'react-icons/io'; +import { FileSystemSettings } from './types'; + +interface FileSystemSettingsTabProps { + settings: FileSystemSettings; + setSettings: (settings: FileSystemSettings) => void; +} + +export function FileSystemSettingsTab({ + settings, + setSettings, +}: FileSystemSettingsTabProps) { + const [newDirectory, setNewDirectory] = useState(''); + + const addDirectory = () => { + if (!newDirectory || settings.availableDirectories.includes(newDirectory)) { + return; + } + + setSettings({ + ...settings, + availableDirectories: [...settings.availableDirectories, newDirectory], + }); + setNewDirectory(''); + }; + + const removeDirectory = (dir: string) => { + setSettings({ + ...settings, + availableDirectories: settings.availableDirectories.filter( + (d) => d !== dir, + ), + }); + }; + + return ( +
    +
    + Configure directories that the application can access. The default is + your home directory's .omega folder. +
    + +
    + setNewDirectory(e.target.value)} + className="flex-1" + /> + +
    + +
    + {settings.availableDirectories.map((dir) => ( + removeDirectory(dir)} + variant="flat" + className="text-xs" + > + {dir} + + ))} + {settings.availableDirectories.length === 0 && ( +
    + No custom directories added. Using default directory. +
    + )} +
    +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/LeftSidebar/Settings/ModelSettingsTab.tsx b/apps/omega/src/renderer/src/components/LeftSidebar/Settings/ModelSettingsTab.tsx new file mode 100644 index 000000000..51a6d3d8f --- /dev/null +++ b/apps/omega/src/renderer/src/components/LeftSidebar/Settings/ModelSettingsTab.tsx @@ -0,0 +1,129 @@ +import { Divider, Input, Select, SelectItem, Spinner } from '@nextui-org/react'; +import { ModelSettings, Provider } from './types'; +import { getProviderLogo, getModelOptions } from './modelUtils'; +import { useProviders } from './useProviders'; + +interface ModelSettingsTabProps { + settings: ModelSettings; + setSettings: (settings: ModelSettings) => void; +} + +export function ModelSettingsTab({ + settings, + setSettings, +}: ModelSettingsTabProps) { + const { providers, loading } = useProviders(); + const isAzure = settings.provider === Provider.AZURE_OPENAI; + + if (loading) { + return ( +
    + +
    + ); + } + + return ( +
    + + + {isAzure ? ( + + setSettings({ + ...settings, + model: e.target.value, + }) + } + description="The deployment name of your Azure OpenAI model" + isRequired + /> + ) : ( + + )} + + setSettings({ ...settings, apiKey: e.target.value })} + isRequired + /> + + +

    Advanced Settings (Optional)

    + + + setSettings({ ...settings, apiVersion: e.target.value }) + } + description={ + isAzure + ? 'Required for Azure OpenAI (e.g., 2023-05-15)' + : 'Required for some providers' + } + isRequired={isAzure} + /> + + setSettings({ ...settings, endpoint: e.target.value })} + description={ + isAzure + ? 'Your Azure OpenAI resource endpoint' + : 'Override the default API endpoint' + } + isRequired={isAzure} + /> +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/LeftSidebar/Settings/SettingsModal.tsx b/apps/omega/src/renderer/src/components/LeftSidebar/Settings/SettingsModal.tsx new file mode 100644 index 000000000..c0319bbd0 --- /dev/null +++ b/apps/omega/src/renderer/src/components/LeftSidebar/Settings/SettingsModal.tsx @@ -0,0 +1,97 @@ +import { + Modal, + ModalContent, + ModalHeader, + ModalBody, + ModalFooter, + Button, + Tabs, + Tab, + Spinner, +} from '@nextui-org/react'; +import { useState } from 'react'; +import { ModelSettingsTab } from './ModelSettingsTab'; +import { FileSystemSettingsTab } from './FileSystemSettingsTab'; +import { useAppSettings } from './useAppSettings'; + +interface SettingsModalProps { + isOpen: boolean; + onClose: () => void; +} + +export function SettingsModal({ isOpen, onClose }: SettingsModalProps) { + const { settings, setSettings, saveSettings } = useAppSettings(); + const [isSaving, setIsSaving] = useState(false); + const [saveSuccess, setSaveSuccess] = useState(false); + + const handleSave = async () => { + setIsSaving(true); + try { + await saveSettings(); + setSaveSuccess(true); + setTimeout(() => { + setSaveSuccess(false); + onClose(); + }, 1500); + } catch (error) { + console.error('Failed to save settings:', error); + } finally { + setIsSaving(false); + } + }; + + return ( + + + {(onModalClose) => ( + <> + Settings + + + + + setSettings({ ...settings, model: modelSettings }) + } + /> + + + + setSettings({ ...settings, fileSystem: fsSettings }) + } + /> + + + + + {saveSuccess ? ( +
    Settings saved successfully!
    + ) : ( + <> + + + + )} +
    + + )} +
    +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/LeftSidebar/Settings/index.ts b/apps/omega/src/renderer/src/components/LeftSidebar/Settings/index.ts new file mode 100644 index 000000000..d3958a16e --- /dev/null +++ b/apps/omega/src/renderer/src/components/LeftSidebar/Settings/index.ts @@ -0,0 +1 @@ +export * from './SettingsModal'; diff --git a/apps/omega/src/renderer/src/components/LeftSidebar/Settings/modelUtils.tsx b/apps/omega/src/renderer/src/components/LeftSidebar/Settings/modelUtils.tsx new file mode 100644 index 000000000..8d9121c0e --- /dev/null +++ b/apps/omega/src/renderer/src/components/LeftSidebar/Settings/modelUtils.tsx @@ -0,0 +1,61 @@ +import { + SiGooglegemini, + SiOpenai, + SiAnthropic, + SiMicrosoftazure, +} from 'react-icons/si'; +import { AiFillApi } from 'react-icons/ai'; +import MistralIcon from '@renderer/assets/Mistral'; +import { Provider } from './types'; + +export function getProviderLogo(provider: Provider) { + switch (provider) { + case Provider.OPENAI: + return ; + case Provider.ANTHROPIC: + return ; + case Provider.GEMINI: + return ; + case Provider.MISTRAL: + return ; + case Provider.AZURE_OPENAI: + return ; + default: + return ; + } +} + +export function getModelOptions(provider: Provider) { + switch (provider) { + case Provider.OPENAI: + return [ + { value: 'gpt-4o', label: 'GPT-4o' }, + { value: 'gpt-4o-mini', label: 'GPT-4o Mini' }, + { value: 'o3-mini', label: 'O3 Mini' }, + ]; + case Provider.ANTHROPIC: + return [ + { value: 'claude-3.7-sonnet-latest', label: 'Claude 3.7 Sonnet' }, + { value: 'claude-3-5-sonnet-20241022', label: 'Claude 3.5 Sonnet' }, + { value: 'claude-3', label: 'Claude 3 Opus' }, + { value: 'claude-3-sonnet', label: 'Claude 3 Sonnet' }, + { value: 'claude-3-haiku', label: 'Claude 3 Haiku' }, + ]; + case Provider.GEMINI: + return [ + { value: 'gemini-2.0-flash', label: 'Gemini 2.0 Flash' }, + { value: 'gemini-1.5-pro', label: 'Gemini 1.5 Pro' }, + { value: 'gemini-1.5-flash', label: 'Gemini 1.5 Flash' }, + ]; + case Provider.MISTRAL: + return [ + { value: 'mistral-large-latest', label: 'Mistral Large' }, + { value: 'mistral-medium-latest', label: 'Mistral Medium' }, + { value: 'mistral-small-latest', label: 'Mistral Small' }, + ]; + case Provider.AZURE_OPENAI: + return []; + default: + return []; + } +} diff --git a/apps/omega/src/renderer/src/components/LeftSidebar/Settings/types.ts b/apps/omega/src/renderer/src/components/LeftSidebar/Settings/types.ts new file mode 100644 index 000000000..a427b359f --- /dev/null +++ b/apps/omega/src/renderer/src/components/LeftSidebar/Settings/types.ts @@ -0,0 +1,25 @@ +export enum Provider { + OPENAI = 'openai', + ANTHROPIC = 'anthropic', + GEMINI = 'gemini', + MISTRAL = 'mistral', + AZURE_OPENAI = 'azure_openai', +} + +export interface ModelSettings { + provider: Provider; + model: string; + apiKey: string; + apiVersion?: string; + endpoint?: string; + customModel?: string; +} + +export interface FileSystemSettings { + availableDirectories: string[]; +} + +export interface AppSettings { + model: ModelSettings; + fileSystem: FileSystemSettings; +} diff --git a/apps/omega/src/renderer/src/components/LeftSidebar/Settings/useAppSettings.ts b/apps/omega/src/renderer/src/components/LeftSidebar/Settings/useAppSettings.ts new file mode 100644 index 000000000..9cff06e28 --- /dev/null +++ b/apps/omega/src/renderer/src/components/LeftSidebar/Settings/useAppSettings.ts @@ -0,0 +1,69 @@ +import { useEffect } from 'react'; +import { + AppSettings, + FileSystemSettings, + ModelSettings, + Provider, +} from './types'; +import { + loadLLMSettings, + saveLLMSettings, +} from '../../../services/llmSettings'; +import { updateLLMConfig } from '../../../api/llmConfig'; +import { + loadFileSystemSettings, + saveFileSystemSettings, +} from '../../../services/fileSystemSettings'; +import { ipcClient } from '@renderer/api'; +import { atom, useAtom } from 'jotai'; + +const DEFAULT_MODEL_SETTINGS: ModelSettings = { + provider: Provider.OPENAI, + model: 'gpt-4o', + apiKey: '', + apiVersion: '', + endpoint: '', + customModel: '', +}; + +const DEFAULT_FILESYSTEM_SETTINGS: FileSystemSettings = { + availableDirectories: [], +}; + +export const appSettingsAtom = atom({ + model: DEFAULT_MODEL_SETTINGS, + fileSystem: DEFAULT_FILESYSTEM_SETTINGS, +}); + +export function useAppSettings() { + const [settings, setSettings] = useAtom(appSettingsAtom); + + // Load settings from localStorage on mount + useEffect(() => { + const savedModelSettings = loadLLMSettings(); + const savedFileSystemSettings = loadFileSystemSettings(); + + setSettings({ + model: savedModelSettings || DEFAULT_MODEL_SETTINGS, + fileSystem: savedFileSystemSettings || DEFAULT_FILESYSTEM_SETTINGS, + }); + }, []); + + const saveSettings = async () => { + // Save LLM settings + saveLLMSettings(settings.model); + await updateLLMConfig(settings.model); + + // Save file system settings + saveFileSystemSettings(settings.fileSystem); + await ipcClient.updateFileSystemConfig(settings.fileSystem); + + return true; + }; + + return { + settings, + setSettings, + saveSettings, + }; +} diff --git a/apps/omega/src/renderer/src/components/LeftSidebar/Settings/useModelSettings.ts b/apps/omega/src/renderer/src/components/LeftSidebar/Settings/useModelSettings.ts new file mode 100644 index 000000000..3e52dbdb6 --- /dev/null +++ b/apps/omega/src/renderer/src/components/LeftSidebar/Settings/useModelSettings.ts @@ -0,0 +1,43 @@ +import { useState, useEffect } from 'react'; +import { ModelSettings, Provider } from './types'; +import { + loadLLMSettings, + saveLLMSettings, +} from '../../../services/llmSettings'; +import { updateLLMConfig } from '../../../api/llmConfig'; + +export function useModelSettings() { + const [settings, setSettings] = useState({ + provider: Provider.OPENAI, + model: 'gpt-4o', + apiKey: '', + apiVersion: '', + endpoint: '', + customModel: '', + }); + + // Load settings from localStorage on mount + useEffect(() => { + const savedSettings = loadLLMSettings(); + if (savedSettings) { + setSettings(savedSettings); + } + }, []); + + const saveSettings = async () => { + // Save settings directly without modifying the model field + const finalSettings = { ...settings }; + + // Save to localStorage + saveLLMSettings(finalSettings); + + // Update LLM configuration in main process + await updateLLMConfig(finalSettings); + }; + + return { + settings, + setSettings, + saveSettings, + }; +} diff --git a/apps/omega/src/renderer/src/components/LeftSidebar/Settings/useProviders.ts b/apps/omega/src/renderer/src/components/LeftSidebar/Settings/useProviders.ts new file mode 100644 index 000000000..d13c14e72 --- /dev/null +++ b/apps/omega/src/renderer/src/components/LeftSidebar/Settings/useProviders.ts @@ -0,0 +1,26 @@ +import { useState, useEffect } from 'react'; +import { getAvailableProviders } from '../../../api/llmConfig'; +import { Provider } from './types'; + +export function useProviders() { + const [providers, setProviders] = useState([]); + const [loading, setLoading] = useState(true); + + useEffect(() => { + async function fetchProviders() { + try { + const availableProviders = + (await getAvailableProviders()) as Provider[]; + setProviders(availableProviders); + } catch (error) { + console.error('Failed to fetch providers:', error); + } finally { + setLoading(false); + } + } + + fetchProviders(); + }, []); + + return { providers, loading }; +} diff --git a/apps/omega/src/renderer/src/components/LeftSidebar/TopBar.tsx b/apps/omega/src/renderer/src/components/LeftSidebar/TopBar.tsx new file mode 100644 index 000000000..6339ee962 --- /dev/null +++ b/apps/omega/src/renderer/src/components/LeftSidebar/TopBar.tsx @@ -0,0 +1,53 @@ +import { BiSidebar, BiEdit, BiMoon, BiSun } from 'react-icons/bi'; +import { Tooltip } from '@nextui-org/react'; +import styles from './index.module.scss'; + +interface TopBarProps { + isCollapsed: boolean; + isDarkMode: boolean; + onToggleCollapse: () => void; + onToggleTheme: () => void; + onAddSession: () => void; +} + +export function TopBar({ + isCollapsed, + isDarkMode, + onToggleCollapse, + onToggleTheme, + onAddSession, +}: TopBarProps) { + return ( +
    + {!isCollapsed && Omega} +
    + + + + + + + + + +
    +
    + ); +} diff --git a/apps/omega/src/renderer/src/components/LeftSidebar/index.module.scss b/apps/omega/src/renderer/src/components/LeftSidebar/index.module.scss new file mode 100644 index 000000000..3886299a1 --- /dev/null +++ b/apps/omega/src/renderer/src/components/LeftSidebar/index.module.scss @@ -0,0 +1,395 @@ +.sidebar { + position: fixed; + top: 0; + left: 0; + height: 100vh; + background: var(--ai-color-bg-secondary); + box-shadow: var(--shadow-md); + transition: + width var(--transition-smooth), + box-shadow var(--transition-smooth); + overflow: hidden; + border-right: 1px solid var(--ai-color-border); + display: flex; + flex-direction: column; + z-index: 10; + + &.expanded { + width: 260px; + } + + &.collapsed { + width: 56px; + } +} + +.topbar { + flex-shrink: 0; + padding: 8px 12px 0; + margin-top: 10px; + margin-bottom: 10px; + display: flex; + justify-content: space-between; + align-items: center; + gap: 8px; + + &.collapsed { + margin-top: 0; + padding: 20px 0 0; + justify-content: center; + flex-direction: column; + height: auto; + gap: 12px; + } +} + +.title { + margin: 0; + margin-left: 10px; + font-size: 16px; + font-weight: 600; + color: var(--ai-color-text-primary); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + animation: fadeIn 0.3s ease; +} + +.toggleButton { + width: 32px; + height: 32px; + border: 1px solid var(--ai-color-border); + border-radius: var(--radius-md); + background: var(--ai-color-bg-primary); + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + transition: transform var(--transition-normal); + color: var(--ai-color-text-tertiary); + z-index: 10; + + &:hover { + background: var(--ai-color-bg-hover); + color: var(--ai-color-text-primary); + border-color: var(--ai-color-border-hover); + } + + &:active { + transform: scale(0.95); + } +} + +.messageList { + flex: 1; + padding: 8px; + padding-top: 0; + overflow-y: auto; + + &::-webkit-scrollbar { + width: 4px; + } + + &::-webkit-scrollbar-track { + background: transparent; + } + + &::-webkit-scrollbar-thumb { + background: var(--ai-color-bg-quaternary); + border-radius: var(--radius-sm); + + &:hover { + background: var(--ai-color-text-quaternary); + } + } + + &.collapsed { + display: none; + } +} + +.messageItem { + padding: 6px 12px; + margin: 0 4px 4px; + flex-shrink: 0; + border-radius: var(--radius-md); + cursor: pointer; + transition: transform var(--transition-normal); + font-size: 14px; + color: var(--ai-color-text-primary); + background: var(--ai-color-bg-secondary); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + display: flex; + align-items: center; + gap: 8px; + height: 36px; + padding: 0 12px; + box-sizing: border-box; + + &:hover { + background: var(--ai-color-bg-hover); + color: var(--ai-color-text-primary); + } + + &:active { + background: var(--ai-color-bg-active); + } + + &.active { + background: var(--ai-color-primary-bg); + color: var(--ai-color-primary); + height: 36px; + font-weight: 500; + } + + .moreButton { + opacity: 0; + transition: opacity 0.2s ease; + } + + &:hover { + .moreButton { + opacity: 0.7; + + &:hover { + opacity: 1; + background-color: rgba(0, 0, 0, 0.1); + } + } + } +} + +.header { + display: flex; + align-items: center; + gap: 12px; + padding: 16px; +} + +.controls { + display: flex; + gap: 8px; + align-items: center; + + &.controlsCollapsed { + flex-direction: column; + } +} + +.messageTitle { + flex: 1; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.messageItem { + display: flex; + align-items: center; + gap: 8px; +} + +.deleteButton { + opacity: 0; + background: none; + border: none; + padding: 6px; + color: var(--ai-color-danger); + cursor: pointer; + border-radius: var(--radius-sm); + transition: all var(--transition-normal); + + &:hover { + background: var(--ai-color-danger-bg); + color: var(--ai-color-danger-hover); + } +} + +.messageItem:hover .deleteButton { + opacity: 1; +} + +@keyframes fadeIn { + from { + opacity: 0; + transform: translateX(-10px); + } + to { + opacity: 1; + transform: translateX(0); + } +} + +.editContainer { + display: flex; + align-items: center; + gap: 4px; + width: 100%; +} + +.editInput { + flex: 1; + background: var(--ai-color-bg-primary); + border: 1px solid var(--ai-color-border); + border-radius: var(--radius-sm); + padding: 2px 8px; + font-size: 14px; + font-weight: normal; + color: var(--ai-color-text-primary); + height: 24px; + + &:focus { + outline: none; + border-color: var(--ai-color-primary); + } +} + +.actionButtons { + display: flex; + gap: 4px; + opacity: 0; + transition: opacity var(--transition-normal); + height: 100%; + display: flex; + align-items: center; +} + +.messageItem:hover .actionButtons { + opacity: 1; +} + +.editButton { + opacity: 0; + border: none; + padding: 6px; + color: var(--ai-color-text-tertiary); + cursor: pointer; + border-radius: var(--radius-sm); + transition: all var(--transition-normal); + display: flex; + align-items: center; + justify-content: center; + font-size: 18px; + + &:hover { + color: var(--ai-color-text-primary); + } + + &:active { + background: var(--ai-color-button-active); + } +} + +.messageItem:hover .editButton { + opacity: 1; +} + +.editContainer .editButton { + color: #22c55e; + + &:hover { + color: #16a34a; + } +} + +@keyframes fadeIn { + from { + opacity: 0; + transform: translateX(-10px); + } + to { + opacity: 1; + transform: translateX(0); + } +} + +.itemContent { + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; + padding-right: 4px; +} + +.moreButton { + display: flex; + align-items: center; + justify-content: center; + background: transparent; + border: none; + padding: 4px; + color: inherit; + opacity: 0.7; + cursor: pointer; + border-radius: 4px; + + &:hover { + opacity: 1; + background-color: rgba(0, 0, 0, 0.1); + } +} + +.aiNav { + width: 100%; + padding: 8px; +} + +.navItem { + display: flex; + align-items: center; + gap: 12px; + padding: 6px 12px; + border-radius: 8px; + cursor: pointer; + transition: all 0.2s ease; + color: var(--ai-color-text-secondary); + margin-bottom: 2px; + + &:hover { + background: var(--ai-color-bg-hover); + color: var(--ai-color-text-primary); + } + + &:active { + transform: scale(0.98); + } +} + +.navIcon { + display: flex; + align-items: center; + justify-content: center; + width: 24px; + height: 24px; +} + +.navTitle { + font-size: 14px; + font-weight: 500; +} + +.sidebarPlaceholder { + flex-shrink: 0; + transition: width var(--transition-smooth); + + &.expanded { + width: 260px; + } + + &.collapsed { + width: 56px; + } +} + +.bottomBar { + padding: 12px; + display: flex; + justify-content: center; + margin-bottom: 12px; + + &.collapsed { + padding: 0px 0; + } +} diff --git a/apps/omega/src/renderer/src/components/LeftSidebar/index.tsx b/apps/omega/src/renderer/src/components/LeftSidebar/index.tsx new file mode 100644 index 000000000..2b66ece40 --- /dev/null +++ b/apps/omega/src/renderer/src/components/LeftSidebar/index.tsx @@ -0,0 +1,157 @@ +import styles from './index.module.scss'; +import { atom, useAtom } from 'jotai'; +import { useEffect, useState } from 'react'; +import { useThemeMode } from '@renderer/hooks/useThemeMode'; +import { TopBar } from './TopBar'; +import { BottomBar } from './BottomBar'; +import { DeleteModal } from './DeleteModal'; +import { SettingsModal } from './Settings'; +import { SessionList } from './SessionList'; +import { useChatSessions } from '@renderer/hooks/useChatSession'; +import { useAppChat } from '@renderer/hooks/useAppChat'; +import toast from 'react-hot-toast'; + +export const leftSidebarCollapsedAtom = atom(false); +export const DEFAULT_APP_ID = 'omega-agent'; + +export function LeftSidebar() { + const [isCollapsed, setIsCollapsed] = useAtom(leftSidebarCollapsedAtom); + const { toggle: toggleTheme, value: isDarkMode } = useThemeMode(); + const [deleteModalOpen, setDeleteModalOpen] = useState(false); + const [settingsModalOpen, setSettingsModalOpen] = useState(false); + const [sessionToDelete, setSessionToDelete] = useState(null); + const [editingSessionId, setEditingSessionId] = useState(null); + const [editingName, setEditingName] = useState(''); + const { messageSending } = useAppChat(); + const { + chatSessions, + currentSessionId, + updateCurrentSessionId, + addNewSession, + removeSession, + initializeSessions, + updateChatSession, + } = useChatSessions({ + appId: 'omega-agent', + origin: 'omega', + }); + + useEffect(() => { + initializeSessions(); + }, [initializeSessions]); + + const handleAddSession = () => { + addNewSession({ + appId: 'omega-agent', + name: 'New Session', + messageCount: 0, + origin: 'ami', + }); + }; + + const handleDeleteSession = (sessionId: string, e: React.MouseEvent) => { + e.stopPropagation(); + setSessionToDelete(sessionId); + setDeleteModalOpen(true); + }; + + const confirmDelete = () => { + if (sessionToDelete) { + removeSession(sessionToDelete); + setDeleteModalOpen(false); + setSessionToDelete(null); + } + }; + + const handleEditSession = ( + sessionId: string, + currentName: string, + e: React.MouseEvent, + ) => { + e.stopPropagation(); + setEditingSessionId(sessionId); + setEditingName(currentName); + }; + + const handleSaveEdit = async (sessionId: string, e: React.MouseEvent) => { + e.stopPropagation(); + if (editingName.trim()) { + await updateChatSession(sessionId, { name: editingName.trim() }); + setEditingSessionId(null); + } + }; + + const handleKeyDown = async (e: React.KeyboardEvent, sessionId: string) => { + if (e.key === 'Enter') { + e.preventDefault(); + if (editingName.trim()) { + await updateChatSession(sessionId, { name: editingName.trim() }); + setEditingSessionId(null); + } + } else if (e.key === 'Escape') { + setEditingSessionId(null); + } + }; + + return ( + <> +
    + +
    + setIsCollapsed(!isCollapsed)} + onToggleTheme={toggleTheme} + onAddSession={handleAddSession} + /> + +
    + { + if (messageSending) { + toast.error('Please finish sending message first'); + return; + } + updateCurrentSessionId(sessionId); + }} + /> +
    + + setSettingsModalOpen(true)} + /> +
    + + { + setDeleteModalOpen(false); + setSessionToDelete(null); + }} + onConfirm={confirmDelete} + /> + + setSettingsModalOpen(false)} + /> + + ); +} diff --git a/apps/omega/src/renderer/src/components/LeftSidebar/type.ts b/apps/omega/src/renderer/src/components/LeftSidebar/type.ts new file mode 100644 index 000000000..aaeb1b836 --- /dev/null +++ b/apps/omega/src/renderer/src/components/LeftSidebar/type.ts @@ -0,0 +1,10 @@ +export interface ChatSession { + // eslint-disable-next-line @typescript-eslint/naming-convention + id: string; + name: string; + appId: string; + messageCount: number; + origin?: string; + createdAt?: string; + updatedAt?: string; +} diff --git a/apps/omega/src/renderer/src/components/LoadingSpinner/index.tsx b/apps/omega/src/renderer/src/components/LoadingSpinner/index.tsx new file mode 100644 index 000000000..4530829ae --- /dev/null +++ b/apps/omega/src/renderer/src/components/LoadingSpinner/index.tsx @@ -0,0 +1,37 @@ +import { Loader2 } from 'lucide-react'; +import styled, { keyframes } from 'styled-components'; + +const spin = keyframes` + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +`; + +const SpinnerWrapper = styled.div<{ size?: number; color?: string }>` + display: inline-flex; + align-items: center; + justify-content: center; + + svg { + animation: ${spin} 1.5s linear infinite; + width: ${(props) => props.size || 16}px; + height: ${(props) => props.size || 16}px; + color: ${(props) => props.color || 'var(--ai-color-primary)'}; + } +`; + +interface LoadingSpinnerProps { + size?: number; + color?: string; +} + +export function LoadingSpinner({ size, color }: LoadingSpinnerProps) { + return ( + + + + ); +} diff --git a/apps/omega/src/renderer/src/components/MonacoEditor.tsx b/apps/omega/src/renderer/src/components/MonacoEditor.tsx new file mode 100644 index 000000000..d068000a6 --- /dev/null +++ b/apps/omega/src/renderer/src/components/MonacoEditor.tsx @@ -0,0 +1,79 @@ +import { useThemeMode } from '@renderer/hooks/useThemeMode'; +import { Editor, loader } from '@monaco-editor/react'; +import { defaultEditorOptions } from '@renderer/utils/monacoConfig'; +import * as monaco from 'monaco-editor'; +import editorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker'; +import jsonWorker from 'monaco-editor/esm/vs/language/json/json.worker?worker'; +import cssWorker from 'monaco-editor/esm/vs/language/css/css.worker?worker'; +import htmlWorker from 'monaco-editor/esm/vs/language/html/html.worker?worker'; +import tsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker?worker'; +import { isReportHtmlMode } from '@renderer/constants'; + +interface MonacoEditorProps { + language: string; + value: string; + readOnly?: boolean; + height?: string | number; +} + +loader.config({ + paths: { + vs: isReportHtmlMode + ? 'https://unpkg.com/monaco-editor@0.44.0/min/vs' + : 'monaco-editor/esm/vs', + }, + 'vs/nls': { + availableLanguages: {}, + }, + monaco, +}); + +if (window.MonacoEnvironment === undefined && !isReportHtmlMode) { + window.MonacoEnvironment = { + getWorker(_, label) { + if (label === 'json') { + return new jsonWorker(); + } + if (label === 'css' || label === 'scss' || label === 'less') { + return new cssWorker(); + } + if (label === 'html' || label === 'handlebars' || label === 'razor') { + return new htmlWorker(); + } + if (label === 'typescript' || label === 'javascript') { + return new tsWorker(); + } + return new editorWorker(); + }, + }; +} + +export function MonacoEditor({ + language, + value, + readOnly = true, + height = '100%', +}: MonacoEditorProps) { + const isDarkMode = useThemeMode(); + + return ( + + Loading editor... +
    + } + beforeMount={(monaco) => { + monaco.editor.onDidCreateModel(() => {}); + }} + /> + ); +} diff --git a/apps/omega/src/renderer/src/constants/index.ts b/apps/omega/src/renderer/src/constants/index.ts new file mode 100644 index 000000000..42335583e --- /dev/null +++ b/apps/omega/src/renderer/src/constants/index.ts @@ -0,0 +1,15 @@ +import { ToolCallType } from '@renderer/type/agent'; + +export const STORAGE_DB_NAME = 'open-agent-chat'; + +export const SNAPSHOT_BROWSER_ACTIONS = [ + ToolCallType.BrowserHover, + ToolCallType.BrowserNewTab, + ToolCallType.BrowserNavigate, + ToolCallType.BrowserSelect, + ToolCallType.BrowserClick, + ToolCallType.BrowserFormInputFill, + ToolCallType.BrowserSwitchTab, + ToolCallType.BrowserScroll, +]; +export const isReportHtmlMode = Boolean(process.env.REPORT_HTML_MODE); diff --git a/apps/omega/src/renderer/src/env.d.ts b/apps/omega/src/renderer/src/env.d.ts new file mode 100644 index 000000000..11f02fe2a --- /dev/null +++ b/apps/omega/src/renderer/src/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/apps/omega/src/renderer/src/hooks/useAddUserMessage.ts b/apps/omega/src/renderer/src/hooks/useAddUserMessage.ts new file mode 100644 index 000000000..cfe79dc2e --- /dev/null +++ b/apps/omega/src/renderer/src/hooks/useAddUserMessage.ts @@ -0,0 +1,56 @@ +import { + InputFile, + InputFileType, + MessageRole, + MessageType, +} from '@vendor/chat-ui'; +import { useAppChat } from './useAppChat'; +import { useCallback } from 'react'; + +export function useAddUserMessage() { + const { addMessage } = useAppChat(); + + const addUserMessage = useCallback( + async (inputText: string, inputFiles: InputFile[]) => { + await addMessage( + { + type: MessageType.PlainText, + content: inputText, + role: MessageRole.User, + timestamp: Date.now(), + }, + { + shouldSyncStorage: true, + }, + ); + + if (inputFiles.length > 0) { + for (const file of inputFiles) { + const normalizedFile = + file.type === InputFileType.Image + ? file + : { + ...file, + content: '', + }; + + await addMessage( + { + role: MessageRole.User, + type: MessageType.File, + content: normalizedFile, + isFinal: true, + timestamp: Date.now(), + }, + { + shouldSyncStorage: true, + }, + ); + } + } + }, + [addMessage], + ); + + return addUserMessage; +} diff --git a/apps/omega/src/renderer/src/hooks/useAgentFlow.ts b/apps/omega/src/renderer/src/hooks/useAgentFlow.ts new file mode 100644 index 000000000..465b4f517 --- /dev/null +++ b/apps/omega/src/renderer/src/hooks/useAgentFlow.ts @@ -0,0 +1,97 @@ +import { useCallback } from 'react'; +import { useAppChat } from './useAppChat'; +import { InputFile, MessageRole } from '@vendor/chat-ui'; +import { AgentFlow } from '../agent/AgentFlow'; +import { EventItem } from '@renderer/type/event'; +import { useAtom } from 'jotai'; +import { + agentStatusTipAtom, + currentAgentFlowIdRefAtom, + currentEventIdAtom, + eventsAtom, + planTasksAtom, +} from '@renderer/state/chat'; +import { v4 as uuid } from 'uuid'; +import { PlanTask } from '@renderer/type/agent'; +import { showCanvasAtom } from '@renderer/state/canvas'; +import { useChatSessions } from './useChatSession'; +import { DEFAULT_APP_ID } from '@renderer/components/LeftSidebar'; +import { ipcClient } from '@renderer/api'; +import { Message } from '@agent-infra/shared'; + +export interface AppContext { + chatUtils: ReturnType; + request: { + inputText: string; + inputFiles: InputFile[]; + }; + agentFlowId: string; + setEventId: (eventId: string) => void; + setEvents: React.Dispatch>; + setAgentStatusTip: (status: string) => void; + setPlanTasks: (tasks: PlanTask[]) => void; + setShowCanvas: (show: boolean) => void; +} + +export function useAgentFlow() { + const chatUtils = useAppChat(); + const [, setEvents] = useAtom(eventsAtom); + const [, setAgentStatusTip] = useAtom(agentStatusTipAtom); + const [currentAgentFlowIdRef] = useAtom(currentAgentFlowIdRefAtom); + const [, setShowCanvas] = useAtom(showCanvasAtom); + const [, setEventId] = useAtom(currentEventIdAtom); + const [, setPlanTasks] = useAtom(planTasksAtom); + const { updateChatSession, currentSessionId } = useChatSessions({ + appId: DEFAULT_APP_ID, + }); + + const updateSessionTitle = useCallback( + async (input: string) => { + if (!currentSessionId) { + return; + } + const userMessages = chatUtils.messages + .filter((m) => m.role === MessageRole.User) + .slice(-5); + const userMessageContent = + userMessages.map((m) => m.content).join('\n') + input; + const result = await ipcClient.askLLMText({ + messages: [ + Message.systemMessage( + `You are conversation summary expert.Please give a title for the coversation topic, the topic should be no more than 20 words.You can only output the topic content, don't output any other words.Use the same with as the language of the user input.`, + ), + Message.userMessage( + `user input: ${userMessageContent}, please give me the topic title.`, + ), + ], + requestId: uuid(), + }); + await updateChatSession(currentSessionId, { + name: result, + }); + }, + [currentSessionId, updateChatSession, chatUtils.messages], + ); + + return useCallback( + async (inputText: string, inputFiles: InputFile[]) => { + const agentFlowId = uuid(); + currentAgentFlowIdRef.current = agentFlowId; + const agentFlow = new AgentFlow({ + chatUtils, + setEvents, + setEventId, + setAgentStatusTip, + setPlanTasks, + setShowCanvas, + agentFlowId, + request: { + inputText, + inputFiles, + }, + }); + await Promise.all([agentFlow.run(), updateSessionTitle(inputText)]); + }, + [chatUtils, setEvents, updateSessionTitle], + ); +} diff --git a/apps/omega/src/renderer/src/hooks/useAppChat.ts b/apps/omega/src/renderer/src/hooks/useAppChat.ts new file mode 100644 index 000000000..2c947b727 --- /dev/null +++ b/apps/omega/src/renderer/src/hooks/useAppChat.ts @@ -0,0 +1,15 @@ +import { useChat } from '@vendor/chat-ui'; +import { STORAGE_DB_NAME } from '@renderer/constants'; +import { MessageContentType } from '@renderer/type/chatMessage'; +import { useChatSessions } from './useChatSession'; +import { DEFAULT_APP_ID } from '@renderer/components/LeftSidebar'; + +export function useAppChat() { + const { currentSessionId } = useChatSessions({ + appId: DEFAULT_APP_ID, + }); + return useChat({ + storageDbName: STORAGE_DB_NAME, + conversationId: currentSessionId || 'default', + }); +} diff --git a/apps/omega/src/renderer/src/hooks/useChatSession.ts b/apps/omega/src/renderer/src/hooks/useChatSession.ts new file mode 100644 index 000000000..ca42aed07 --- /dev/null +++ b/apps/omega/src/renderer/src/hooks/useChatSession.ts @@ -0,0 +1,171 @@ +import { ChatSession } from '@renderer/components/LeftSidebar/type'; +import { useAtom, atom } from 'jotai'; +import { useCallback } from 'react'; +import { + createSession, + deleteSession, + getSessions, + updateSession, +} from '@renderer/services/chatSessionStorage'; + +// Create atoms for each app's chat sessions and current session ID +const createAppAtoms = () => { + const chatSessionsAtom = atom([]); + const currentSessionIdAtom = atom(null); + const initStateRefAtom = atom<{ + current: 'pending' | 'loading' | 'finished'; + }>({ current: 'pending' }); + return { chatSessionsAtom, currentSessionIdAtom, initStateRefAtom }; +}; + +// Create a map to store atoms for each app +const appAtomsMap = new Map>(); + +// eslint-disable-next-line max-lines-per-function +export function useChatSessions({ + appId, + origin, + onSwitchSession, +}: { + appId: string; + origin?: string; + onSwitchSession?: (session: ChatSession) => void | Promise; +}) { + // Get or create atoms for the current app + if (!appAtomsMap.has(appId)) { + appAtomsMap.set(appId, createAppAtoms()); + } + const { chatSessionsAtom, currentSessionIdAtom, initStateRefAtom } = + appAtomsMap.get(appId)!; + + const [chatSessions, setChatSessions] = useAtom(chatSessionsAtom); + const [currentSessionId, setCurrentSessionId] = useAtom(currentSessionIdAtom); + const [initStateRef] = useAtom(initStateRefAtom); + + const updateChatSession = useCallback( + async ( + sessionId: string, + newSessionData: Partial, + options: { + shouldSyncRemote: boolean; + } = { shouldSyncRemote: true }, + ) => { + if (options.shouldSyncRemote) { + await updateSession(sessionId, newSessionData); + } + setChatSessions((sessions) => + sessions.map((session) => + session.id === sessionId + ? { + ...session, + ...newSessionData, + } + : session, + ), + ); + }, + [setChatSessions], + ); + + const updateCurrentSessionId = useCallback( + async (newSessionId: string, callback?: () => void) => { + setCurrentSessionId(newSessionId); + localStorage.setItem(`${appId}-current-chat-session-id`, newSessionId); + const targetSession = chatSessions.find( + (session) => session.id === newSessionId, + ); + await onSwitchSession?.(targetSession!); + callback?.(); + }, + [appId, setCurrentSessionId, chatSessions], + ); + + const addNewSession = useCallback( + async (sessionData: Omit) => { + const newSession = await createSession(sessionData); + setChatSessions((sessions) => [...sessions, newSession]); + updateCurrentSessionId(newSession.id!); + }, + [setChatSessions, updateCurrentSessionId], + ); + + const removeSession = useCallback( + async (sessionId: string) => { + await deleteSession(sessionId); + setChatSessions((sessions) => { + const updatedSessions = sessions.filter( + (session) => session.id !== sessionId, + ); + if (sessionId === currentSessionId && updatedSessions.length > 0) { + updateCurrentSessionId( + updatedSessions[updatedSessions.length - 1].id!, + ); + } else if (updatedSessions.length === 0) { + setCurrentSessionId(null); + localStorage.removeItem(`${appId}-current-chat-session-id`); + } + return updatedSessions; + }); + }, + [ + appId, + currentSessionId, + setChatSessions, + setCurrentSessionId, + updateCurrentSessionId, + ], + ); + + const initializeSessions = useCallback(async () => { + if (initStateRef.current === 'pending') { + console.log('初始化 session...'); + initStateRef.current = 'loading'; + const storedCurrentSessionId = localStorage.getItem( + `${appId}-current-chat-session-id`, + ); + + // Get all sessions from API + const sessions = await getSessions(appId); + + if (sessions.length > 0) { + setChatSessions(sessions); + + if ( + storedCurrentSessionId && + sessions.some((s) => s.id === storedCurrentSessionId) + ) { + // Restore previous session if it exists + setCurrentSessionId(storedCurrentSessionId); + await onSwitchSession?.( + sessions.find((s) => s.id === storedCurrentSessionId)!, + ); + } else { + // Use the last session if stored session not found + updateCurrentSessionId(sessions[sessions.length - 1].id!); + } + } else { + // Create default session if no sessions exist + const defaultSession = await createSession({ + appId, + name: '当前会话', + messageCount: 0, + origin, + }); + setChatSessions([defaultSession]); + updateCurrentSessionId(defaultSession.id!); + } + } + initStateRef.current = 'finished'; + }, []); + + return { + currentSessionId, + updateChatSession, + updateCurrentSessionId, + addNewSession, + chatSessions, + removeSession, + initializeSessions, + initStateRef, + }; +} diff --git a/apps/omega/src/renderer/src/hooks/useFileSystemSettings.ts b/apps/omega/src/renderer/src/hooks/useFileSystemSettings.ts new file mode 100644 index 000000000..84c884708 --- /dev/null +++ b/apps/omega/src/renderer/src/hooks/useFileSystemSettings.ts @@ -0,0 +1,57 @@ +import { useEffect, useState } from 'react'; +import { ipcClient } from '@renderer/api'; +import { + loadFileSystemSettings, + saveFileSystemSettings, +} from '@renderer/services/fileSystemSettings'; + +export function useFileSystemSettings() { + const [initialized, setInitialized] = useState(false); + + useEffect(() => { + async function initFileSystemSettings() { + try { + // Get current allowed directories from main process + const allowedDirectories = await ipcClient.getAllowedDirectories(); + + // Load settings from localStorage + const settings = loadFileSystemSettings(); + + // If no settings exist, create them with the allowed directories + if (!settings) { + saveFileSystemSettings({ availableDirectories: allowedDirectories }); + } else { + // Make sure the settings match the main process + const updatedSettings = { + ...settings, + availableDirectories: Array.from( + new Set([ + ...settings.availableDirectories, + ...allowedDirectories, + ]), + ), + }; + + // Save updated settings + saveFileSystemSettings(updatedSettings); + + // Update main process if needed + if ( + JSON.stringify(updatedSettings.availableDirectories) !== + JSON.stringify(allowedDirectories) + ) { + await ipcClient.updateFileSystemConfig(updatedSettings); + } + } + + setInitialized(true); + } catch (error) { + console.error('Failed to initialize file system settings:', error); + } + } + + initFileSystemSettings(); + }, []); + + return { initialized }; +} diff --git a/apps/omega/src/renderer/src/hooks/useThemeMode.ts b/apps/omega/src/renderer/src/hooks/useThemeMode.ts new file mode 100644 index 000000000..bbbb29b20 --- /dev/null +++ b/apps/omega/src/renderer/src/hooks/useThemeMode.ts @@ -0,0 +1,11 @@ +import useDarkMode from 'use-dark-mode'; + +window.global = window; + +export const useThemeMode = () => + useDarkMode(false, { + classNameDark: 'dark', + classNameLight: 'light', + element: window.document.documentElement, + storageKey: 'open-agent-dark-mode', + }); diff --git a/apps/omega/src/renderer/src/index.scss b/apps/omega/src/renderer/src/index.scss new file mode 100644 index 000000000..7382ff847 --- /dev/null +++ b/apps/omega/src/renderer/src/index.scss @@ -0,0 +1,361 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +:root { + /* Colors */ + --ai-color-primary: #6366f1; /* indigo-500 */ + --ai-color-primary-hover: #818cf8; /* indigo-400 */ + --ai-color-primary-active: #4f46e5; /* indigo-600 */ + --ai-color-primary-bg: #eef2ff; /* indigo-50 */ + + /* Text Colors */ + --ai-color-text-primary: #1a1a1a; + --ai-color-text-secondary: #454545; + --ai-color-text-tertiary: #666666; + --ai-color-text-quaternary: #999999; + + /* Background Colors */ + --ai-color-bg-primary: #ffffff; + --ai-color-bg-secondary: #fafafa; + --ai-color-bg-tertiary: #f5f6f7; + --ai-color-bg-quaternary: #f0f0f0; + --ai-color-bg-hover: #f0f0f0; + --ai-color-bg-active: #ebedf0; + + /* Border Colors */ + --ai-color-border: #f0f0f0; + --ai-color-border-hover: #e0e0e0; + + /* Shadow */ + --ai-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05); + --ai-shadow-md: 0 0 20px rgba(0, 0, 0, 0.05); + + /* Border Radius */ + --ai-radius-sm: 4px; + --ai-radius-md: 8px; + --radius-lg: 20px; + + /* Transitions */ + --transition-normal: 0.2s ease; + --transition-smooth: 0.3s cubic-bezier(0.4, 0, 0.2, 1); + + --ai-color-scrollbar: rgba(0, 0, 0, 0.2); + --ai-color-scrollbar-hover: rgba(0, 0, 0, 0.3); + --ai-color-scrollbar-bg: rgba(0, 0, 0, 0.05); + + /* 滚动条相关变量 */ + --ai-scrollbar-width: 12px; + --ai-scrollbar-height: 8px; + --ai-scrollbar-thumb-color: rgba(60, 60, 60, 0.18); + --ai-scrollbar-track-color: transparent; + --ai-scrollbar-border-radius: 6px; + + /* Danger Colors */ + --ai-color-danger: #dc2626; + --ai-color-danger-hover: #ef4444; + --ai-color-danger-bg: #fee2e2; + + /* Button Colors */ + --ai-color-button-bg: var(--ai-color-bg-tertiary); + --ai-color-button-hover: var(--ai-color-bg-quaternary); + --ai-color-button-active: var(--ai-color-bg-active); + --ai-color-button-text: var(--ai-color-text-tertiary); + --ai-color-button-text-hover: var(--ai-color-text-primary); +} + +.dark { + /* Colors */ + + --ai-color-primary: #6366f1; /* indigo-500 */ + --ai-color-primary-hover: #818cf8; /* indigo-400 */ + --ai-color-primary-active: #4f46e5; /* indigo-600 */ + --ai-color-primary-bg: #1e1b4b; /* indigo-950 */ + + /* Text Colors */ + --ai-color-text-primary: #e6e6e6; + --ai-color-text-secondary: #cccccc; + --ai-color-text-tertiary: #999999; + --ai-color-text-quaternary: #666666; + + /* Background Colors */ + --ai-color-bg-primary: #1a1a1a; + --ai-color-bg-secondary: #242424; + --ai-color-bg-tertiary: #2a2a2a; + --ai-color-bg-quaternary: #333333; + --ai-color-bg-hover: #2c2c2c; + --ai-color-bg-active: #363636; + + /* Border Colors */ + --ai-color-border: #303030; + --ai-color-border-hover: #404040; + + /* Shadow */ + --ai-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.2); + --ai-shadow-md: 0 0 20px rgba(0, 0, 0, 0.2); + + --ai-color-scrollbar: rgba(255, 255, 255, 0.2); + --ai-color-scrollbar-hover: rgba(255, 255, 255, 0.3); + --ai-color-scrollbar-bg: rgba(255, 255, 255, 0.05); + + /* 滚动条相关变量 */ + --ai-scrollbar-width: 12px; + --ai-scrollbar-height: 8px; + --ai-scrollbar-thumb-color: rgba(255, 255, 255, 0.18); + --ai-scrollbar-track-color: transparent; + + /* Danger Colors */ + --ai-color-danger: #ef4444; + --ai-color-danger-hover: #dc2626; + --ai-color-danger-bg: #451a1a; + + /* Button Colors */ + --ai-color-button-bg: var(--ai-color-bg-tertiary); + --ai-color-button-hover: var(--ai-color-bg-quaternary); + --ai-color-button-active: var(--ai-color-bg-active); + --ai-color-button-text: var(--ai-color-text-tertiary); + --ai-color-button-text-hover: var(--ai-color-text-primary); +} + +body { + color: var(--ai-color-text-primary); + background: var(--ai-color-bg-primary); +} + +.scrollbar { + scrollbar-gutter: stable; + + /* 滚动条大小 */ + &::-webkit-scrollbar { + width: var(--ai-scrollbar-width); + height: var(--ai-scrollbar-height); + transition: all 0.3s; + } + + /* 滚动条轨道 */ + &::-webkit-scrollbar-track { + background: var(--ai-scrollbar-track-color); + } + + /* 滚动条滑块 */ + &::-webkit-scrollbar-thumb { + border-radius: var(--ai-scrollbar-border-radius); + } + + /* 鼠标悬停时的滑块样式 */ + &:hover::-webkit-scrollbar-thumb { + border: 3px solid transparent; + background-color: var(--ai-scrollbar-thumb-color); + background-clip: content-box; + } + + /* 横向滚动条滑块 */ + &::-webkit-scrollbar-thumb:horizontal { + border: 3px solid transparent; + background-color: var(--ai-scrollbar-thumb-color); + background-clip: content-box; + } + + /* 滚动条交叉处 */ + &::-webkit-scrollbar-corner { + background: transparent; + } + + /* Firefox 滚动条样式 */ + scrollbar-width: thin; + scrollbar-color: var(--ai-scrollbar-thumb-color) + var(--ai-scrollbar-track-color); +} + +:root { + /* Colors */ + --ai-color-primary: #6366f1; /* indigo-500 */ + --ai-color-primary-hover: #818cf8; /* indigo-400 */ + --ai-color-primary-active: #4f46e5; /* indigo-600 */ + --ai-color-primary-bg: #eef2ff; /* indigo-50 */ + + /* Text Colors */ + --ai-color-text-primary: #1a1a1a; + --ai-color-text-secondary: #454545; + --ai-color-text-tertiary: #666666; + --ai-color-text-quaternary: #999999; + + /* Background Colors */ + --ai-color-bg-primary: #ffffff; + --ai-color-bg-secondary: #fafafa; + --ai-color-bg-tertiary: #f5f6f7; + --ai-color-bg-quaternary: #f0f0f0; + --ai-color-bg-hover: #f0f0f0; + --ai-color-bg-active: #ebedf0; + + /* Border Colors */ + --ai-color-border: #f0f0f0; + --ai-color-border-hover: #e0e0e0; + + /* Shadow */ + --ai-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05); + --ai-shadow-md: 0 0 20px rgba(0, 0, 0, 0.05); + + /* Border Radius */ + --radius-sm: 4px; + --radius-md: 8px; + --radius-lg: 20px; + + /* Transitions */ + --transition-normal: 0.2s ease; + --transition-smooth: 0.3s cubic-bezier(0.4, 0, 0.2, 1); + + --ai-color-scrollbar: rgba(0, 0, 0, 0.2); + --ai-color-scrollbar-hover: rgba(0, 0, 0, 0.3); + --ai-color-scrollbar-bg: rgba(0, 0, 0, 0.05); + + /* 滚动条相关变量 */ + --ai-scrollbar-width: 12px; + --ai-scrollbar-height: 8px; + --ai-scrollbar-thumb-color: rgba(60, 60, 60, 0.18); + --ai-scrollbar-track-color: transparent; + --ai-scrollbar-border-radius: 6px; + + /* Danger Colors */ + --ai-color-danger: #dc2626; + --ai-color-danger-hover: #ef4444; + --ai-color-danger-bg: #fee2e2; + + /* Button Colors */ + --ai-color-button-bg: var(--ai-color-bg-tertiary); + --ai-color-button-hover: var(--ai-color-bg-quaternary); + --ai-color-button-active: var(--ai-color-bg-active); + --ai-color-button-text: var(--ai-color-text-tertiary); + --ai-color-button-text-hover: var(--ai-color-text-primary); +} + +.dark { + /* Colors */ + + --ai-color-primary: #6366f1; /* indigo-500 */ + --ai-color-primary-hover: #818cf8; /* indigo-400 */ + --ai-color-primary-active: #4f46e5; /* indigo-600 */ + --ai-color-primary-bg: #1e1b4b; /* indigo-950 */ + + /* Text Colors */ + --ai-color-text-primary: #e6e6e6; + --ai-color-text-secondary: #cccccc; + --ai-color-text-tertiary: #999999; + --ai-color-text-quaternary: #666666; + + /* Background Colors */ + --ai-color-bg-primary: #1a1a1a; + --ai-color-bg-secondary: #242424; + --ai-color-bg-tertiary: #2a2a2a; + --ai-color-bg-quaternary: #333333; + --ai-color-bg-hover: #2c2c2c; + --ai-color-bg-active: #363636; + + /* Border Colors */ + --ai-color-border: #303030; + --ai-color-border-hover: #404040; + + /* Shadow */ + --ai-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.2); + --ai-shadow-md: 0 0 20px rgba(0, 0, 0, 0.2); + + --ai-color-scrollbar: rgba(255, 255, 255, 0.2); + --ai-color-scrollbar-hover: rgba(255, 255, 255, 0.3); + --ai-color-scrollbar-bg: rgba(255, 255, 255, 0.05); + + /* 滚动条相关变量 */ + --ai-scrollbar-width: 12px; + --ai-scrollbar-height: 8px; + --ai-scrollbar-thumb-color: rgba(255, 255, 255, 0.18); + --ai-scrollbar-track-color: transparent; + + /* Danger Colors */ + --ai-color-danger: #ef4444; + --ai-color-danger-hover: #dc2626; + --ai-color-danger-bg: #451a1a; + + /* Button Colors */ + --ai-color-button-bg: var(--ai-color-bg-tertiary); + --ai-color-button-hover: var(--ai-color-bg-quaternary); + --ai-color-button-active: var(--ai-color-bg-active); + --ai-color-button-text: var(--ai-color-text-tertiary); + --ai-color-button-text-hover: var(--ai-color-text-primary); +} + +body { + color: var(--ai-color-text-primary); + background: var(--ai-color-bg-primary); +} + +.scrollbar { + scrollbar-gutter: stable; + + /* 滚动条大小 */ + &::-webkit-scrollbar { + width: var(--ai-scrollbar-width); + height: var(--ai-scrollbar-height); + transition: all 0.3s; + } + + /* 滚动条轨道 */ + &::-webkit-scrollbar-track { + background: var(--ai-scrollbar-track-color); + } + + /* 滚动条滑块 */ + &::-webkit-scrollbar-thumb { + border-radius: var(--ai-scrollbar-border-radius); + } + + /* 鼠标悬停时的滑块样式 */ + &:hover::-webkit-scrollbar-thumb { + border: 3px solid transparent; + background-color: var(--ai-scrollbar-thumb-color); + background-clip: content-box; + } + + /* 横向滚动条滑块 */ + &::-webkit-scrollbar-thumb:horizontal { + border: 3px solid transparent; + background-color: var(--ai-scrollbar-thumb-color); + background-clip: content-box; + } + + /* 滚动条交叉处 */ + &::-webkit-scrollbar-corner { + background: transparent; + } + + /* Firefox 滚动条样式 */ + scrollbar-width: thin; + scrollbar-color: var(--ai-scrollbar-thumb-color) + var(--ai-scrollbar-track-color); +} + +@keyframes flash { + 0% { + transform: translateX(-100%); + opacity: 0; + } + 50% { + transform: translateX(100%); + opacity: 0.5; + } + 100% { + transform: translateX(100%); + opacity: 0; + } +} + +@keyframes spin { + from { + transform: perspective(100px) rotateX(10deg) rotateY(10deg) rotate(0deg); + } + to { + transform: perspective(100px) rotateX(10deg) rotateY(10deg) rotate(360deg); + } +} + +.animate-spin-slow { + animation: spin 3s linear infinite; +} diff --git a/apps/omega/src/renderer/src/main.tsx b/apps/omega/src/renderer/src/main.tsx new file mode 100644 index 000000000..ca9c5e42d --- /dev/null +++ b/apps/omega/src/renderer/src/main.tsx @@ -0,0 +1,13 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import App from './App'; +import './index.scss'; +import { initMonacoWorkers } from './utils/monacoConfig'; + +initMonacoWorkers(); + +ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( + + + , +); diff --git a/apps/omega/src/renderer/src/services/chatSessionStorage.ts b/apps/omega/src/renderer/src/services/chatSessionStorage.ts new file mode 100644 index 000000000..1d67f3307 --- /dev/null +++ b/apps/omega/src/renderer/src/services/chatSessionStorage.ts @@ -0,0 +1,116 @@ +import localforage from 'localforage'; +import { v4 as uuidv4 } from 'uuid'; +import { ChatSession } from '@renderer/components/LeftSidebar/type'; + +const chatSessionsStore = localforage.createInstance({ + name: 'chatSessions', + description: 'Storage for chat sessions', +}); + +export async function getSessions(appId: string): Promise { + try { + const allSessions = + (await chatSessionsStore.getItem>( + 'sessions', + )) || {}; + return allSessions[appId] || []; + } catch (error) { + console.error('Error getting sessions:', error); + return []; + } +} + +export async function createSession( + sessionData: Omit, +): Promise { + try { + const newSession: ChatSession = { + ...sessionData, + id: uuidv4(), + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), + }; + const allSessions = + (await chatSessionsStore.getItem>( + 'sessions', + )) || {}; + const appSessions = allSessions[sessionData.appId] || []; + + allSessions[sessionData.appId] = [...appSessions, newSession]; + + await chatSessionsStore.setItem('sessions', allSessions); + + return newSession; + } catch (error) { + console.error('Error creating session:', error); + throw new Error('Failed to create chat session'); + } +} + +export async function updateSession( + sessionId: string, + newSessionData: Partial, +): Promise { + try { + const allSessions = + (await chatSessionsStore.getItem>( + 'sessions', + )) || {}; + + let sessionUpdated = false; + + for (const appId in allSessions) { + allSessions[appId] = allSessions[appId].map((session) => { + if (session.id === sessionId) { + sessionUpdated = true; + return { + ...session, + ...newSessionData, + updatedAt: new Date().toISOString(), + }; + } + return session; + }); + } + + if (!sessionUpdated) { + throw new Error(`Session with id ${sessionId} not found`); + } + + await chatSessionsStore.setItem('sessions', allSessions); + } catch (error) { + console.error('Error updating session:', error); + throw new Error('Failed to update chat session'); + } +} + +export async function deleteSession(sessionId: string): Promise { + try { + const allSessions = + (await chatSessionsStore.getItem>( + 'sessions', + )) || {}; + + let sessionDeleted = false; + + for (const appId in allSessions) { + const originalLength = allSessions[appId].length; + allSessions[appId] = allSessions[appId].filter( + (session) => session.id !== sessionId, + ); + + if (allSessions[appId].length < originalLength) { + sessionDeleted = true; + } + } + + if (!sessionDeleted) { + throw new Error(`Session with id ${sessionId} not found`); + } + + await chatSessionsStore.setItem('sessions', allSessions); + } catch (error) { + console.error('Error deleting session:', error); + throw new Error('Failed to delete chat session'); + } +} diff --git a/apps/omega/src/renderer/src/services/filePermissionService.ts b/apps/omega/src/renderer/src/services/filePermissionService.ts new file mode 100644 index 000000000..a429cc26b --- /dev/null +++ b/apps/omega/src/renderer/src/services/filePermissionService.ts @@ -0,0 +1,92 @@ +import { atom, getDefaultStore } from 'jotai'; +import { isPathAllowed, getDefaultDirectory } from './fileSystemSettings'; +import path from 'path-browserify'; + +interface PermissionRequest { + path: string; + promise: Promise; + resolve: (value: boolean) => void; + reject: (reason: any) => void; +} + +export const pendingPermissionRequestAtom = atom( + null, +); + +/** + * Normalize a file path based on permissions + * @param filePath The file path to normalize + * @returns Normalized path (absolute) + */ +export function normalizePath(filePath: string): string { + // If it's already an absolute path, return it + if (filePath.startsWith('/')) { + return filePath; + } + + // Otherwise, make it relative to the default directory + const defaultDir = getDefaultDirectory(); + if (!defaultDir) { + throw new Error('No default directory configured'); + } + + return path.join(defaultDir, filePath); +} + +/** + * Check if a file operation is allowed and request permission if needed + * @param filePath The file path to check + * @returns Promise that resolves to true if allowed, false if denied + */ +export async function checkPathPermission(filePath: string): Promise { + // Normalize path first + const normalizedPath = normalizePath(filePath); + + // If path is allowed, return immediately + if (isPathAllowed(normalizedPath)) { + return true; + } + + // Get current atom value using getDefaultStore + const store = getDefaultStore(); + const currentRequest = store.get(pendingPermissionRequestAtom); + + // If there's already a pending request for this path, return its promise + if (currentRequest && currentRequest.path === normalizedPath) { + return currentRequest.promise; + } + + // Otherwise, create a new permission request + let resolvePromise: (value: boolean) => void = () => {}; + let rejectPromise: (reason: any) => void = () => {}; + + const promise = new Promise((resolve, reject) => { + resolvePromise = resolve; + rejectPromise = reject; + }); + + // Update the atom with the new request using getDefaultStore + store.set(pendingPermissionRequestAtom, { + path: normalizedPath, + promise, + resolve: resolvePromise, + reject: rejectPromise, + }); + + // Return the promise that will be resolved when user makes a decision + return promise; +} + +/** + * Resolve a pending permission request + * @param allowed Whether the permission was granted + */ +export function resolvePermission(allowed: boolean): void { + const store = getDefaultStore(); + const currentRequest = store.get(pendingPermissionRequestAtom); + + if (currentRequest) { + currentRequest.resolve(allowed); + store.set(pendingPermissionRequestAtom, null); + } +} diff --git a/apps/omega/src/renderer/src/services/fileSystemSettings.ts b/apps/omega/src/renderer/src/services/fileSystemSettings.ts new file mode 100644 index 000000000..7fdfdffe6 --- /dev/null +++ b/apps/omega/src/renderer/src/services/fileSystemSettings.ts @@ -0,0 +1,41 @@ +import { FileSystemSettings } from '../components/LeftSidebar/Settings/types'; + +const FILE_SYSTEM_SETTINGS_KEY = 'omega-filesystem-settings'; + +export function loadFileSystemSettings(): FileSystemSettings | null { + try { + const settingsJson = localStorage.getItem(FILE_SYSTEM_SETTINGS_KEY); + if (!settingsJson) return null; + return JSON.parse(settingsJson) as FileSystemSettings; + } catch (error) { + console.error('Failed to load file system settings:', error); + return null; + } +} + +export function saveFileSystemSettings(settings: FileSystemSettings): void { + try { + localStorage.setItem(FILE_SYSTEM_SETTINGS_KEY, JSON.stringify(settings)); + } catch (error) { + console.error('Failed to save file system settings:', error); + } +} + +export function getDefaultDirectory(): string | null { + const settings = loadFileSystemSettings(); + if (settings && settings.availableDirectories.length > 0) { + return settings.availableDirectories[0]; + } + return null; +} + +export function isPathAllowed(path: string): boolean { + const settings = loadFileSystemSettings(); + if (!settings || !settings.availableDirectories.length) return false; + + // If path is not absolute, it's allowed (will be relative to default dir) + if (!path.startsWith('/')) return true; + + // Check if the path is within any of the allowed directories + return settings.availableDirectories.some((dir) => path.startsWith(dir)); +} diff --git a/apps/omega/src/renderer/src/services/llmSettings.ts b/apps/omega/src/renderer/src/services/llmSettings.ts new file mode 100644 index 000000000..cbc2f576d --- /dev/null +++ b/apps/omega/src/renderer/src/services/llmSettings.ts @@ -0,0 +1,48 @@ +import { ModelSettings } from '../components/LeftSidebar/Settings/types'; + +const STORAGE_KEY = 'ai-model-settings'; + +/** + * Load LLM settings from localStorage + */ +export function loadLLMSettings(): ModelSettings | null { + try { + const savedSettings = localStorage.getItem(STORAGE_KEY); + if (savedSettings) { + return JSON.parse(savedSettings); + } + } catch (e) { + console.error('Failed to parse saved LLM settings', e); + } + return null; +} + +/** + * Save LLM settings to localStorage + */ +export function saveLLMSettings(settings: ModelSettings): void { + try { + localStorage.setItem(STORAGE_KEY, JSON.stringify(settings)); + } catch (e) { + console.error('Failed to save LLM settings', e); + } +} + +/** + * Get the current provider configuration based on settings + */ +export function getLLMProviderConfig(settings: ModelSettings) { + const { provider, model, apiKey, apiVersion, endpoint, customModel } = + settings; + + // For Azure, use the deployment name as the model + const finalModel = provider === 'azure_openai' ? customModel : model; + + return { + configName: provider, + model: finalModel, + apiKey, + apiVersion, + baseURL: endpoint, + }; +} diff --git a/apps/omega/src/renderer/src/state/canvas.ts b/apps/omega/src/renderer/src/state/canvas.ts new file mode 100644 index 000000000..6aa39782f --- /dev/null +++ b/apps/omega/src/renderer/src/state/canvas.ts @@ -0,0 +1,82 @@ +import { CanvasDataSource } from '@renderer/type/canvas'; +import { atom, SetStateAction, WritableAtom } from 'jotai'; + +class CanvasStateManager { + private baseState: WritableAtom< + { + isVisible: boolean; + dataSource: CanvasDataSource | null; + }, + [ + SetStateAction<{ + isVisible: boolean; + dataSource: CanvasDataSource | null; + }>, + ], + void + >; + + public readonly showCanvas: WritableAtom; + public readonly dataSource: WritableAtom< + CanvasDataSource | null, + [CanvasDataSource | null], + void + >; + public readonly updateState: WritableAtom< + null, + [ + { + isVisible?: boolean; + dataSource?: CanvasDataSource | null; + }, + ], + void + >; + + constructor( + initialVisible = true, + initialDataSource: CanvasDataSource | null = null, + ) { + this.baseState = atom({ + isVisible: initialVisible, + dataSource: initialDataSource, + }); + + this.showCanvas = atom( + (get) => get(this.baseState).isVisible, + (get, set, nextVisible: boolean) => { + const current = get(this.baseState); + set(this.baseState, { ...current, isVisible: nextVisible }); + }, + ); + + this.dataSource = atom( + (get) => get(this.baseState).dataSource, + (get, set, nextDataSource: CanvasDataSource | null) => { + const current = get(this.baseState); + set(this.baseState, { ...current, dataSource: nextDataSource }); + }, + ); + + this.updateState = atom( + null, + ( + get, + set, + updates: { isVisible?: boolean; dataSource?: CanvasDataSource | null }, + ) => { + const current = get(this.baseState); + set(this.baseState, { + ...current, + ...updates, + }); + }, + ); + } +} + +export const canvasStateManager = new CanvasStateManager(); + +export const showCanvasAtom = canvasStateManager.showCanvas; +export const canvasDataSourceAtom = canvasStateManager.dataSource; +export const updateCanvasStateAtom = canvasStateManager.updateState; diff --git a/apps/omega/src/renderer/src/state/chat.ts b/apps/omega/src/renderer/src/state/chat.ts new file mode 100644 index 000000000..e3d8c5bad --- /dev/null +++ b/apps/omega/src/renderer/src/state/chat.ts @@ -0,0 +1,28 @@ +import { EventItem } from '@renderer/type/event'; +import { atom } from 'jotai'; +import EventEmitter from 'eventemitter3'; +import { PlanTask } from '@renderer/type/agent'; + +export interface UserInterruptEvent { + type: 'user-interrupt'; + text: string; +} + +export interface TernimateEvent { + type: 'terminate'; +} + +export type GlobalEvent = UserInterruptEvent | TernimateEvent; + +export const eventsAtom = atom([]); + +export const currentEventIdAtom = atom(null); + +export const globalEventEmitter = new EventEmitter<{ + [key: string]: (event: GlobalEvent) => void; +}>(); +export const currentAgentFlowIdRefAtom = atom<{ current: string | null }>({ + current: null, +}); +export const agentStatusTipAtom = atom(''); +export const planTasksAtom = atom([]); diff --git a/apps/omega/src/renderer/src/type/agent.ts b/apps/omega/src/renderer/src/type/agent.ts new file mode 100644 index 000000000..9f873537e --- /dev/null +++ b/apps/omega/src/renderer/src/type/agent.ts @@ -0,0 +1,201 @@ +export enum PlanTaskStatus { + Todo = 'todo', + Doing = 'doing', + Done = 'done', + Skipped = 'skipped', +} + +export interface PlanTask { + id: string; + title: string; + status: PlanTaskStatus; + startedAt?: number; + finishedAt?: number; + cost?: number; + error?: string; +} + +export enum ActionStatus { + Success = 'success', + Failed = 'failed', + Running = 'running', +} + +export enum ToolCallType { + ReadFile = 'read_file', + WriteFile = 'write_file', + ReadMultipleFiles = 'read_multiple_files', + EditFile = 'edit_file', + CreateDirectory = 'create_directory', + ListDirectory = 'list_directory', + DirectoryTree = 'directory_tree', + MoveFile = 'move_file', + SearchFiles = 'search_files', + GetFileInfo = 'get_file_info', + ListAllowedDirectories = 'list_allowed_directories', + RunCommand = 'run_command', + RunScript = 'run_script', + WebSearch = 'web_search', + BrowserNavigate = 'browser_navigate', + BrowserScreenshot = 'browser_screenshot', + BrowserClick = 'browser_click', + BrowserFormInputFill = 'browser_form_input_fill', + BrowserSelect = 'browser_select', + BrowserHover = 'browser_hover', + BrowserEvaluate = 'browser_evaluate', + BrowserGetHtml = 'browser_get_html', + BrowserGetText = 'browser_get_text', + BrowserReadLinks = 'browser_read_links', + BrowserScroll = 'browser_scroll', + BrowserNewTab = 'browser_new_tab', + BrowserCloseTab = 'browser_close_tab', + BrowserSwitchTab = 'browser_switch_tab', +} + +export interface ToolCallParam { + [ToolCallType.ReadFile]: { + path: string; + }; + [ToolCallType.WriteFile]: { + path: string; + content: string; + }; + [ToolCallType.ReadMultipleFiles]: { + paths: string[]; + }; + [ToolCallType.EditFile]: { + path: string; + edits: Array<{ + oldText: string; + newText: string; + }>; + dryRun?: boolean; + }; + [ToolCallType.CreateDirectory]: { + path: string; + }; + [ToolCallType.ListDirectory]: { + path: string; + }; + [ToolCallType.DirectoryTree]: { + path: string; + }; + [ToolCallType.MoveFile]: { + source: string; + destination: string; + }; + [ToolCallType.SearchFiles]: { + path: string; + pattern: string; + excludePatterns?: string[]; + }; + [ToolCallType.GetFileInfo]: { + path: string; + }; + [ToolCallType.ListAllowedDirectories]: Record; + + [ToolCallType.RunCommand]: { + command: string; + cwd?: string; + }; + [ToolCallType.RunScript]: { + interpreter: string; + script: string; + cwd?: string; + }; + [ToolCallType.WebSearch]: { + query: string; + }; + [ToolCallType.BrowserNavigate]: { + url: string; + }; + [ToolCallType.BrowserScreenshot]: { + name: string; + selector?: string; + width?: number; + height?: number; + }; + [ToolCallType.BrowserClick]: { + selector: string; + }; + [ToolCallType.BrowserFormInputFill]: { + selector: string; + value: string; + }; + [ToolCallType.BrowserSelect]: { + selector: string; + value: string; + }; + [ToolCallType.BrowserHover]: { + selector: string; + }; + [ToolCallType.BrowserEvaluate]: { + script: string; + }; + [ToolCallType.BrowserGetHtml]: Record; + [ToolCallType.BrowserGetText]: Record; + [ToolCallType.BrowserReadLinks]: Record; + [ToolCallType.BrowserScroll]: { + amount: number; + }; + [ToolCallType.BrowserNewTab]: { + url: string; + }; + [ToolCallType.BrowserCloseTab]: Record; + [ToolCallType.BrowserSwitchTab]: { + index: number; + }; +} + +export interface ToolCallMeta { + type: ToolCallType; + param: ToolCallParam[ToolCallType]; +} + +export function isToolCallType( + toolName: string, + expectedType: T, +): toolName is T { + return toolName === expectedType; +} + +export type ToolCallParamFor = ToolCallParam[T]; + +export enum ToolPlatform { + FileSystem = 'file system', + CommandLine = 'ternimal', + Search = 'search engine', + System = 'system', + Browser = 'browser', +} + +export const toolToPlatformMap: Record = { + read_file: ToolPlatform.FileSystem, + write_file: ToolPlatform.FileSystem, + read_multiple_files: ToolPlatform.FileSystem, + edit_file: ToolPlatform.FileSystem, + create_directory: ToolPlatform.FileSystem, + list_directory: ToolPlatform.FileSystem, + directory_tree: ToolPlatform.FileSystem, + move_file: ToolPlatform.FileSystem, + search_files: ToolPlatform.FileSystem, + get_file_info: ToolPlatform.FileSystem, + list_allowed_directories: ToolPlatform.FileSystem, + run_command: ToolPlatform.CommandLine, + run_script: ToolPlatform.CommandLine, + web_search: ToolPlatform.Search, + browser_navigate: ToolPlatform.Browser, + browser_screenshot: ToolPlatform.Browser, + browser_click: ToolPlatform.Browser, + browser_form_input_fill: ToolPlatform.Browser, + browser_select: ToolPlatform.Browser, + browser_hover: ToolPlatform.Browser, + browser_evaluate: ToolPlatform.Browser, + browser_get_html: ToolPlatform.Browser, + browser_get_text: ToolPlatform.Browser, + browser_read_links: ToolPlatform.Browser, + browser_scroll: ToolPlatform.Browser, + browser_new_tab: ToolPlatform.Browser, + browser_close_tab: ToolPlatform.Browser, + browser_switch_tab: ToolPlatform.Browser, +}; diff --git a/apps/omega/src/renderer/src/type/canvas.ts b/apps/omega/src/renderer/src/type/canvas.ts new file mode 100644 index 000000000..894a1d0dc --- /dev/null +++ b/apps/omega/src/renderer/src/type/canvas.ts @@ -0,0 +1,24 @@ +export enum CanvasType { + EventPlayer = 'event-player', + ArtifactPreview = 'artifact-preview', +} + +export enum ArtifactType { + Image = 'image', + Excel = 'excel', + PDF = 'pdf', + Component = 'component', +} + +export interface CanvasDataSourceDescriptor { + [CanvasType.EventPlayer]: {}; + [CanvasType.ArtifactPreview]: { + artifactType: ArtifactType; + content: string; + }; +} + +export interface CanvasDataSource { + type: CanvasType; + data: CanvasDataSourceDescriptor[CanvasType]; +} diff --git a/apps/omega/src/renderer/src/type/chatMessage.ts b/apps/omega/src/renderer/src/type/chatMessage.ts new file mode 100644 index 000000000..404c944f4 --- /dev/null +++ b/apps/omega/src/renderer/src/type/chatMessage.ts @@ -0,0 +1,24 @@ +import { + MessageTypeDescriptor, + MessageItem as MessageItemBase, +} from '@vendor/chat-ui'; +import { EventItem } from './event'; + +export enum MessageType { + // Output the chat text directly + PlainText = 'plain-text', + // Display the file information + File = 'file', + // Output the agent workflow process + OmegaAgent = 'omega-agent', +} + +export interface OmegaAgentData { + events: EventItem[]; +} + +export interface MessageContentType extends MessageTypeDescriptor { + [MessageType.OmegaAgent]: OmegaAgentData; +} + +export type MessageItem = MessageItemBase; diff --git a/apps/omega/src/renderer/src/type/event.ts b/apps/omega/src/renderer/src/type/event.ts new file mode 100644 index 000000000..3ed4e237c --- /dev/null +++ b/apps/omega/src/renderer/src/type/event.ts @@ -0,0 +1,64 @@ +import { ActionStatus, PlanTask } from './agent'; + +export enum EventType { + UserMessage = 'user-message', + LoadingStatus = 'loading-status', + ToolUsed = 'tool-used', + ToolCallStart = 'tool-call-start', + PlanUpdate = 'plan-update', + AgentStatus = 'agent-status', + ChatText = 'chat-text', + Observation = 'observation', + NewPlanStep = 'new-plan-step', + UserInteruption = 'user-interuption', + End = 'end', +} + +export interface EventContentDescriptor { + [EventType.ChatText]: string; + [EventType.LoadingStatus]: { + title: string; + description?: string; + }; + [EventType.PlanUpdate]: { + plan?: PlanTask[]; + step?: number; + }; + [EventType.ToolUsed]: { + actionId: string; + tool: string; + params: string; + status: ActionStatus; + description: string; + // Key param value in the tool params, such as the filepath or the command + value: string; + result: any; + }; + [EventType.ToolCallStart]: { + tool: string; + params: string; + description: string; + // The same as above + value: string; + }; + [EventType.AgentStatus]: string; + [EventType.NewPlanStep]: { + step: number; + }; + // When tools return the result, it will be displayed as an observation + [EventType.Observation]: any; + [EventType.UserInteruption]: { + text: string; + }; + [EventType.End]: { + message: string; + }; + [EventType.UserMessage]: string; +} + +export interface EventItem { + id: string; + content: EventContentDescriptor[keyof EventContentDescriptor]; + type: EventType; + timestamp: number; +} diff --git a/apps/omega/src/renderer/src/utils/ChatMessageUtils.tsx b/apps/omega/src/renderer/src/utils/ChatMessageUtils.tsx new file mode 100644 index 000000000..fd2006eee --- /dev/null +++ b/apps/omega/src/renderer/src/utils/ChatMessageUtils.tsx @@ -0,0 +1,57 @@ +import { MessageRole } from '@vendor/chat-ui'; +import { + MessageItem, + MessageType, + OmegaAgentData, +} from '@renderer/type/chatMessage'; + +export class ChatMessageUtil { + static userMessage( + content: string, + type = MessageType.PlainText, + ): MessageItem { + return { + role: MessageRole.User, + content, + type, + timestamp: Date.now(), + }; + } + + static assistantOmegaMessage( + content: OmegaAgentData, + type = MessageType.OmegaAgent, + ): MessageItem { + return { + role: MessageRole.Assistant, + content, + type, + timestamp: Date.now(), + showCopyButton: false, + }; + } + + static assistantTextMessage(content: string): MessageItem { + return { + role: MessageRole.Assistant, + content, + type: MessageType.PlainText, + timestamp: Date.now(), + showCopyButton: false, + // avatar: logo, + }; + } + + static assistantThinkMessage( + content: string, + type = MessageType.PlainText, + ): MessageItem { + return { + role: MessageRole.Assistant, + content, + type, + timestamp: Date.now(), + showCopyButton: false, + }; + } +} diff --git a/apps/omega/src/renderer/src/utils/extractHistoryEvents.ts b/apps/omega/src/renderer/src/utils/extractHistoryEvents.ts new file mode 100644 index 000000000..c758f1170 --- /dev/null +++ b/apps/omega/src/renderer/src/utils/extractHistoryEvents.ts @@ -0,0 +1,14 @@ +import { + MessageContentType, + MessageItem, + MessageType, +} from '@renderer/type/chatMessage'; + +export function extractHistoryEvents(messages: MessageItem[]) { + return messages + .filter((message) => message.type === MessageType.OmegaAgent) + .flatMap( + (message) => + (message.content as MessageContentType['omega-agent']).events, + ); +} diff --git a/apps/omega/src/renderer/src/utils/getLoadingTipForToolCall.ts b/apps/omega/src/renderer/src/utils/getLoadingTipForToolCall.ts new file mode 100644 index 000000000..cf1def03e --- /dev/null +++ b/apps/omega/src/renderer/src/utils/getLoadingTipForToolCall.ts @@ -0,0 +1,183 @@ +import { + ActionStatus, + ToolCallParam, + ToolCallType, +} from '@renderer/type/agent'; + +interface LoadingTipMeta { + name: string; + value: string; + description: string; +} + +export function getLoadingTipFromToolCall( + tool: string, + toolParams: string, + status: ActionStatus, +): LoadingTipMeta { + const toolName = tool as ToolCallType; + const params = JSON.parse(toolParams); + + let value = ''; + let actionStatus = ''; + switch (status) { + case ActionStatus.Running: + actionStatus = 'Executing'; + break; + case ActionStatus.Success: + actionStatus = 'Executed'; + break; + case ActionStatus.Failed: + actionStatus = 'Failed'; + break; + } + + switch (toolName) { + case ToolCallType.ReadFile: { + const typedParams = params as ToolCallParam[ToolCallType.ReadFile]; + value = typedParams.path; + break; + } + case ToolCallType.WriteFile: { + const typedParams = params as ToolCallParam[ToolCallType.WriteFile]; + value = typedParams.path; + break; + } + case ToolCallType.GetFileInfo: { + const typedParams = params as ToolCallParam[ToolCallType.GetFileInfo]; + value = typedParams.path; + break; + } + case ToolCallType.ReadMultipleFiles: { + const typedParams = + params as ToolCallParam[ToolCallType.ReadMultipleFiles]; + value = `${typedParams.paths.length} files`; + break; + } + case ToolCallType.EditFile: { + const typedParams = params as ToolCallParam[ToolCallType.EditFile]; + value = `${typedParams.path} (${typedParams.edits.length} edits)`; + break; + } + case ToolCallType.CreateDirectory: { + const typedParams = params as ToolCallParam[ToolCallType.CreateDirectory]; + value = typedParams.path; + break; + } + case ToolCallType.ListDirectory: { + const typedParams = params as ToolCallParam[ToolCallType.ListDirectory]; + value = typedParams.path; + break; + } + case ToolCallType.DirectoryTree: { + const typedParams = params as ToolCallParam[ToolCallType.DirectoryTree]; + value = typedParams.path; + break; + } + case ToolCallType.MoveFile: { + const typedParams = params as ToolCallParam[ToolCallType.MoveFile]; + value = `${typedParams.source} → ${typedParams.destination}`; + break; + } + case ToolCallType.SearchFiles: { + const typedParams = params as ToolCallParam[ToolCallType.SearchFiles]; + value = `${typedParams.path} (pattern: ${typedParams.pattern})`; + break; + } + case ToolCallType.RunCommand: { + const typedParams = params as ToolCallParam[ToolCallType.RunCommand]; + value = typedParams.command; + break; + } + case ToolCallType.RunScript: { + const typedParams = params as ToolCallParam[ToolCallType.RunScript]; + value = `${typedParams.interpreter} script`; + break; + } + case ToolCallType.WebSearch: { + const typedParams = params as ToolCallParam[ToolCallType.WebSearch]; + value = typedParams.query; + break; + } + case ToolCallType.BrowserNavigate: { + const typedParams = params as ToolCallParam[ToolCallType.BrowserNavigate]; + value = typedParams.url; + break; + } + case ToolCallType.BrowserScreenshot: { + const typedParams = + params as ToolCallParam[ToolCallType.BrowserScreenshot]; + value = `${typedParams.name}${typedParams.selector ? ` (${typedParams.selector})` : ''}`; + break; + } + case ToolCallType.BrowserClick: { + const typedParams = params as ToolCallParam[ToolCallType.BrowserClick]; + value = typedParams.selector; + break; + } + case ToolCallType.BrowserFormInputFill: { + const typedParams = + params as ToolCallParam[ToolCallType.BrowserFormInputFill]; + value = `${typedParams.selector} → ${typedParams.value}`; + break; + } + case ToolCallType.BrowserSelect: { + const typedParams = params as ToolCallParam[ToolCallType.BrowserSelect]; + value = `${typedParams.selector} → ${typedParams.value}`; + break; + } + case ToolCallType.BrowserHover: { + const typedParams = params as ToolCallParam[ToolCallType.BrowserHover]; + value = typedParams.selector; + break; + } + case ToolCallType.BrowserEvaluate: { + value = 'executing script...'; + break; + } + case ToolCallType.BrowserGetHtml: + case ToolCallType.BrowserGetText: + case ToolCallType.BrowserReadLinks: { + value = 'fetching...'; + break; + } + case ToolCallType.BrowserScroll: { + const typedParams = params as ToolCallParam[ToolCallType.BrowserScroll]; + value = `${typedParams.amount}px`; + break; + } + case ToolCallType.BrowserNewTab: { + const typedParams = params as ToolCallParam[ToolCallType.BrowserNewTab]; + value = typedParams.url; + break; + } + case ToolCallType.BrowserCloseTab: { + value = 'closing current tab'; + break; + } + case ToolCallType.BrowserSwitchTab: { + const typedParams = + params as ToolCallParam[ToolCallType.BrowserSwitchTab]; + value = `tab ${typedParams.index}`; + break; + } + default: + switch (status) { + case ActionStatus.Running: + value = 'executing...'; + break; + case ActionStatus.Success: + value = 'done'; + break; + case ActionStatus.Failed: + value = 'failed'; + break; + } + } + + return { + name: toolName, + description: `${actionStatus} ${toolName.replace(/_/g, ' ')}...`, + value, + }; +} diff --git a/apps/omega/src/renderer/src/utils/index.ts b/apps/omega/src/renderer/src/utils/index.ts new file mode 100644 index 000000000..9ad0df426 --- /dev/null +++ b/apps/omega/src/renderer/src/utils/index.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from 'clsx'; +import { twMerge } from 'tailwind-merge'; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} diff --git a/apps/omega/src/renderer/src/utils/monacoConfig.ts b/apps/omega/src/renderer/src/utils/monacoConfig.ts new file mode 100644 index 000000000..95ad8883c --- /dev/null +++ b/apps/omega/src/renderer/src/utils/monacoConfig.ts @@ -0,0 +1,40 @@ +import * as monaco from 'monaco-editor'; +import editorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker'; +import jsonWorker from 'monaco-editor/esm/vs/language/json/json.worker?worker'; +import cssWorker from 'monaco-editor/esm/vs/language/css/css.worker?worker'; +import htmlWorker from 'monaco-editor/esm/vs/language/html/html.worker?worker'; +import tsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker?worker'; + +export function initMonacoWorkers(): void { + self.MonacoEnvironment = { + getWorker(_, label) { + if (label === 'json') { + return new jsonWorker(); + } + if (label === 'css' || label === 'scss' || label === 'less') { + return new cssWorker(); + } + if (label === 'html' || label === 'handlebars' || label === 'razor') { + return new htmlWorker(); + } + if (label === 'typescript' || label === 'javascript') { + return new tsWorker(); + } + return new editorWorker(); + }, + }; +} + +export const defaultEditorOptions: monaco.editor.IStandaloneEditorConstructionOptions = + { + readOnly: true, + minimap: { enabled: false }, + scrollBeyondLastLine: false, + fontSize: 14, + renderLineHighlight: 'all', + scrollbar: { + vertical: 'visible', + horizontal: 'visible', + }, + automaticLayout: true, + }; diff --git a/apps/omega/src/renderer/src/utils/normalizeToolUsedInfo.ts b/apps/omega/src/renderer/src/utils/normalizeToolUsedInfo.ts new file mode 100644 index 000000000..41a88a187 --- /dev/null +++ b/apps/omega/src/renderer/src/utils/normalizeToolUsedInfo.ts @@ -0,0 +1,27 @@ +import { + ActionStatus, + ToolPlatform, + toolToPlatformMap, +} from '@renderer/type/agent'; +import { getLoadingTipFromToolCall } from './getLoadingTipForToolCall'; + +export function normalizeToolUsedInfo( + tool: string, + params: string, + status: ActionStatus, + result: { + [key: string]: any; + }, +) { + const platform = toolToPlatformMap[tool] || ToolPlatform.System; + const description = `Using ${platform} to execute ${tool.replace(/_/g, ' ')}`; + const { value } = getLoadingTipFromToolCall(tool, params, status); + return { + tool, + params, + description, + status, + value, + result, + }; +} diff --git a/apps/omega/src/renderer/src/utils/parseEvents.test.ts b/apps/omega/src/renderer/src/utils/parseEvents.test.ts new file mode 100644 index 000000000..96335f137 --- /dev/null +++ b/apps/omega/src/renderer/src/utils/parseEvents.test.ts @@ -0,0 +1,81 @@ +import { describe, it, expect } from 'vitest'; +import { groupEventsByStep, UIGroupType } from './parseEvents'; +import { EventType, EventItem } from '@renderer/type/event'; + +const createEvent = (type: EventType, content: any): EventItem => ({ + id: `test-${type}-${Date.now()}`, + type, + content, + timestamp: Date.now(), +}); + +describe('parseEvents', () => { + describe('groupEventsByStep', () => { + it('should handle empty events array', () => { + expect(groupEventsByStep([])).toEqual([]); + }); + + it('should group loading events before first plan update', () => { + const events = [ + createEvent(EventType.LoadingStatus, { title: 'Loading 1' }), + createEvent(EventType.PlanUpdate, { tasks: [] }), + ]; + + const result = groupEventsByStep(events); + expect(result).toHaveLength(1); + expect(result[0].type).toBe(UIGroupType.Loading); + }); + + it('should group events by plan steps', () => { + const events = [ + createEvent(EventType.PlanUpdate, { tasks: [] }), + createEvent(EventType.NewPlanStep, { step: 1 }), + createEvent(EventType.ToolUsed, { tool: 'test' }), + createEvent(EventType.ToolUsed, { tool: 'test2' }), + createEvent(EventType.ChatText, 'Hello'), + ]; + + const result = groupEventsByStep(events); + expect(result).toHaveLength(2); + expect(result[0].type).toBe(UIGroupType.PlanStep); + expect(result[1].type).toBe(UIGroupType.ChatText); + }); + + it('should handle chat text as separate groups', () => { + const events = [ + createEvent(EventType.PlanUpdate, { tasks: [] }), + createEvent(EventType.ChatText, 'Message 1'), + createEvent(EventType.ChatText, 'Message 2'), + ]; + + const result = groupEventsByStep(events); + expect(result).toHaveLength(2); + expect(result[0].type).toBe(UIGroupType.ChatText); + expect(result[1].type).toBe(UIGroupType.ChatText); + }); + + it('should only include last loading status', () => { + const events = [ + createEvent(EventType.PlanUpdate, { tasks: [] }), + createEvent(EventType.LoadingStatus, { title: 'Loading 1' }), + createEvent(EventType.LoadingStatus, { title: 'Loading 2' }), + ]; + + const result = groupEventsByStep(events); + expect(result).toHaveLength(1); + expect(result[0].events[0].content.title).toBe('Loading 2'); + }); + + it('should work at the beginning', () => { + const events = [ + createEvent(EventType.LoadingStatus, { title: 'Loading 1' }), + createEvent(EventType.PlanUpdate, 'Message 1'), + createEvent(EventType.NewPlanStep, { step: 1 }), + ]; + + const result = groupEventsByStep(events); + expect(result).toHaveLength(1); + expect(result[0].type).toBe(UIGroupType.Loading); + }); + }); +}); diff --git a/apps/omega/src/renderer/src/utils/parseEvents.ts b/apps/omega/src/renderer/src/utils/parseEvents.ts new file mode 100644 index 000000000..a6bf57fa4 --- /dev/null +++ b/apps/omega/src/renderer/src/utils/parseEvents.ts @@ -0,0 +1,224 @@ +import { PlanTask, PlanTaskStatus } from '@renderer/type/agent'; +import { EventItem, EventType } from '@renderer/type/event'; + +export enum UIGroupType { + ChatText = 'chat-text', + PlanStep = 'plan-step', + Loading = 'loading', + End = 'end', +} + +export interface UIGroup { + type: UIGroupType; + step: number; + events: EventItem[]; +} + +export interface EventStreamUIMeta { + planTasks: PlanTask[]; + agentStatus: string; + currentStepIndex: number; + currentEvent: EventItem; + eventGroups: UIGroup[]; + isLoading: boolean; +} + +/** + * Extracts UI metadata from events stream + */ +export function extractEventStreamUIMeta( + events: EventItem[], +): EventStreamUIMeta { + // Get latest plan tasks + const lastPlanUpdate = [...events] + .reverse() + .find((event) => event.type === EventType.PlanUpdate && event.content.plan); + const planTasks = lastPlanUpdate + ? (lastPlanUpdate.content as { plan: PlanTask[] }).plan + : []; + + // Get latest agent status + const lastAgentStatus = [...events] + .reverse() + .find((event) => event.type === EventType.AgentStatus); + const agentStatus = lastAgentStatus + ? (lastAgentStatus.content as string) + : ''; + + // Get current step + const lastStepEvent = [...events] + .reverse() + .find((event) => event.type === EventType.NewPlanStep); + const currentStepIndex = lastStepEvent + ? (lastStepEvent.content as { step: number }).step + : 1; + + // Get latest non-loading event + const lastEvent = events[events.length - 1]; + const isLoading = lastEvent?.type === EventType.LoadingStatus; + const eventGroups = groupEventsByStep(events); + return { + planTasks, + agentStatus, + currentStepIndex, + currentEvent: lastEvent, + isLoading, + eventGroups, + }; +} + +/** + * Groups events by their type (ChatText vs PlanStep) + */ +export function groupEventsByStep(events: EventItem[]): UIGroup[] { + const groups: UIGroup[] = []; + let currentStepEvents: EventItem[] = []; + let hasPlan = false; + const NO_RENDER_TYPE = [ + EventType.PlanUpdate, + EventType.Observation, + EventType.ToolCallStart, + ]; + let currentStep = 1; + + const filterLoading = (pendingEvents: EventItem[]) => { + let clonedEvents = [...pendingEvents]; + let lastEvent = clonedEvents[clonedEvents.length - 1]; + const tailingNoRenderEvents: EventItem[] = []; + if (lastEvent && NO_RENDER_TYPE.includes(lastEvent.type)) { + clonedEvents = clonedEvents.slice(0, -1); + tailingNoRenderEvents.unshift(lastEvent); + lastEvent = clonedEvents[clonedEvents.length - 1]; + } + return [ + ...clonedEvents.filter((item, index) => { + if ( + index < clonedEvents.length - 1 && + item.type === EventType.LoadingStatus + ) { + return false; + } + return true; + }), + ...tailingNoRenderEvents, + ]; + }; + console.log('filtered events', filterLoading(events)); + + filterLoading(events).forEach((event) => { + if (event.type === EventType.PlanUpdate) { + hasPlan = true; + const allDone = event.content.plan.every( + (task) => task.status === PlanTaskStatus.Done, + ); + if (allDone) { + // No need to render new plan step + return; + } + currentStep = (event.content as { step: number | undefined }).step || 1; + + if (currentStepEvents.length > 0) { + const lastGroup = groups[groups.length - 1]; + if ( + lastGroup && + lastGroup.type === UIGroupType.PlanStep && + lastGroup.step <= currentStep + ) { + lastGroup.events.push(...currentStepEvents); + if (lastGroup.step < currentStep) { + groups.push({ + type: UIGroupType.PlanStep, + step: currentStep, + events: [], + }); + } + } else { + groups.push({ + type: UIGroupType.PlanStep, + step: currentStep, + events: [...currentStepEvents], + }); + } + currentStepEvents = []; + } else { + groups.push({ + type: UIGroupType.PlanStep, + step: currentStep, + events: [], + }); + } + return; + } + + // The last event + if (event.type === EventType.LoadingStatus) { + if (hasPlan) { + // loading in plan step + currentStepEvents.push(event); + } else { + // Initial loading + groups.push({ + type: UIGroupType.Loading, + step: 1, + events: [event], + }); + } + return; + } + + if (event.type === EventType.ToolCallStart) { + return; + } + + if (event.type === EventType.ChatText || event.type === EventType.End) { + if (currentStepEvents.length > 0) { + const lastGroup = groups[groups.length - 1]; + if (lastGroup && lastGroup.step === currentStep) { + lastGroup.events.push(...currentStepEvents); + currentStepEvents = []; + } + } + const groupType = (() => { + if (event.type === EventType.End) { + return UIGroupType.End; + } + return UIGroupType.ChatText; + })(); + groups.push({ + type: groupType, + step: currentStep, + events: [event], + }); + return; + } + + currentStepEvents.push(event); + }); + + if (currentStepEvents.length > 0) { + if (groups.length > 0) { + const lastGroup = groups[groups.length - 1]; + if (lastGroup.step === currentStep) { + if (lastGroup.type === UIGroupType.PlanStep) { + lastGroup.events.push(...currentStepEvents); + } else { + groups.push({ + type: UIGroupType.PlanStep, + step: currentStep, + events: [...currentStepEvents], + }); + } + return groups; + } + } + groups.push({ + type: UIGroupType.PlanStep, + step: currentStep, + events: [...currentStepEvents], + }); + } + + console.log('groups', groups); + + return groups; +} diff --git a/apps/omega/src/vendor/chat-ui/index.d.ts b/apps/omega/src/vendor/chat-ui/index.d.ts new file mode 100644 index 000000000..0d12f6866 --- /dev/null +++ b/apps/omega/src/vendor/chat-ui/index.d.ts @@ -0,0 +1,592 @@ +import { atom } from 'jotai'; +import * as React$1 from 'react'; +import React__default from 'react'; + +declare enum MessageRole { + User = 'user', + Assistant = 'assistant', +} +declare enum MessageType { + PlainText = 'plain-text', + File = 'file', +} +interface MessageTypeDescriptor { + [MessageType.PlainText]: string; + [MessageType.File]: InputFile; + [key: string]: unknown; +} +interface MessageItem { + id?: string; + role: MessageRole; + avatar?: string; + conversationId?: string; + timestamp?: number; + isFinal?: boolean; + type: keyof T; + content?: T[keyof T]; + isArchived?: boolean; + isWelcome?: boolean; + showCopyButton?: boolean; + isDeleting?: boolean; +} +declare enum InputFileType { + Image = 'image', + PDF = 'pdf', + Text = 'text', + Json = 'json', + Zip = 'zip', + Audio = 'audio', + Video = 'video', + Keynote = 'keynote', + Powerpoint = 'powerpoint', + Excel = 'excel', + Word = 'word', + PPTX = 'pptx', + XLSX = 'xlsx', + DOCX = 'docx', + Other = 'other', + JS = 'js', + TS = 'ts', + JSX = 'jsx', + TSX = 'tsx', + HTML = 'html', + CSS = 'css', + SCSS = 'scss', + LESS = 'less', + YAML = 'yaml', + XML = 'xml', + TOML = 'toml', + Python = 'py', + Java = 'java', + Rust = 'rs', + Swift = 'swift', + Go = 'go', + C = 'c', + CPP = 'cpp', + Stylus = 'stylus', + PHP = 'php', + Ruby = 'rb', + Kotlin = 'kt', + CSharp = 'cs', + Draft = 'draft', +} +interface InputFile { + type: InputFileType; + filename?: string; + content: string; + size?: number; + loading?: boolean; + isScreenshot?: boolean; + originalFile?: File; +} + +interface ChatStates { + inputTextAtom: ReturnType>; + inputFilesAtom: ReturnType>; + messagesAtom: ReturnType[]>>; + messageLoadingAtom: ReturnType>; + imageLoadingAtom: ReturnType>; + uploadMessagePromiseRefAtom: ReturnType< + typeof atom<{ + current: Promise | null> | null; + }> + >; + messageEndRefAtom: ReturnType< + typeof atom<{ + current: HTMLDivElement | null; + }> + >; + messageSendingAtom: ReturnType>; + isUserScrollingRefAtom: ReturnType< + typeof atom<{ + current: boolean; + }> + >; +} + +interface ChatUISlots { + /** + * The slot before input section + */ + beforeInputContainer?: React.ReactNode; + /** + * The slot after the input section + */ + afterInputContainer?: React.ReactNode; + /** + * The slot before the input area + */ + beforeInputArea?: React.ReactNode; + /** + * The slot after the input area + */ + afterInputArea?: React.ReactNode; + /** + * The slot before the message list + */ + beforeMessageList?: React.ReactNode; + /** + * The slot after the message list + */ + afterMessageList?: React.ReactNode; + /** + * The slot before the message + */ + beforeMessage?: React.ReactNode; + /** + * The slot after the message + */ + afterMessage?: React.ReactNode; + /** + * The custom feature buttons + */ + customFeatures?: React.ReactNode; + /** + * Secondary feature buttons + */ + secondaryFeatures?: React.ReactNode; + /** + * Custom send button area + */ + customSendButton?: React.ReactNode; + /** + * custom loading + */ + customLoading?: React.ReactNode; + /** + * The custom message action + */ + renderCustomMessageActionUI?: (message: MessageItem) => React.ReactNode; +} +interface ChatUIFeatures { + clearConversationHistory?: boolean; + uploadFiles?: boolean; +} +interface Avatar { + user?: React.ReactNode | true; + assistant?: React.ReactNode | true; +} +interface CommandPanelDataItem { + icon?: React.ReactNode; + /** + * The name for parse result + */ + name: string; + /** + * The text in select panel + */ + selectText?: string; + /** + * The label `@xxx` in input + */ + label: string; + /** + * The description for item + */ + description?: string; + /** + * The items in select panel + */ + items?: CommandPanelDataItem[]; +} +interface CommandPanelConfigValue { + /** + * The name of command + */ + name: string; + /** + * The panel title + */ + data: CommandPanelDataItem[]; +} +interface CommandPanelConfig { + [key: string]: CommandPanelConfigValue; +} +interface ChatUIProps { + /** + * The panel config after user input `@` + */ + commandPanelConfig?: CommandPanelConfig; + /** + * The necessary state and setState method in chat ui + */ + states?: ChatStates; + /** + * The slots for different ui block + */ + slots?: ChatUISlots; + /** + * Features in chat input + */ + features?: ChatUIFeatures; + /** + * The callback implement for send message bahaviour + */ + onMessageSend?: ( + inputText: string, + inputFiles: InputFile[], + ) => void | Promise; + /** + * The callback implement for abort message bahaviour + */ + onMessageAbort?: () => void; + /** + * The callback implement for command panel select + */ + onCommandTrigger?: (command: string) => void; + /** + * The callback implement for command panel select + */ + onCommandSelect?: (command: string, item: CommandPanelDataItem) => void; + /** + * The callback implement for command panel delete + */ + onCommandDelete?: (command: string, item: CommandPanelDataItem) => void; + /** + * The callback implement for command panel input + */ + onSuggestionClick?: (suggestion: string) => void | Promise; + /** + * The callback implement for clear conversation history + */ + onClearConversationHistory?: () => void; + /** + * The custom style settings for different ui block + */ + styles?: { + message?: React.CSSProperties; + messageList?: React.CSSProperties; + input?: React.CSSProperties; + inputContainer?: React.CSSProperties; + container?: React.CSSProperties; + }; + /** + * The custom class name for different ui block + */ + classNames?: { + message?: string; + messageList?: string; + input?: string; + inputContainer?: string; + container?: string; + }; + /** + * The welcome message + */ + welcomeMessage?: MessageItem; + /** + * Whether to disable input + */ + disableInput?: boolean; + /** + * The conversation id for persistence + */ + conversationId?: string; + /** + * Storage database name for message storage to identify different chats + */ + storageDbName?: string; + /** + * Persistent message storage implement + */ + customMessageStorage?: MessageStorage; + /** + * Integrate custom render method for message in different types + */ + customMessageRender?: (message: MessageItem) => React.ReactNode; + /** + * Whether to auto scroll to bottom + */ + autoScrollToBottom?: boolean; + /** + * Placeholder for input + */ + inputPlaceholder?: string; + /** + * Whether to enable dark mode + */ + isDark?: boolean; + /** + * The suggestions for user + */ + suggestions?: string[]; + /** + * Avatar for user and assistant + */ + avatar?: Avatar; +} + +interface MessageStorage< + T extends MessageTypeDescriptor = MessageTypeDescriptor, +> { + getMessages: (appId: string) => Promise[]> | MessageItem[]; + uploadMessage: ( + message: MessageItem, + ) => Promise | undefined> | MessageItem | undefined; + updateMessage: ( + message: Partial>, + ) => Promise | undefined> | MessageItem | undefined; + clearMessages: (appId: string) => Promise | void; + deleteMessage: (messageId: string) => Promise | void; +} + +declare class DefaultMessageStorage + implements MessageStorage +{ + private store; + private cache; + id: number; + constructor(dbName: string); + private getMessageIds; + getStore(): LocalForage; + private setMessageIds; + getMessages(conversationId: string): Promise[]>; + uploadMessage(message: MessageItem): Promise | undefined>; + updateMessage( + message: Partial>, + ): Promise | undefined>; + clearMessages(conversationId: string): Promise; + deleteMessage(messageId: string): Promise; +} + +interface ChatOptions { + states?: ChatStates; + conversationId?: string; + storageDbName?: string; + customMessageStorage?: MessageStorage; +} +declare function useChat({ + states, + storageDbName, + customMessageStorage: messageStorage, + conversationId, +}?: ChatOptions): { + addMessage: ( + rawMessage: MessageItem, + options?: { + shouldSyncStorage?: boolean; + }, + ) => Promise | null>; + updateMessage: ( + messageInfo: Partial>, + options?: { + shouldSyncStorage?: boolean; + messageId?: string; + shouldScrollToBottom?: boolean; + }, + ) => Promise; + messages: MessageItem[]; + setMessages: ( + args_0: MessageItem[] | ((prev: MessageItem[]) => MessageItem[]), + ) => void; + initMessages: () => Promise< + | { + isFinal: boolean; + id?: string; + role: MessageRole; + avatar?: string; + conversationId?: string; + timestamp?: number; + type: keyof T; + content?: T[keyof T] | undefined; + isArchived?: boolean; + isWelcome?: boolean; + showCopyButton?: boolean; + isDeleting?: boolean; + }[] + | undefined + >; + clearMessages: () => Promise; + deleteLastMessage: ({ + deleteUIState, + deleteStorageRecord, + }: { + deleteUIState?: boolean; + deleteStorageRecord?: boolean; + }) => Promise; + deleteMessage: (messageId: string) => Promise; + messageLoading: boolean; + setMessageLoading: (args_0: boolean | ((prev: boolean) => boolean)) => void; + imageLoading: boolean; + setImageLoading: (args_0: boolean | ((prev: boolean) => boolean)) => void; + inputText: string; + setInputText: (args_0: string | ((prev: string) => string)) => void; + inputFiles: InputFile[]; + setInputFiles: ( + args_0: InputFile[] | ((prev: InputFile[]) => InputFile[]), + ) => void; + messageSending: boolean; + setMessageSending: (args_0: boolean | ((prev: boolean) => boolean)) => void; + messageEndRef: { + current: HTMLDivElement | null; + }; +}; + +declare function createChatStateAtoms< + T extends MessageTypeDescriptor, +>(): ChatStates; + +interface CopyButtonProps { + getCopyText: () => string; + tooltipText?: string; + successText?: string; +} +declare const CopyButton: React__default.FC; + +type MessageContent = + | string + | ( + | { + type: 'image_url'; + image_url: { + url: string; + }; + } + | { + type: 'text'; + text: string; + } + | string + )[]; +interface PromptMessage { + role: string; + content: MessageContent; +} +declare const getFileType: (fileName: string) => InputFileType; +declare function getFileIcon( + fileName: string, + size?: number, +): React__default.JSX.Element; +declare function normalizeFilesPrompt( + inputFiles: InputFile[], +): Promise; +declare function normalizeFiles(inputFiles: InputFile[]): Promise; + +declare const handleImage: ( + file: File, + setInputFiles: React.Dispatch>, +) => Promise; +declare const handleFileInput: ( + file: File, + setInputFiles: React.Dispatch>, +) => Promise; + +declare function FileItemPreview({ + file, + handleDelete, + showDeleteIcon, + itemStyle, +}: { + file: InputFile; + handleDelete?: () => void; + showDeleteIcon?: boolean; + itemStyle?: React__default.CSSProperties; +}): React__default.JSX.Element; +declare function FilePreview({ + files, + handleDelete, + showDeleteIcon, + containerStyle, + itemStyle, +}: { + files: InputFile[]; + handleDelete?: (index: number) => void; + showDeleteIcon?: boolean; + containerStyle?: React__default.CSSProperties; + itemStyle?: React__default.CSSProperties; +}): React__default.JSX.Element; + +interface ParsedItem { + type: 'commandText' | 'text'; + content: string; +} +declare function parseCommandRules( + text: string, + config: CommandPanelConfig, +): ParsedItem[]; + +declare function CommandPanel({ + config, + isShow, + setIsShow, + inputRef, + filterText, + setInputText, + setFilterText, + command, + onSelect, + isLoading, +}: { + config: CommandPanelConfigValue; + isShow: boolean; + command: string; + setIsShow: (isShow: boolean) => void; + inputRef: React.RefObject; + filterText: string; + setInputText: (text: string) => void; + setFilterText: React.Dispatch>; + onSelect?: (cmd: string, item: CommandPanelDataItem) => void; + isLoading: boolean; +}): React$1.JSX.Element; + +interface IconProps { + size?: number; + className?: string; +} + +declare function FigmaIcon({ size, className }: IconProps): React$1.JSX.Element; + +interface ChatUIRef { + triggerCommand: (command: string) => void; + focusInput: () => void; + getInputTextArea: () => HTMLTextAreaElement | null | undefined; +} +declare const ChatUIComp: ( + props: ChatUIProps & { + ref?: React__default.Ref; + }, +) => React__default.ReactElement; +declare const ChatUI: typeof ChatUIComp; + +interface MarkdownRendererProps { + content: string; + isDark?: boolean; + smooth?: boolean; + streamDelay?: number; +} +declare const MarkdownRenderer: React__default.FC; + +export { + type Avatar, + type ChatStates, + ChatUI, + type ChatUIFeatures, + type ChatUIProps, + type ChatUISlots, + CommandPanel, + type CommandPanelConfig, + type CommandPanelConfigValue, + type CommandPanelDataItem, + CopyButton, + DefaultMessageStorage, + FigmaIcon, + FileItemPreview, + FilePreview, + type InputFile, + InputFileType, + MarkdownRenderer, + type MessageItem, + MessageRole, + type MessageStorage, + MessageType, + type MessageTypeDescriptor, + createChatStateAtoms, + getFileIcon, + getFileType, + handleFileInput, + handleImage, + normalizeFiles, + normalizeFilesPrompt, + parseCommandRules, + useChat, +}; diff --git a/apps/omega/src/vendor/chat-ui/index.js b/apps/omega/src/vendor/chat-ui/index.js new file mode 100644 index 000000000..616ad4bdd --- /dev/null +++ b/apps/omega/src/vendor/chat-ui/index.js @@ -0,0 +1 @@ +var t=Object.defineProperty,e=Object.defineProperties,n=Object.getOwnPropertyDescriptors,a=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable,i=(e,n,a)=>n in e?t(e,n,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[n]=a,c=(t,e)=>{for(var n in e||(e={}))r.call(e,n)&&i(t,n,e[n]);if(a)for(var n of a(e))o.call(e,n)&&i(t,n,e[n]);return t},s=(t,a)=>e(t,n(a)),d=(t,e)=>{var n={};for(var i in t)r.call(t,i)&&e.indexOf(i)<0&&(n[i]=t[i]);if(null!=t&&a)for(var i of a(t))e.indexOf(i)<0&&o.call(t,i)&&(n[i]=t[i]);return n},l=(t,e,n)=>(i(t,"symbol"!==typeof e?e+"":e,n),n),u=(t,e,n)=>new Promise(((a,r)=>{var o=t=>{try{c(n.next(t))}catch(e){r(e)}},i=t=>{try{c(n.throw(t))}catch(e){r(e)}},c=t=>t.done?a(t.value):Promise.resolve(t.value).then(o,i);c((n=n.apply(t,e)).next())}));import p from"localforage";var w=class{constructor(t){l(this,"store"),l(this,"cache"),l(this,"id",0),this.store=p.createInstance({name:t}),this.cache=new Map}getMessageIds(t){return u(this,null,(function*(){const e=`messageIds-${t}`;return(yield this.store.getItem(e))||[]}))}getStore(){return this.store}setMessageIds(t,e){return u(this,null,(function*(){const n=`messageIds-${t}`;yield this.store.setItem(n,e)}))}getMessages(t){return u(this,null,(function*(){if(this.cache.has(t))return this.cache.get(t);const e=yield this.getMessageIds(t),n=(yield Promise.all(e.map((t=>this.store.getItem(t))))).filter(Boolean);return this.cache.set(t,n),n}))}uploadMessage(t){return u(this,null,(function*(){if(!t.conversationId)throw new Error("Message must have a conversationId to be uploaded");const e=`${t.conversationId}-${(new Date).getTime()}-${this.id++}`,n=s(c({},t),{id:e});yield this.store.setItem(e,n);const a=yield this.getMessageIds(t.conversationId);a.push(e),yield this.setMessageIds(t.conversationId,a);const r=this.cache.get(t.conversationId)||[];return r.push(n),this.cache.set(t.conversationId,r),n}))}updateMessage(t){return u(this,null,(function*(){if(!t.conversationId||!t.id)throw new Error("Message must have an id and conversationId to be updated");const e=yield this.store.getItem(t.id);if(e){const n=c(c({},e),t);return yield this.store.setItem(t.id,n),n}}))}clearMessages(t){return u(this,null,(function*(){const e=yield this.getMessageIds(t);for(const t of e)yield this.store.removeItem(t);yield this.setMessageIds(t,[]),this.cache.delete(t)}))}deleteMessage(t){return u(this,null,(function*(){yield this.store.removeItem(t);for(const[e,n]of Array.from(this.cache.entries())){const a=n.filter((e=>e.id!==t));if(a.length!==n.length){this.cache.set(e,a);const n=(yield this.getMessageIds(e)).filter((e=>e!==t));yield this.setMessageIds(e,n);break}}}))}};import{atom as g}from"jotai";function v(){return{messagesAtom:g([]),messageLoadingAtom:g(!1),imageLoadingAtom:g(!1),inputTextAtom:g(""),inputFilesAtom:g([]),uploadMessagePromiseRefAtom:g({current:null}),messageEndRefAtom:g({current:null}),messageSendingAtom:g(!1),isUserScrollingRefAtom:g({current:!1})}}var x=v();import{useAtom as b}from"jotai";import{useCallback as y}from"react";var h=(t=>(t.User="user",t.Assistant="assistant",t))(h||{}),f=(t=>(t.PlainText="plain-text",t.File="file",t))(f||{}),m=(t=>(t.Image="image",t.PDF="pdf",t.Text="text",t.Json="json",t.Zip="zip",t.Audio="audio",t.Video="video",t.Keynote="keynote",t.Powerpoint="powerpoint",t.Excel="excel",t.Word="word",t.PPTX="pptx",t.XLSX="xlsx",t.DOCX="docx",t.Other="other",t.JS="js",t.TS="ts",t.JSX="jsx",t.TSX="tsx",t.HTML="html",t.CSS="css",t.SCSS="scss",t.LESS="less",t.YAML="yaml",t.XML="xml",t.TOML="toml",t.Python="py",t.Java="java",t.Rust="rs",t.Swift="swift",t.Go="go",t.C="c",t.CPP="cpp",t.Stylus="stylus",t.PHP="php",t.Ruby="rb",t.Kotlin="kt",t.CSharp="cs",t.Draft="draft",t))(m||{}),k={"image":"#FFB6C1","pdf":"#FF6347","text":"#4682B4","json":"#32CD32","zip":"#FFD700","audio":"#8A2BE2","video":"#FF4500","keynote":"#00CED1","powerpoint":"#FF8C00","excel":"#228B22","word":"#1E90FF","pptx":"#FF7F50","xlsx":"#3CB371","docx":"#4169E1","js":"#FF6347","ts":"#FF6347","jsx":"#FF6347","tsx":"#FF6347","html":"#FF6347","css":"#FF6347","scss":"#FF6347","less":"#FF6347","yaml":"#FF6347","xml":"#FF6347","toml":"#FF6347","py":"#FF6347","rs":"#FF6347","go":"#FF6347","java":"#FF6347","swift":"#FF6347","c":"#FF6347","cpp":"#FF6347","other":"#D3D3D3","stylus":"#FF6347","php":"#FF6347","rb":"#FF6347","kt":"#FF6347","cs":"#FF6347","draft":"#FF6347"};function z({states:t=x,storageDbName:e,customMessageStorage:n=(e?new w(e):void 0),conversationId:a}={states:x,customMessageStorage:void 0,conversationId:void 0}){const{messagesAtom:r,messageLoadingAtom:o,imageLoadingAtom:i,inputTextAtom:l,inputFilesAtom:p,uploadMessagePromiseRefAtom:g,messageEndRefAtom:v,messageSendingAtom:h,isUserScrollingRefAtom:f}=t,[m,k]=b(o),[z,_]=b(i),[X,Y]=b(l),[S,j]=b(p),[C,F]=b(r),[M]=b(g),[I]=b(v),[T,A]=b(h),[N]=b(f),L=y(((t,e)=>{const r=(new Date).getTime(),o=s(c({},t),{timestamp:r,id:`${r}-${Math.random().toString(36).substring(2,15)}`});if(F((t=>[...t,o])),setTimeout((()=>{I.current&&I.current.scrollIntoView({behavior:"smooth",block:"nearest",inline:"nearest"})}),100),(null==e?void 0:e.shouldSyncStorage)&&n&&a){const t=()=>u(this,null,(function*(){const t=o,{id:e}=t,r=d(t,["id"]),i=yield n.uploadMessage(s(c({},r),{conversationId:a}));return i?(F((t=>t.map((t=>t.id===o.id?s(c({},t),{id:i.id}):t)))),M.current=null,i):null}));return M.current?M.current.then((()=>(M.current=t(),M.current))):(M.current=t(),M.current)}return Promise.resolve(o)}),[n,k,F,M,a,I.current]),R=y(((t,e)=>u(this,null,(function*(){var r;const o=null!=(r=null==e?void 0:e.shouldSyncStorage)?r:t.isFinal;let i;const d=new Promise((t=>i=t));F((r=>{let d=r.length-1;if((null==e?void 0:e.messageId)&&(d=r.findIndex((t=>t.id===e.messageId)),-1===d))return r;const l=c(c({},r[d]),t);if(o&&n){const t=()=>l.id?n.updateMessage(s(c({},l),{conversationId:a})):n.uploadMessage(s(c({},l),{conversationId:a}));if(M.current)M.current.then(t).then(i);else{const e=t();e&&"then"in e&&e.then(i)}}const u=[...r];return u[d]=l,u})),o&&(yield d),I.current&&!1!==(null==e?void 0:e.shouldScrollToBottom)&&!N.current&&I.current.scrollIntoView({behavior:"smooth",block:"nearest",inline:"nearest"})}))),[n,F,M,a]),D=y((()=>u(this,null,(function*(){if(!n||!a)return;k(!0);const t=Date.now(),e=yield n.getMessages(a);console.log(`initMessages: ${Date.now()-t}ms`);const r=e.map((t=>s(c({},t),{isFinal:!0}))).filter((t=>t.content));return F(r),k(!1),r}))),[a,n,k,F]),E=y((()=>u(this,null,(function*(){F((t=>t.map((t=>s(c({},t),{isDeleting:!0}))))),setTimeout((()=>{F([])}),250),n&&a&&(yield n.clearMessages(a)),k(!1)}))),[a,n,k,F]),P=y((t=>u(this,[t],(function*({deleteUIState:t=!0,deleteStorageRecord:e=!0}){if(0!==C.length&&(t&&F((t=>t.slice(0,-1))),e)){const t=C[C.length-1];t.id&&n&&(yield n.deleteMessage(t.id))}}))),[C,n,F]),$=y((t=>u(this,null,(function*(){const e=C.find((e=>e.id===t));e&&(e.isDeleting=!0,F([...C]),setTimeout((()=>{F((e=>e.filter((e=>e.id!==t))))}),250),n&&e.id&&(yield n.deleteMessage(e.id)))}))),[C,n,F]);return{addMessage:L,updateMessage:R,messages:C,setMessages:F,initMessages:D,clearMessages:E,deleteLastMessage:P,deleteMessage:$,messageLoading:m,setMessageLoading:k,imageLoading:z,setImageLoading:_,inputText:X,setInputText:Y,inputFiles:S,setInputFiles:j,messageSending:T,setMessageSending:A,messageEndRef:I}}import{useRef as _,useState as X}from"react";import{Tooltip as Y}from"@nextui-org/react";import{jsx as S}from"react/jsx-runtime";function j(t){return S("svg",s(c({xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24"},t),{children:S("path",{fill:"currentColor",d:"M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12z"})}))}import{jsx as C}from"react/jsx-runtime";var F=t=>C("svg",s(c({width:"32",height:"32",viewBox:"0 0 30 30"},t),{children:C("path",{fill:"#49cd37",d:"m13 24l-9-9l1.414-1.414L13 21.171L26.586 7.586L28 9L13 24z"})}));var M=function(t,e){void 0===e&&(e={});var n=e.insertAt;if(t&&"undefined"!==typeof document){var a=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css","top"===n&&a.firstChild?a.insertBefore(r,a.firstChild):a.appendChild(r),r.styleSheet?r.styleSheet.cssText=t:r.appendChild(document.createTextNode(t))}};M(".ai-app-message-copy-button {\n position: relative;\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 10;\n border-radius: var(--chat-ui-copy-button-border-radius);\n padding: 0.3rem;\n border: 1px solid var(--chat-ui-copy-button-border-color);\n background-color: var(--chat-ui-copy-button-background-color);\n color: var(--chat-ui-copy-button-text-color);\n}\n.ai-app-message-copy-button svg {\n opacity: inherit;\n width: 16px;\n height: 16px;\n transition: all 0.2s ease;\n color: var(--chat-ui-copy-button-text-color);\n}\n.ai-app-message-copy-button svg:hover {\n color: var(--chat-ui-copy-button-text-color);\n}\n.ai-app-message-copy-button .ai-app-message-icon-success {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%) scale(0);\n opacity: 0;\n color: #00d600;\n}\n\n.ai-app-message-copied .ai-app-message-icon-copy {\n transform: scale(0.33);\n opacity: 0;\n}\n.ai-app-message-copied .ai-app-message-icon-success {\n transform: translate(-50%, -50%) scale(1);\n opacity: 1;\n transition-delay: 0.075s;\n}");import{jsx as I,jsxs as T}from"react/jsx-runtime";var A=new Map,N=({getCopyText:t,tooltipText:e="点击复制",successText:n="复制成功!"})=>{const a=_(null),[r,o]=X(!1);return I(Y,{content:r?n:e,children:T("button",{ref:a,className:"ai-app-message-copy-button",onClick:()=>{navigator.clipboard.writeText(t()).then((()=>{const t=a.current,e="ai-app-message-copied";if(t){t.classList.add(e),clearTimeout(A.get(t)),o(!0);const n=setTimeout((()=>{o(!1),t.classList.remove(e),t.blur(),A.delete(t)}),2e3);A.set(t,n)}}))},children:[I(j,{className:"ai-app-message-icon-copy"}),I(F,{className:"ai-app-message-icon-success"})]})})};import{AiOutlineFileExcel as L,AiOutlineFilePpt as R,AiFillAudio as D,AiFillVideoCamera as E,AiFillFileText as P}from"react-icons/ai";import{VscJson as $,VscFilePdf as O,VscFileZip as B,VscFileMedia as W,VscFileCode as H}from"react-icons/vsc";import{FaJs as U,FaPython as q,FaJava as V,FaSass as J,FaReact as K,FaHtml5 as G,FaCss3Alt as Z,FaPhp as Q}from"react-icons/fa";import{SiTypescript as tt,SiRust as et,SiSwift as nt,SiGo as at,SiCplusplus as rt,SiLess as ot,SiStylus as it,SiRuby as ct,SiKotlin as st,SiCsharp as dt}from"react-icons/si";import{jsx as lt}from"react/jsx-runtime";var ut=t=>{const e=(t=>{let e="";const n=new Uint8Array(t),a=n.byteLength;for(let r=0;r{var e;const n=null==(e=t.split(".").pop())?void 0:e.toLowerCase();switch(n){case"pdf":return"pdf";case"txt":return"text";case"json":return"json";case"zip":return"zip";case"mp3":case"wav":return"audio";case"mp4":case"avi":return"video";case"key":return"keynote";case"ppt":return"powerpoint";case"xls":return"excel";case"doc":return"word";case"pptx":return"pptx";case"xlsx":return"xlsx";case"docx":return"docx";case"stylus":return"stylus";case"php":return"php";case"rb":return"rb";case"kt":return"kt";case"cs":return"cs";default:return n}},wt={"pdf":t=>lt(O,{size:t}),"text":t=>lt(P,{size:t}),"zip":t=>lt(B,{size:t}),"audio":t=>lt(D,{size:t}),"video":t=>lt(E,{size:t}),"docx":t=>lt(P,{size:t}),"pptx":t=>lt(R,{size:t}),"powerpoint":t=>lt(R,{size:t}),"excel":t=>lt(L,{size:t}),"xlsx":t=>lt(L,{size:t}),"keynote":t=>lt(P,{size:t}),"json":t=>lt($,{size:t}),"word":t=>lt(P,{size:t}),"image":t=>lt(W,{size:t}),"yaml":t=>lt(H,{size:t}),"xml":t=>lt(H,{size:t}),"toml":t=>lt(H,{size:t}),"js":t=>lt(U,{size:t,color:"#F7DF1E"}),"ts":t=>lt(tt,{size:t,color:"#3178C6"}),"jsx":t=>lt(K,{size:t,color:"#61DAFB"}),"tsx":t=>lt(K,{size:t,color:"#61DAFB"}),"html":t=>lt(G,{size:t,color:"#E34F26"}),"css":t=>lt(Z,{size:t,color:"#1572B6"}),"scss":t=>lt(J,{size:t,color:"#CC6699"}),"less":t=>lt(ot,{size:t,color:"#1D365D"}),"py":t=>lt(q,{size:t,color:"#3776AB"}),"java":t=>lt(V,{size:t,color:"#007396"}),"rs":t=>lt(et,{size:t,color:"#B7410E"}),"swift":t=>lt(nt,{size:t,color:"#FA7343"}),"go":t=>lt(at,{size:t,color:"#00ADD8"}),"c":t=>lt(rt,{size:t,color:"#00599C"}),"cpp":t=>lt(rt,{size:t,color:"#00599C"}),"stylus":t=>lt(it,{size:t,color:"#FF6347"}),"php":t=>lt(Q,{size:t,color:"#777BB4"}),"rb":t=>lt(ct,{size:t,color:"#CC342D"}),"kt":t=>lt(st,{size:t,color:"#0095D5"}),"draft":t=>lt(H,{size:t}),"cs":t=>lt(dt,{size:t,color:"#239120"}),"other":t=>lt(H,{size:t})};function gt(t,e=16){const n=pt(t);return(wt[n]||wt.other)(e)}var vt={};function xt(t){return u(this,null,(function*(){const e=t.filter((t=>"image"===t.type)),n=e.map((({content:t})=>t)).map((t=>({role:"user",content:[{type:"image_url",image_url:{url:t}}]})));n.length>0&&n.push({role:"user",content:`The uploaded image links: [${e.map((t=>t.content)).join(", ")}]`});const a=t.filter((t=>"image"!==t.type)).map((t=>({role:"user",content:`This is a ${t.type} file, the content is: \n${t.content}`})));return[...n,...a]}))}function bt(t){return u(this,null,(function*(){const e=t.filter((t=>"image"===t.type)),n=yield function(t){return u(this,null,(function*(){return yield Promise.all(t.map((t=>u(this,null,(function*(){if(vt[t])return vt[t];const e=yield fetch(t),n=yield e.blob();return new Promise(((e,a)=>{const r=new FileReader;r.onload=()=>{const n=r.result;vt[t]=n,e(n)},r.onerror=a,r.readAsDataURL(n)}))})))))}))}(e.map((({content:t})=>t)));return t.map((t=>{if("image"===t.type){const a=e.findIndex((e=>e.content===t.content));return s(c({},t),{content:n[a]})}return t}))}))}function yt(t){return t.reduce(((t,e)=>(e.label&&t.push(e.label),e.items&&e.items.length>0&&t.push(...yt(e.items)),t)),[])}import ht from"jszip";var ft=t=>u(void 0,null,(function*(){const e=yield(n="https://esm.sh/v44/pdfjs-dist@4.4.168/es2021/pdfjs-dist.js",new Function(`return import('${n}')`)());var n;e.GlobalWorkerOptions.workerSrc="https://unpkg.com/pdfjs-dist@4.4.168/build/pdf.worker.min.mjs";const a=yield e.getDocument({data:t}).promise;let r="";for(let t=1;t<=a.numPages;t++){const e=yield a.getPage(t);(yield e.getTextContent()).items.forEach((t=>{"str"in t&&(r+=`${t.str} `)}))}return r.trim().slice(0,1e4)})),mt=(t,e,n,a=!1)=>{t((t=>t.map(((t,r)=>r===e?s(c({},t),{content:n,loading:a}):t))))},kt=(t,e)=>u(void 0,null,(function*(){let n;e((e=>(n=e.length,[...e,{type:"image",content:"",loading:!0,originalFile:t}])));try{const a=new FileReader,r=yield new Promise(((e,n)=>{a.onload=()=>e(a.result),a.onerror=n,a.readAsDataURL(t)}));if("undefined"===typeof n)return;mt(e,n,r,!1)}catch(a){console.error("文件转换失败",a),e((t=>t.filter(((t,e)=>e!==n))))}})),zt=(t,e)=>u(void 0,null,(function*(){const n=pt(t.name),a=t.size/1024;if(t.type.startsWith("image/"))yield kt(t,e);else{let r;e((e=>(r=e.length,[...e,{type:n,filename:t.name,content:"",size:a,loading:!0,originalFile:t}])));const o=new FileReader;o.onload=()=>u(void 0,null,(function*(){let t;var a;t=o.result instanceof ArrayBuffer?"pdf"===n?yield ft(o.result):"zip"===n?yield(a=o.result,u(void 0,null,(function*(){const t=yield ht.loadAsync(a);let e="";for(const[n,a]of Object.entries(t.files))a.dir||(e+=`\n\n--- ${n} ---\n\n${yield a.async("string")}`);return e.trim()}))):ut(o.result):o.result,mt(e,r,t,!1)})),"pdf"===n||"audio"===n||"video"===n||"zip"===n?o.readAsArrayBuffer(t):o.readAsText(t)}}));import{useState as _t}from"react";M('@charset "UTF-8";\n.filePreviewContainer_28e0b {\n display: flex;\n gap: 8px;\n margin-right: 8px;\n width: 100%;\n overflow-x: auto;\n}\n\n.filePreviewWrapper_28e0b {\n display: flex;\n position: relative;\n}\n\n.imagePreview_28e0b {\n display: flex;\n max-width: 400px;\n width: 100%;\n height: 100%;\n border: 1px solid #ccc;\n border-radius: 8px;\n position: relative;\n cursor: pointer;\n transition: background-color 0.3s ease;\n object-fit: cover;\n}\n\n.imagePreview_28e0b.visible_28e0b {\n opacity: 1;\n}\n\n.imagePreview_28e0b:hover .deleteIcon_28e0b {\n display: flex; /* 显示删除图标 */\n}\n\n.deleteIcon_28e0b {\n position: absolute;\n z-index: 10;\n top: -8px;\n right: -5px;\n border-radius: 50%;\n cursor: pointer;\n font-size: 18px;\n line-height: 12px;\n width: 24px;\n height: 24px;\n}\n\n.fullscreenOverlay_28e0b {\n z-index: 1000;\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.8);\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.fullscreenImage_28e0b {\n max-width: 90%;\n max-height: 90%;\n animation: fadeIn_28e0b 0.3s ease;\n}\n\n@keyframes fadeIn_28e0b {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}');var Xt="filePreviewContainer_28e0b",Yt="filePreviewWrapper_28e0b",St="imagePreview_28e0b",jt="deleteIcon_28e0b",Ct="fullscreenOverlay_28e0b",Ft="fullscreenImage_28e0b";import{Spinner as Mt,Tooltip as It}from"@nextui-org/react";import{jsx as Tt,jsxs as At}from"react/jsx-runtime";var Nt=t=>At("svg",s(c({viewBox:"64 64 896 896",focusable:"false"},t),{children:[Tt("path",{d:"M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64z",fill:"#f9f9f9"}),Tt("path",{d:"M639.98 338.88h-.04l-.08.06L512 466.75 384.14 338.88c-.04-.05-.06-.06-.08-.06a.12.12 0 00-.07 0c-.03 0-.05.01-.09.05l-45.02 45.02a.2.2 0 00-.05.09.12.12 0 000 .07v.02a.27.27 0 00.06.06L466.75 512 338.88 639.86c-.05.04-.06.06-.06.08a.12.12 0 000 .07c0 .03.01.05.05.09l45.02 45.02a.2.2 0 00.09.05.12.12 0 00.07 0c.02 0 .04-.01.08-.05L512 557.25l127.86 127.87c.04.04.06.05.08.05a.12.12 0 00.07 0c.03 0 .05-.01.09-.05l45.02-45.02a.2.2 0 00.05-.09.12.12 0 000-.07v-.02a.27.27 0 00-.05-.06L557.25 512l127.87-127.86c.04-.04.05-.06.05-.08a.12.12 0 000-.07c0-.03-.01-.05-.05-.09l-45.02-45.02a.2.2 0 00-.09-.05.12.12 0 00-.07 0z",fill:"#000000"})]}));import{Fragment as Lt,jsx as Rt,jsxs as Dt}from"react/jsx-runtime";var Et=({file:t})=>{const e=void 0===t.size?"":t.size<1024?`${t.size.toFixed(2)} KB`:`${(t.size/1024).toFixed(2)} MB`;return Dt("div",{className:"flex gap-2 p-2 pr-4",style:{border:"1px solid #ccc",borderRadius:"10px"},children:[Rt("div",{className:"flex justify-center items-center",style:{width:"44px",height:"100%",borderRadius:6,backgroundColor:k[t.type],color:"var(--chat-ui-text-color)",fontSize:24},children:gt(t.filename||"")}),Dt("div",{className:"flex flex-col text-sm gap-1",children:[Rt(It,{content:t.filename,children:Rt("div",{style:{maxWidth:"200px",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",fontWeight:600},children:t.filename})}),Dt("div",{className:"flex gap-2 text-sm",children:[Rt("div",{className:"text-gray-400 font-light",children:t.type}),e?Rt("div",{className:"text-gray-400 font-light",children:e}):null]})]})]})};function Pt({file:t,handleDelete:e,showDeleteIcon:n=!0,itemStyle:a}){const[r,o]=_t(!1),[i,c]=_t(!1),s=()=>{"image"===t.type&&(c(!0),document.body.style.overflow="hidden")};return Dt(Lt,{children:[Dt("div",{className:Yt,onMouseEnter:()=>o(!0),onMouseLeave:()=>o(!1),style:a,children:[!0===t.loading?Rt("div",{style:{width:"56px",height:"56px"},className:"flex justify-center items-center",children:Rt(Mt,{size:"sm"})}):"image"===t.type?Rt("img",{src:t.content,className:St,alt:"pasted",style:a,onClick:s}):Rt(Et,{file:t}),n?Rt("button",{onClick:e,className:jt,style:{display:r?"block":"none"},children:Rt("div",{style:{border:"1px solid #ccc",borderRadius:"50%"},children:Rt(Nt,{})})}):null]}),i?Rt("div",{className:Ct,onClick:()=>{c(!1),document.body.style.overflow="auto"},children:Rt("img",{src:t.content,alt:"fullscreen",className:Ft})}):null]})}function $t({files:t,handleDelete:e,showDeleteIcon:n=!0,containerStyle:a={},itemStyle:r={}}){const o={width:"56px",height:"56px"};return Rt("div",{className:`${Xt}`,style:c({marginTop:t.length>0?"-8px":"0",marginBottom:t.length>0?"8px":"0",paddingTop:t.length>0?"8px":"0"},a),children:t.map(((t,a)=>Rt(Pt,{file:t,handleDelete:()=>null==e?void 0:e(a),showDeleteIcon:n,itemStyle:c(c({},"image"===t.type?o:{}),r)},a)))})}function Ot(t,e){for(const n of t){if(n.label===e)return n;if(n.items){const t=Ot(n.items,e);if(t)return t}}}function Bt(t,e){const n=[],a=Object.keys(e).join(""),r=new RegExp(`([${a}][\\w\\u4e00-\\u9fa5:\\/\\.\\-]+)(\\s|$)`,"g"),o=t.split(r);for(let i=0;it.startsWith(e)))){const a=t[0],r=t.slice(1);if(!r)continue;const o=Ot(e[a].data,r);o?n.push({type:"commandText",content:o.name}):n.push({type:"text",content:t.trim()}),i++}else t.trim()&&n.push({type:"text",content:t.trim()})}return n}import{useState as Wt,useEffect as Ht,useCallback as Ut,useRef as qt,useMemo as Vt}from"react";import{Card as Jt,Spinner as Kt}from"@nextui-org/react";import{motion as Gt,AnimatePresence as Zt}from"framer-motion";import{FiArrowLeft as Qt,FiArrowRight as te}from"react-icons/fi";M(".ai-app-at-panel {\n position: absolute;\n left: 0;\n right: 0;\n margin: 0.5rem 0;\n max-width: 100%;\n z-index: 1000;\n}\n.ai-app-at-panel.above {\n bottom: 100%;\n margin-bottom: 0.5rem;\n}\n.ai-app-at-panel.above .ai-app-at-panel-card {\n margin-bottom: 0.5rem;\n}\n.ai-app-at-panel.below {\n width: 90%;\n margin: auto;\n top: 30%;\n margin-top: 0.5rem;\n}\n.ai-app-at-panel.below .ai-app-at-panel-card {\n margin-top: 0.5rem;\n}\n.ai-app-at-panel-no-results {\n padding: 4px 16px;\n color: var(--nextui-colors-accents6);\n font-size: 14px;\n text-align: center;\n}\n\n.ai-app-at-panel-card {\n padding: var(--chat-ui-at-panel-padding);\n background-color: var(--chat-ui-at-panel-bg);\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n border-radius: var(--chat-ui-at-panel-border-radius);\n border: 1px solid var(--chat-ui-at-panel-border);\n max-height: 400px;\n overflow: auto !important;\n overflow-x: hidden;\n}\n.ai-app-at-panel-card::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n.ai-app-at-panel-card::-webkit-scrollbar-track {\n background: var(--chat-ui-at-panel-scrollbar-track);\n}\n.ai-app-at-panel-card::-webkit-scrollbar-thumb {\n background: var(--chat-ui-at-panel-scrollbar-thumb);\n border-radius: 3px;\n}\n.ai-app-at-panel-card::-webkit-scrollbar-thumb:hover {\n background: var(--chat-ui-at-panel-scrollbar-thumb-hover);\n}\n\n.ai-app-at-panel-item {\n display: flex;\n align-items: center;\n gap: var(--chat-ui-at-panel-item-gap);\n justify-content: space-between;\n padding: var(--chat-ui-at-panel-item-padding);\n border-radius: var(--chat-ui-at-panel-item-border-radius);\n font-size: 0.75rem;\n cursor: pointer;\n transition: background-color 0.2s;\n color: var(--chat-ui-at-panel-text);\n width: fit-content;\n min-width: 100%;\n}\n\n.ai-app-at-panel-item:hover {\n background-color: var(--chat-ui-at-panel-item-hover);\n}\n\n.ai-app-at-panel-item-selected {\n background-color: var(--chat-ui-at-panel-item-selected);\n}\n\n.ai-app-at-panel-item-content {\n display: flex;\n align-items: center;\n}\n\n.ai-app-at-panel-item-name {\n margin-left: 0.75rem;\n font-size: 0.75rem;\n color: var(--chat-ui-at-panel-text-dark);\n}\n\n.ai-app-at-panel-item-label {\n flex-shrink: 0;\n}\n\n.ai-app-at-panel-item-description {\n font-size: 0.675rem;\n color: var(--chat-ui-at-panel-text-light);\n margin-left: 0.5rem;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 400px;\n direction: rtl;\n text-align: left;\n}");import{jsx as ee,jsxs as ne}from"react/jsx-runtime";function ae({config:t,isShow:e,setIsShow:n,inputRef:a,filterText:r,setInputText:o,setFilterText:i,command:c,onSelect:s,isLoading:d}){const[l,u]=Wt(0),[p,w]=Wt({items:t.data,label:"",name:"",description:""}),[g,v]=Wt([p]),x=1===g.length,b=qt(null),y=qt(!1),[h,f]=Wt(!0);Ht((()=>{if(e&&a.current&&b.current){const t=a.current.getBoundingClientRect(),e=b.current.offsetHeight,n=window.innerHeight,r=t.top,o=n-t.bottom;f(!(r=e))}}),[e,r,a]);const m=Vt((()=>{var t,e;const n=g[g.length-1];if(!r)return null==(t=n.items)?void 0:t.slice(0,30);const a=null==(e=n.items)?void 0:e.flatMap((t=>t.items||t));return r&&a?a.filter((t=>{var e;return t.label.toLowerCase().includes(r.toLowerCase())||(null==(e=t.description)?void 0:e.toLowerCase().includes(r.toLowerCase()))})).slice(0,30):null==a?void 0:a.slice(0,30)}),[g,r]);Ht((()=>{u(0)}),[r]);const k=Ut((t=>{if(t.items&&t.items.length>0)v((e=>[...e,t])),w(t),u(0);else{const e=a.current;if(e){const n=e.selectionStart,a=e.value.substring(0,n),r=e.value.substring(n),s=a.lastIndexOf(c),d=`${a.substring(0,s)}${c}${t.label} ${r}`;o(d),i(""),setTimeout((()=>{e.setSelectionRange(s+t.label.length+2,s+t.label.length+2),e.focus()}),0)}n(!1),null==s||s(c,t)}}),[a,n,s,c,o,i]),z=Ut((()=>{if(g.length>1){const t=g[g.length-2];v((t=>t.slice(0,-1))),w(t),u(0)}else n(!1)}),[g,n]);return Ht((()=>{const r=r=>{if(y.current&&"Enter"===r.key)y.current=!1;else if(e&&!y.current)if("ArrowUp"===r.key||"ArrowDown"===r.key)u((t=>{const e=(null==m?void 0:m.length)||0,n=x?e:e+1;if(0===n)return t;let a;return a="ArrowUp"===r.key?(t-1+n)%n:(t+1)%n,setTimeout((()=>{var t;const e=null==(t=b.current)?void 0:t.querySelector(".ai-app-at-panel-item-selected");null==e||e.scrollIntoView({behavior:"smooth",block:"nearest"})}),0),a})),r.preventDefault(),r.stopPropagation();else if("Enter"===r.key)m&&m.length>0&&(l!==m.length||x?l{t.focus()}),0);const n=t.selectionStart,r=t.value.substring(0,n),s=t.value.substring(n),d=r.lastIndexOf(c),u=`${r.substring(0,d)}${c}${e.selectText}${s}`;o(u),i(e.selectText),setTimeout((()=>{t.setSelectionRange(u.length,u.length),t.focus()}),0)}},s=()=>{y.current=!0},d=t=>{y.current=!1,i((e=>e+t.data))},p=a.current;return p&&(p.addEventListener("compositionstart",s),p.addEventListener("compositionend",d)),document.addEventListener("keydown",r),()=>{document.removeEventListener("keydown",r),p&&(p.removeEventListener("compositionstart",s),p.removeEventListener("compositionend",d))}}),[e,l,m,k,z,a,o,n,x,r,t,i,c]),ee(Zt,{children:e?ee(Gt.div,{initial:{opacity:0,y:h?10:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:h?10:-10},transition:{duration:.2},className:"ai-app-at-panel "+(h?"above":"below"),ref:b,children:ne(Jt,{className:"ai-app-at-panel-card",style:{borderRadius:"var(--chat-ui-at-panel-border-radius)"},children:[d?ee("div",{className:"flex justify-center items-center p-4",children:ee(Kt,{size:"sm"})}):m&&m.length>0?m.map(((t,e)=>{var n;return ne(Gt.div,{className:"ai-app-at-panel-item "+(e===l?"ai-app-at-panel-item-selected":""),onClick:()=>k(t),children:[ne("div",{className:"ai-app-at-panel-item-content flex items-center gap-2",children:[t.icon,ee("span",{className:"ai-app-at-panel-item-label",children:null!=(n=t.selectText)?n:t.label}),t.description?ee("span",{className:"ai-app-at-panel-item-description",children:t.description}):null]}),t.items&&t.items.length>0?ee(te,{size:16}):null]},t.name)})):ee("div",{className:"ai-app-at-panel-no-results",children:"无匹配结果(按 Esc 可取消面板)"}),d||x||!p.label?null:ee(Gt.div,{className:"ai-app-at-panel-item "+(l===(null==m?void 0:m.length)?"ai-app-at-panel-item-selected":""),onClick:z,children:ne("div",{className:"ai-app-at-panel-item-content",children:[ee(Qt,{size:16}),ne("span",{className:"ai-app-at-panel-item-name",children:["返回: ",p.label]})]})})]})}):null})}import{jsx as re,jsxs as oe}from"react/jsx-runtime";function ie({size:t=20,className:e}){return oe("svg",{width:t,height:t,viewBox:"0 0 24 24",className:e,xmlns:"http://www.w3.org/2000/svg",children:[re("path",{d:"M12 0h4c2.208 0 4 1.792 4 4s-1.792 4-4 4h-4V0z",fill:"#FF4D3D"}),re("path",{d:"M4 4c0-2.208 1.792-4 4-4h4v8H8C5.792 8 4 6.208 4 4z",fill:"#9747FF"}),re("path",{d:"M4 12c0-2.208 1.792-4 4-4h4v8H8c-2.208 0-4-1.792-4-4z",fill:"#18A0FB"}),re("path",{d:"M8 24c2.208 0 4-1.792 4-4v-4H8c-2.208 0-4 1.792-4 4s1.792 4 4 4z",fill:"#09CF83"}),re("path",{d:"M20 12c0 2.208-1.792 4-4 4s-4-1.792-4-4 1.792-4 4-4 4 1.792 4 4z",fill:"#FF4D3D"})]})}import{Tooltip as ce}from"@nextui-org/react";import{useRef as se,useCallback as de,memo as le,useState as ue,useEffect as pe,forwardRef as we,useImperativeHandle as ge}from"react";import{jsx as ve}from"react/jsx-runtime";function xe(t){return ve("svg",s(c({xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24"},t),{children:ve("path",{fill:"currentColor",d:"M19 4h-3.5l-1-1h-5l-1 1H5v2h14M6 19a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V7H6z"})}))}import{jsx as be}from"react/jsx-runtime";function ye(t){return be("svg",s(c({xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24"},t),{children:be("path",{fill:"currentColor",d:"M16.5 6v11.5a4 4 0 0 1-4 4a4 4 0 0 1-4-4V5A2.5 2.5 0 0 1 11 2.5A2.5 2.5 0 0 1 13.5 5v10.5a1 1 0 0 1-1 1a1 1 0 0 1-1-1V6H10v9.5a2.5 2.5 0 0 0 2.5 2.5a2.5 2.5 0 0 0 2.5-2.5V5a4 4 0 0 0-4-4a4 4 0 0 0-4 4v12.5a5.5 5.5 0 0 0 5.5 5.5a5.5 5.5 0 0 0 5.5-5.5V6z"})}))}M(".ai-app-input-section-container {\n position: relative;\n padding: 1px;\n background: var(--chat-ui-input-textarea-bg);\n background-size: 300% 300%;\n animation: shineAnimation 6s linear infinite;\n border-radius: 8px;\n margin: 0;\n width: 100%;\n}\n\n.ai-app-input-section-wrapper {\n position: relative;\n border-radius: 7px;\n padding: 16px;\n display: flex;\n flex-direction: column;\n}\n\n.ai-app-input-textarea {\n width: 100%;\n min-height: 40px;\n border: none;\n font-size: 14px;\n background: transparent;\n color: var(--chat-ui-input-textarea-color);\n outline: none;\n resize: none;\n padding: 0;\n margin: 0;\n overflow: auto;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n.ai-app-input-textarea::placeholder {\n font-size: 14px;\n color: var(--chat-ui-input-textarea-placeholder-color);\n}\n.ai-app-input-textarea:focus {\n outline: none;\n}\n\n.ai-app-input-section-button-container {\n display: flex;\n justify-content: space-between;\n align-items: center;\n position: relative;\n}\n\n.ai-app-input-section-button-left {\n display: flex;\n gap: 4px;\n}\n\n.ai-app-input-section-menu-button {\n padding: 8px;\n background-color: transparent;\n border: none;\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.3s ease;\n font-size: 16px;\n color: #555;\n}\n.ai-app-input-section-menu-button:hover {\n background-color: var(--chat-ui-input-section-menu-button-hover-bg);\n transform: scale(1.1);\n}\n\n.ai-app-send-button {\n padding: 8px 8px;\n background-color: #016fee;\n color: #ffffff;\n border: none;\n cursor: pointer;\n transition: all 0.3s ease;\n opacity: 0;\n transform: scale(0.8);\n animation: fadeInScale 0.3s forwards;\n border-radius: 12px;\n font-weight: 600;\n box-shadow: 0 2px 10px rgba(52, 152, 219, 0.3);\n}\n.ai-app-send-button:hover {\n transform: translateY(-2px) scale(1.05);\n background-color: #2980b9;\n box-shadow: 0 4px 15px rgba(52, 152, 219, 0.5);\n}\n.ai-app-send-button.stop {\n background-color: #ff6347;\n box-shadow: 0 2px 10px rgba(255, 99, 71, 0.3);\n}\n.ai-app-send-button.stop:hover {\n transform: translateY(-2px) scale(1.05);\n background-color: #e05734;\n box-shadow: 0 4px 15px rgba(255, 99, 71, 0.5);\n}\n\n@keyframes shineAnimation {\n 0% {\n background-position: 0% 50%;\n }\n 50% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n}\n@keyframes fadeInScale {\n to {\n opacity: 1;\n transform: scale(1);\n }\n}");import{useAtom as he}from"jotai";import{IoArrowUp as fe,IoStop as me}from"react-icons/io5";import ke from"classnames";import{jsx as ze,jsxs as _e}from"react/jsx-runtime";var Xe=le(we((({disableInput:t,userMessages:e,sendMessage:n,abortMessage:a,clearMessages:r,slots:o,style:i={},features:c={},chatStates:s,commandPanelConfig:d,inputPlaceholder:l,onCommandTrigger:p,onCommandSelect:w,onCommandDelete:g,onClearConversationHistory:v},x)=>{const{inputTextAtom:b,inputFilesAtom:y,messageEndRefAtom:h,imageLoadingAtom:f,messageLoadingAtom:m,messageSendingAtom:k}=s,[z,_]=he(b),[X,Y]=he(y),[S]=he(h),[j]=he(m),[C]=he(f),[F,M]=ue(""),I=se(null),T=se(null),{clearConversationHistory:A,uploadFiles:N}=c,[L,R]=ue(!1),[D,E]=he(k),[P,$]=ue(e.length),[O,B]=ue(!1);pe((()=>{$(e.length)}),[e.length]);const W=de((t=>{Y((e=>{const n=[...e];return n.splice(t,1),n}))}),[Y]),H=de((t=>u(void 0,null,(function*(){if(document.activeElement!==I.current)return;const{files:e}=t.clipboardData;if(e.length>0){const n=e[0];t.preventDefault(),yield zt(n,Y)}}))),[Y]),U=de((()=>{null==v||v(),null==r||r()}),[r,v]),[q,V]=ue(!1),[J,K]=ue(null),G=de(((t,e)=>u(void 0,null,(function*(){if(!(!t.trim()&&!e.length||j||C||q)){E(!0),_(""),Y([]),setTimeout((()=>{var t;null==(t=S.current)||t.scrollIntoView({behavior:"smooth",block:"nearest",inline:"nearest"})}));try{yield null==n?void 0:n(t,e)}finally{E(!1)}}}))),[j,C,q,E,_,Y,S,n]),Z=de((()=>u(void 0,null,(function*(){D?(null==a||a(),E(!1)):yield G(z,X)}))),[D,a,E,G,z,X]),Q=de((t=>u(void 0,null,(function*(){var n,a,r;if(document.activeElement===I.current&&!L&&229!==t.keyCode)if(q&&"Escape"===t.key)V(!1);else{if("ArrowLeft"===t.key||"ArrowRight"===t.key){const e=(null==(n=I.current)?void 0:n.selectionStart)||0,o=(null==(a=I.current)?void 0:a.value)||"";let i=e;const c=yt(Object.values(d||{}).flatMap((t=>t.data)));if("ArrowLeft"===t.key)for(const n of Object.keys(d||{})){const a=c.find((t=>o.substring(0,e).endsWith(`${n}${t}`)));if(a){const r=n.length+a.length;i=e-r,t.preventDefault();break}if(o.substring(0,e).endsWith(n)){i=e-n.length,t.preventDefault();break}}else for(const n of Object.keys(d||{})){const a=c.find((t=>o.substring(e).startsWith(`${n}${t}`)));if(a){const r=n.length+a.length;i=e+r,t.preventDefault();break}if(o.substring(e).startsWith(n)){i=e+n.length,t.preventDefault();break}}i!==e&&(null==(r=I.current)||r.setSelectionRange(i,i))}if("ArrowUp"!==t.key)if("ArrowDown"!==t.key){if("Enter"===t.key){if(t.shiftKey)return;if(!q&&!t.metaKey&&!t.ctrlKey){if(D)return;return t.preventDefault(),t.stopPropagation(),E(!0),yield G(z,X),void E(!1)}}if("Backspace"===t.key&&d&&I.current){const e=I.current.selectionStart,n=I.current.value.substring(0,e),a=I.current.selectionStart,r=I.current.selectionEnd,o=yt(Object.values(d).flatMap((t=>t.data)));for(const c of Object.keys(d))if(n.endsWith(c)&&a===r){t.preventDefault();const n=z.slice(0,e-c.length)+z.slice(e);return _(n),setTimeout((()=>{var t;null==(t=I.current)||t.setSelectionRange(e-c.length,e-c.length)}),0),V(!1),void K(null)}const i=o.find((t=>Object.keys(d).some((e=>n.endsWith(`${e}${t}`)))));if(i){t.preventDefault();const a=Object.keys(d).find((t=>n.endsWith(`${t}${i}`)));if(a){const t=a.length+i.length,n=z.slice(0,e-t)+z.slice(e);_(n),setTimeout((()=>{var n;null==(n=I.current)||n.setSelectionRange(e-t,e-t)}),0);const r=Ot(d[a].data,i);r&&(null==g||g(a,r))}V(!1),K(null)}}}else{const t=I.current;if(!t)return;if(P===e.length-1)return;if(t.selectionStart===t.value.length){const n=e[P+1].content;$((t=>t+1)),_(n),setTimeout((()=>{t.setSelectionRange(n.length,n.length),t.focus()}),0)}}else{const t=I.current;if(!t)return;if(0===P)return;if(0===t.selectionStart){const n=e[P-1].content;$((t=>t-1)),_(n),setTimeout((()=>{t.setSelectionRange(0,0),t.focus()}),0)}}}}))),[L,q,d,P,e,_,D,E,G,z,X,g]);pe((()=>(window.addEventListener("keydown",Q),()=>{window.removeEventListener("keydown",Q)})),[Q]);const tt=de((t=>u(void 0,null,(function*(){const{value:e}=t.target;if(_(e),L)return;const n=t.target.selectionStart,a=e.substring(0,n||0);for(const t of Object.keys(d||{})){const e=a.lastIndexOf(t);if(-1!==e){const n=a.slice(e+t.length);if(!/\s/.test(n))return p&&(B(!0),yield p(t),B(!1)),V(!0),K(t),void M(n)}}V(!1),K(null),M("")}))),[_,L,d,p]),et=de((()=>{R(!0)}),[]),nt=de((()=>{R(!1)}),[]),at=de((t=>u(void 0,null,(function*(){if((null==d?void 0:d[t])&&(p&&(B(!0),yield p(t),B(!1)),V(!0),K(t),M(""),I.current)){const e=I.current.selectionStart||0,n=z.slice(0,e)+t+z.slice(e);_(n),setTimeout((()=>{if(I.current){const n=e+t.length;I.current.setSelectionRange(n,n),I.current.focus()}}),0)}}))),[d,z,_,p]);return ge(x,(()=>({triggerCommand:at,focus:()=>{var t;null==(t=I.current)||t.focus()},getInputTextArea:()=>I.current}))),ze("div",{className:"ai-app-input-section-container",children:_e("div",{className:"ai-app-input-section-wrapper",children:[_e("div",{className:"flex-1",children:[o.beforeInputArea,ze("textarea",{className:"ai-app-input-textarea scrollbar","aria-label":"Prompt",rows:3,ref:I,style:i,disabled:t,placeholder:t?"暂时无法对话":l,onChange:t=>tt(t),onPaste:t=>H(t),value:z,onCompositionStart:et,onCompositionEnd:nt}),o.afterInputArea,d&&q&&J?ze(ae,{config:d[J],isShow:q,setIsShow:V,inputRef:I,filterText:F,setFilterText:M,setInputText:_,onSelect:w,command:J,isLoading:O}):null]}),ze("div",{className:"w-full",children:ze($t,{files:X,handleDelete:W})}),o.secondaryFeatures?ze("div",{className:"ai-app-input-section-button-container",children:o.secondaryFeatures}):null,_e("div",{className:"ai-app-input-section-button-container",children:[_e("div",{className:"ai-app-input-section-button-left",children:[N?ze(ce,{content:"Upload File",children:_e("button",{className:"ai-app-input-section-menu-button",disabled:t,style:{cursor:t?"not-allowed":"pointer"},onClick:()=>{var t;null==(t=T.current)||t.click(),V(!1)},children:[ze(ye,{className:"text-[var(--chat-ui-text-color)]"}),ze("input",{ref:T,type:"file",accept:"*/*",style:{display:"none"},onChange:t=>{var e;const n=null==(e=t.target.files)?void 0:e[0];n&&zt(n,Y)}})]})}):null,A?ze(ce,{content:"Clear History",children:ze("button",{className:"ai-app-input-section-menu-button",disabled:t,style:{cursor:t?"not-allowed":"pointer"},onClick:U,children:ze(xe,{color:"rgb(250, 132, 132)"})})}):null,o.customFeatures]}),o.customSendButton?o.customSendButton:ze("div",{className:"flex gap-2 items-center",children:ze("button",{className:ke("ai-app-send-button",D?"stop":"send"),style:{cursor:t?"not-allowed":"pointer"},disabled:t||q,onClick:Z,children:D?ze(me,{size:18}):ze(fe,{size:20})})})]})]})})})));import{useMemo as Ye,useCallback as Se,memo as je,useRef as Ce,forwardRef as Fe,useImperativeHandle as Me}from"react";import Ie from"classnames";import{useAtom as Te}from"jotai";M('@import url(./preflight.css);\n.\\!container{\n width: 100% !important;\n}\n.container{\n width: 100%;\n}\n@media (min-width: 640px){\n .\\!container{\n max-width: 640px !important;\n }\n .container{\n max-width: 640px;\n }\n}\n@media (min-width: 768px){\n .\\!container{\n max-width: 768px !important;\n }\n .container{\n max-width: 768px;\n }\n}\n@media (min-width: 1024px){\n .\\!container{\n max-width: 1024px !important;\n }\n .container{\n max-width: 1024px;\n }\n}\n@media (min-width: 1280px){\n .\\!container{\n max-width: 1280px !important;\n }\n .container{\n max-width: 1280px;\n }\n}\n@media (min-width: 1536px){\n .\\!container{\n max-width: 1536px !important;\n }\n .container{\n max-width: 1536px;\n }\n}\n.sr-only{\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n.pointer-events-none{\n pointer-events: none;\n}\n.pointer-events-auto{\n pointer-events: auto;\n}\n.visible{\n visibility: visible;\n}\n.invisible{\n visibility: hidden;\n}\n.static{\n position: static;\n}\n.fixed{\n position: fixed;\n}\n.absolute{\n position: absolute;\n}\n.relative{\n position: relative;\n}\n.sticky{\n position: sticky;\n}\n.inset-0{\n inset: 0px;\n}\n.inset-x-0{\n left: 0px;\n right: 0px;\n}\n.bottom-0{\n bottom: 0px;\n}\n.bottom-\\[10\\%\\]{\n bottom: 10%;\n}\n.bottom-\\[5\\%\\]{\n bottom: 5%;\n}\n.end-3{\n inset-inline-end: 0.75rem;\n}\n.end-auto{\n inset-inline-end: auto;\n}\n.left-0{\n left: 0px;\n}\n.left-1\\.5{\n left: 0.375rem;\n}\n.left-1\\/2{\n left: 50%;\n}\n.left-\\[10\\%\\]{\n left: 10%;\n}\n.left-\\[5\\%\\]{\n left: 5%;\n}\n.right-1{\n right: 0.25rem;\n}\n.right-1\\.5{\n right: 0.375rem;\n}\n.right-\\[10\\%\\]{\n right: 10%;\n}\n.right-\\[5\\%\\]{\n right: 5%;\n}\n.start-2{\n inset-inline-start: 0.5rem;\n}\n.start-3{\n inset-inline-start: 0.75rem;\n}\n.start-auto{\n inset-inline-start: auto;\n}\n.top-0{\n top: 0px;\n}\n.top-1{\n top: 0.25rem;\n}\n.top-1\\/2{\n top: 50%;\n}\n.top-\\[10\\%\\]{\n top: 10%;\n}\n.top-\\[5\\%\\]{\n top: 5%;\n}\n.top-\\[calc\\(100\\%_\\+_2px\\)\\]{\n top: calc(100% + 2px);\n}\n.top-\\[var\\(--navbar-height\\)\\]{\n top: var(--navbar-height);\n}\n.-z-30{\n z-index: -30;\n}\n.z-0{\n z-index: 0;\n}\n.z-10{\n z-index: 10;\n}\n.z-20{\n z-index: 20;\n}\n.z-30{\n z-index: 30;\n}\n.z-40{\n z-index: 40;\n}\n.z-50{\n z-index: 50;\n}\n.order-1{\n order: 1;\n}\n.order-2{\n order: 2;\n}\n.order-3{\n order: 3;\n}\n.-m-2{\n margin: -0.5rem;\n}\n.-m-2\\.5{\n margin: -0.625rem;\n}\n.m-0{\n margin: 0px;\n}\n.-mx-1{\n margin-left: -0.25rem;\n margin-right: -0.25rem;\n}\n.mx-0{\n margin-left: 0px;\n margin-right: 0px;\n}\n.mx-1{\n margin-left: 0.25rem;\n margin-right: 0.25rem;\n}\n.mx-2{\n margin-left: 0.5rem;\n margin-right: 0.5rem;\n}\n.mx-\\[calc\\(\\(theme\\(spacing\\.5\\)-theme\\(spacing\\.1\\)\\)\\/2\\)\\]{\n margin-left: calc((1.25rem - 0.25rem) / 2);\n margin-right: calc((1.25rem - 0.25rem) / 2);\n}\n.mx-\\[calc\\(\\(theme\\(spacing\\.6\\)-theme\\(spacing\\.3\\)\\)\\/2\\)\\]{\n margin-left: calc((1.5rem - 0.75rem) / 2);\n margin-right: calc((1.5rem - 0.75rem) / 2);\n}\n.mx-\\[calc\\(\\(theme\\(spacing\\.7\\)-theme\\(spacing\\.5\\)\\)\\/2\\)\\]{\n margin-left: calc((1.75rem - 1.25rem) / 2);\n margin-right: calc((1.75rem - 1.25rem) / 2);\n}\n.my-0{\n margin-top: 0px;\n margin-bottom: 0px;\n}\n.my-1{\n margin-top: 0.25rem;\n margin-bottom: 0.25rem;\n}\n.my-16{\n margin-top: 4rem;\n margin-bottom: 4rem;\n}\n.my-\\[calc\\(\\(theme\\(spacing\\.5\\)-theme\\(spacing\\.1\\)\\)\\/2\\)\\]{\n margin-top: calc((1.25rem - 0.25rem) / 2);\n margin-bottom: calc((1.25rem - 0.25rem) / 2);\n}\n.my-\\[calc\\(\\(theme\\(spacing\\.6\\)-theme\\(spacing\\.3\\)\\)\\/2\\)\\]{\n margin-top: calc((1.5rem - 0.75rem) / 2);\n margin-bottom: calc((1.5rem - 0.75rem) / 2);\n}\n.my-\\[calc\\(\\(theme\\(spacing\\.7\\)-theme\\(spacing\\.5\\)\\)\\/2\\)\\]{\n margin-top: calc((1.75rem - 1.25rem) / 2);\n margin-bottom: calc((1.75rem - 1.25rem) / 2);\n}\n.my-auto{\n margin-top: auto;\n margin-bottom: auto;\n}\n.-mr-2{\n margin-right: -0.5rem;\n}\n.-ms-2{\n margin-inline-start: -0.5rem;\n}\n.mb-1\\.5{\n margin-bottom: 0.375rem;\n}\n.mb-2{\n margin-bottom: 0.5rem;\n}\n.mb-5{\n margin-bottom: 1.25rem;\n}\n.mb-px{\n margin-bottom: 1px;\n}\n.ml-1{\n margin-left: 0.25rem;\n}\n.ml-2{\n margin-left: 0.5rem;\n}\n.mr-2{\n margin-right: 0.5rem;\n}\n.ms-2{\n margin-inline-start: 0.5rem;\n}\n.mt-1{\n margin-top: 0.25rem;\n}\n.mt-2{\n margin-top: 0.5rem;\n}\n.box-border{\n box-sizing: border-box;\n}\n.box-content{\n box-sizing: content-box;\n}\n.line-clamp-1{\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n}\n.block{\n display: block;\n}\n.inline-block{\n display: inline-block;\n}\n.inline{\n display: inline;\n}\n.flex{\n display: flex;\n}\n.inline-flex{\n display: inline-flex;\n}\n.table{\n display: table;\n}\n.grid{\n display: grid;\n}\n.inline-grid{\n display: inline-grid;\n}\n.hidden{\n display: none;\n}\n.\\!h-auto{\n height: auto !important;\n}\n.h-1{\n height: 0.25rem;\n}\n.h-1\\.5{\n height: 0.375rem;\n}\n.h-10{\n height: 2.5rem;\n}\n.h-12{\n height: 3rem;\n}\n.h-14{\n height: 3.5rem;\n}\n.h-16{\n height: 4rem;\n}\n.h-2{\n height: 0.5rem;\n}\n.h-2\\.5{\n height: 0.625rem;\n}\n.h-3{\n height: 0.75rem;\n}\n.h-3\\.5{\n height: 0.875rem;\n}\n.h-4{\n height: 1rem;\n}\n.h-40{\n height: 10rem;\n}\n.h-5{\n height: 1.25rem;\n}\n.h-6{\n height: 1.5rem;\n}\n.h-7{\n height: 1.75rem;\n}\n.h-8{\n height: 2rem;\n}\n.h-9{\n height: 2.25rem;\n}\n.h-\\[--visual-viewport-height\\]{\n height: var(--visual-viewport-height);\n}\n.h-\\[100dvh\\]{\n height: 100dvh;\n}\n.h-\\[2px\\]{\n height: 2px;\n}\n.h-\\[calc\\(100dvh_-_var\\(--navbar-height\\)\\)\\]{\n height: calc(100dvh - var(--navbar-height));\n}\n.h-\\[var\\(--navbar-height\\)\\]{\n height: var(--navbar-height);\n}\n.h-\\[var\\(--picker-height\\)\\]{\n height: var(--picker-height);\n}\n.h-auto{\n height: auto;\n}\n.h-divider{\n height: var(--nextui-divider-weight);\n}\n.h-fit{\n height: fit-content;\n}\n.h-full{\n height: 100%;\n}\n.h-px{\n height: 1px;\n}\n.h-screen{\n height: 100vh;\n}\n.max-h-64{\n max-height: 16rem;\n}\n.max-h-\\[calc\\(100\\%_-_8rem\\)\\]{\n max-height: calc(100% - 8rem);\n}\n.min-h-10{\n min-height: 2.5rem;\n}\n.min-h-12{\n min-height: 3rem;\n}\n.min-h-14{\n min-height: 3.5rem;\n}\n.min-h-16{\n min-height: 4rem;\n}\n.min-h-3{\n min-height: 0.75rem;\n}\n.min-h-3\\.5{\n min-height: 0.875rem;\n}\n.min-h-4{\n min-height: 1rem;\n}\n.min-h-5{\n min-height: 1.25rem;\n}\n.min-h-6{\n min-height: 1.5rem;\n}\n.min-h-7{\n min-height: 1.75rem;\n}\n.min-h-8{\n min-height: 2rem;\n}\n.min-h-\\[100dvh\\]{\n min-height: 100dvh;\n}\n.min-h-\\[32px\\]{\n min-height: 32px;\n}\n.w-0{\n width: 0px;\n}\n.w-1{\n width: 0.25rem;\n}\n.w-1\\.5{\n width: 0.375rem;\n}\n.w-10{\n width: 2.5rem;\n}\n.w-12{\n width: 3rem;\n}\n.w-14{\n width: 3.5rem;\n}\n.w-2{\n width: 0.5rem;\n}\n.w-2\\.5{\n width: 0.625rem;\n}\n.w-3{\n width: 0.75rem;\n}\n.w-3\\.5{\n width: 0.875rem;\n}\n.w-4{\n width: 1rem;\n}\n.w-5{\n width: 1.25rem;\n}\n.w-6{\n width: 1.5rem;\n}\n.w-7{\n width: 1.75rem;\n}\n.w-8{\n width: 2rem;\n}\n.w-9{\n width: 2.25rem;\n}\n.w-\\[80\\%\\]{\n width: 80%;\n}\n.w-\\[calc\\(100\\%_-_16px\\)\\]{\n width: calc(100% - 16px);\n}\n.w-\\[calc\\(100\\%_-_theme\\(spacing\\.6\\)\\)\\]{\n width: calc(100% - 1.5rem);\n}\n.w-\\[calc\\(var\\(--visible-months\\)_\\*_var\\(--calendar-width\\)\\)\\]{\n width: calc(var(--visible-months) * var(--calendar-width));\n}\n.w-auto{\n width: auto;\n}\n.w-divider{\n width: var(--nextui-divider-weight);\n}\n.w-fit{\n width: fit-content;\n}\n.w-full{\n width: 100%;\n}\n.w-max{\n width: max-content;\n}\n.w-px{\n width: 1px;\n}\n.w-screen{\n width: 100vw;\n}\n.min-w-10{\n min-width: 2.5rem;\n}\n.min-w-12{\n min-width: 3rem;\n}\n.min-w-16{\n min-width: 4rem;\n}\n.min-w-20{\n min-width: 5rem;\n}\n.min-w-24{\n min-width: 6rem;\n}\n.min-w-3{\n min-width: 0.75rem;\n}\n.min-w-3\\.5{\n min-width: 0.875rem;\n}\n.min-w-4{\n min-width: 1rem;\n}\n.min-w-5{\n min-width: 1.25rem;\n}\n.min-w-6{\n min-width: 1.5rem;\n}\n.min-w-7{\n min-width: 1.75rem;\n}\n.min-w-8{\n min-width: 2rem;\n}\n.min-w-9{\n min-width: 2.25rem;\n}\n.min-w-\\[200px\\]{\n min-width: 200px;\n}\n.min-w-full{\n min-width: 100%;\n}\n.min-w-max{\n min-width: max-content;\n}\n.min-w-min{\n min-width: min-content;\n}\n.max-w-2xl{\n max-width: 42rem;\n}\n.max-w-3xl{\n max-width: 48rem;\n}\n.max-w-4xl{\n max-width: 56rem;\n}\n.max-w-5xl{\n max-width: 64rem;\n}\n.max-w-\\[1024px\\]{\n max-width: 1024px;\n}\n.max-w-\\[1280px\\]{\n max-width: 1280px;\n}\n.max-w-\\[1536px\\]{\n max-width: 1536px;\n}\n.max-w-\\[270px\\]{\n max-width: 270px;\n}\n.max-w-\\[640px\\]{\n max-width: 640px;\n}\n.max-w-\\[768px\\]{\n max-width: 768px;\n}\n.max-w-fit{\n max-width: fit-content;\n}\n.max-w-full{\n max-width: 100%;\n}\n.max-w-lg{\n max-width: 32rem;\n}\n.max-w-md{\n max-width: 28rem;\n}\n.max-w-sm{\n max-width: 24rem;\n}\n.max-w-xl{\n max-width: 36rem;\n}\n.max-w-xs{\n max-width: 20rem;\n}\n.flex-1{\n flex: 1 1 0%;\n}\n.flex-auto{\n flex: 1 1 auto;\n}\n.flex-initial{\n flex: 0 1 auto;\n}\n.flex-none{\n flex: none;\n}\n.flex-shrink-0{\n flex-shrink: 0;\n}\n.shrink-0{\n flex-shrink: 0;\n}\n.flex-grow{\n flex-grow: 1;\n}\n.basis-0{\n flex-basis: 0px;\n}\n.table-auto{\n table-layout: auto;\n}\n.table-fixed{\n table-layout: fixed;\n}\n.border-collapse{\n border-collapse: collapse;\n}\n.origin-center{\n transform-origin: center;\n}\n.origin-left{\n transform-origin: left;\n}\n.origin-right{\n transform-origin: right;\n}\n.origin-top{\n transform-origin: top;\n}\n.origin-top-left{\n transform-origin: top left;\n}\n.-translate-x-1\\/2{\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.-translate-y-1\\/2{\n --tw-translate-y: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-1{\n --tw-translate-x: 0.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-1\\/2{\n --tw-translate-x: 50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-y-1{\n --tw-translate-y: 0.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-y-1\\/2{\n --tw-translate-y: 50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-0{\n --tw-rotate: 0deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-180{\n --tw-rotate: 180deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.scale-0{\n --tw-scale-x: 0;\n --tw-scale-y: 0;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.scale-100{\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.scale-105{\n --tw-scale-x: 1.05;\n --tw-scale-y: 1.05;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.scale-50{\n --tw-scale-x: .5;\n --tw-scale-y: .5;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.transform{\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n@keyframes drip-expand{\n 0%{\n opacity: 0.2;\n transform: scale(0);\n }\n 100%{\n opacity: 0;\n transform: scale(2);\n }\n}\n.animate-drip-expand{\n animation: drip-expand 420ms linear;\n}\n@keyframes indeterminate-bar{\n 0%{\n transform: translateX(-50%) scaleX(0.2);\n }\n 100%{\n transform: translateX(100%) scaleX(1);\n }\n}\n.animate-indeterminate-bar{\n animation: indeterminate-bar 1.5s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite normal none running;\n}\n.animate-none{\n animation: none;\n}\n@keyframes spinner-spin{\n 0%{\n transform: rotate(0deg);\n }\n 100%{\n transform: rotate(360deg);\n }\n}\n.animate-spinner-ease-spin{\n animation: spinner-spin 0.8s ease infinite;\n}\n@keyframes spinner-spin{\n 0%{\n transform: rotate(0deg);\n }\n 100%{\n transform: rotate(360deg);\n }\n}\n.animate-spinner-linear-spin{\n animation: spinner-spin 0.8s linear infinite;\n}\n.cursor-default{\n cursor: default;\n}\n.cursor-grab{\n cursor: grab;\n}\n.cursor-not-allowed{\n cursor: not-allowed;\n}\n.cursor-pointer{\n cursor: pointer;\n}\n.cursor-text{\n cursor: text;\n}\n.touch-none{\n touch-action: none;\n}\n.select-none{\n user-select: none;\n}\n.resize-none{\n resize: none;\n}\n.snap-y{\n scroll-snap-type: y var(--tw-scroll-snap-strictness);\n}\n.snap-mandatory{\n --tw-scroll-snap-strictness: mandatory;\n}\n.snap-center{\n scroll-snap-align: center;\n}\n.scroll-py-6{\n scroll-padding-top: 1.5rem;\n scroll-padding-bottom: 1.5rem;\n}\n.list-none{\n list-style-type: none;\n}\n.appearance-none{\n appearance: none;\n}\n.grid-cols-4{\n grid-template-columns: repeat(4, minmax(0, 1fr));\n}\n.flex-row{\n flex-direction: row;\n}\n.flex-row-reverse{\n flex-direction: row-reverse;\n}\n.flex-col{\n flex-direction: column;\n}\n.flex-col-reverse{\n flex-direction: column-reverse;\n}\n.flex-wrap{\n flex-wrap: wrap;\n}\n.flex-nowrap{\n flex-wrap: nowrap;\n}\n.place-content-center{\n place-content: center;\n}\n.items-start{\n align-items: flex-start;\n}\n.items-end{\n align-items: flex-end;\n}\n.items-center{\n align-items: center;\n}\n.justify-start{\n justify-content: flex-start;\n}\n.justify-end{\n justify-content: flex-end;\n}\n.justify-center{\n justify-content: center;\n}\n.justify-between{\n justify-content: space-between;\n}\n.\\!gap-0{\n gap: 0px !important;\n}\n.gap-0{\n gap: 0px;\n}\n.gap-0\\.5{\n gap: 0.125rem;\n}\n.gap-1{\n gap: 0.25rem;\n}\n.gap-1\\.5{\n gap: 0.375rem;\n}\n.gap-2{\n gap: 0.5rem;\n}\n.gap-3{\n gap: 0.75rem;\n}\n.gap-4{\n gap: 1rem;\n}\n.gap-x-0\\.5{\n column-gap: 0.125rem;\n}\n.gap-x-2{\n column-gap: 0.5rem;\n}\n.gap-x-6{\n column-gap: 1.5rem;\n}\n.gap-y-1\\.5{\n row-gap: 0.375rem;\n}\n.gap-y-2{\n row-gap: 0.5rem;\n}\n.space-x-0\\.5 > :not([hidden]) ~ :not([hidden]){\n --tw-space-x-reverse: 0;\n margin-right: calc(0.125rem * var(--tw-space-x-reverse));\n margin-left: calc(0.125rem * calc(1 - var(--tw-space-x-reverse)));\n}\n.self-center{\n align-self: center;\n}\n.overflow-auto{\n overflow: auto;\n}\n.overflow-hidden{\n overflow: hidden;\n}\n.overflow-visible{\n overflow: visible;\n}\n.overflow-x-auto{\n overflow-x: auto;\n}\n.overflow-y-auto{\n overflow-y: auto;\n}\n.overflow-y-hidden{\n overflow-y: hidden;\n}\n.overflow-x-scroll{\n overflow-x: scroll;\n}\n.overflow-y-scroll{\n overflow-y: scroll;\n}\n.truncate{\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.text-ellipsis{\n text-overflow: ellipsis;\n}\n.whitespace-normal{\n white-space: normal;\n}\n.whitespace-nowrap{\n white-space: nowrap;\n}\n.break-words{\n overflow-wrap: break-word;\n}\n.\\!rounded-none{\n border-radius: 0px !important;\n}\n.rounded{\n border-radius: 0.25rem;\n}\n.rounded-\\[calc\\(theme\\(borderRadius\\.large\\)\\/1\\.5\\)\\]{\n border-radius: calc(var(--nextui-radius-large) / 1.5);\n}\n.rounded-\\[calc\\(theme\\(borderRadius\\.medium\\)\\*0\\.5\\)\\]{\n border-radius: calc(var(--nextui-radius-medium) * 0.5);\n}\n.rounded-\\[calc\\(theme\\(borderRadius\\.medium\\)\\*0\\.6\\)\\]{\n border-radius: calc(var(--nextui-radius-medium) * 0.6);\n}\n.rounded-\\[calc\\(theme\\(borderRadius\\.medium\\)\\*0\\.7\\)\\]{\n border-radius: calc(var(--nextui-radius-medium) * 0.7);\n}\n.rounded-\\[calc\\(theme\\(borderRadius\\.medium\\)\\/2\\)\\]{\n border-radius: calc(var(--nextui-radius-medium) / 2);\n}\n.rounded-\\[calc\\(theme\\(borderRadius\\.small\\)\\/2\\)\\]{\n border-radius: calc(var(--nextui-radius-small) / 2);\n}\n.rounded-full{\n border-radius: 9999px;\n}\n.rounded-large{\n border-radius: var(--nextui-radius-large);\n}\n.rounded-md{\n border-radius: 0.375rem;\n}\n.rounded-medium{\n border-radius: var(--nextui-radius-medium);\n}\n.rounded-none{\n border-radius: 0px;\n}\n.rounded-small{\n border-radius: var(--nextui-radius-small);\n}\n.\\!rounded-e-none{\n border-start-end-radius: 0px !important;\n border-end-end-radius: 0px !important;\n}\n.\\!rounded-s-none{\n border-start-start-radius: 0px !important;\n border-end-start-radius: 0px !important;\n}\n.rounded-b-large{\n border-bottom-right-radius: var(--nextui-radius-large);\n border-bottom-left-radius: var(--nextui-radius-large);\n}\n.rounded-b-medium{\n border-bottom-right-radius: var(--nextui-radius-medium);\n border-bottom-left-radius: var(--nextui-radius-medium);\n}\n.rounded-b-small{\n border-bottom-right-radius: var(--nextui-radius-small);\n border-bottom-left-radius: var(--nextui-radius-small);\n}\n.rounded-t-large{\n border-top-left-radius: var(--nextui-radius-large);\n border-top-right-radius: var(--nextui-radius-large);\n}\n.rounded-t-medium{\n border-top-left-radius: var(--nextui-radius-medium);\n border-top-right-radius: var(--nextui-radius-medium);\n}\n.rounded-t-small{\n border-top-left-radius: var(--nextui-radius-small);\n border-top-right-radius: var(--nextui-radius-small);\n}\n.border{\n border-width: 1px;\n}\n.border-0{\n border-width: 0px;\n}\n.border-2{\n border-width: 2px;\n}\n.border-3{\n border-width: 3px;\n}\n.border-medium{\n border-width: var(--nextui-border-width-medium);\n}\n.border-small{\n border-width: var(--nextui-border-width-small);\n}\n.border-x-\\[calc\\(theme\\(spacing\\.5\\)\\/2\\)\\]{\n border-left-width: calc(1.25rem / 2);\n border-right-width: calc(1.25rem / 2);\n}\n.border-x-\\[calc\\(theme\\(spacing\\.6\\)\\/2\\)\\]{\n border-left-width: calc(1.5rem / 2);\n border-right-width: calc(1.5rem / 2);\n}\n.border-x-\\[calc\\(theme\\(spacing\\.7\\)\\/2\\)\\]{\n border-left-width: calc(1.75rem / 2);\n border-right-width: calc(1.75rem / 2);\n}\n.border-y-\\[calc\\(theme\\(spacing\\.5\\)\\/2\\)\\]{\n border-top-width: calc(1.25rem / 2);\n border-bottom-width: calc(1.25rem / 2);\n}\n.border-y-\\[calc\\(theme\\(spacing\\.6\\)\\/2\\)\\]{\n border-top-width: calc(1.5rem / 2);\n border-bottom-width: calc(1.5rem / 2);\n}\n.border-y-\\[calc\\(theme\\(spacing\\.7\\)\\/2\\)\\]{\n border-top-width: calc(1.75rem / 2);\n border-bottom-width: calc(1.75rem / 2);\n}\n.border-b{\n border-bottom-width: 1px;\n}\n.border-b-medium{\n border-bottom-width: var(--nextui-border-width-medium);\n}\n.border-solid{\n border-style: solid;\n}\n.border-dotted{\n border-style: dotted;\n}\n.border-none{\n border-style: none;\n}\n.\\!border-danger{\n --tw-border-opacity: 1 !important;\n border-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-border-opacity))) !important;\n}\n.border-background{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-background) / var(--nextui-background-opacity, var(--tw-border-opacity)));\n}\n.border-danger{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-border-opacity)));\n}\n.border-default{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-default) / var(--nextui-default-opacity, var(--tw-border-opacity)));\n}\n.border-default-200{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-default-200) / var(--nextui-default-200-opacity, var(--tw-border-opacity)));\n}\n.border-default-300{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-default-300) / var(--nextui-default-300-opacity, var(--tw-border-opacity)));\n}\n.border-divider{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-divider) / var(--nextui-divider-opacity, var(--tw-border-opacity)));\n}\n.border-foreground{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-foreground) / var(--nextui-foreground-opacity, var(--tw-border-opacity)));\n}\n.border-primary{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-border-opacity)));\n}\n.border-secondary{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-border-opacity)));\n}\n.border-success{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-border-opacity)));\n}\n.border-transparent{\n border-color: transparent;\n}\n.border-warning{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-border-opacity)));\n}\n.border-x-transparent{\n border-left-color: transparent;\n border-right-color: transparent;\n}\n.border-y-transparent{\n border-top-color: transparent;\n border-bottom-color: transparent;\n}\n.border-b-current{\n border-bottom-color: currentColor;\n}\n.border-b-danger{\n --tw-border-opacity: 1;\n border-bottom-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-border-opacity)));\n}\n.border-b-default{\n --tw-border-opacity: 1;\n border-bottom-color: hsl(var(--nextui-default) / var(--nextui-default-opacity, var(--tw-border-opacity)));\n}\n.border-b-foreground{\n --tw-border-opacity: 1;\n border-bottom-color: hsl(var(--nextui-foreground) / var(--nextui-foreground-opacity, var(--tw-border-opacity)));\n}\n.border-b-primary{\n --tw-border-opacity: 1;\n border-bottom-color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-border-opacity)));\n}\n.border-b-secondary{\n --tw-border-opacity: 1;\n border-bottom-color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-border-opacity)));\n}\n.border-b-success{\n --tw-border-opacity: 1;\n border-bottom-color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-border-opacity)));\n}\n.border-b-warning{\n --tw-border-opacity: 1;\n border-bottom-color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-border-opacity)));\n}\n.border-b-white{\n --tw-border-opacity: 1;\n border-bottom-color: rgb(255 255 255 / var(--tw-border-opacity, 1));\n}\n.border-l-transparent{\n border-left-color: transparent;\n}\n.border-r-transparent{\n border-right-color: transparent;\n}\n.border-s-danger{\n --tw-border-opacity: 1;\n border-inline-start-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-border-opacity)));\n}\n.border-s-foreground{\n --tw-border-opacity: 1;\n border-inline-start-color: hsl(var(--nextui-foreground) / var(--nextui-foreground-opacity, var(--tw-border-opacity)));\n}\n.border-s-primary{\n --tw-border-opacity: 1;\n border-inline-start-color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-border-opacity)));\n}\n.border-s-secondary{\n --tw-border-opacity: 1;\n border-inline-start-color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-border-opacity)));\n}\n.border-s-success{\n --tw-border-opacity: 1;\n border-inline-start-color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-border-opacity)));\n}\n.border-s-warning{\n --tw-border-opacity: 1;\n border-inline-start-color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-border-opacity)));\n}\n.border-t-transparent{\n border-top-color: transparent;\n}\n.\\!bg-danger-50{\n --tw-bg-opacity: 1 !important;\n background-color: hsl(var(--nextui-danger-50) / var(--nextui-danger-50-opacity, var(--tw-bg-opacity))) !important;\n}\n.bg-background{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-background) / var(--nextui-background-opacity, var(--tw-bg-opacity)));\n}\n.bg-background\\/10{\n background-color: hsl(var(--nextui-background) / 0.1);\n}\n.bg-background\\/70{\n background-color: hsl(var(--nextui-background) / 0.7);\n}\n.bg-background\\/80{\n background-color: hsl(var(--nextui-background) / 0.8);\n}\n.bg-content1{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-content1) / var(--nextui-content1-opacity, var(--tw-bg-opacity)));\n}\n.bg-content3{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-content3) / var(--nextui-content3-opacity, var(--tw-bg-opacity)));\n}\n.bg-current{\n background-color: currentColor;\n}\n.bg-danger{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-bg-opacity)));\n}\n.bg-danger-100{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-danger-100) / var(--nextui-danger-100-opacity, var(--tw-bg-opacity)));\n}\n.bg-danger-50{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-danger-50) / var(--nextui-danger-50-opacity, var(--tw-bg-opacity)));\n}\n.bg-danger\\/20{\n background-color: hsl(var(--nextui-danger) / 0.2);\n}\n.bg-default{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default) / var(--nextui-default-opacity, var(--tw-bg-opacity)));\n}\n.bg-default-100{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default-100) / var(--nextui-default-100-opacity, var(--tw-bg-opacity)));\n}\n.bg-default-200{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default-200) / var(--nextui-default-200-opacity, var(--tw-bg-opacity)));\n}\n.bg-default-300\\/50{\n background-color: hsl(var(--nextui-default-300) / 0.5);\n}\n.bg-default-400{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default-400) / var(--nextui-default-400-opacity, var(--tw-bg-opacity)));\n}\n.bg-default-50{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default-50) / var(--nextui-default-50-opacity, var(--tw-bg-opacity)));\n}\n.bg-default-500{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default-500) / var(--nextui-default-500-opacity, var(--tw-bg-opacity)));\n}\n.bg-default\\/40{\n background-color: hsl(var(--nextui-default) / 0.4);\n}\n.bg-divider{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-divider) / var(--nextui-divider-opacity, var(--tw-bg-opacity)));\n}\n.bg-foreground{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-foreground) / var(--nextui-foreground-opacity, var(--tw-bg-opacity)));\n}\n.bg-foreground\\/10{\n background-color: hsl(var(--nextui-foreground) / 0.1);\n}\n.bg-overlay\\/30{\n background-color: hsl(var(--nextui-overlay) / 0.3);\n}\n.bg-overlay\\/50{\n background-color: hsl(var(--nextui-overlay) / 0.5);\n}\n.bg-primary{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-bg-opacity)));\n}\n.bg-primary-100{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-primary-100) / var(--nextui-primary-100-opacity, var(--tw-bg-opacity)));\n}\n.bg-primary-50{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-primary-50) / var(--nextui-primary-50-opacity, var(--tw-bg-opacity)));\n}\n.bg-primary\\/20{\n background-color: hsl(var(--nextui-primary) / 0.2);\n}\n.bg-secondary{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-bg-opacity)));\n}\n.bg-secondary-100{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-secondary-100) / var(--nextui-secondary-100-opacity, var(--tw-bg-opacity)));\n}\n.bg-secondary-50{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-secondary-50) / var(--nextui-secondary-50-opacity, var(--tw-bg-opacity)));\n}\n.bg-secondary\\/20{\n background-color: hsl(var(--nextui-secondary) / 0.2);\n}\n.bg-success{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-bg-opacity)));\n}\n.bg-success-100{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-success-100) / var(--nextui-success-100-opacity, var(--tw-bg-opacity)));\n}\n.bg-success-50{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-success-50) / var(--nextui-success-50-opacity, var(--tw-bg-opacity)));\n}\n.bg-success\\/20{\n background-color: hsl(var(--nextui-success) / 0.2);\n}\n.bg-transparent{\n background-color: transparent;\n}\n.bg-warning{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-bg-opacity)));\n}\n.bg-warning-100{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-warning-100) / var(--nextui-warning-100-opacity, var(--tw-bg-opacity)));\n}\n.bg-warning-50{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-warning-50) / var(--nextui-warning-50-opacity, var(--tw-bg-opacity)));\n}\n.bg-warning\\/20{\n background-color: hsl(var(--nextui-warning) / 0.2);\n}\n.bg-white{\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));\n}\n.bg-stripe-gradient{\n background-image: linear-gradient(45deg, rgba(0, 0, 0, 0.1) 25%, transparent 25%, transparent 50%, rgba(0, 0, 0, 0.1) 50%, rgba(0, 0, 0, 0.1) 75%, transparent 75%, transparent);\n}\n.bg-\\[length\\:1\\.25rem_1\\.25rem\\]{\n background-size: 1.25rem 1.25rem;\n}\n.bg-clip-text{\n background-clip: text;\n}\n.stroke-current{\n stroke: currentColor;\n}\n.stroke-default-300\\/50{\n stroke: hsl(var(--nextui-default-300) / 0.5);\n}\n.object-cover{\n object-fit: cover;\n}\n.p-0{\n padding: 0px;\n}\n.p-1{\n padding: 0.25rem;\n}\n.p-2{\n padding: 0.5rem;\n}\n.p-2\\.5{\n padding: 0.625rem;\n}\n.p-3{\n padding: 0.75rem;\n}\n.p-4{\n padding: 1rem;\n}\n.\\!px-1{\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n}\n.px-0{\n padding-left: 0px;\n padding-right: 0px;\n}\n.px-0\\.5{\n padding-left: 0.125rem;\n padding-right: 0.125rem;\n}\n.px-1{\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n}\n.px-1\\.5{\n padding-left: 0.375rem;\n padding-right: 0.375rem;\n}\n.px-2{\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.px-2\\.5{\n padding-left: 0.625rem;\n padding-right: 0.625rem;\n}\n.px-3{\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n.px-4{\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.px-5{\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n}\n.px-6{\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n}\n.py-0{\n padding-top: 0px;\n padding-bottom: 0px;\n}\n.py-0\\.5{\n padding-top: 0.125rem;\n padding-bottom: 0.125rem;\n}\n.py-1{\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n.py-1\\.5{\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n}\n.py-2{\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.py-2\\.5{\n padding-top: 0.625rem;\n padding-bottom: 0.625rem;\n}\n.py-3{\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n}\n.py-4{\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n.\\!pb-0{\n padding-bottom: 0px !important;\n}\n.pb-0{\n padding-bottom: 0px;\n}\n.pb-0\\.5{\n padding-bottom: 0.125rem;\n}\n.pb-1{\n padding-bottom: 0.25rem;\n}\n.pb-1\\.5{\n padding-bottom: 0.375rem;\n}\n.pb-2{\n padding-bottom: 0.5rem;\n}\n.pb-4{\n padding-bottom: 1rem;\n}\n.pe-2{\n padding-inline-end: 0.5rem;\n}\n.pl-0\\.5{\n padding-left: 0.125rem;\n}\n.pl-1{\n padding-left: 0.25rem;\n}\n.pr-0\\.5{\n padding-right: 0.125rem;\n}\n.pr-1{\n padding-right: 0.25rem;\n}\n.pr-4{\n padding-right: 1rem;\n}\n.pr-6{\n padding-right: 1.5rem;\n}\n.ps-2{\n padding-inline-start: 0.5rem;\n}\n.pt-0{\n padding-top: 0px;\n}\n.pt-2{\n padding-top: 0.5rem;\n}\n.text-left{\n text-align: left;\n}\n.text-center{\n text-align: center;\n}\n.text-start{\n text-align: start;\n}\n.text-end{\n text-align: end;\n}\n.align-middle{\n vertical-align: middle;\n}\n.font-mono{\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;\n}\n.font-sans{\n font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";\n}\n.text-\\[0\\.55rem\\]{\n font-size: 0.55rem;\n}\n.text-\\[0\\.5rem\\]{\n font-size: 0.5rem;\n}\n.text-\\[0\\.6rem\\]{\n font-size: 0.6rem;\n}\n.text-large{\n font-size: var(--nextui-font-size-large);\n line-height: var(--nextui-line-height-large);\n}\n.text-lg{\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.text-medium{\n font-size: var(--nextui-font-size-medium);\n line-height: var(--nextui-line-height-medium);\n}\n.text-sm{\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.text-small{\n font-size: var(--nextui-font-size-small);\n line-height: var(--nextui-line-height-small);\n}\n.text-tiny{\n font-size: var(--nextui-font-size-tiny);\n line-height: var(--nextui-line-height-tiny);\n}\n.text-xl{\n font-size: 1.25rem;\n line-height: 1.75rem;\n}\n.font-light{\n font-weight: 300;\n}\n.font-medium{\n font-weight: 500;\n}\n.font-normal{\n font-weight: 400;\n}\n.font-semibold{\n font-weight: 600;\n}\n.tabular-nums{\n --tw-numeric-spacing: tabular-nums;\n font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);\n}\n.leading-\\[32px\\]{\n line-height: 32px;\n}\n.\\!text-danger{\n --tw-text-opacity: 1 !important;\n color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-text-opacity))) !important;\n}\n.\\!text-danger-foreground{\n --tw-text-opacity: 1 !important;\n color: hsl(var(--nextui-danger-foreground) / var(--nextui-danger-foreground-opacity, var(--tw-text-opacity))) !important;\n}\n.text-\\[var\\(--chat-ui-text-color\\)\\]{\n color: var(--chat-ui-text-color);\n}\n.text-background{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-background) / var(--nextui-background-opacity, var(--tw-text-opacity)));\n}\n.text-black{\n --tw-text-opacity: 1;\n color: rgb(0 0 0 / var(--tw-text-opacity, 1));\n}\n.text-current{\n color: currentColor;\n}\n.text-danger{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-text-opacity)));\n}\n.text-danger-300{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger-300) / var(--nextui-danger-300-opacity, var(--tw-text-opacity)));\n}\n.text-danger-800{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger-800) / var(--nextui-danger-800-opacity, var(--tw-text-opacity)));\n}\n.text-danger-foreground{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger-foreground) / var(--nextui-danger-foreground-opacity, var(--tw-text-opacity)));\n}\n.text-danger\\/80{\n color: hsl(var(--nextui-danger) / 0.8);\n}\n.text-default-400{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-default-400) / var(--nextui-default-400-opacity, var(--tw-text-opacity)));\n}\n.text-default-500{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-default-500) / var(--nextui-default-500-opacity, var(--tw-text-opacity)));\n}\n.text-default-600{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-default-600) / var(--nextui-default-600-opacity, var(--tw-text-opacity)));\n}\n.text-default-700{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-default-700) / var(--nextui-default-700-opacity, var(--tw-text-opacity)));\n}\n.text-default-foreground{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-default-foreground) / var(--nextui-default-foreground-opacity, var(--tw-text-opacity)));\n}\n.text-foreground{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-foreground) / var(--nextui-foreground-opacity, var(--tw-text-opacity)));\n}\n.text-foreground-400{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-foreground-400) / var(--nextui-foreground-400-opacity, var(--tw-text-opacity)));\n}\n.text-foreground-500{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-foreground-500) / var(--nextui-foreground-500-opacity, var(--tw-text-opacity)));\n}\n.text-foreground-600{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-foreground-600) / var(--nextui-foreground-600-opacity, var(--tw-text-opacity)));\n}\n.text-foreground\\/50{\n color: hsl(var(--nextui-foreground) / 0.5);\n}\n.text-gray-400{\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity, 1));\n}\n.text-inherit{\n color: inherit;\n}\n.text-primary{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-text-opacity)));\n}\n.text-primary-300{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-primary-300) / var(--nextui-primary-300-opacity, var(--tw-text-opacity)));\n}\n.text-primary-700{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-primary-700) / var(--nextui-primary-700-opacity, var(--tw-text-opacity)));\n}\n.text-primary-foreground{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-primary-foreground) / var(--nextui-primary-foreground-opacity, var(--tw-text-opacity)));\n}\n.text-primary\\/80{\n color: hsl(var(--nextui-primary) / 0.8);\n}\n.text-secondary{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-text-opacity)));\n}\n.text-secondary-300{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-secondary-300) / var(--nextui-secondary-300-opacity, var(--tw-text-opacity)));\n}\n.text-secondary-700{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-secondary-700) / var(--nextui-secondary-700-opacity, var(--tw-text-opacity)));\n}\n.text-secondary-foreground{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-secondary-foreground) / var(--nextui-secondary-foreground-opacity, var(--tw-text-opacity)));\n}\n.text-secondary\\/80{\n color: hsl(var(--nextui-secondary) / 0.8);\n}\n.text-success{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-text-opacity)));\n}\n.text-success-400{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success-400) / var(--nextui-success-400-opacity, var(--tw-text-opacity)));\n}\n.text-success-600{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success-600) / var(--nextui-success-600-opacity, var(--tw-text-opacity)));\n}\n.text-success-800{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success-800) / var(--nextui-success-800-opacity, var(--tw-text-opacity)));\n}\n.text-success-foreground{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success-foreground) / var(--nextui-success-foreground-opacity, var(--tw-text-opacity)));\n}\n.text-success\\/80{\n color: hsl(var(--nextui-success) / 0.8);\n}\n.text-warning{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-text-opacity)));\n}\n.text-warning-400{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning-400) / var(--nextui-warning-400-opacity, var(--tw-text-opacity)));\n}\n.text-warning-600{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning-600) / var(--nextui-warning-600-opacity, var(--tw-text-opacity)));\n}\n.text-warning-800{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning-800) / var(--nextui-warning-800-opacity, var(--tw-text-opacity)));\n}\n.text-warning-foreground{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning-foreground) / var(--nextui-warning-foreground-opacity, var(--tw-text-opacity)));\n}\n.text-warning\\/80{\n color: hsl(var(--nextui-warning) / 0.8);\n}\n.text-white{\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity, 1));\n}\n.underline{\n text-decoration-line: underline;\n}\n.no-underline{\n text-decoration-line: none;\n}\n.underline-offset-4{\n text-underline-offset: 4px;\n}\n.subpixel-antialiased{\n -webkit-font-smoothing: auto;\n -moz-osx-font-smoothing: auto;\n}\n.opacity-0{\n opacity: 0;\n}\n.opacity-100{\n opacity: 1;\n}\n.opacity-30{\n opacity: 0.3;\n}\n.opacity-50{\n opacity: 0.5;\n}\n.opacity-70{\n opacity: 0.7;\n}\n.opacity-75{\n opacity: 0.75;\n}\n.opacity-disabled{\n opacity: var(--nextui-disabled-opacity);\n}\n.shadow{\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-\\[0_1px_0px_0_rgba\\(0\\2c 0\\2c 0\\2c 0\\.05\\)\\]{\n --tw-shadow: 0 1px 0px 0 rgba(0,0,0,0.05);\n --tw-shadow-colored: 0 1px 0px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-\\[0px_20px_20px_0px_rgb\\(0_0_0\\/0\\.05\\)\\]{\n --tw-shadow: 0px 20px 20px 0px rgb(0 0 0/0.05);\n --tw-shadow-colored: 0px 20px 20px 0px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-large{\n --tw-shadow: var(--nextui-box-shadow-large);\n --tw-shadow-colored: var(--nextui-box-shadow-large);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-lg{\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-md{\n --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-medium{\n --tw-shadow: var(--nextui-box-shadow-medium);\n --tw-shadow-colored: var(--nextui-box-shadow-medium);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-none{\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-sm{\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-small{\n --tw-shadow: var(--nextui-box-shadow-small);\n --tw-shadow-colored: var(--nextui-box-shadow-small);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-black\\/5{\n --tw-shadow-color: rgb(0 0 0 / 0.05);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.shadow-danger\\/40{\n --tw-shadow-color: hsl(var(--nextui-danger) / 0.4);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.shadow-default\\/50{\n --tw-shadow-color: hsl(var(--nextui-default) / 0.5);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.shadow-foreground\\/40{\n --tw-shadow-color: hsl(var(--nextui-foreground) / 0.4);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.shadow-primary\\/40{\n --tw-shadow-color: hsl(var(--nextui-primary) / 0.4);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.shadow-secondary\\/40{\n --tw-shadow-color: hsl(var(--nextui-secondary) / 0.4);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.shadow-success\\/40{\n --tw-shadow-color: hsl(var(--nextui-success) / 0.4);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.shadow-warning\\/40{\n --tw-shadow-color: hsl(var(--nextui-warning) / 0.4);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.\\!outline-none{\n outline: 2px solid transparent !important;\n outline-offset: 2px !important;\n}\n.outline-none{\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.ring-1{\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.ring-2{\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.ring-background{\n --tw-ring-opacity: 1;\n --tw-ring-color: hsl(var(--nextui-background) / var(--nextui-background-opacity, var(--tw-ring-opacity)));\n}\n.ring-danger{\n --tw-ring-opacity: 1;\n --tw-ring-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-ring-opacity)));\n}\n.ring-default{\n --tw-ring-opacity: 1;\n --tw-ring-color: hsl(var(--nextui-default) / var(--nextui-default-opacity, var(--tw-ring-opacity)));\n}\n.ring-focus{\n --tw-ring-opacity: 1;\n --tw-ring-color: hsl(var(--nextui-focus) / var(--nextui-focus-opacity, var(--tw-ring-opacity)));\n}\n.ring-primary{\n --tw-ring-opacity: 1;\n --tw-ring-color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-ring-opacity)));\n}\n.ring-secondary{\n --tw-ring-opacity: 1;\n --tw-ring-color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-ring-opacity)));\n}\n.ring-success{\n --tw-ring-opacity: 1;\n --tw-ring-color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-ring-opacity)));\n}\n.ring-transparent{\n --tw-ring-color: transparent;\n}\n.ring-warning{\n --tw-ring-opacity: 1;\n --tw-ring-color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-ring-opacity)));\n}\n.ring-offset-2{\n --tw-ring-offset-width: 2px;\n}\n.ring-offset-background{\n --tw-ring-offset-color: hsl(var(--nextui-background) / var(--nextui-background-opacity, 1));\n}\n.blur{\n --tw-blur: blur(8px);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.blur-lg{\n --tw-blur: blur(16px);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.saturate-150{\n --tw-saturate: saturate(1.5);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.filter{\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.backdrop-blur{\n --tw-backdrop-blur: blur(8px);\n -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.backdrop-blur-lg{\n --tw-backdrop-blur: blur(16px);\n -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.backdrop-blur-md{\n --tw-backdrop-blur: blur(12px);\n -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.backdrop-blur-sm{\n --tw-backdrop-blur: blur(4px);\n -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.backdrop-blur-xl{\n --tw-backdrop-blur: blur(24px);\n -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.backdrop-opacity-disabled{\n --tw-backdrop-opacity: opacity(var(--nextui-disabled-opacity));\n -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.backdrop-saturate-150{\n --tw-backdrop-saturate: saturate(1.5);\n -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.\\!transition-none{\n transition-property: none !important;\n}\n.transition{\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 250ms;\n}\n.transition-\\[color\\2c opacity\\]{\n transition-property: color,opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 250ms;\n}\n.transition-\\[transform\\2c background-color\\2c color\\]{\n transition-property: transform,background-color,color;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 250ms;\n}\n.transition-\\[transform\\2c color\\2c left\\2c opacity\\]{\n transition-property: transform,color,left,opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 250ms;\n}\n.transition-all{\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 250ms;\n}\n.transition-colors{\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 250ms;\n}\n.transition-none{\n transition-property: none;\n}\n.transition-opacity{\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 250ms;\n}\n.transition-transform{\n transition-property: transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 250ms;\n}\n.\\!duration-100{\n transition-duration: 100ms !important;\n}\n.\\!duration-150{\n transition-duration: 150ms !important;\n}\n.\\!duration-200{\n transition-duration: 200ms !important;\n}\n.\\!duration-250{\n transition-duration: 250ms !important;\n}\n.\\!duration-300{\n transition-duration: 300ms !important;\n}\n.\\!duration-500{\n transition-duration: 500ms !important;\n}\n.duration-150{\n transition-duration: 150ms;\n}\n.\\!ease-out{\n transition-timing-function: cubic-bezier(0, 0, 0.2, 1) !important;\n}\n.\\!ease-soft-spring{\n transition-timing-function: cubic-bezier(0.155, 1.105, 0.295, 1.12) !important;\n}\n.will-change-auto{\n will-change: auto;\n}\n.will-change-transform{\n will-change: transform;\n}\n:root,.light,[data-theme="light"]{\n color-scheme: light;\n --nextui-background: 0 0% 100%;\n --nextui-foreground-50: 0 0% 98.04%;\n --nextui-foreground-100: 240 4.76% 95.88%;\n --nextui-foreground-200: 240 5.88% 90%;\n --nextui-foreground-300: 240 4.88% 83.92%;\n --nextui-foreground-400: 240 5.03% 64.9%;\n --nextui-foreground-500: 240 3.83% 46.08%;\n --nextui-foreground-600: 240 5.2% 33.92%;\n --nextui-foreground-700: 240 5.26% 26.08%;\n --nextui-foreground-800: 240 3.7% 15.88%;\n --nextui-foreground-900: 240 5.88% 10%;\n --nextui-foreground: 201.81999999999994 24.44% 8.82%;\n --nextui-divider: 0 0% 6.67%;\n --nextui-divider-opacity: 0.15;\n --nextui-focus: 212.01999999999998 100% 46.67%;\n --nextui-overlay: 0 0% 0%;\n --nextui-content1: 0 0% 100%;\n --nextui-content1-foreground: 201.81999999999994 24.44% 8.82%;\n --nextui-content2: 240 4.76% 95.88%;\n --nextui-content2-foreground: 240 3.7% 15.88%;\n --nextui-content3: 240 5.88% 90%;\n --nextui-content3-foreground: 240 5.26% 26.08%;\n --nextui-content4: 240 4.88% 83.92%;\n --nextui-content4-foreground: 240 5.2% 33.92%;\n --nextui-default-50: 0 0% 98.04%;\n --nextui-default-100: 240 4.76% 95.88%;\n --nextui-default-200: 240 5.88% 90%;\n --nextui-default-300: 240 4.88% 83.92%;\n --nextui-default-400: 240 5.03% 64.9%;\n --nextui-default-500: 240 3.83% 46.08%;\n --nextui-default-600: 240 5.2% 33.92%;\n --nextui-default-700: 240 5.26% 26.08%;\n --nextui-default-800: 240 3.7% 15.88%;\n --nextui-default-900: 240 5.88% 10%;\n --nextui-default-foreground: 0 0% 0%;\n --nextui-default: 240 4.88% 83.92%;\n --nextui-primary-50: 212.5 92.31% 94.9%;\n --nextui-primary-100: 211.84000000000003 92.45% 89.61%;\n --nextui-primary-200: 211.84000000000003 92.45% 79.22%;\n --nextui-primary-300: 212.24 92.45% 68.82%;\n --nextui-primary-400: 212.14 92.45% 58.43%;\n --nextui-primary-500: 212.01999999999998 100% 46.67%;\n --nextui-primary-600: 212.14 100% 38.43%;\n --nextui-primary-700: 212.24 100% 28.82%;\n --nextui-primary-800: 211.84000000000003 100% 19.22%;\n --nextui-primary-900: 211.84000000000003 100% 9.61%;\n --nextui-primary-foreground: 0 0% 100%;\n --nextui-primary: 212.01999999999998 100% 46.67%;\n --nextui-secondary-50: 270 61.54% 94.9%;\n --nextui-secondary-100: 270 59.26% 89.41%;\n --nextui-secondary-200: 270 59.26% 78.82%;\n --nextui-secondary-300: 270 59.26% 68.24%;\n --nextui-secondary-400: 270 59.26% 57.65%;\n --nextui-secondary-500: 270 66.67% 47.06%;\n --nextui-secondary-600: 270 66.67% 37.65%;\n --nextui-secondary-700: 270 66.67% 28.24%;\n --nextui-secondary-800: 270 66.67% 18.82%;\n --nextui-secondary-900: 270 66.67% 9.41%;\n --nextui-secondary-foreground: 0 0% 100%;\n --nextui-secondary: 270 66.67% 47.06%;\n --nextui-success-50: 146.66999999999996 64.29% 94.51%;\n --nextui-success-100: 145.71000000000004 61.4% 88.82%;\n --nextui-success-200: 146.2 61.74% 77.45%;\n --nextui-success-300: 145.78999999999996 62.57% 66.47%;\n --nextui-success-400: 146.01 62.45% 55.1%;\n --nextui-success-500: 145.96000000000004 79.46% 43.92%;\n --nextui-success-600: 146.01 79.89% 35.1%;\n --nextui-success-700: 145.78999999999996 79.26% 26.47%;\n --nextui-success-800: 146.2 79.78% 17.45%;\n --nextui-success-900: 145.71000000000004 77.78% 8.82%;\n --nextui-success-foreground: 0 0% 0%;\n --nextui-success: 145.96000000000004 79.46% 43.92%;\n --nextui-warning-50: 54.55000000000001 91.67% 95.29%;\n --nextui-warning-100: 37.139999999999986 91.3% 90.98%;\n --nextui-warning-200: 37.139999999999986 91.3% 81.96%;\n --nextui-warning-300: 36.95999999999998 91.24% 73.14%;\n --nextui-warning-400: 37.00999999999999 91.26% 64.12%;\n --nextui-warning-500: 37.02999999999997 91.27% 55.1%;\n --nextui-warning-600: 37.00999999999999 74.22% 44.12%;\n --nextui-warning-700: 36.95999999999998 73.96% 33.14%;\n --nextui-warning-800: 37.139999999999986 75% 21.96%;\n --nextui-warning-900: 37.139999999999986 75% 10.98%;\n --nextui-warning-foreground: 0 0% 0%;\n --nextui-warning: 37.02999999999997 91.27% 55.1%;\n --nextui-danger-50: 339.13 92% 95.1%;\n --nextui-danger-100: 340 91.84% 90.39%;\n --nextui-danger-200: 339.3299999999999 90% 80.39%;\n --nextui-danger-300: 339.11 90.6% 70.78%;\n --nextui-danger-400: 339 90% 60.78%;\n --nextui-danger-500: 339.20000000000005 90.36% 51.18%;\n --nextui-danger-600: 339 86.54% 40.78%;\n --nextui-danger-700: 339.11 85.99% 30.78%;\n --nextui-danger-800: 339.3299999999999 86.54% 20.39%;\n --nextui-danger-900: 340 84.91% 10.39%;\n --nextui-danger-foreground: 0 0% 100%;\n --nextui-danger: 339.20000000000005 90.36% 51.18%;\n --nextui-divider-weight: 1px;\n --nextui-disabled-opacity: .5;\n --nextui-font-size-tiny: 0.75rem;\n --nextui-font-size-small: 0.875rem;\n --nextui-font-size-medium: 1rem;\n --nextui-font-size-large: 1.125rem;\n --nextui-line-height-tiny: 1rem;\n --nextui-line-height-small: 1.25rem;\n --nextui-line-height-medium: 1.5rem;\n --nextui-line-height-large: 1.75rem;\n --nextui-radius-small: 8px;\n --nextui-radius-medium: 12px;\n --nextui-radius-large: 14px;\n --nextui-border-width-small: 1px;\n --nextui-border-width-medium: 2px;\n --nextui-border-width-large: 3px;\n --nextui-box-shadow-small: 0px 0px 5px 0px rgb(0 0 0 / 0.02), 0px 2px 10px 0px rgb(0 0 0 / 0.06), 0px 0px 1px 0px rgb(0 0 0 / 0.3);\n --nextui-box-shadow-medium: 0px 0px 15px 0px rgb(0 0 0 / 0.03), 0px 2px 30px 0px rgb(0 0 0 / 0.08), 0px 0px 1px 0px rgb(0 0 0 / 0.3);\n --nextui-box-shadow-large: 0px 0px 30px 0px rgb(0 0 0 / 0.04), 0px 30px 60px 0px rgb(0 0 0 / 0.12), 0px 0px 1px 0px rgb(0 0 0 / 0.3);\n --nextui-hover-opacity: .8;\n}\n.dark,[data-theme="dark"]{\n color-scheme: dark;\n --nextui-background: 0 0% 0%;\n --nextui-foreground-50: 240 5.88% 10%;\n --nextui-foreground-100: 240 3.7% 15.88%;\n --nextui-foreground-200: 240 5.26% 26.08%;\n --nextui-foreground-300: 240 5.2% 33.92%;\n --nextui-foreground-400: 240 3.83% 46.08%;\n --nextui-foreground-500: 240 5.03% 64.9%;\n --nextui-foreground-600: 240 4.88% 83.92%;\n --nextui-foreground-700: 240 5.88% 90%;\n --nextui-foreground-800: 240 4.76% 95.88%;\n --nextui-foreground-900: 0 0% 98.04%;\n --nextui-foreground: 210 5.56% 92.94%;\n --nextui-focus: 212.01999999999998 100% 46.67%;\n --nextui-overlay: 0 0% 0%;\n --nextui-divider: 0 0% 100%;\n --nextui-divider-opacity: 0.15;\n --nextui-content1: 240 5.88% 10%;\n --nextui-content1-foreground: 0 0% 98.04%;\n --nextui-content2: 240 3.7% 15.88%;\n --nextui-content2-foreground: 240 4.76% 95.88%;\n --nextui-content3: 240 5.26% 26.08%;\n --nextui-content3-foreground: 240 5.88% 90%;\n --nextui-content4: 240 5.2% 33.92%;\n --nextui-content4-foreground: 240 4.88% 83.92%;\n --nextui-default-50: 240 5.88% 10%;\n --nextui-default-100: 240 3.7% 15.88%;\n --nextui-default-200: 240 5.26% 26.08%;\n --nextui-default-300: 240 5.2% 33.92%;\n --nextui-default-400: 240 3.83% 46.08%;\n --nextui-default-500: 240 5.03% 64.9%;\n --nextui-default-600: 240 4.88% 83.92%;\n --nextui-default-700: 240 5.88% 90%;\n --nextui-default-800: 240 4.76% 95.88%;\n --nextui-default-900: 0 0% 98.04%;\n --nextui-default-foreground: 0 0% 100%;\n --nextui-default: 240 5.26% 26.08%;\n --nextui-primary-50: 211.84000000000003 100% 9.61%;\n --nextui-primary-100: 211.84000000000003 100% 19.22%;\n --nextui-primary-200: 212.24 100% 28.82%;\n --nextui-primary-300: 212.14 100% 38.43%;\n --nextui-primary-400: 212.01999999999998 100% 46.67%;\n --nextui-primary-500: 212.14 92.45% 58.43%;\n --nextui-primary-600: 212.24 92.45% 68.82%;\n --nextui-primary-700: 211.84000000000003 92.45% 79.22%;\n --nextui-primary-800: 211.84000000000003 92.45% 89.61%;\n --nextui-primary-900: 212.5 92.31% 94.9%;\n --nextui-primary-foreground: 0 0% 100%;\n --nextui-primary: 212.01999999999998 100% 46.67%;\n --nextui-secondary-50: 270 66.67% 9.41%;\n --nextui-secondary-100: 270 66.67% 18.82%;\n --nextui-secondary-200: 270 66.67% 28.24%;\n --nextui-secondary-300: 270 66.67% 37.65%;\n --nextui-secondary-400: 270 66.67% 47.06%;\n --nextui-secondary-500: 270 59.26% 57.65%;\n --nextui-secondary-600: 270 59.26% 68.24%;\n --nextui-secondary-700: 270 59.26% 78.82%;\n --nextui-secondary-800: 270 59.26% 89.41%;\n --nextui-secondary-900: 270 61.54% 94.9%;\n --nextui-secondary-foreground: 0 0% 100%;\n --nextui-secondary: 270 59.26% 57.65%;\n --nextui-success-50: 145.71000000000004 77.78% 8.82%;\n --nextui-success-100: 146.2 79.78% 17.45%;\n --nextui-success-200: 145.78999999999996 79.26% 26.47%;\n --nextui-success-300: 146.01 79.89% 35.1%;\n --nextui-success-400: 145.96000000000004 79.46% 43.92%;\n --nextui-success-500: 146.01 62.45% 55.1%;\n --nextui-success-600: 145.78999999999996 62.57% 66.47%;\n --nextui-success-700: 146.2 61.74% 77.45%;\n --nextui-success-800: 145.71000000000004 61.4% 88.82%;\n --nextui-success-900: 146.66999999999996 64.29% 94.51%;\n --nextui-success-foreground: 0 0% 0%;\n --nextui-success: 145.96000000000004 79.46% 43.92%;\n --nextui-warning-50: 37.139999999999986 75% 10.98%;\n --nextui-warning-100: 37.139999999999986 75% 21.96%;\n --nextui-warning-200: 36.95999999999998 73.96% 33.14%;\n --nextui-warning-300: 37.00999999999999 74.22% 44.12%;\n --nextui-warning-400: 37.02999999999997 91.27% 55.1%;\n --nextui-warning-500: 37.00999999999999 91.26% 64.12%;\n --nextui-warning-600: 36.95999999999998 91.24% 73.14%;\n --nextui-warning-700: 37.139999999999986 91.3% 81.96%;\n --nextui-warning-800: 37.139999999999986 91.3% 90.98%;\n --nextui-warning-900: 54.55000000000001 91.67% 95.29%;\n --nextui-warning-foreground: 0 0% 0%;\n --nextui-warning: 37.02999999999997 91.27% 55.1%;\n --nextui-danger-50: 340 84.91% 10.39%;\n --nextui-danger-100: 339.3299999999999 86.54% 20.39%;\n --nextui-danger-200: 339.11 85.99% 30.78%;\n --nextui-danger-300: 339 86.54% 40.78%;\n --nextui-danger-400: 339.20000000000005 90.36% 51.18%;\n --nextui-danger-500: 339 90% 60.78%;\n --nextui-danger-600: 339.11 90.6% 70.78%;\n --nextui-danger-700: 339.3299999999999 90% 80.39%;\n --nextui-danger-800: 340 91.84% 90.39%;\n --nextui-danger-900: 339.13 92% 95.1%;\n --nextui-danger-foreground: 0 0% 100%;\n --nextui-danger: 339.20000000000005 90.36% 51.18%;\n --nextui-divider-weight: 1px;\n --nextui-disabled-opacity: .5;\n --nextui-font-size-tiny: 0.75rem;\n --nextui-font-size-small: 0.875rem;\n --nextui-font-size-medium: 1rem;\n --nextui-font-size-large: 1.125rem;\n --nextui-line-height-tiny: 1rem;\n --nextui-line-height-small: 1.25rem;\n --nextui-line-height-medium: 1.5rem;\n --nextui-line-height-large: 1.75rem;\n --nextui-radius-small: 8px;\n --nextui-radius-medium: 12px;\n --nextui-radius-large: 14px;\n --nextui-border-width-small: 1px;\n --nextui-border-width-medium: 2px;\n --nextui-border-width-large: 3px;\n --nextui-box-shadow-small: 0px 0px 5px 0px rgb(0 0 0 / 0.05), 0px 2px 10px 0px rgb(0 0 0 / 0.2), inset 0px 0px 1px 0px rgb(255 255 255 / 0.15);\n --nextui-box-shadow-medium: 0px 0px 15px 0px rgb(0 0 0 / 0.06), 0px 2px 30px 0px rgb(0 0 0 / 0.22), inset 0px 0px 1px 0px rgb(255 255 255 / 0.15);\n --nextui-box-shadow-large: 0px 0px 30px 0px rgb(0 0 0 / 0.07), 0px 30px 60px 0px rgb(0 0 0 / 0.26), inset 0px 0px 1px 0px rgb(255 255 255 / 0.15);\n --nextui-hover-opacity: .9;\n}\n.tap-highlight-transparent{\n -webkit-tap-highlight-color: transparent;\n}\n.transition-background{\n transition-property: background;\n transition-timing-function: ease;\n transition-duration: 250ms;\n}\n.transition-colors-opacity{\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity;\n transition-timing-function: ease;\n transition-duration: 250ms;\n}\n.transition-height{\n transition-property: height;\n transition-timing-function: ease;\n transition-duration: 250ms;\n}\n.transition-transform-opacity{\n transition-property: transform, opacity;\n transition-timing-function: ease;\n transition-duration: 250ms;\n}\n.transition-transform-background{\n transition-property: transform, background;\n transition-timing-function: ease;\n transition-duration: 250ms;\n}\n.transition-transform-colors{\n transition-property: transform, color, background, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: ease;\n transition-duration: 250ms;\n}\n.transition-transform-colors-opacity{\n transition-property: transform, color, background, background-color, border-color, text-decoration-color, fill, stroke, opacity;\n transition-timing-function: ease;\n transition-duration: 250ms;\n}\n.scrollbar-hide{\n -ms-overflow-style: none;\n scrollbar-width: none;\n}\n.scrollbar-hide::-webkit-scrollbar{\n display: none;\n}\n.\\[--picker-height\\:224px\\]{\n --picker-height: 224px;\n}\n.\\[--scale-enter\\:100\\%\\]{\n --scale-enter: 100%;\n}\n.\\[--scale-exit\\:100\\%\\]{\n --scale-exit: 100%;\n}\n.\\[--scroll-shadow-size\\:100px\\]{\n --scroll-shadow-size: 100px;\n}\n.\\[--slide-enter\\:0px\\]{\n --slide-enter: 0px;\n}\n.\\[--slide-exit\\:80px\\]{\n --slide-exit: 80px;\n}\n.\\[mask-image\\:linear-gradient\\(\\#000\\2c \\#000\\2c transparent_0\\2c \\#000_var\\(--scroll-shadow-size\\)\\2c \\#000_calc\\(100\\%_-_var\\(--scroll-shadow-size\\)\\)\\2c transparent\\)\\]{\n mask-image: linear-gradient(#000,#000,transparent 0,#000 var(--scroll-shadow-size),#000 calc(100% - var(--scroll-shadow-size)),transparent);\n}\n.file\\:cursor-pointer::file-selector-button{\n cursor: pointer;\n}\n.file\\:border-0::file-selector-button{\n border-width: 0px;\n}\n.file\\:bg-transparent::file-selector-button{\n background-color: transparent;\n}\n.placeholder\\:text-danger::placeholder{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-text-opacity)));\n}\n.placeholder\\:text-foreground-500::placeholder{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-foreground-500) / var(--nextui-foreground-500-opacity, var(--tw-text-opacity)));\n}\n.placeholder\\:text-primary::placeholder{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-text-opacity)));\n}\n.placeholder\\:text-secondary::placeholder{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-text-opacity)));\n}\n.placeholder\\:text-success-600::placeholder{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success-600) / var(--nextui-success-600-opacity, var(--tw-text-opacity)));\n}\n.placeholder\\:text-warning-600::placeholder{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning-600) / var(--nextui-warning-600-opacity, var(--tw-text-opacity)));\n}\n.before\\:absolute::before{\n content: var(--tw-content);\n position: absolute;\n}\n.before\\:inset-0::before{\n content: var(--tw-content);\n inset: 0px;\n}\n.before\\:z-0::before{\n content: var(--tw-content);\n z-index: 0;\n}\n.before\\:z-\\[-1\\]::before{\n content: var(--tw-content);\n z-index: -1;\n}\n.before\\:box-border::before{\n content: var(--tw-content);\n box-sizing: border-box;\n}\n.before\\:block::before{\n content: var(--tw-content);\n display: block;\n}\n.before\\:hidden::before{\n content: var(--tw-content);\n display: none;\n}\n.before\\:h-0\\.5::before{\n content: var(--tw-content);\n height: 0.125rem;\n}\n.before\\:h-11::before{\n content: var(--tw-content);\n height: 2.75rem;\n}\n.before\\:h-2\\.5::before{\n content: var(--tw-content);\n height: 0.625rem;\n}\n.before\\:h-px::before{\n content: var(--tw-content);\n height: 1px;\n}\n.before\\:w-0::before{\n content: var(--tw-content);\n width: 0px;\n}\n.before\\:w-11::before{\n content: var(--tw-content);\n width: 2.75rem;\n}\n.before\\:w-2\\.5::before{\n content: var(--tw-content);\n width: 0.625rem;\n}\n.before\\:w-6::before{\n content: var(--tw-content);\n width: 1.5rem;\n}\n.before\\:-translate-x-full::before{\n content: var(--tw-content);\n --tw-translate-x: -100%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.before\\:-translate-y-1::before{\n content: var(--tw-content);\n --tw-translate-y: -0.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.before\\:rotate-0::before{\n content: var(--tw-content);\n --tw-rotate: 0deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.before\\:rotate-45::before{\n content: var(--tw-content);\n --tw-rotate: 45deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n@keyframes shimmer{\n 100%{\n content: var(--tw-content);\n transform: translateX(100%);\n }\n}\n.before\\:animate-\\[shimmer_2s_infinite\\]::before{\n content: var(--tw-content);\n animation: shimmer 2s infinite;\n}\n.before\\:animate-none::before{\n content: var(--tw-content);\n animation: none;\n}\n.before\\:rounded-\\[calc\\(theme\\(borderRadius\\.medium\\)\\*0\\.5\\)\\]::before{\n content: var(--tw-content);\n border-radius: calc(var(--nextui-radius-medium) * 0.5);\n}\n.before\\:rounded-\\[calc\\(theme\\(borderRadius\\.medium\\)\\*0\\.6\\)\\]::before{\n content: var(--tw-content);\n border-radius: calc(var(--nextui-radius-medium) * 0.6);\n}\n.before\\:rounded-\\[calc\\(theme\\(borderRadius\\.medium\\)\\*0\\.7\\)\\]::before{\n content: var(--tw-content);\n border-radius: calc(var(--nextui-radius-medium) * 0.7);\n}\n.before\\:rounded-full::before{\n content: var(--tw-content);\n border-radius: 9999px;\n}\n.before\\:rounded-none::before{\n content: var(--tw-content);\n border-radius: 0px;\n}\n.before\\:rounded-sm::before{\n content: var(--tw-content);\n border-radius: 0.125rem;\n}\n.before\\:border-2::before{\n content: var(--tw-content);\n border-width: 2px;\n}\n.before\\:border-t::before{\n content: var(--tw-content);\n border-top-width: 1px;\n}\n.before\\:border-solid::before{\n content: var(--tw-content);\n border-style: solid;\n}\n.before\\:border-content4\\/30::before{\n content: var(--tw-content);\n border-color: hsl(var(--nextui-content4) / 0.3);\n}\n.before\\:border-danger::before{\n content: var(--tw-content);\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-border-opacity)));\n}\n.before\\:border-default::before{\n content: var(--tw-content);\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-default) / var(--nextui-default-opacity, var(--tw-border-opacity)));\n}\n.before\\:bg-content1::before{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-content1) / var(--nextui-content1-opacity, var(--tw-bg-opacity)));\n}\n.before\\:bg-current::before{\n content: var(--tw-content);\n background-color: currentColor;\n}\n.before\\:bg-danger::before{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-bg-opacity)));\n}\n.before\\:bg-danger\\/20::before{\n content: var(--tw-content);\n background-color: hsl(var(--nextui-danger) / 0.2);\n}\n.before\\:bg-default\\/60::before{\n content: var(--tw-content);\n background-color: hsl(var(--nextui-default) / 0.6);\n}\n.before\\:bg-foreground::before{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-foreground) / var(--nextui-foreground-opacity, var(--tw-bg-opacity)));\n}\n.before\\:bg-primary::before{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-bg-opacity)));\n}\n.before\\:bg-primary\\/20::before{\n content: var(--tw-content);\n background-color: hsl(var(--nextui-primary) / 0.2);\n}\n.before\\:bg-secondary::before{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-bg-opacity)));\n}\n.before\\:bg-secondary\\/20::before{\n content: var(--tw-content);\n background-color: hsl(var(--nextui-secondary) / 0.2);\n}\n.before\\:bg-success::before{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-bg-opacity)));\n}\n.before\\:bg-success\\/20::before{\n content: var(--tw-content);\n background-color: hsl(var(--nextui-success) / 0.2);\n}\n.before\\:bg-warning::before{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-bg-opacity)));\n}\n.before\\:bg-warning\\/20::before{\n content: var(--tw-content);\n background-color: hsl(var(--nextui-warning) / 0.2);\n}\n.before\\:bg-gradient-to-r::before{\n content: var(--tw-content);\n background-image: linear-gradient(to right, var(--tw-gradient-stops));\n}\n.before\\:from-transparent::before{\n content: var(--tw-content);\n --tw-gradient-from: transparent var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.before\\:via-content4::before{\n content: var(--tw-content);\n --tw-gradient-to: hsl(var(--nextui-content4) / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), hsl(var(--nextui-content4) / var(--nextui-content4-opacity, 1)) var(--tw-gradient-via-position), var(--tw-gradient-to);\n}\n.before\\:to-transparent::before{\n content: var(--tw-content);\n --tw-gradient-to: transparent var(--tw-gradient-to-position);\n}\n.before\\:opacity-0::before{\n content: var(--tw-content);\n opacity: 0;\n}\n.before\\:opacity-100::before{\n content: var(--tw-content);\n opacity: 1;\n}\n.before\\:shadow-small::before{\n content: var(--tw-content);\n --tw-shadow: var(--nextui-box-shadow-small);\n --tw-shadow-colored: var(--nextui-box-shadow-small);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.before\\:transition-colors::before{\n content: var(--tw-content);\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 250ms;\n}\n.before\\:transition-none::before{\n content: var(--tw-content);\n transition-property: none;\n}\n.before\\:transition-transform::before{\n content: var(--tw-content);\n transition-property: transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 250ms;\n}\n.before\\:duration-150::before{\n content: var(--tw-content);\n transition-duration: 150ms;\n}\n.before\\:content-\\[\\\'\\\'\\]::before{\n --tw-content: \'\';\n content: var(--tw-content);\n}\n.before\\:transition-width::before{\n content: var(--tw-content);\n transition-property: width;\n transition-timing-function: ease;\n transition-duration: 250ms;\n}\n.after\\:absolute::after{\n content: var(--tw-content);\n position: absolute;\n}\n.after\\:inset-0::after{\n content: var(--tw-content);\n inset: 0px;\n}\n.after\\:-bottom-1::after{\n content: var(--tw-content);\n bottom: -0.25rem;\n}\n.after\\:-bottom-\\[2px\\]::after{\n content: var(--tw-content);\n bottom: -2px;\n}\n.after\\:bottom-0::after{\n content: var(--tw-content);\n bottom: 0px;\n}\n.after\\:left-0::after{\n content: var(--tw-content);\n left: 0px;\n}\n.after\\:left-1\\/2::after{\n content: var(--tw-content);\n left: 50%;\n}\n.after\\:right-0::after{\n content: var(--tw-content);\n right: 0px;\n}\n.after\\:top-0::after{\n content: var(--tw-content);\n top: 0px;\n}\n.after\\:-z-10::after{\n content: var(--tw-content);\n z-index: -10;\n}\n.after\\:z-0::after{\n content: var(--tw-content);\n z-index: 0;\n}\n.after\\:ml-0\\.5::after{\n content: var(--tw-content);\n margin-left: 0.125rem;\n}\n.after\\:ms-0\\.5::after{\n content: var(--tw-content);\n margin-inline-start: 0.125rem;\n}\n.after\\:block::after{\n content: var(--tw-content);\n display: block;\n}\n.after\\:h-0::after{\n content: var(--tw-content);\n height: 0px;\n}\n.after\\:h-4::after{\n content: var(--tw-content);\n height: 1rem;\n}\n.after\\:h-5::after{\n content: var(--tw-content);\n height: 1.25rem;\n}\n.after\\:h-\\[2px\\]::after{\n content: var(--tw-content);\n height: 2px;\n}\n.after\\:h-divider::after{\n content: var(--tw-content);\n height: var(--nextui-divider-weight);\n}\n.after\\:h-full::after{\n content: var(--tw-content);\n height: 100%;\n}\n.after\\:h-px::after{\n content: var(--tw-content);\n height: 1px;\n}\n.after\\:w-0::after{\n content: var(--tw-content);\n width: 0px;\n}\n.after\\:w-4::after{\n content: var(--tw-content);\n width: 1rem;\n}\n.after\\:w-5::after{\n content: var(--tw-content);\n width: 1.25rem;\n}\n.after\\:w-6::after{\n content: var(--tw-content);\n width: 1.5rem;\n}\n.after\\:w-\\[80\\%\\]::after{\n content: var(--tw-content);\n width: 80%;\n}\n.after\\:w-full::after{\n content: var(--tw-content);\n width: 100%;\n}\n.after\\:origin-center::after{\n content: var(--tw-content);\n transform-origin: center;\n}\n.after\\:-translate-x-1\\/2::after{\n content: var(--tw-content);\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.after\\:translate-y-1::after{\n content: var(--tw-content);\n --tw-translate-y: 0.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.after\\:rotate-0::after{\n content: var(--tw-content);\n --tw-rotate: 0deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.after\\:scale-50::after{\n content: var(--tw-content);\n --tw-scale-x: .5;\n --tw-scale-y: .5;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.after\\:rounded-\\[calc\\(theme\\(borderRadius\\.large\\)\\/2\\)\\]::after{\n content: var(--tw-content);\n border-radius: calc(var(--nextui-radius-large) / 2);\n}\n.after\\:rounded-\\[calc\\(theme\\(borderRadius\\.medium\\)\\*0\\.5\\)\\]::after{\n content: var(--tw-content);\n border-radius: calc(var(--nextui-radius-medium) * 0.5);\n}\n.after\\:rounded-\\[calc\\(theme\\(borderRadius\\.medium\\)\\*0\\.6\\)\\]::after{\n content: var(--tw-content);\n border-radius: calc(var(--nextui-radius-medium) * 0.6);\n}\n.after\\:rounded-\\[calc\\(theme\\(borderRadius\\.medium\\)\\*0\\.7\\)\\]::after{\n content: var(--tw-content);\n border-radius: calc(var(--nextui-radius-medium) * 0.7);\n}\n.after\\:rounded-\\[calc\\(theme\\(borderRadius\\.medium\\)\\/3\\)\\]::after{\n content: var(--tw-content);\n border-radius: calc(var(--nextui-radius-medium) / 3);\n}\n.after\\:rounded-\\[calc\\(theme\\(borderRadius\\.small\\)\\/3\\)\\]::after{\n content: var(--tw-content);\n border-radius: calc(var(--nextui-radius-small) / 3);\n}\n.after\\:rounded-full::after{\n content: var(--tw-content);\n border-radius: 9999px;\n}\n.after\\:rounded-none::after{\n content: var(--tw-content);\n border-radius: 0px;\n}\n.after\\:rounded-xl::after{\n content: var(--tw-content);\n border-radius: 0.75rem;\n}\n.after\\:\\!bg-danger::after{\n content: var(--tw-content);\n --tw-bg-opacity: 1 !important;\n background-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-bg-opacity))) !important;\n}\n.after\\:bg-background::after{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-background) / var(--nextui-background-opacity, var(--tw-bg-opacity)));\n}\n.after\\:bg-content1::after{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-content1) / var(--nextui-content1-opacity, var(--tw-bg-opacity)));\n}\n.after\\:bg-content3::after{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-content3) / var(--nextui-content3-opacity, var(--tw-bg-opacity)));\n}\n.after\\:bg-current::after{\n content: var(--tw-content);\n background-color: currentColor;\n}\n.after\\:bg-danger::after{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-bg-opacity)));\n}\n.after\\:bg-default::after{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default) / var(--nextui-default-opacity, var(--tw-bg-opacity)));\n}\n.after\\:bg-default-foreground::after{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default-foreground) / var(--nextui-default-foreground-opacity, var(--tw-bg-opacity)));\n}\n.after\\:bg-divider::after{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-divider) / var(--nextui-divider-opacity, var(--tw-bg-opacity)));\n}\n.after\\:bg-primary::after{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-bg-opacity)));\n}\n.after\\:bg-secondary::after{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-bg-opacity)));\n}\n.after\\:bg-success::after{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-bg-opacity)));\n}\n.after\\:bg-warning::after{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-bg-opacity)));\n}\n.after\\:text-danger::after{\n content: var(--tw-content);\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-text-opacity)));\n}\n.after\\:text-danger-foreground::after{\n content: var(--tw-content);\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger-foreground) / var(--nextui-danger-foreground-opacity, var(--tw-text-opacity)));\n}\n.after\\:text-default-foreground::after{\n content: var(--tw-content);\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-default-foreground) / var(--nextui-default-foreground-opacity, var(--tw-text-opacity)));\n}\n.after\\:text-primary-foreground::after{\n content: var(--tw-content);\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-primary-foreground) / var(--nextui-primary-foreground-opacity, var(--tw-text-opacity)));\n}\n.after\\:text-secondary-foreground::after{\n content: var(--tw-content);\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-secondary-foreground) / var(--nextui-secondary-foreground-opacity, var(--tw-text-opacity)));\n}\n.after\\:text-success-foreground::after{\n content: var(--tw-content);\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success-foreground) / var(--nextui-success-foreground-opacity, var(--tw-text-opacity)));\n}\n.after\\:text-warning-foreground::after{\n content: var(--tw-content);\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning-foreground) / var(--nextui-warning-foreground-opacity, var(--tw-text-opacity)));\n}\n.after\\:opacity-0::after{\n content: var(--tw-content);\n opacity: 0;\n}\n.after\\:opacity-100::after{\n content: var(--tw-content);\n opacity: 1;\n}\n.after\\:shadow-\\[0_1px_0px_0_rgba\\(0\\2c 0\\2c 0\\2c 0\\.05\\)\\]::after{\n content: var(--tw-content);\n --tw-shadow: 0 1px 0px 0 rgba(0,0,0,0.05);\n --tw-shadow-colored: 0 1px 0px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.after\\:shadow-small::after{\n content: var(--tw-content);\n --tw-shadow: var(--nextui-box-shadow-small);\n --tw-shadow-colored: var(--nextui-box-shadow-small);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.after\\:transition-all::after{\n content: var(--tw-content);\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 250ms;\n}\n.after\\:transition-none::after{\n content: var(--tw-content);\n transition-property: none;\n}\n.after\\:transition-transform::after{\n content: var(--tw-content);\n transition-property: transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 250ms;\n}\n.after\\:\\!duration-200::after{\n content: var(--tw-content);\n transition-duration: 200ms !important;\n}\n.after\\:duration-150::after{\n content: var(--tw-content);\n transition-duration: 150ms;\n}\n.after\\:\\!ease-linear::after{\n content: var(--tw-content);\n transition-timing-function: linear !important;\n}\n.after\\:content-\\[\\\'\\\'\\]::after{\n --tw-content: \'\';\n content: var(--tw-content);\n}\n.after\\:content-\\[\\\'\\*\\\'\\]::after{\n --tw-content: \'*\';\n content: var(--tw-content);\n}\n.after\\:transition-background::after{\n content: var(--tw-content);\n transition-property: background;\n transition-timing-function: ease;\n transition-duration: 250ms;\n}\n.after\\:transition-width::after{\n content: var(--tw-content);\n transition-property: width;\n transition-timing-function: ease;\n transition-duration: 250ms;\n}\n.after\\:transition-height::after{\n content: var(--tw-content);\n transition-property: height;\n transition-timing-function: ease;\n transition-duration: 250ms;\n}\n.after\\:transition-transform-opacity::after{\n content: var(--tw-content);\n transition-property: transform, opacity;\n transition-timing-function: ease;\n transition-duration: 250ms;\n}\n.first\\:-ml-0\\.5:first-child{\n margin-left: -0.125rem;\n}\n.first\\:mt-2:first-child{\n margin-top: 0.5rem;\n}\n.first\\:rounded-s-full:first-child{\n border-start-start-radius: 9999px;\n border-end-start-radius: 9999px;\n}\n.first\\:rounded-s-large:first-child{\n border-start-start-radius: var(--nextui-radius-large);\n border-end-start-radius: var(--nextui-radius-large);\n}\n.first\\:rounded-s-lg:first-child{\n border-start-start-radius: 0.5rem;\n border-end-start-radius: 0.5rem;\n}\n.first\\:rounded-s-medium:first-child{\n border-start-start-radius: var(--nextui-radius-medium);\n border-end-start-radius: var(--nextui-radius-medium);\n}\n.first\\:rounded-s-none:first-child{\n border-start-start-radius: 0px;\n border-end-start-radius: 0px;\n}\n.first\\:rounded-s-small:first-child{\n border-start-start-radius: var(--nextui-radius-small);\n border-end-start-radius: var(--nextui-radius-small);\n}\n.first\\:before\\:rounded-s-lg:first-child::before{\n content: var(--tw-content);\n border-start-start-radius: 0.5rem;\n border-end-start-radius: 0.5rem;\n}\n.last\\:rounded-e-full:last-child{\n border-start-end-radius: 9999px;\n border-end-end-radius: 9999px;\n}\n.last\\:rounded-e-large:last-child{\n border-start-end-radius: var(--nextui-radius-large);\n border-end-end-radius: var(--nextui-radius-large);\n}\n.last\\:rounded-e-lg:last-child{\n border-start-end-radius: 0.5rem;\n border-end-end-radius: 0.5rem;\n}\n.last\\:rounded-e-medium:last-child{\n border-start-end-radius: var(--nextui-radius-medium);\n border-end-end-radius: var(--nextui-radius-medium);\n}\n.last\\:rounded-e-none:last-child{\n border-start-end-radius: 0px;\n border-end-end-radius: 0px;\n}\n.last\\:rounded-e-small:last-child{\n border-start-end-radius: var(--nextui-radius-small);\n border-end-end-radius: var(--nextui-radius-small);\n}\n.last\\:before\\:rounded-e-lg:last-child::before{\n content: var(--tw-content);\n border-start-end-radius: 0.5rem;\n border-end-end-radius: 0.5rem;\n}\n.first-of-type\\:rounded-e-none:first-of-type{\n border-start-end-radius: 0px;\n border-end-end-radius: 0px;\n}\n.last-of-type\\:rounded-s-none:last-of-type{\n border-start-start-radius: 0px;\n border-end-start-radius: 0px;\n}\n.autofill\\:bg-transparent:autofill{\n background-color: transparent;\n}\n.focus-within\\:border-danger:focus-within{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-border-opacity)));\n}\n.focus-within\\:border-default-foreground:focus-within{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-default-foreground) / var(--nextui-default-foreground-opacity, var(--tw-border-opacity)));\n}\n.focus-within\\:border-primary:focus-within{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-border-opacity)));\n}\n.focus-within\\:border-secondary:focus-within{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-border-opacity)));\n}\n.focus-within\\:border-success:focus-within{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-border-opacity)));\n}\n.focus-within\\:border-warning:focus-within{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-border-opacity)));\n}\n.focus-within\\:bg-danger-50:focus-within{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-danger-50) / var(--nextui-danger-50-opacity, var(--tw-bg-opacity)));\n}\n.focus-within\\:bg-primary-50:focus-within{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-primary-50) / var(--nextui-primary-50-opacity, var(--tw-bg-opacity)));\n}\n.focus-within\\:bg-secondary-50:focus-within{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-secondary-50) / var(--nextui-secondary-50-opacity, var(--tw-bg-opacity)));\n}\n.focus-within\\:bg-success-50:focus-within{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-success-50) / var(--nextui-success-50-opacity, var(--tw-bg-opacity)));\n}\n.focus-within\\:bg-warning-50:focus-within{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-warning-50) / var(--nextui-warning-50-opacity, var(--tw-bg-opacity)));\n}\n.focus-within\\:after\\:w-full:focus-within::after{\n content: var(--tw-content);\n width: 100%;\n}\n.hover\\:-translate-x-0:hover{\n --tw-translate-x: -0px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.hover\\:scale-125:hover{\n --tw-scale-x: 1.25;\n --tw-scale-y: 1.25;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.hover\\:border-default:hover{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-default) / var(--nextui-default-opacity, var(--tw-border-opacity)));\n}\n.hover\\:border-default-300:hover{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-default-300) / var(--nextui-default-300-opacity, var(--tw-border-opacity)));\n}\n.hover\\:border-default-400:hover{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-default-400) / var(--nextui-default-400-opacity, var(--tw-border-opacity)));\n}\n.hover\\:\\!bg-foreground:hover{\n --tw-bg-opacity: 1 !important;\n background-color: hsl(var(--nextui-foreground) / var(--nextui-foreground-opacity, var(--tw-bg-opacity))) !important;\n}\n.hover\\:bg-danger-100:hover{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-danger-100) / var(--nextui-danger-100-opacity, var(--tw-bg-opacity)));\n}\n.hover\\:bg-default-100:hover{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default-100) / var(--nextui-default-100-opacity, var(--tw-bg-opacity)));\n}\n.hover\\:bg-default-200:hover{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default-200) / var(--nextui-default-200-opacity, var(--tw-bg-opacity)));\n}\n.hover\\:bg-primary-100:hover{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-primary-100) / var(--nextui-primary-100-opacity, var(--tw-bg-opacity)));\n}\n.hover\\:bg-secondary-100:hover{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-secondary-100) / var(--nextui-secondary-100-opacity, var(--tw-bg-opacity)));\n}\n.hover\\:bg-success-100:hover{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-success-100) / var(--nextui-success-100-opacity, var(--tw-bg-opacity)));\n}\n.hover\\:bg-warning-100:hover{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-warning-100) / var(--nextui-warning-100-opacity, var(--tw-bg-opacity)));\n}\n.hover\\:underline:hover{\n text-decoration-line: underline;\n}\n.hover\\:\\!opacity-100:hover{\n opacity: 1 !important;\n}\n.hover\\:opacity-100:hover{\n opacity: 1;\n}\n.hover\\:opacity-80:hover{\n opacity: 0.8;\n}\n.hover\\:after\\:bg-danger\\/20:hover::after{\n content: var(--tw-content);\n background-color: hsl(var(--nextui-danger) / 0.2);\n}\n.hover\\:after\\:bg-foreground\\/10:hover::after{\n content: var(--tw-content);\n background-color: hsl(var(--nextui-foreground) / 0.1);\n}\n.hover\\:after\\:bg-primary\\/20:hover::after{\n content: var(--tw-content);\n background-color: hsl(var(--nextui-primary) / 0.2);\n}\n.hover\\:after\\:bg-secondary\\/20:hover::after{\n content: var(--tw-content);\n background-color: hsl(var(--nextui-secondary) / 0.2);\n}\n.hover\\:after\\:bg-success\\/20:hover::after{\n content: var(--tw-content);\n background-color: hsl(var(--nextui-success) / 0.2);\n}\n.hover\\:after\\:bg-warning\\/20:hover::after{\n content: var(--tw-content);\n background-color: hsl(var(--nextui-warning) / 0.2);\n}\n.hover\\:after\\:opacity-100:hover::after{\n content: var(--tw-content);\n opacity: 1;\n}\n.focus-within\\:hover\\:border-danger:hover:focus-within{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-border-opacity)));\n}\n.focus-within\\:hover\\:border-default-foreground:hover:focus-within{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-default-foreground) / var(--nextui-default-foreground-opacity, var(--tw-border-opacity)));\n}\n.focus-within\\:hover\\:border-primary:hover:focus-within{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-border-opacity)));\n}\n.focus-within\\:hover\\:border-secondary:hover:focus-within{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-border-opacity)));\n}\n.focus-within\\:hover\\:border-success:hover:focus-within{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-border-opacity)));\n}\n.focus-within\\:hover\\:border-warning:hover:focus-within{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-border-opacity)));\n}\n.focus-within\\:hover\\:bg-default-100:hover:focus-within{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default-100) / var(--nextui-default-100-opacity, var(--tw-bg-opacity)));\n}\n.focus\\:bg-danger-400\\/50:focus{\n background-color: hsl(var(--nextui-danger-400) / 0.5);\n}\n.focus\\:bg-default-400\\/50:focus{\n background-color: hsl(var(--nextui-default-400) / 0.5);\n}\n.focus\\:bg-primary-400\\/50:focus{\n background-color: hsl(var(--nextui-primary-400) / 0.5);\n}\n.focus\\:bg-secondary-400\\/50:focus{\n background-color: hsl(var(--nextui-secondary-400) / 0.5);\n}\n.focus\\:bg-success-400\\/50:focus{\n background-color: hsl(var(--nextui-success-400) / 0.5);\n}\n.focus\\:bg-warning-400\\/50:focus{\n background-color: hsl(var(--nextui-warning-400) / 0.5);\n}\n.focus\\:underline:focus{\n text-decoration-line: underline;\n}\n.focus\\:shadow-sm:focus{\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.focus-visible\\:outline-none:focus-visible{\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.active\\:bg-default-200:active{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default-200) / var(--nextui-default-200-opacity, var(--tw-bg-opacity)));\n}\n.active\\:bg-default-300:active{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default-300) / var(--nextui-default-300-opacity, var(--tw-bg-opacity)));\n}\n.active\\:underline:active{\n text-decoration-line: underline;\n}\n.active\\:\\!opacity-70:active{\n opacity: 0.7 !important;\n}\n.active\\:opacity-disabled:active{\n opacity: var(--nextui-disabled-opacity);\n}\n.group:hover .group-hover\\:block{\n display: block;\n}\n.group:hover .group-hover\\:hidden{\n display: none;\n}\n.group:hover .group-hover\\:border-current{\n border-color: currentColor;\n}\n.group:hover .group-hover\\:text-current{\n color: currentColor;\n}\n.aria-expanded\\:scale-\\[0\\.97\\][aria-expanded="true"]{\n --tw-scale-x: 0.97;\n --tw-scale-y: 0.97;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.aria-expanded\\:opacity-70[aria-expanded="true"]{\n opacity: 0.7;\n}\n.data-\\[disabled\\=true\\]\\:pointer-events-none[data-disabled="true"]{\n pointer-events: none;\n}\n.data-\\[loaded\\=true\\]\\:pointer-events-auto[data-loaded="true"]{\n pointer-events: auto;\n}\n.data-\\[visible\\=true\\]\\:pointer-events-auto[data-visible="true"]{\n pointer-events: auto;\n}\n.data-\\[focus-visible\\=true\\]\\:z-10[data-focus-visible="true"]{\n z-index: 10;\n}\n.data-\\[focused\\=true\\]\\:z-10[data-focused="true"]{\n z-index: 10;\n}\n.data-\\[has-label\\=true\\]\\:mt-\\[calc\\(theme\\(fontSize\\.small\\)_\\+_10px\\)\\][data-has-label="true"]{\n margin-top: calc(var(--nextui-font-size-small) + 10px);\n}\n.data-\\[has-label\\=true\\]\\:mt-\\[calc\\(theme\\(fontSize\\.small\\)_\\+_12px\\)\\][data-has-label="true"]{\n margin-top: calc(var(--nextui-font-size-small) + 12px);\n}\n.data-\\[has-label\\=true\\]\\:mt-\\[calc\\(theme\\(fontSize\\.small\\)_\\+_8px\\)\\][data-has-label="true"]{\n margin-top: calc(var(--nextui-font-size-small) + 8px);\n}\n.data-\\[open\\=true\\]\\:block[data-open="true"]{\n display: block;\n}\n.data-\\[open\\=true\\]\\:flex[data-open="true"]{\n display: flex;\n}\n.data-\\[hidden\\=true\\]\\:hidden[data-hidden="true"]{\n display: none;\n}\n.data-\\[inert\\=true\\]\\:hidden[data-inert="true"]{\n display: none;\n}\n.data-\\[justify\\=end\\]\\:flex-grow[data-justify="end"]{\n flex-grow: 1;\n}\n.data-\\[justify\\=start\\]\\:flex-grow[data-justify="start"]{\n flex-grow: 1;\n}\n.data-\\[justify\\=end\\]\\:basis-0[data-justify="end"]{\n flex-basis: 0px;\n}\n.data-\\[justify\\=start\\]\\:basis-0[data-justify="start"]{\n flex-basis: 0px;\n}\n.data-\\[focus-visible\\=true\\]\\:-translate-x-3[data-focus-visible="true"]{\n --tw-translate-x: -0.75rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[hover\\=true\\]\\:-translate-x-3[data-hover="true"]{\n --tw-translate-x: -0.75rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[hover\\=true\\]\\:translate-x-0[data-hover="true"]{\n --tw-translate-x: 0px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[before\\=true\\]\\:rotate-180[data-before="true"]{\n --tw-rotate: 180deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[direction\\=ascending\\]\\:rotate-180[data-direction="ascending"]{\n --tw-rotate: 180deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[open\\=true\\]\\:-rotate-90[data-open="true"]{\n --tw-rotate: -90deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[open\\=true\\]\\:rotate-180[data-open="true"]{\n --tw-rotate: 180deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[invisible\\=true\\]\\:scale-0[data-invisible="true"]{\n --tw-scale-x: 0;\n --tw-scale-y: 0;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[pressed\\=true\\]\\:scale-100[data-pressed="true"]{\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[pressed\\=true\\]\\:scale-\\[0\\.97\\][data-pressed="true"]{\n --tw-scale-x: 0.97;\n --tw-scale-y: 0.97;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[disabled\\=true\\]\\:cursor-default[data-disabled="true"]{\n cursor: default;\n}\n.data-\\[disabled\\=true\\]\\:cursor-not-allowed[data-disabled="true"]{\n cursor: not-allowed;\n}\n.data-\\[dragging\\=true\\]\\:cursor-grabbing[data-dragging="true"]{\n cursor: grabbing;\n}\n.data-\\[readonly\\=true\\]\\:cursor-default[data-readonly="true"]{\n cursor: default;\n}\n.data-\\[sortable\\=true\\]\\:cursor-pointer[data-sortable="true"]{\n cursor: pointer;\n}\n.data-\\[unavailable\\=true\\]\\:cursor-default[data-unavailable="true"]{\n cursor: default;\n}\n.data-\\[visible\\=true\\]\\:cursor-pointer[data-visible="true"]{\n cursor: pointer;\n}\n.data-\\[orientation\\=horizontal\\]\\:flex-row[data-orientation="horizontal"]{\n flex-direction: row;\n}\n.data-\\[has-helper\\=true\\]\\:items-start[data-has-helper="true"]{\n align-items: flex-start;\n}\n.data-\\[justify\\=start\\]\\:justify-start[data-justify="start"]{\n justify-content: flex-start;\n}\n.data-\\[justify\\=end\\]\\:justify-end[data-justify="end"]{\n justify-content: flex-end;\n}\n.data-\\[justify\\=center\\]\\:justify-center[data-justify="center"]{\n justify-content: center;\n}\n.data-\\[loaded\\=true\\]\\:overflow-visible[data-loaded="true"]{\n overflow: visible;\n}\n.data-\\[has-multiple-rows\\=true\\]\\:rounded-large[data-has-multiple-rows="true"]{\n border-radius: var(--nextui-radius-large);\n}\n.data-\\[selected\\=true\\]\\:data-\\[selection-end\\=true\\]\\:data-\\[range-selection\\=true\\]\\:rounded-full[data-range-selection="true"][data-selection-end="true"][data-selected="true"]{\n border-radius: 9999px;\n}\n.data-\\[selected\\=true\\]\\:data-\\[selection-start\\=true\\]\\:data-\\[range-selection\\=true\\]\\:rounded-full[data-range-selection="true"][data-selection-start="true"][data-selected="true"]{\n border-radius: 9999px;\n}\n.data-\\[menu-open\\=true\\]\\:border-none[data-menu-open="true"]{\n border-style: none;\n}\n.data-\\[active\\=true\\]\\:border-danger[data-active="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-border-opacity)));\n}\n.data-\\[active\\=true\\]\\:border-default-400[data-active="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-default-400) / var(--nextui-default-400-opacity, var(--tw-border-opacity)));\n}\n.data-\\[active\\=true\\]\\:border-primary[data-active="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-border-opacity)));\n}\n.data-\\[active\\=true\\]\\:border-secondary[data-active="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-border-opacity)));\n}\n.data-\\[active\\=true\\]\\:border-success[data-active="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-border-opacity)));\n}\n.data-\\[active\\=true\\]\\:border-warning[data-active="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-border-opacity)));\n}\n.data-\\[focus\\=true\\]\\:border-danger[data-focus="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-border-opacity)));\n}\n.data-\\[focus\\=true\\]\\:border-default-foreground[data-focus="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-default-foreground) / var(--nextui-default-foreground-opacity, var(--tw-border-opacity)));\n}\n.data-\\[focus\\=true\\]\\:border-primary[data-focus="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-border-opacity)));\n}\n.data-\\[focus\\=true\\]\\:border-secondary[data-focus="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-border-opacity)));\n}\n.data-\\[focus\\=true\\]\\:border-success[data-focus="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-border-opacity)));\n}\n.data-\\[focus\\=true\\]\\:border-warning[data-focus="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-border-opacity)));\n}\n.data-\\[hover\\=true\\]\\:border-danger[data-hover="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-border-opacity)));\n}\n.data-\\[hover\\=true\\]\\:border-default[data-hover="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-default) / var(--nextui-default-opacity, var(--tw-border-opacity)));\n}\n.data-\\[hover\\=true\\]\\:border-default-400[data-hover="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-default-400) / var(--nextui-default-400-opacity, var(--tw-border-opacity)));\n}\n.data-\\[hover\\=true\\]\\:border-primary[data-hover="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-border-opacity)));\n}\n.data-\\[hover\\=true\\]\\:border-secondary[data-hover="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-border-opacity)));\n}\n.data-\\[hover\\=true\\]\\:border-success[data-hover="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-border-opacity)));\n}\n.data-\\[hover\\=true\\]\\:border-warning[data-hover="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-border-opacity)));\n}\n.data-\\[open\\=true\\]\\:border-danger[data-open="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-border-opacity)));\n}\n.data-\\[open\\=true\\]\\:border-default-foreground[data-open="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-default-foreground) / var(--nextui-default-foreground-opacity, var(--tw-border-opacity)));\n}\n.data-\\[open\\=true\\]\\:border-primary[data-open="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-border-opacity)));\n}\n.data-\\[open\\=true\\]\\:border-secondary[data-open="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-border-opacity)));\n}\n.data-\\[open\\=true\\]\\:border-success[data-open="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-border-opacity)));\n}\n.data-\\[open\\=true\\]\\:border-warning[data-open="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-border-opacity)));\n}\n.data-\\[active\\=true\\]\\:bg-danger[data-active="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[active\\=true\\]\\:bg-default-400[data-active="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default-400) / var(--nextui-default-400-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[active\\=true\\]\\:bg-primary[data-active="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[active\\=true\\]\\:bg-secondary[data-active="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[active\\=true\\]\\:bg-success[data-active="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[active\\=true\\]\\:bg-warning[data-active="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[hover\\=true\\]\\:\\!bg-danger[data-hover="true"]{\n --tw-bg-opacity: 1 !important;\n background-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-bg-opacity))) !important;\n}\n.data-\\[hover\\=true\\]\\:\\!bg-danger-100[data-hover="true"]{\n --tw-bg-opacity: 1 !important;\n background-color: hsl(var(--nextui-danger-100) / var(--nextui-danger-100-opacity, var(--tw-bg-opacity))) !important;\n}\n.data-\\[hover\\=true\\]\\:\\!bg-default[data-hover="true"]{\n --tw-bg-opacity: 1 !important;\n background-color: hsl(var(--nextui-default) / var(--nextui-default-opacity, var(--tw-bg-opacity))) !important;\n}\n.data-\\[hover\\=true\\]\\:\\!bg-primary[data-hover="true"]{\n --tw-bg-opacity: 1 !important;\n background-color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-bg-opacity))) !important;\n}\n.data-\\[hover\\=true\\]\\:\\!bg-secondary[data-hover="true"]{\n --tw-bg-opacity: 1 !important;\n background-color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-bg-opacity))) !important;\n}\n.data-\\[hover\\=true\\]\\:\\!bg-success[data-hover="true"]{\n --tw-bg-opacity: 1 !important;\n background-color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-bg-opacity))) !important;\n}\n.data-\\[hover\\=true\\]\\:\\!bg-warning[data-hover="true"]{\n --tw-bg-opacity: 1 !important;\n background-color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-bg-opacity))) !important;\n}\n.data-\\[hover\\=true\\]\\:bg-content2[data-hover="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-content2) / var(--nextui-content2-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[hover\\=true\\]\\:bg-danger[data-hover="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[hover\\=true\\]\\:bg-danger-100[data-hover="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-danger-100) / var(--nextui-danger-100-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[hover\\=true\\]\\:bg-danger-50[data-hover="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-danger-50) / var(--nextui-danger-50-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[hover\\=true\\]\\:bg-danger\\/20[data-hover="true"]{\n background-color: hsl(var(--nextui-danger) / 0.2);\n}\n.data-\\[hover\\=true\\]\\:bg-default[data-hover="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default) / var(--nextui-default-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[hover\\=true\\]\\:bg-default-100[data-hover="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default-100) / var(--nextui-default-100-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[hover\\=true\\]\\:bg-default-200[data-hover="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default-200) / var(--nextui-default-200-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[hover\\=true\\]\\:bg-default-50[data-hover="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default-50) / var(--nextui-default-50-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[hover\\=true\\]\\:bg-default\\/40[data-hover="true"]{\n background-color: hsl(var(--nextui-default) / 0.4);\n}\n.data-\\[hover\\=true\\]\\:bg-foreground-200[data-hover="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-foreground-200) / var(--nextui-foreground-200-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[hover\\=true\\]\\:bg-primary[data-hover="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[hover\\=true\\]\\:bg-primary-100[data-hover="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-primary-100) / var(--nextui-primary-100-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[hover\\=true\\]\\:bg-primary-50[data-hover="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-primary-50) / var(--nextui-primary-50-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[hover\\=true\\]\\:bg-primary\\/20[data-hover="true"]{\n background-color: hsl(var(--nextui-primary) / 0.2);\n}\n.data-\\[hover\\=true\\]\\:bg-secondary[data-hover="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[hover\\=true\\]\\:bg-secondary-100[data-hover="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-secondary-100) / var(--nextui-secondary-100-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[hover\\=true\\]\\:bg-secondary-50[data-hover="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-secondary-50) / var(--nextui-secondary-50-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[hover\\=true\\]\\:bg-secondary\\/20[data-hover="true"]{\n background-color: hsl(var(--nextui-secondary) / 0.2);\n}\n.data-\\[hover\\=true\\]\\:bg-success[data-hover="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[hover\\=true\\]\\:bg-success-100[data-hover="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-success-100) / var(--nextui-success-100-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[hover\\=true\\]\\:bg-success-50[data-hover="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-success-50) / var(--nextui-success-50-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[hover\\=true\\]\\:bg-success\\/20[data-hover="true"]{\n background-color: hsl(var(--nextui-success) / 0.2);\n}\n.data-\\[hover\\=true\\]\\:bg-transparent[data-hover="true"]{\n background-color: transparent;\n}\n.data-\\[hover\\=true\\]\\:bg-warning[data-hover="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[hover\\=true\\]\\:bg-warning-100[data-hover="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-warning-100) / var(--nextui-warning-100-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[hover\\=true\\]\\:bg-warning-50[data-hover="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-warning-50) / var(--nextui-warning-50-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[hover\\=true\\]\\:bg-warning\\/20[data-hover="true"]{\n background-color: hsl(var(--nextui-warning) / 0.2);\n}\n.data-\\[in-range\\=false\\]\\:bg-default-200[data-in-range="false"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default-200) / var(--nextui-default-200-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[in-range\\=true\\]\\:bg-background\\/50[data-in-range="true"]{\n background-color: hsl(var(--nextui-background) / 0.5);\n}\n.data-\\[in-range\\=true\\]\\:bg-danger[data-in-range="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[in-range\\=true\\]\\:bg-foreground[data-in-range="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-foreground) / var(--nextui-foreground-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[in-range\\=true\\]\\:bg-primary[data-in-range="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[in-range\\=true\\]\\:bg-secondary[data-in-range="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[in-range\\=true\\]\\:bg-success[data-in-range="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[in-range\\=true\\]\\:bg-warning[data-in-range="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[loaded\\=true\\]\\:\\!bg-transparent[data-loaded="true"]{\n background-color: transparent !important;\n}\n.data-\\[selected\\=true\\]\\:bg-danger[data-selected="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:bg-default[data-selected="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default) / var(--nextui-default-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:bg-foreground[data-selected="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-foreground) / var(--nextui-foreground-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:bg-primary[data-selected="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:bg-secondary[data-selected="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:bg-success[data-selected="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:bg-warning[data-selected="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[hover\\=true\\]\\:bg-danger[data-hover="true"][data-selected="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[hover\\=true\\]\\:bg-foreground[data-hover="true"][data-selected="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-foreground) / var(--nextui-foreground-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[hover\\=true\\]\\:bg-primary[data-hover="true"][data-selected="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[hover\\=true\\]\\:bg-secondary[data-hover="true"][data-selected="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[hover\\=true\\]\\:bg-success[data-hover="true"][data-selected="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[hover\\=true\\]\\:bg-warning[data-hover="true"][data-selected="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[range-selection\\=true\\]\\:data-\\[outside-month\\=true\\]\\:bg-transparent[data-outside-month="true"][data-range-selection="true"][data-selected="true"]{\n background-color: transparent;\n}\n.data-\\[selected\\=true\\]\\:data-\\[selection-end\\=true\\]\\:data-\\[range-selection\\=true\\]\\:bg-danger[data-range-selection="true"][data-selection-end="true"][data-selected="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[selection-end\\=true\\]\\:data-\\[range-selection\\=true\\]\\:bg-foreground[data-range-selection="true"][data-selection-end="true"][data-selected="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-foreground) / var(--nextui-foreground-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[selection-end\\=true\\]\\:data-\\[range-selection\\=true\\]\\:bg-primary[data-range-selection="true"][data-selection-end="true"][data-selected="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[selection-end\\=true\\]\\:data-\\[range-selection\\=true\\]\\:bg-secondary[data-range-selection="true"][data-selection-end="true"][data-selected="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[selection-end\\=true\\]\\:data-\\[range-selection\\=true\\]\\:bg-success[data-range-selection="true"][data-selection-end="true"][data-selected="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[selection-end\\=true\\]\\:data-\\[range-selection\\=true\\]\\:bg-warning[data-range-selection="true"][data-selection-end="true"][data-selected="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[selection-start\\=true\\]\\:data-\\[range-selection\\=true\\]\\:bg-danger[data-range-selection="true"][data-selection-start="true"][data-selected="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[selection-start\\=true\\]\\:data-\\[range-selection\\=true\\]\\:bg-foreground[data-range-selection="true"][data-selection-start="true"][data-selected="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-foreground) / var(--nextui-foreground-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[selection-start\\=true\\]\\:data-\\[range-selection\\=true\\]\\:bg-primary[data-range-selection="true"][data-selection-start="true"][data-selected="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[selection-start\\=true\\]\\:data-\\[range-selection\\=true\\]\\:bg-secondary[data-range-selection="true"][data-selection-start="true"][data-selected="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[selection-start\\=true\\]\\:data-\\[range-selection\\=true\\]\\:bg-success[data-range-selection="true"][data-selection-start="true"][data-selected="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[selection-start\\=true\\]\\:data-\\[range-selection\\=true\\]\\:bg-warning[data-range-selection="true"][data-selection-start="true"][data-selected="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[has-end-content\\=true\\]\\:pe-1\\.5[data-has-end-content="true"]{\n padding-inline-end: 0.375rem;\n}\n.data-\\[has-helper\\=true\\]\\:pb-\\[calc\\(theme\\(fontSize\\.tiny\\)_\\+8px\\)\\][data-has-helper="true"]{\n padding-bottom: calc(var(--nextui-font-size-tiny) + 8px);\n}\n.data-\\[has-helper\\=true\\]\\:pb-\\[calc\\(theme\\(fontSize\\.tiny\\)_\\+_8px\\)\\][data-has-helper="true"]{\n padding-bottom: calc(var(--nextui-font-size-tiny) + 8px);\n}\n.data-\\[has-start-content\\=true\\]\\:ps-1\\.5[data-has-start-content="true"]{\n padding-inline-start: 0.375rem;\n}\n.data-\\[has-title\\=true\\]\\:pt-1[data-has-title="true"]{\n padding-top: 0.25rem;\n}\n.data-\\[active\\=true\\]\\:font-semibold[data-active="true"]{\n font-weight: 600;\n}\n.data-\\[active\\=true\\]\\:text-danger-foreground[data-active="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger-foreground) / var(--nextui-danger-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[active\\=true\\]\\:text-default-foreground[data-active="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-default-foreground) / var(--nextui-default-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[active\\=true\\]\\:text-primary-foreground[data-active="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-primary-foreground) / var(--nextui-primary-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[active\\=true\\]\\:text-secondary-foreground[data-active="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-secondary-foreground) / var(--nextui-secondary-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[active\\=true\\]\\:text-success-foreground[data-active="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success-foreground) / var(--nextui-success-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[active\\=true\\]\\:text-warning-foreground[data-active="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning-foreground) / var(--nextui-warning-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[disabled\\=true\\]\\:text-default-300[data-disabled="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-default-300) / var(--nextui-default-300-opacity, var(--tw-text-opacity)));\n}\n.data-\\[editable\\=true\\]\\:data-\\[placeholder\\=true\\]\\:text-danger-300[data-placeholder="true"][data-editable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger-300) / var(--nextui-danger-300-opacity, var(--tw-text-opacity)));\n}\n.data-\\[editable\\=true\\]\\:data-\\[placeholder\\=true\\]\\:text-foreground-500[data-placeholder="true"][data-editable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-foreground-500) / var(--nextui-foreground-500-opacity, var(--tw-text-opacity)));\n}\n.data-\\[editable\\=true\\]\\:data-\\[placeholder\\=true\\]\\:text-primary-300[data-placeholder="true"][data-editable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-primary-300) / var(--nextui-primary-300-opacity, var(--tw-text-opacity)));\n}\n.data-\\[editable\\=true\\]\\:data-\\[placeholder\\=true\\]\\:text-secondary-300[data-placeholder="true"][data-editable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-secondary-300) / var(--nextui-secondary-300-opacity, var(--tw-text-opacity)));\n}\n.data-\\[editable\\=true\\]\\:data-\\[placeholder\\=true\\]\\:text-success-400[data-placeholder="true"][data-editable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success-400) / var(--nextui-success-400-opacity, var(--tw-text-opacity)));\n}\n.data-\\[editable\\=true\\]\\:data-\\[placeholder\\=true\\]\\:text-warning-400[data-placeholder="true"][data-editable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning-400) / var(--nextui-warning-400-opacity, var(--tw-text-opacity)));\n}\n.data-\\[editable\\=true\\]\\:text-danger[data-editable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-text-opacity)));\n}\n.data-\\[editable\\=true\\]\\:text-foreground[data-editable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-foreground) / var(--nextui-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[editable\\=true\\]\\:text-primary[data-editable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-text-opacity)));\n}\n.data-\\[editable\\=true\\]\\:text-secondary[data-editable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-text-opacity)));\n}\n.data-\\[editable\\=true\\]\\:text-success-600[data-editable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success-600) / var(--nextui-success-600-opacity, var(--tw-text-opacity)));\n}\n.data-\\[editable\\=true\\]\\:text-warning-600[data-editable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning-600) / var(--nextui-warning-600-opacity, var(--tw-text-opacity)));\n}\n.data-\\[hover\\=true\\]\\:\\!text-primary-foreground[data-hover="true"]{\n --tw-text-opacity: 1 !important;\n color: hsl(var(--nextui-primary-foreground) / var(--nextui-primary-foreground-opacity, var(--tw-text-opacity))) !important;\n}\n.data-\\[hover\\=true\\]\\:\\!text-secondary-foreground[data-hover="true"]{\n --tw-text-opacity: 1 !important;\n color: hsl(var(--nextui-secondary-foreground) / var(--nextui-secondary-foreground-opacity, var(--tw-text-opacity))) !important;\n}\n.data-\\[hover\\=true\\]\\:\\!text-success-foreground[data-hover="true"]{\n --tw-text-opacity: 1 !important;\n color: hsl(var(--nextui-success-foreground) / var(--nextui-success-foreground-opacity, var(--tw-text-opacity))) !important;\n}\n.data-\\[hover\\=true\\]\\:\\!text-warning-foreground[data-hover="true"]{\n --tw-text-opacity: 1 !important;\n color: hsl(var(--nextui-warning-foreground) / var(--nextui-warning-foreground-opacity, var(--tw-text-opacity))) !important;\n}\n.data-\\[hover\\=true\\]\\:text-danger[data-hover="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-text-opacity)));\n}\n.data-\\[hover\\=true\\]\\:text-danger-500[data-hover="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger-500) / var(--nextui-danger-500-opacity, var(--tw-text-opacity)));\n}\n.data-\\[hover\\=true\\]\\:text-danger-foreground[data-hover="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger-foreground) / var(--nextui-danger-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[hover\\=true\\]\\:text-default-500[data-hover="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-default-500) / var(--nextui-default-500-opacity, var(--tw-text-opacity)));\n}\n.data-\\[hover\\=true\\]\\:text-default-foreground[data-hover="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-default-foreground) / var(--nextui-default-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[hover\\=true\\]\\:text-foreground-400[data-hover="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-foreground-400) / var(--nextui-foreground-400-opacity, var(--tw-text-opacity)));\n}\n.data-\\[hover\\=true\\]\\:text-foreground-600[data-hover="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-foreground-600) / var(--nextui-foreground-600-opacity, var(--tw-text-opacity)));\n}\n.data-\\[hover\\=true\\]\\:text-primary[data-hover="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-text-opacity)));\n}\n.data-\\[hover\\=true\\]\\:text-primary-400[data-hover="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-primary-400) / var(--nextui-primary-400-opacity, var(--tw-text-opacity)));\n}\n.data-\\[hover\\=true\\]\\:text-primary-foreground[data-hover="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-primary-foreground) / var(--nextui-primary-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[hover\\=true\\]\\:text-secondary[data-hover="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-text-opacity)));\n}\n.data-\\[hover\\=true\\]\\:text-secondary-400[data-hover="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-secondary-400) / var(--nextui-secondary-400-opacity, var(--tw-text-opacity)));\n}\n.data-\\[hover\\=true\\]\\:text-secondary-foreground[data-hover="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-secondary-foreground) / var(--nextui-secondary-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[hover\\=true\\]\\:text-success[data-hover="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-text-opacity)));\n}\n.data-\\[hover\\=true\\]\\:text-success-600[data-hover="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success-600) / var(--nextui-success-600-opacity, var(--tw-text-opacity)));\n}\n.data-\\[hover\\=true\\]\\:text-success-foreground[data-hover="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success-foreground) / var(--nextui-success-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[hover\\=true\\]\\:text-warning[data-hover="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-text-opacity)));\n}\n.data-\\[hover\\=true\\]\\:text-warning-600[data-hover="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning-600) / var(--nextui-warning-600-opacity, var(--tw-text-opacity)));\n}\n.data-\\[hover\\=true\\]\\:text-warning-foreground[data-hover="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning-foreground) / var(--nextui-warning-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[invalid\\=true\\]\\:data-\\[editable\\=true\\]\\:text-danger[data-editable="true"][data-invalid="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-text-opacity)));\n}\n.data-\\[invalid\\=true\\]\\:text-danger-300[data-invalid="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger-300) / var(--nextui-danger-300-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[hover\\=true\\]\\:text-background[data-hover="true"][data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-background) / var(--nextui-background-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[hover\\=true\\]\\:text-danger-foreground[data-hover="true"][data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger-foreground) / var(--nextui-danger-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[hover\\=true\\]\\:text-primary-foreground[data-hover="true"][data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-primary-foreground) / var(--nextui-primary-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[hover\\=true\\]\\:text-secondary-foreground[data-hover="true"][data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-secondary-foreground) / var(--nextui-secondary-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[hover\\=true\\]\\:text-success-foreground[data-hover="true"][data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success-foreground) / var(--nextui-success-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[hover\\=true\\]\\:text-warning-foreground[data-hover="true"][data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning-foreground) / var(--nextui-warning-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[range-selection\\=true\\]\\:data-\\[outside-month\\=true\\]\\:text-default-300[data-outside-month="true"][data-range-selection="true"][data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-default-300) / var(--nextui-default-300-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[range-selection\\=true\\]\\:text-danger-500[data-range-selection="true"][data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger-500) / var(--nextui-danger-500-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[range-selection\\=true\\]\\:text-foreground[data-range-selection="true"][data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-foreground) / var(--nextui-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[range-selection\\=true\\]\\:text-primary[data-range-selection="true"][data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[range-selection\\=true\\]\\:text-secondary[data-range-selection="true"][data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[range-selection\\=true\\]\\:text-success-600[data-range-selection="true"][data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success-600) / var(--nextui-success-600-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[range-selection\\=true\\]\\:text-warning-500[data-range-selection="true"][data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning-500) / var(--nextui-warning-500-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[selection-end\\=true\\]\\:data-\\[range-selection\\=true\\]\\:text-background[data-range-selection="true"][data-selection-end="true"][data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-background) / var(--nextui-background-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[selection-end\\=true\\]\\:data-\\[range-selection\\=true\\]\\:text-danger-foreground[data-range-selection="true"][data-selection-end="true"][data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger-foreground) / var(--nextui-danger-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[selection-end\\=true\\]\\:data-\\[range-selection\\=true\\]\\:text-primary-foreground[data-range-selection="true"][data-selection-end="true"][data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-primary-foreground) / var(--nextui-primary-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[selection-end\\=true\\]\\:data-\\[range-selection\\=true\\]\\:text-secondary-foreground[data-range-selection="true"][data-selection-end="true"][data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-secondary-foreground) / var(--nextui-secondary-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[selection-end\\=true\\]\\:data-\\[range-selection\\=true\\]\\:text-success-foreground[data-range-selection="true"][data-selection-end="true"][data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success-foreground) / var(--nextui-success-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[selection-end\\=true\\]\\:data-\\[range-selection\\=true\\]\\:text-warning-foreground[data-range-selection="true"][data-selection-end="true"][data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning-foreground) / var(--nextui-warning-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[selection-start\\=true\\]\\:data-\\[range-selection\\=true\\]\\:text-background[data-range-selection="true"][data-selection-start="true"][data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-background) / var(--nextui-background-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[selection-start\\=true\\]\\:data-\\[range-selection\\=true\\]\\:text-danger-foreground[data-range-selection="true"][data-selection-start="true"][data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger-foreground) / var(--nextui-danger-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[selection-start\\=true\\]\\:data-\\[range-selection\\=true\\]\\:text-primary-foreground[data-range-selection="true"][data-selection-start="true"][data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-primary-foreground) / var(--nextui-primary-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[selection-start\\=true\\]\\:data-\\[range-selection\\=true\\]\\:text-secondary-foreground[data-range-selection="true"][data-selection-start="true"][data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-secondary-foreground) / var(--nextui-secondary-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[selection-start\\=true\\]\\:data-\\[range-selection\\=true\\]\\:text-success-foreground[data-range-selection="true"][data-selection-start="true"][data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success-foreground) / var(--nextui-success-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[selection-start\\=true\\]\\:data-\\[range-selection\\=true\\]\\:text-warning-foreground[data-range-selection="true"][data-selection-start="true"][data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning-foreground) / var(--nextui-warning-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:text-background[data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-background) / var(--nextui-background-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:text-danger[data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:text-danger-foreground[data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger-foreground) / var(--nextui-danger-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:text-default-foreground[data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-default-foreground) / var(--nextui-default-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:text-primary[data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:text-primary-foreground[data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-primary-foreground) / var(--nextui-primary-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:text-secondary[data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:text-secondary-foreground[data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-secondary-foreground) / var(--nextui-secondary-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:text-success-600[data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success-600) / var(--nextui-success-600-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:text-success-foreground[data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success-foreground) / var(--nextui-success-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:text-warning-600[data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning-600) / var(--nextui-warning-600-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selected\\=true\\]\\:text-warning-foreground[data-selected="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning-foreground) / var(--nextui-warning-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[unavailable\\=true\\]\\:text-default-300[data-unavailable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-default-300) / var(--nextui-default-300-opacity, var(--tw-text-opacity)));\n}\n.data-\\[unavailable\\=true\\]\\:line-through[data-unavailable="true"]{\n text-decoration-line: line-through;\n}\n.data-\\[disabled\\=true\\]\\:data-\\[outside-month\\=true\\]\\:opacity-0[data-outside-month="true"][data-disabled="true"]{\n opacity: 0;\n}\n.data-\\[disabled\\=true\\]\\:opacity-30[data-disabled="true"]{\n opacity: 0.3;\n}\n.data-\\[hover-unselected\\=true\\]\\:opacity-disabled[data-hover-unselected="true"]{\n opacity: var(--nextui-disabled-opacity);\n}\n.data-\\[hover\\=true\\]\\:opacity-hover[data-hover="true"]{\n opacity: var(--nextui-hover-opacity);\n}\n.data-\\[in-range\\=true\\]\\:opacity-100[data-in-range="true"]{\n opacity: 1;\n}\n.data-\\[invisible\\=true\\]\\:opacity-0[data-invisible="true"]{\n opacity: 0;\n}\n.data-\\[loaded\\=true\\]\\:opacity-100[data-loaded="true"]{\n opacity: 1;\n}\n.data-\\[moving\\]\\:opacity-100[data-moving]{\n opacity: 1;\n}\n.data-\\[pressed\\=true\\]\\:opacity-50[data-pressed="true"]{\n opacity: 0.5;\n}\n.data-\\[pressed\\=true\\]\\:opacity-70[data-pressed="true"]{\n opacity: 0.7;\n}\n.data-\\[visible\\=true\\]\\:opacity-100[data-visible="true"]{\n opacity: 1;\n}\n.data-\\[active\\=true\\]\\:shadow-md[data-active="true"]{\n --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.data-\\[hover\\=true\\]\\:shadow-lg[data-hover="true"]{\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.data-\\[selected\\=true\\]\\:data-\\[selection-end\\=true\\]\\:shadow-md[data-selection-end="true"][data-selected="true"]{\n --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.data-\\[selected\\=true\\]\\:data-\\[selection-start\\=true\\]\\:shadow-md[data-selection-start="true"][data-selected="true"]{\n --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.data-\\[selected\\=true\\]\\:shadow-md[data-selected="true"]{\n --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.data-\\[selected\\=true\\]\\:shadow-none[data-selected="true"]{\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.data-\\[active\\=true\\]\\:shadow-danger\\/40[data-active="true"]{\n --tw-shadow-color: hsl(var(--nextui-danger) / 0.4);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.data-\\[active\\=true\\]\\:shadow-default\\/50[data-active="true"]{\n --tw-shadow-color: hsl(var(--nextui-default) / 0.5);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.data-\\[active\\=true\\]\\:shadow-primary\\/40[data-active="true"]{\n --tw-shadow-color: hsl(var(--nextui-primary) / 0.4);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.data-\\[active\\=true\\]\\:shadow-secondary\\/40[data-active="true"]{\n --tw-shadow-color: hsl(var(--nextui-secondary) / 0.4);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.data-\\[active\\=true\\]\\:shadow-success\\/40[data-active="true"]{\n --tw-shadow-color: hsl(var(--nextui-success) / 0.4);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.data-\\[active\\=true\\]\\:shadow-warning\\/40[data-active="true"]{\n --tw-shadow-color: hsl(var(--nextui-warning) / 0.4);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.data-\\[hover\\=true\\]\\:shadow-danger\\/30[data-hover="true"]{\n --tw-shadow-color: hsl(var(--nextui-danger) / 0.3);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.data-\\[hover\\=true\\]\\:shadow-default\\/50[data-hover="true"]{\n --tw-shadow-color: hsl(var(--nextui-default) / 0.5);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.data-\\[hover\\=true\\]\\:shadow-primary\\/30[data-hover="true"]{\n --tw-shadow-color: hsl(var(--nextui-primary) / 0.3);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.data-\\[hover\\=true\\]\\:shadow-secondary\\/30[data-hover="true"]{\n --tw-shadow-color: hsl(var(--nextui-secondary) / 0.3);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.data-\\[hover\\=true\\]\\:shadow-success\\/30[data-hover="true"]{\n --tw-shadow-color: hsl(var(--nextui-success) / 0.3);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.data-\\[hover\\=true\\]\\:shadow-warning\\/30[data-hover="true"]{\n --tw-shadow-color: hsl(var(--nextui-warning) / 0.3);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.data-\\[selected\\=true\\]\\:shadow-danger\\/40[data-selected="true"]{\n --tw-shadow-color: hsl(var(--nextui-danger) / 0.4);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.data-\\[selected\\=true\\]\\:shadow-foreground\\/40[data-selected="true"]{\n --tw-shadow-color: hsl(var(--nextui-foreground) / 0.4);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.data-\\[selected\\=true\\]\\:shadow-primary\\/40[data-selected="true"]{\n --tw-shadow-color: hsl(var(--nextui-primary) / 0.4);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.data-\\[selected\\=true\\]\\:shadow-secondary\\/40[data-selected="true"]{\n --tw-shadow-color: hsl(var(--nextui-secondary) / 0.4);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.data-\\[selected\\=true\\]\\:shadow-success\\/40[data-selected="true"]{\n --tw-shadow-color: hsl(var(--nextui-success) / 0.4);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.data-\\[selected\\=true\\]\\:shadow-warning\\/40[data-selected="true"]{\n --tw-shadow-color: hsl(var(--nextui-warning) / 0.4);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.data-\\[focus-visible\\=true\\]\\:outline-2[data-focus-visible="true"]{\n outline-width: 2px;\n}\n.data-\\[focus-visible\\=true\\]\\:outline-offset-2[data-focus-visible="true"]{\n outline-offset: 2px;\n}\n.data-\\[focus-visible\\=true\\]\\:outline-focus[data-focus-visible="true"]{\n outline-color: hsl(var(--nextui-focus) / var(--nextui-focus-opacity, 1));\n}\n.data-\\[focus-visible\\]\\:outline-danger-foreground[data-focus-visible]{\n outline-color: hsl(var(--nextui-danger-foreground) / var(--nextui-danger-foreground-opacity, 1));\n}\n.data-\\[focus-visible\\]\\:outline-default-foreground[data-focus-visible]{\n outline-color: hsl(var(--nextui-default-foreground) / var(--nextui-default-foreground-opacity, 1));\n}\n.data-\\[focus-visible\\]\\:outline-primary-foreground[data-focus-visible]{\n outline-color: hsl(var(--nextui-primary-foreground) / var(--nextui-primary-foreground-opacity, 1));\n}\n.data-\\[focus-visible\\]\\:outline-secondary-foreground[data-focus-visible]{\n outline-color: hsl(var(--nextui-secondary-foreground) / var(--nextui-secondary-foreground-opacity, 1));\n}\n.data-\\[focus-visible\\]\\:outline-success-foreground[data-focus-visible]{\n outline-color: hsl(var(--nextui-success-foreground) / var(--nextui-success-foreground-opacity, 1));\n}\n.data-\\[focus-visible\\]\\:outline-warning-foreground[data-focus-visible]{\n outline-color: hsl(var(--nextui-warning-foreground) / var(--nextui-warning-foreground-opacity, 1));\n}\n.data-\\[menu-open\\=true\\]\\:backdrop-blur-xl[data-menu-open="true"]{\n --tw-backdrop-blur: blur(24px);\n -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.data-\\[disabled\\=true\\]\\:transition-none[data-disabled="true"]{\n transition-property: none;\n}\n.data-\\[hover\\=true\\]\\:transition-colors[data-hover="true"]{\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 250ms;\n}\n.data-\\[moving\\=true\\]\\:transition-transform[data-moving="true"]{\n transition-property: transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 250ms;\n}\n.data-\\[hide-scroll\\=true\\]\\:scrollbar-hide[data-hide-scroll="true"]{\n -ms-overflow-style: none;\n scrollbar-width: none;\n}\n.data-\\[hide-scroll\\=true\\]\\:scrollbar-hide[data-hide-scroll="true"]::-webkit-scrollbar{\n display: none;\n}\n.data-\\[top-bottom-scroll\\=true\\]\\:\\[mask-image\\:linear-gradient\\(\\#000\\2c \\#000\\2c transparent_0\\2c \\#000_var\\(--scroll-shadow-size\\)\\2c \\#000_calc\\(100\\%_-_var\\(--scroll-shadow-size\\)\\)\\2c transparent\\)\\][data-top-bottom-scroll="true"]{\n mask-image: linear-gradient(#000,#000,transparent 0,#000 var(--scroll-shadow-size),#000 calc(100% - var(--scroll-shadow-size)),transparent);\n}\n.data-\\[top-scroll\\=true\\]\\:\\[mask-image\\:linear-gradient\\(0deg\\2c \\#000_calc\\(100\\%_-_var\\(--scroll-shadow-size\\)\\)\\2c transparent\\)\\][data-top-scroll="true"]{\n mask-image: linear-gradient(0deg,#000 calc(100% - var(--scroll-shadow-size)),transparent);\n}\n.data-\\[bottom-scroll\\=true\\]\\:\\[mask-image\\:linear-gradient\\(180deg\\2c \\#000_calc\\(100\\%_-_var\\(--scroll-shadow-size\\)\\)\\2c transparent\\)\\][data-bottom-scroll="true"]{\n mask-image: linear-gradient(180deg,#000 calc(100% - var(--scroll-shadow-size)),transparent);\n}\n.data-\\[left-scroll\\=true\\]\\:\\[mask-image\\:linear-gradient\\(270deg\\2c \\#000_calc\\(100\\%_-_var\\(--scroll-shadow-size\\)\\)\\2c transparent\\)\\][data-left-scroll="true"]{\n mask-image: linear-gradient(270deg,#000 calc(100% - var(--scroll-shadow-size)),transparent);\n}\n.data-\\[right-scroll\\=true\\]\\:\\[mask-image\\:linear-gradient\\(90deg\\2c \\#000_calc\\(100\\%_-_var\\(--scroll-shadow-size\\)\\)\\2c transparent\\)\\][data-right-scroll="true"]{\n mask-image: linear-gradient(90deg,#000 calc(100% - var(--scroll-shadow-size)),transparent);\n}\n.data-\\[left-right-scroll\\=true\\]\\:\\[mask-image\\:linear-gradient\\(to_right\\2c \\#000\\2c \\#000\\2c transparent_0\\2c \\#000_var\\(--scroll-shadow-size\\)\\2c \\#000_calc\\(100\\%_-_var\\(--scroll-shadow-size\\)\\)\\2c transparent\\)\\][data-left-right-scroll="true"]{\n mask-image: linear-gradient(to right,#000,#000,transparent 0,#000 var(--scroll-shadow-size),#000 calc(100% - var(--scroll-shadow-size)),transparent);\n}\n.data-\\[placement\\=bottom-end\\]\\:before\\:-top-\\[calc\\(theme\\(spacing\\.5\\)\\/4_-_1\\.5px\\)\\][data-placement="bottom-end"]::before{\n content: var(--tw-content);\n top: calc(calc(1.25rem / 4 - 1.5px) * -1);\n}\n.data-\\[placement\\=bottom-end\\]\\:before\\:right-3[data-placement="bottom-end"]::before{\n content: var(--tw-content);\n right: 0.75rem;\n}\n.data-\\[placement\\=bottom-start\\]\\:before\\:-top-\\[calc\\(theme\\(spacing\\.5\\)\\/4_-_1\\.5px\\)\\][data-placement="bottom-start"]::before{\n content: var(--tw-content);\n top: calc(calc(1.25rem / 4 - 1.5px) * -1);\n}\n.data-\\[placement\\=bottom-start\\]\\:before\\:left-3[data-placement="bottom-start"]::before{\n content: var(--tw-content);\n left: 0.75rem;\n}\n.data-\\[placement\\=bottom\\]\\:before\\:-top-\\[calc\\(theme\\(spacing\\.5\\)\\/4_-_1\\.5px\\)\\][data-placement="bottom"]::before{\n content: var(--tw-content);\n top: calc(calc(1.25rem / 4 - 1.5px) * -1);\n}\n.data-\\[placement\\=bottom\\]\\:before\\:left-1\\/2[data-placement="bottom"]::before{\n content: var(--tw-content);\n left: 50%;\n}\n.data-\\[placement\\=left-end\\]\\:before\\:-right-\\[calc\\(theme\\(spacing\\.5\\)\\/4_-_3px\\)\\][data-placement="left-end"]::before{\n content: var(--tw-content);\n right: calc(calc(1.25rem / 4 - 3px) * -1);\n}\n.data-\\[placement\\=left-end\\]\\:before\\:bottom-1\\/4[data-placement="left-end"]::before{\n content: var(--tw-content);\n bottom: 25%;\n}\n.data-\\[placement\\=left-start\\]\\:before\\:-right-\\[calc\\(theme\\(spacing\\.5\\)\\/4_-_3px\\)\\][data-placement="left-start"]::before{\n content: var(--tw-content);\n right: calc(calc(1.25rem / 4 - 3px) * -1);\n}\n.data-\\[placement\\=left-start\\]\\:before\\:top-1\\/4[data-placement="left-start"]::before{\n content: var(--tw-content);\n top: 25%;\n}\n.data-\\[placement\\=left\\]\\:before\\:-right-\\[calc\\(theme\\(spacing\\.5\\)\\/4_-_2px\\)\\][data-placement="left"]::before{\n content: var(--tw-content);\n right: calc(calc(1.25rem / 4 - 2px) * -1);\n}\n.data-\\[placement\\=left\\]\\:before\\:top-1\\/2[data-placement="left"]::before{\n content: var(--tw-content);\n top: 50%;\n}\n.data-\\[placement\\=right-end\\]\\:before\\:-left-\\[calc\\(theme\\(spacing\\.5\\)\\/4_-_3px\\)\\][data-placement="right-end"]::before{\n content: var(--tw-content);\n left: calc(calc(1.25rem / 4 - 3px) * -1);\n}\n.data-\\[placement\\=right-end\\]\\:before\\:bottom-1\\/4[data-placement="right-end"]::before{\n content: var(--tw-content);\n bottom: 25%;\n}\n.data-\\[placement\\=right-start\\]\\:before\\:-left-\\[calc\\(theme\\(spacing\\.5\\)\\/4_-_3px\\)\\][data-placement="right-start"]::before{\n content: var(--tw-content);\n left: calc(calc(1.25rem / 4 - 3px) * -1);\n}\n.data-\\[placement\\=right-start\\]\\:before\\:top-1\\/4[data-placement="right-start"]::before{\n content: var(--tw-content);\n top: 25%;\n}\n.data-\\[placement\\=right\\]\\:before\\:-left-\\[calc\\(theme\\(spacing\\.5\\)\\/4_-_2px\\)\\][data-placement="right"]::before{\n content: var(--tw-content);\n left: calc(calc(1.25rem / 4 - 2px) * -1);\n}\n.data-\\[placement\\=right\\]\\:before\\:top-1\\/2[data-placement="right"]::before{\n content: var(--tw-content);\n top: 50%;\n}\n.data-\\[placement\\=top-end\\]\\:before\\:-bottom-\\[calc\\(theme\\(spacing\\.5\\)\\/4_-_1\\.5px\\)\\][data-placement="top-end"]::before{\n content: var(--tw-content);\n bottom: calc(calc(1.25rem / 4 - 1.5px) * -1);\n}\n.data-\\[placement\\=top-end\\]\\:before\\:right-3[data-placement="top-end"]::before{\n content: var(--tw-content);\n right: 0.75rem;\n}\n.data-\\[placement\\=top-start\\]\\:before\\:-bottom-\\[calc\\(theme\\(spacing\\.5\\)\\/4_-_1\\.5px\\)\\][data-placement="top-start"]::before{\n content: var(--tw-content);\n bottom: calc(calc(1.25rem / 4 - 1.5px) * -1);\n}\n.data-\\[placement\\=top-start\\]\\:before\\:left-3[data-placement="top-start"]::before{\n content: var(--tw-content);\n left: 0.75rem;\n}\n.data-\\[placement\\=top\\]\\:before\\:-bottom-\\[calc\\(theme\\(spacing\\.5\\)\\/4_-_1\\.5px\\)\\][data-placement="top"]::before{\n content: var(--tw-content);\n bottom: calc(calc(1.25rem / 4 - 1.5px) * -1);\n}\n.data-\\[placement\\=top\\]\\:before\\:left-1\\/2[data-placement="top"]::before{\n content: var(--tw-content);\n left: 50%;\n}\n.data-\\[loaded\\=true\\]\\:before\\:-z-10[data-loaded="true"]::before{\n content: var(--tw-content);\n z-index: -10;\n}\n.data-\\[arrow\\=true\\]\\:before\\:block[data-arrow="true"]::before{\n content: var(--tw-content);\n display: block;\n}\n.data-\\[outside-month\\=true\\]\\:before\\:hidden[data-outside-month="true"]::before{\n content: var(--tw-content);\n display: none;\n}\n.data-\\[placement\\=bottom\\]\\:before\\:-translate-x-1\\/2[data-placement="bottom"]::before{\n content: var(--tw-content);\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[placement\\=left\\]\\:before\\:-translate-y-1\\/2[data-placement="left"]::before{\n content: var(--tw-content);\n --tw-translate-y: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[placement\\=right\\]\\:before\\:-translate-y-1\\/2[data-placement="right"]::before{\n content: var(--tw-content);\n --tw-translate-y: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[placement\\=top\\]\\:before\\:-translate-x-1\\/2[data-placement="top"]::before{\n content: var(--tw-content);\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[loaded\\=true\\]\\:before\\:animate-none[data-loaded="true"]::before{\n content: var(--tw-content);\n animation: none;\n}\n.data-\\[range-end\\=true\\]\\:before\\:rounded-r-full[data-range-end="true"]::before{\n content: var(--tw-content);\n border-top-right-radius: 9999px;\n border-bottom-right-radius: 9999px;\n}\n.data-\\[range-start\\=true\\]\\:before\\:rounded-l-full[data-range-start="true"]::before{\n content: var(--tw-content);\n border-top-left-radius: 9999px;\n border-bottom-left-radius: 9999px;\n}\n.data-\\[selection-end\\=true\\]\\:before\\:rounded-r-full[data-selection-end="true"]::before{\n content: var(--tw-content);\n border-top-right-radius: 9999px;\n border-bottom-right-radius: 9999px;\n}\n.data-\\[selection-start\\=true\\]\\:before\\:rounded-l-full[data-selection-start="true"]::before{\n content: var(--tw-content);\n border-top-left-radius: 9999px;\n border-bottom-left-radius: 9999px;\n}\n.data-\\[selected\\=true\\]\\:data-\\[range-selection\\=true\\]\\:before\\:bg-danger-50[data-range-selection="true"][data-selected="true"]::before{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-danger-50) / var(--nextui-danger-50-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[range-selection\\=true\\]\\:before\\:bg-foreground\\/10[data-range-selection="true"][data-selected="true"]::before{\n content: var(--tw-content);\n background-color: hsl(var(--nextui-foreground) / 0.1);\n}\n.data-\\[selected\\=true\\]\\:data-\\[range-selection\\=true\\]\\:before\\:bg-primary-50[data-range-selection="true"][data-selected="true"]::before{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-primary-50) / var(--nextui-primary-50-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[range-selection\\=true\\]\\:before\\:bg-secondary-50[data-range-selection="true"][data-selected="true"]::before{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-secondary-50) / var(--nextui-secondary-50-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[range-selection\\=true\\]\\:before\\:bg-success-100[data-range-selection="true"][data-selected="true"]::before{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-success-100) / var(--nextui-success-100-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:data-\\[range-selection\\=true\\]\\:before\\:bg-warning-100[data-range-selection="true"][data-selected="true"]::before{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-warning-100) / var(--nextui-warning-100-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[loaded\\=true\\]\\:before\\:opacity-0[data-loaded="true"]::before{\n content: var(--tw-content);\n opacity: 0;\n}\n.data-\\[selected\\=true\\]\\:before\\:opacity-100[data-selected="true"]::before{\n content: var(--tw-content);\n opacity: 1;\n}\n.data-\\[focus\\=true\\]\\:after\\:w-full[data-focus="true"]::after{\n content: var(--tw-content);\n width: 100%;\n}\n.data-\\[open\\=true\\]\\:after\\:w-full[data-open="true"]::after{\n content: var(--tw-content);\n width: 100%;\n}\n.data-\\[dragging\\=true\\]\\:after\\:scale-100[data-dragging="true"]::after{\n content: var(--tw-content);\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[dragging\\=true\\]\\:after\\:scale-80[data-dragging="true"]::after{\n content: var(--tw-content);\n --tw-scale-x: 0.8;\n --tw-scale-y: 0.8;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[selected\\=true\\]\\:after\\:bg-danger[data-selected="true"]::after{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:after\\:bg-foreground[data-selected="true"]::after{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-foreground) / var(--nextui-foreground-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:after\\:bg-primary[data-selected="true"]::after{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:after\\:bg-secondary[data-selected="true"]::after{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:after\\:bg-success[data-selected="true"]::after{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selected\\=true\\]\\:after\\:bg-warning[data-selected="true"]::after{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[loaded\\=true\\]\\:after\\:opacity-0[data-loaded="true"]::after{\n content: var(--tw-content);\n opacity: 0;\n}\n.data-\\[selected\\=true\\]\\:after\\:opacity-100[data-selected="true"]::after{\n content: var(--tw-content);\n opacity: 1;\n}\n.data-\\[selectable\\=true\\]\\:focus\\:border-danger:focus[data-selectable="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-border-opacity)));\n}\n.data-\\[selectable\\=true\\]\\:focus\\:border-default:focus[data-selectable="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-default) / var(--nextui-default-opacity, var(--tw-border-opacity)));\n}\n.data-\\[selectable\\=true\\]\\:focus\\:border-primary:focus[data-selectable="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-border-opacity)));\n}\n.data-\\[selectable\\=true\\]\\:focus\\:border-secondary:focus[data-selectable="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-border-opacity)));\n}\n.data-\\[selectable\\=true\\]\\:focus\\:border-success:focus[data-selectable="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-border-opacity)));\n}\n.data-\\[selectable\\=true\\]\\:focus\\:border-warning:focus[data-selectable="true"]{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-border-opacity)));\n}\n.data-\\[invalid\\=true\\]\\:focus\\:bg-danger-400\\/50:focus[data-invalid="true"]{\n background-color: hsl(var(--nextui-danger-400) / 0.5);\n}\n.data-\\[selectable\\=true\\]\\:focus\\:bg-danger:focus[data-selectable="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selectable\\=true\\]\\:focus\\:bg-danger\\/20:focus[data-selectable="true"]{\n background-color: hsl(var(--nextui-danger) / 0.2);\n}\n.data-\\[selectable\\=true\\]\\:focus\\:bg-default:focus[data-selectable="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default) / var(--nextui-default-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selectable\\=true\\]\\:focus\\:bg-default-100:focus[data-selectable="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default-100) / var(--nextui-default-100-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selectable\\=true\\]\\:focus\\:bg-default\\/40:focus[data-selectable="true"]{\n background-color: hsl(var(--nextui-default) / 0.4);\n}\n.data-\\[selectable\\=true\\]\\:focus\\:bg-primary:focus[data-selectable="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selectable\\=true\\]\\:focus\\:bg-primary\\/20:focus[data-selectable="true"]{\n background-color: hsl(var(--nextui-primary) / 0.2);\n}\n.data-\\[selectable\\=true\\]\\:focus\\:bg-secondary:focus[data-selectable="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selectable\\=true\\]\\:focus\\:bg-secondary\\/20:focus[data-selectable="true"]{\n background-color: hsl(var(--nextui-secondary) / 0.2);\n}\n.data-\\[selectable\\=true\\]\\:focus\\:bg-success:focus[data-selectable="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selectable\\=true\\]\\:focus\\:bg-success\\/20:focus[data-selectable="true"]{\n background-color: hsl(var(--nextui-success) / 0.2);\n}\n.data-\\[selectable\\=true\\]\\:focus\\:bg-warning:focus[data-selectable="true"]{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-bg-opacity)));\n}\n.data-\\[selectable\\=true\\]\\:focus\\:bg-warning\\/20:focus[data-selectable="true"]{\n background-color: hsl(var(--nextui-warning) / 0.2);\n}\n.data-\\[editable\\=true\\]\\:focus\\:text-danger:focus[data-editable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-text-opacity)));\n}\n.data-\\[editable\\=true\\]\\:focus\\:text-default-foreground:focus[data-editable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-default-foreground) / var(--nextui-default-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[editable\\=true\\]\\:focus\\:text-primary:focus[data-editable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-text-opacity)));\n}\n.data-\\[editable\\=true\\]\\:focus\\:text-secondary:focus[data-editable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-text-opacity)));\n}\n.data-\\[editable\\=true\\]\\:focus\\:text-success:focus[data-editable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-text-opacity)));\n}\n.data-\\[editable\\=true\\]\\:focus\\:text-success-600:focus[data-editable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success-600) / var(--nextui-success-600-opacity, var(--tw-text-opacity)));\n}\n.data-\\[editable\\=true\\]\\:focus\\:text-warning:focus[data-editable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-text-opacity)));\n}\n.data-\\[editable\\=true\\]\\:focus\\:text-warning-600:focus[data-editable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning-600) / var(--nextui-warning-600-opacity, var(--tw-text-opacity)));\n}\n.data-\\[invalid\\=true\\]\\:data-\\[editable\\=true\\]\\:focus\\:text-danger:focus[data-editable="true"][data-invalid="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selectable\\=true\\]\\:focus\\:text-danger:focus[data-selectable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selectable\\=true\\]\\:focus\\:text-danger-foreground:focus[data-selectable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger-foreground) / var(--nextui-danger-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selectable\\=true\\]\\:focus\\:text-default-500:focus[data-selectable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-default-500) / var(--nextui-default-500-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selectable\\=true\\]\\:focus\\:text-default-foreground:focus[data-selectable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-default-foreground) / var(--nextui-default-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selectable\\=true\\]\\:focus\\:text-primary:focus[data-selectable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selectable\\=true\\]\\:focus\\:text-primary-foreground:focus[data-selectable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-primary-foreground) / var(--nextui-primary-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selectable\\=true\\]\\:focus\\:text-secondary:focus[data-selectable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selectable\\=true\\]\\:focus\\:text-secondary-foreground:focus[data-selectable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-secondary-foreground) / var(--nextui-secondary-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selectable\\=true\\]\\:focus\\:text-success:focus[data-selectable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selectable\\=true\\]\\:focus\\:text-success-foreground:focus[data-selectable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success-foreground) / var(--nextui-success-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selectable\\=true\\]\\:focus\\:text-warning:focus[data-selectable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selectable\\=true\\]\\:focus\\:text-warning-foreground:focus[data-selectable="true"]{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning-foreground) / var(--nextui-warning-foreground-opacity, var(--tw-text-opacity)));\n}\n.data-\\[selectable\\=true\\]\\:focus\\:shadow-danger\\/30:focus[data-selectable="true"]{\n --tw-shadow-color: hsl(var(--nextui-danger) / 0.3);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.data-\\[selectable\\=true\\]\\:focus\\:shadow-default\\/50:focus[data-selectable="true"]{\n --tw-shadow-color: hsl(var(--nextui-default) / 0.5);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.data-\\[selectable\\=true\\]\\:focus\\:shadow-primary\\/30:focus[data-selectable="true"]{\n --tw-shadow-color: hsl(var(--nextui-primary) / 0.3);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.data-\\[selectable\\=true\\]\\:focus\\:shadow-secondary\\/30:focus[data-selectable="true"]{\n --tw-shadow-color: hsl(var(--nextui-secondary) / 0.3);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.data-\\[selectable\\=true\\]\\:focus\\:shadow-success\\/30:focus[data-selectable="true"]{\n --tw-shadow-color: hsl(var(--nextui-success) / 0.3);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.data-\\[selectable\\=true\\]\\:focus\\:shadow-warning\\/30:focus[data-selectable="true"]{\n --tw-shadow-color: hsl(var(--nextui-warning) / 0.3);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.group[data-filled-within="true"] .group-data-\\[filled-within\\=true\\]\\:pointer-events-auto{\n pointer-events: auto;\n}\n.group[data-filled-within="true"] .group-data-\\[filled-within\\=true\\]\\:start-0{\n inset-inline-start: 0px;\n}\n.group[data-filled="true"] .group-data-\\[filled\\=true\\]\\:start-0{\n inset-inline-start: 0px;\n}\n.group[data-focus-visible="true"] .group-data-\\[focus-visible\\=true\\]\\:z-10{\n z-index: 10;\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:ml-4{\n margin-left: 1rem;\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:ml-5{\n margin-left: 1.25rem;\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:ml-6{\n margin-left: 1.5rem;\n}\n.group[data-selected][data-pressed] .group-data-\\[selected\\]\\:group-data-\\[pressed\\]\\:ml-3{\n margin-left: 0.75rem;\n}\n.group[data-selected][data-pressed] .group-data-\\[selected\\]\\:group-data-\\[pressed\\]\\:ml-4{\n margin-left: 1rem;\n}\n.group[data-selected][data-pressed] .group-data-\\[selected\\]\\:group-data-\\[pressed\\]\\:ml-5{\n margin-left: 1.25rem;\n}\n.group[data-focus-visible="true"] .group-data-\\[focus-visible\\=true\\]\\:block{\n display: block;\n}\n.group[data-has-helper="true"] .group-data-\\[has-helper\\=true\\]\\:flex{\n display: flex;\n}\n.group[data-focus-visible="true"] .group-data-\\[focus-visible\\=true\\]\\:hidden{\n display: none;\n}\n.group[data-pressed="true"] .group-data-\\[pressed\\=true\\]\\:w-5{\n width: 1.25rem;\n}\n.group[data-pressed="true"] .group-data-\\[pressed\\=true\\]\\:w-6{\n width: 1.5rem;\n}\n.group[data-pressed="true"] .group-data-\\[pressed\\=true\\]\\:w-7{\n width: 1.75rem;\n}\n.group[data-filled-within="true"] .group-data-\\[filled-within\\=true\\]\\:-translate-y-\\[calc\\(100\\%_\\+_theme\\(fontSize\\.small\\)\\/2_\\+_20px\\)\\]{\n --tw-translate-y: calc(calc(100% + var(--nextui-font-size-small) / 2 + 20px) * -1);\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-filled-within="true"] .group-data-\\[filled-within\\=true\\]\\:-translate-y-\\[calc\\(100\\%_\\+_theme\\(fontSize\\.small\\)\\/2_\\+_24px\\)\\]{\n --tw-translate-y: calc(calc(100% + var(--nextui-font-size-small) / 2 + 24px) * -1);\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-filled-within="true"] .group-data-\\[filled-within\\=true\\]\\:-translate-y-\\[calc\\(100\\%_\\+_theme\\(fontSize\\.tiny\\)\\/2_\\+_16px\\)\\]{\n --tw-translate-y: calc(calc(100% + var(--nextui-font-size-tiny) / 2 + 16px) * -1);\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-filled-within="true"] .group-data-\\[filled-within\\=true\\]\\:-translate-y-\\[calc\\(50\\%_\\+_theme\\(fontSize\\.small\\)\\/2_-_3\\.5px\\)\\]{\n --tw-translate-y: calc(calc(50% + var(--nextui-font-size-small) / 2 - 3.5px) * -1);\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-filled-within="true"] .group-data-\\[filled-within\\=true\\]\\:-translate-y-\\[calc\\(50\\%_\\+_theme\\(fontSize\\.small\\)\\/2_-_4px\\)\\]{\n --tw-translate-y: calc(calc(50% + var(--nextui-font-size-small) / 2 - 4px) * -1);\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-filled-within="true"] .group-data-\\[filled-within\\=true\\]\\:-translate-y-\\[calc\\(50\\%_\\+_theme\\(fontSize\\.small\\)\\/2_-_6px\\)\\]{\n --tw-translate-y: calc(calc(50% + var(--nextui-font-size-small) / 2 - 6px) * -1);\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-filled-within="true"] .group-data-\\[filled-within\\=true\\]\\:-translate-y-\\[calc\\(50\\%_\\+_theme\\(fontSize\\.small\\)\\/2_-_6px_-_theme\\(borderWidth\\.medium\\)\\)\\]{\n --tw-translate-y: calc(calc(50% + var(--nextui-font-size-small) / 2 - 6px - var(--nextui-border-width-medium)) * -1);\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-filled-within="true"] .group-data-\\[filled-within\\=true\\]\\:-translate-y-\\[calc\\(50\\%_\\+_theme\\(fontSize\\.small\\)\\/2_-_8px\\)\\]{\n --tw-translate-y: calc(calc(50% + var(--nextui-font-size-small) / 2 - 8px) * -1);\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-filled-within="true"] .group-data-\\[filled-within\\=true\\]\\:-translate-y-\\[calc\\(50\\%_\\+_theme\\(fontSize\\.small\\)\\/2_-_8px_-_theme\\(borderWidth\\.medium\\)\\)\\]{\n --tw-translate-y: calc(calc(50% + var(--nextui-font-size-small) / 2 - 8px - var(--nextui-border-width-medium)) * -1);\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-filled-within="true"] .group-data-\\[filled-within\\=true\\]\\:-translate-y-\\[calc\\(50\\%_\\+_theme\\(fontSize\\.tiny\\)\\/2_-_5px\\)\\]{\n --tw-translate-y: calc(calc(50% + var(--nextui-font-size-tiny) / 2 - 5px) * -1);\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-filled-within="true"] .group-data-\\[filled-within\\=true\\]\\:-translate-y-\\[calc\\(50\\%_\\+_theme\\(fontSize\\.tiny\\)\\/2_-_8px\\)\\]{\n --tw-translate-y: calc(calc(50% + var(--nextui-font-size-tiny) / 2 - 8px) * -1);\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-filled-within="true"] .group-data-\\[filled-within\\=true\\]\\:-translate-y-\\[calc\\(50\\%_\\+_theme\\(fontSize\\.tiny\\)\\/2_-_8px_-_theme\\(borderWidth\\.medium\\)\\)\\]{\n --tw-translate-y: calc(calc(50% + var(--nextui-font-size-tiny) / 2 - 8px - var(--nextui-border-width-medium)) * -1);\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-filled="true"] .group-data-\\[filled\\=true\\]\\:-translate-y-\\[calc\\(100\\%_\\+_theme\\(fontSize\\.small\\)\\/2_\\+_20px\\)\\]{\n --tw-translate-y: calc(calc(100% + var(--nextui-font-size-small) / 2 + 20px) * -1);\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-filled="true"] .group-data-\\[filled\\=true\\]\\:-translate-y-\\[calc\\(100\\%_\\+_theme\\(fontSize\\.small\\)\\/2_\\+_24px\\)\\]{\n --tw-translate-y: calc(calc(100% + var(--nextui-font-size-small) / 2 + 24px) * -1);\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-filled="true"] .group-data-\\[filled\\=true\\]\\:-translate-y-\\[calc\\(100\\%_\\+_theme\\(fontSize\\.tiny\\)\\/2_\\+_16px\\)\\]{\n --tw-translate-y: calc(calc(100% + var(--nextui-font-size-tiny) / 2 + 16px) * -1);\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-filled="true"] .group-data-\\[filled\\=true\\]\\:-translate-y-\\[calc\\(50\\%_\\+_theme\\(fontSize\\.small\\)\\/2_-_3\\.5px\\)\\]{\n --tw-translate-y: calc(calc(50% + var(--nextui-font-size-small) / 2 - 3.5px) * -1);\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-filled="true"] .group-data-\\[filled\\=true\\]\\:-translate-y-\\[calc\\(50\\%_\\+_theme\\(fontSize\\.small\\)\\/2_-_4px\\)\\]{\n --tw-translate-y: calc(calc(50% + var(--nextui-font-size-small) / 2 - 4px) * -1);\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-filled="true"] .group-data-\\[filled\\=true\\]\\:-translate-y-\\[calc\\(50\\%_\\+_theme\\(fontSize\\.small\\)\\/2_-_6px\\)\\]{\n --tw-translate-y: calc(calc(50% + var(--nextui-font-size-small) / 2 - 6px) * -1);\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-filled="true"] .group-data-\\[filled\\=true\\]\\:-translate-y-\\[calc\\(50\\%_\\+_theme\\(fontSize\\.small\\)\\/2_-_6px_-_theme\\(borderWidth\\.medium\\)\\)\\]{\n --tw-translate-y: calc(calc(50% + var(--nextui-font-size-small) / 2 - 6px - var(--nextui-border-width-medium)) * -1);\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-filled="true"] .group-data-\\[filled\\=true\\]\\:-translate-y-\\[calc\\(50\\%_\\+_theme\\(fontSize\\.small\\)\\/2_-_8px\\)\\]{\n --tw-translate-y: calc(calc(50% + var(--nextui-font-size-small) / 2 - 8px) * -1);\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-filled="true"] .group-data-\\[filled\\=true\\]\\:-translate-y-\\[calc\\(50\\%_\\+_theme\\(fontSize\\.small\\)\\/2_-_8px_-_theme\\(borderWidth\\.medium\\)\\)\\]{\n --tw-translate-y: calc(calc(50% + var(--nextui-font-size-small) / 2 - 8px - var(--nextui-border-width-medium)) * -1);\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-filled="true"] .group-data-\\[filled\\=true\\]\\:-translate-y-\\[calc\\(50\\%_\\+_theme\\(fontSize\\.tiny\\)\\/2_-_5px\\)\\]{\n --tw-translate-y: calc(calc(50% + var(--nextui-font-size-tiny) / 2 - 5px) * -1);\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-filled="true"] .group-data-\\[filled\\=true\\]\\:-translate-y-\\[calc\\(50\\%_\\+_theme\\(fontSize\\.tiny\\)\\/2_-_8px\\)\\]{\n --tw-translate-y: calc(calc(50% + var(--nextui-font-size-tiny) / 2 - 8px) * -1);\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-filled="true"] .group-data-\\[filled\\=true\\]\\:-translate-y-\\[calc\\(50\\%_\\+_theme\\(fontSize\\.tiny\\)\\/2_-_8px_-_theme\\(borderWidth\\.medium\\)\\)\\]{\n --tw-translate-y: calc(calc(50% + var(--nextui-font-size-tiny) / 2 - 8px - var(--nextui-border-width-medium)) * -1);\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:translate-x-3{\n --tw-translate-x: 0.75rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-copied="true"] .group-data-\\[copied\\=true\\]\\:scale-100{\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-copied="true"] .group-data-\\[copied\\=true\\]\\:scale-50{\n --tw-scale-x: .5;\n --tw-scale-y: .5;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-filled-within="true"] .group-data-\\[filled-within\\=true\\]\\:scale-85{\n --tw-scale-x: 0.85;\n --tw-scale-y: 0.85;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-filled="true"] .group-data-\\[filled\\=true\\]\\:scale-85{\n --tw-scale-x: 0.85;\n --tw-scale-y: 0.85;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-pressed="true"] .group-data-\\[pressed\\=true\\]\\:scale-95{\n --tw-scale-x: .95;\n --tw-scale-y: .95;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:scale-100{\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-disabled="true"] .group-data-\\[disabled\\=true\\]\\:cursor-not-allowed{\n cursor: not-allowed;\n}\n.group[data-has-multiple-months="true"] .group-data-\\[has-multiple-months\\=true\\]\\:flex-row{\n flex-direction: row;\n}\n.group[data-has-label="true"] .group-data-\\[has-label\\=true\\]\\:items-start{\n align-items: flex-start;\n}\n.group[data-has-label="true"] .group-data-\\[has-label\\=true\\]\\:items-end{\n align-items: flex-end;\n}\n.group[data-focus="true"] .group-data-\\[focus\\=true\\]\\:\\!border-danger{\n --tw-border-opacity: 1 !important;\n border-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-border-opacity))) !important;\n}\n.group[data-focus="true"] .group-data-\\[focus\\=true\\]\\:border-danger{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-border-opacity)));\n}\n.group[data-focus="true"] .group-data-\\[focus\\=true\\]\\:border-default-foreground{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-default-foreground) / var(--nextui-default-foreground-opacity, var(--tw-border-opacity)));\n}\n.group[data-focus="true"] .group-data-\\[focus\\=true\\]\\:border-primary{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-border-opacity)));\n}\n.group[data-focus="true"] .group-data-\\[focus\\=true\\]\\:border-secondary{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-border-opacity)));\n}\n.group[data-focus="true"] .group-data-\\[focus\\=true\\]\\:border-success{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-border-opacity)));\n}\n.group[data-focus="true"] .group-data-\\[focus\\=true\\]\\:border-warning{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-border-opacity)));\n}\n.group[data-invalid="true"] .group-data-\\[invalid\\=true\\]\\:border-danger{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-border-opacity)));\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:border-danger{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-border-opacity)));\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:border-default-500{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-default-500) / var(--nextui-default-500-opacity, var(--tw-border-opacity)));\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:border-primary{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-border-opacity)));\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:border-secondary{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-border-opacity)));\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:border-success{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-border-opacity)));\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:border-warning{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-border-opacity)));\n}\n.group[data-focus="true"] .group-data-\\[focus\\=true\\]\\:\\!bg-danger-50{\n --tw-bg-opacity: 1 !important;\n background-color: hsl(var(--nextui-danger-50) / var(--nextui-danger-50-opacity, var(--tw-bg-opacity))) !important;\n}\n.group[data-focus="true"] .group-data-\\[focus\\=true\\]\\:bg-danger-50{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-danger-50) / var(--nextui-danger-50-opacity, var(--tw-bg-opacity)));\n}\n.group[data-focus="true"] .group-data-\\[focus\\=true\\]\\:bg-default-100{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default-100) / var(--nextui-default-100-opacity, var(--tw-bg-opacity)));\n}\n.group[data-focus="true"] .group-data-\\[focus\\=true\\]\\:bg-primary-50{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-primary-50) / var(--nextui-primary-50-opacity, var(--tw-bg-opacity)));\n}\n.group[data-focus="true"] .group-data-\\[focus\\=true\\]\\:bg-secondary-50{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-secondary-50) / var(--nextui-secondary-50-opacity, var(--tw-bg-opacity)));\n}\n.group[data-focus="true"] .group-data-\\[focus\\=true\\]\\:bg-success-50{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-success-50) / var(--nextui-success-50-opacity, var(--tw-bg-opacity)));\n}\n.group[data-focus="true"] .group-data-\\[focus\\=true\\]\\:bg-warning-50{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-warning-50) / var(--nextui-warning-50-opacity, var(--tw-bg-opacity)));\n}\n.group[data-hover-unselected="true"] .group-data-\\[hover-unselected\\=true\\]\\:bg-default-100{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default-100) / var(--nextui-default-100-opacity, var(--tw-bg-opacity)));\n}\n.group[data-invalid="true"] .group-data-\\[invalid\\=true\\]\\:bg-danger-50{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-danger-50) / var(--nextui-danger-50-opacity, var(--tw-bg-opacity)));\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:bg-danger{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-bg-opacity)));\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:bg-default-400{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default-400) / var(--nextui-default-400-opacity, var(--tw-bg-opacity)));\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:bg-primary{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-bg-opacity)));\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:bg-secondary{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-bg-opacity)));\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:bg-success{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-bg-opacity)));\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:bg-warning{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-bg-opacity)));\n}\n.group[data-has-helper="true"] .group-data-\\[has-helper\\=true\\]\\:pt-2{\n padding-top: 0.5rem;\n}\n.group[data-has-helper="true"] .group-data-\\[has-helper\\=true\\]\\:pt-3{\n padding-top: 0.75rem;\n}\n.group[data-has-helper="true"] .group-data-\\[has-helper\\=true\\]\\:pt-4{\n padding-top: 1rem;\n}\n.group[data-has-label="true"] .group-data-\\[has-label\\=true\\]\\:pt-4{\n padding-top: 1rem;\n}\n.group[data-has-label="true"] .group-data-\\[has-label\\=true\\]\\:pt-5{\n padding-top: 1.25rem;\n}\n.group[data-disabled="true"] .group-data-\\[disabled\\=true\\]\\:text-foreground-300{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-foreground-300) / var(--nextui-foreground-300-opacity, var(--tw-text-opacity)));\n}\n.group[data-filled-within="true"] .group-data-\\[filled-within\\=true\\]\\:text-default-600{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-default-600) / var(--nextui-default-600-opacity, var(--tw-text-opacity)));\n}\n.group[data-filled-within="true"] .group-data-\\[filled-within\\=true\\]\\:text-foreground{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-foreground) / var(--nextui-foreground-opacity, var(--tw-text-opacity)));\n}\n.group[data-filled="true"] .group-data-\\[filled\\=true\\]\\:text-default-600{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-default-600) / var(--nextui-default-600-opacity, var(--tw-text-opacity)));\n}\n.group[data-filled="true"] .group-data-\\[filled\\=true\\]\\:text-foreground{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-foreground) / var(--nextui-foreground-opacity, var(--tw-text-opacity)));\n}\n.group[data-has-value="true"] .group-data-\\[has-value\\=true\\]\\:text-default-foreground{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-default-foreground) / var(--nextui-default-foreground-opacity, var(--tw-text-opacity)));\n}\n.group[data-has-value="true"] .group-data-\\[has-value\\=true\\]\\:text-foreground{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-foreground) / var(--nextui-foreground-opacity, var(--tw-text-opacity)));\n}\n.group[data-invalid="true"] .group-data-\\[invalid\\=true\\]\\:text-danger{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-text-opacity)));\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:text-danger{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-text-opacity)));\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:text-danger-foreground{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger-foreground) / var(--nextui-danger-foreground-opacity, var(--tw-text-opacity)));\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:text-default-foreground{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-default-foreground) / var(--nextui-default-foreground-opacity, var(--tw-text-opacity)));\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:text-foreground{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-foreground) / var(--nextui-foreground-opacity, var(--tw-text-opacity)));\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:text-primary{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-primary) / var(--nextui-primary-opacity, var(--tw-text-opacity)));\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:text-primary-foreground{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-primary-foreground) / var(--nextui-primary-foreground-opacity, var(--tw-text-opacity)));\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:text-secondary{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-secondary) / var(--nextui-secondary-opacity, var(--tw-text-opacity)));\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:text-secondary-foreground{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-secondary-foreground) / var(--nextui-secondary-foreground-opacity, var(--tw-text-opacity)));\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:text-success{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-text-opacity)));\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:text-success-foreground{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success-foreground) / var(--nextui-success-foreground-opacity, var(--tw-text-opacity)));\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:text-warning{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-text-opacity)));\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:text-warning-foreground{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning-foreground) / var(--nextui-warning-foreground-opacity, var(--tw-text-opacity)));\n}\n.group[data-copied="true"] .group-data-\\[copied\\=true\\]\\:opacity-0{\n opacity: 0;\n}\n.group[data-copied="true"] .group-data-\\[copied\\=true\\]\\:opacity-100{\n opacity: 1;\n}\n.group[data-hover="true"] .group-data-\\[hover\\=true\\]\\:opacity-100{\n opacity: 1;\n}\n.group[data-loaded="true"] .group-data-\\[loaded\\=true\\]\\:opacity-100{\n opacity: 1;\n}\n.group[data-pressed="true"] .group-data-\\[pressed\\=true\\]\\:opacity-70{\n opacity: 0.7;\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:opacity-0{\n opacity: 0;\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:opacity-100{\n opacity: 1;\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:opacity-60{\n opacity: 0.6;\n}\n.group[data-focus-visible="true"] .group-data-\\[focus-visible\\=true\\]\\:ring-2{\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.group[data-focus-visible="true"] .group-data-\\[focus-visible\\=true\\]\\:ring-focus{\n --tw-ring-opacity: 1;\n --tw-ring-color: hsl(var(--nextui-focus) / var(--nextui-focus-opacity, var(--tw-ring-opacity)));\n}\n.group[data-focus-visible="true"] .group-data-\\[focus-visible\\=true\\]\\:ring-offset-2{\n --tw-ring-offset-width: 2px;\n}\n.group[data-focus-visible="true"] .group-data-\\[focus-visible\\=true\\]\\:ring-offset-background{\n --tw-ring-offset-color: hsl(var(--nextui-background) / var(--nextui-background-opacity, 1));\n}\n.group[data-odd="true"] .group-data-\\[odd\\=true\\]\\:before\\:-z-10::before{\n content: var(--tw-content);\n z-index: -10;\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:before\\:w-full::before{\n content: var(--tw-content);\n width: 100%;\n}\n.group[data-open="true"] .group-data-\\[open\\=true\\]\\:before\\:translate-y-px::before{\n content: var(--tw-content);\n --tw-translate-y: 1px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-open="true"] .group-data-\\[open\\=true\\]\\:before\\:rotate-45::before{\n content: var(--tw-content);\n --tw-rotate: 45deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-middle="true"] .group-data-\\[middle\\=true\\]\\:before\\:rounded-none::before{\n content: var(--tw-content);\n border-radius: 0px;\n}\n.group[data-hover="true"] .group-data-\\[hover\\=true\\]\\:before\\:bg-default-100::before{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default-100) / var(--nextui-default-100-opacity, var(--tw-bg-opacity)));\n}\n.group[data-odd="true"] .group-data-\\[odd\\=true\\]\\:before\\:bg-default-100::before{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default-100) / var(--nextui-default-100-opacity, var(--tw-bg-opacity)));\n}\n.group[data-odd="true"] .group-data-\\[odd\\=true\\]\\:before\\:opacity-100::before{\n content: var(--tw-content);\n opacity: 1;\n}\n.group[data-required="true"] .group-data-\\[required\\=true\\]\\:after\\:ml-0\\.5::after{\n content: var(--tw-content);\n margin-left: 0.125rem;\n}\n.group[data-focus="true"] .group-data-\\[focus\\=true\\]\\:after\\:w-full::after{\n content: var(--tw-content);\n width: 100%;\n}\n.group[data-open="true"] .group-data-\\[open\\=true\\]\\:after\\:translate-y-0::after{\n content: var(--tw-content);\n --tw-translate-y: 0px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-open="true"] .group-data-\\[open\\=true\\]\\:after\\:-rotate-45::after{\n content: var(--tw-content);\n --tw-rotate: -45deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:after\\:scale-100::after{\n content: var(--tw-content);\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-invalid="true"] .group-data-\\[invalid\\=true\\]\\:after\\:bg-danger::after{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-bg-opacity)));\n}\n.group[data-required="true"] .group-data-\\[required\\=true\\]\\:after\\:text-danger::after{\n content: var(--tw-content);\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-text-opacity)));\n}\n.group[data-selected="true"] .group-data-\\[selected\\=true\\]\\:after\\:opacity-100::after{\n content: var(--tw-content);\n opacity: 1;\n}\n.group[data-required="true"] .group-data-\\[required\\=true\\]\\:after\\:content-\\[\\\'\\*\\\'\\]::after{\n --tw-content: \'*\';\n content: var(--tw-content);\n}\n.group[data-invalid="true"] .group-data-\\[invalid\\=true\\]\\:hover\\:border-danger:hover{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-border-opacity)));\n}\n.group[data-invalid="true"] .group-data-\\[invalid\\=true\\]\\:hover\\:bg-danger-100:hover{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-danger-100) / var(--nextui-danger-100-opacity, var(--tw-bg-opacity)));\n}\n.group[data-invalid="true"] .group-data-\\[invalid\\=true\\]\\:focus-within\\:hover\\:border-danger:hover:focus-within{\n --tw-border-opacity: 1;\n border-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-border-opacity)));\n}\n.group[data-invalid="true"] .group-data-\\[invalid\\=true\\]\\:focus-within\\:hover\\:bg-danger-50:hover:focus-within{\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-danger-50) / var(--nextui-danger-50-opacity, var(--tw-bg-opacity)));\n}\n.group[aria-selected="false"][data-hover="true"] .group-aria-\\[selected\\=false\\]\\:group-data-\\[hover\\=true\\]\\:before\\:bg-default-100::before{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default-100) / var(--nextui-default-100-opacity, var(--tw-bg-opacity)));\n}\n.group[aria-selected="false"][data-hover="true"] .group-aria-\\[selected\\=false\\]\\:group-data-\\[hover\\=true\\]\\:before\\:opacity-70::before{\n content: var(--tw-content);\n opacity: 0.7;\n}\n.group[data-odd="true"] .group-data-\\[odd\\=true\\]\\:data-\\[selected\\=true\\]\\:before\\:bg-danger\\/20[data-selected="true"]::before{\n content: var(--tw-content);\n background-color: hsl(var(--nextui-danger) / 0.2);\n}\n.group[data-odd="true"] .group-data-\\[odd\\=true\\]\\:data-\\[selected\\=true\\]\\:before\\:bg-default\\/60[data-selected="true"]::before{\n content: var(--tw-content);\n background-color: hsl(var(--nextui-default) / 0.6);\n}\n.group[data-odd="true"] .group-data-\\[odd\\=true\\]\\:data-\\[selected\\=true\\]\\:before\\:bg-primary\\/20[data-selected="true"]::before{\n content: var(--tw-content);\n background-color: hsl(var(--nextui-primary) / 0.2);\n}\n.group[data-odd="true"] .group-data-\\[odd\\=true\\]\\:data-\\[selected\\=true\\]\\:before\\:bg-secondary\\/20[data-selected="true"]::before{\n content: var(--tw-content);\n background-color: hsl(var(--nextui-secondary) / 0.2);\n}\n.group[data-odd="true"] .group-data-\\[odd\\=true\\]\\:data-\\[selected\\=true\\]\\:before\\:bg-success\\/20[data-selected="true"]::before{\n content: var(--tw-content);\n background-color: hsl(var(--nextui-success) / 0.2);\n}\n.group[data-odd="true"] .group-data-\\[odd\\=true\\]\\:data-\\[selected\\=true\\]\\:before\\:bg-warning\\/20[data-selected="true"]::before{\n content: var(--tw-content);\n background-color: hsl(var(--nextui-warning) / 0.2);\n}\n.peer[data-filled="true"] ~ .peer-data-\\[filled\\=true\\]\\:block{\n display: block;\n}\n.peer[data-filled="true"] ~ .peer-data-\\[filled\\=true\\]\\:opacity-70{\n opacity: 0.7;\n}\n@media (prefers-reduced-motion: reduce){\n .motion-reduce\\:transition-none{\n transition-property: none;\n }\n .motion-reduce\\:after\\:transition-none::after{\n content: var(--tw-content);\n transition-property: none;\n }\n}\n.dark\\:bg-background:is(.dark *){\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-background) / var(--nextui-background-opacity, var(--tw-bg-opacity)));\n}\n.dark\\:bg-background\\/20:is(.dark *){\n background-color: hsl(var(--nextui-background) / 0.2);\n}\n.dark\\:bg-content2:is(.dark *){\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-content2) / var(--nextui-content2-opacity, var(--tw-bg-opacity)));\n}\n.dark\\:bg-default:is(.dark *){\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default) / var(--nextui-default-opacity, var(--tw-bg-opacity)));\n}\n.dark\\:bg-transparent:is(.dark *){\n background-color: transparent;\n}\n.dark\\:text-danger-500:is(.dark *){\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger-500) / var(--nextui-danger-500-opacity, var(--tw-text-opacity)));\n}\n.dark\\:text-success:is(.dark *){\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-text-opacity)));\n}\n.dark\\:text-warning:is(.dark *){\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-text-opacity)));\n}\n.dark\\:placeholder\\:text-danger-500:is(.dark *)::placeholder{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger-500) / var(--nextui-danger-500-opacity, var(--tw-text-opacity)));\n}\n.dark\\:placeholder\\:text-success:is(.dark *)::placeholder{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-text-opacity)));\n}\n.dark\\:placeholder\\:text-warning:is(.dark *)::placeholder{\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-text-opacity)));\n}\n.dark\\:before\\:via-default-700\\/10:is(.dark *)::before{\n content: var(--tw-content);\n --tw-gradient-to: hsl(var(--nextui-default-700) / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), hsl(var(--nextui-default-700) / 0.1) var(--tw-gradient-via-position), var(--tw-gradient-to);\n}\n.dark\\:after\\:bg-content2:is(.dark *)::after{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-content2) / var(--nextui-content2-opacity, var(--tw-bg-opacity)));\n}\n.dark\\:focus\\:bg-danger-400\\/20:focus:is(.dark *){\n background-color: hsl(var(--nextui-danger-400) / 0.2);\n}\n.dark\\:focus\\:bg-success-400\\/20:focus:is(.dark *){\n background-color: hsl(var(--nextui-success-400) / 0.2);\n}\n.dark\\:focus\\:bg-warning-400\\/20:focus:is(.dark *){\n background-color: hsl(var(--nextui-warning-400) / 0.2);\n}\n.dark\\:data-\\[hover\\=true\\]\\:bg-content2[data-hover="true"]:is(.dark *){\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-content2) / var(--nextui-content2-opacity, var(--tw-bg-opacity)));\n}\n.dark\\:data-\\[hover\\=true\\]\\:bg-danger-50[data-hover="true"]:is(.dark *){\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-danger-50) / var(--nextui-danger-50-opacity, var(--tw-bg-opacity)));\n}\n.dark\\:data-\\[hover\\=true\\]\\:bg-success-50[data-hover="true"]:is(.dark *){\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-success-50) / var(--nextui-success-50-opacity, var(--tw-bg-opacity)));\n}\n.dark\\:data-\\[hover\\=true\\]\\:bg-warning-50[data-hover="true"]:is(.dark *){\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-warning-50) / var(--nextui-warning-50-opacity, var(--tw-bg-opacity)));\n}\n.dark\\:data-\\[selected\\=true\\]\\:data-\\[hover\\=true\\]\\:bg-danger[data-hover="true"][data-selected="true"]:is(.dark *){\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-danger) / var(--nextui-danger-opacity, var(--tw-bg-opacity)));\n}\n.dark\\:data-\\[selected\\=true\\]\\:data-\\[hover\\=true\\]\\:bg-success[data-hover="true"][data-selected="true"]:is(.dark *){\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-bg-opacity)));\n}\n.dark\\:data-\\[selected\\=true\\]\\:data-\\[hover\\=true\\]\\:bg-warning[data-hover="true"][data-selected="true"]:is(.dark *){\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-bg-opacity)));\n}\n.dark\\:data-\\[hover\\=true\\]\\:text-danger-500[data-hover="true"]:is(.dark *){\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger-500) / var(--nextui-danger-500-opacity, var(--tw-text-opacity)));\n}\n.dark\\:data-\\[hover\\=true\\]\\:text-success-500[data-hover="true"]:is(.dark *){\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success-500) / var(--nextui-success-500-opacity, var(--tw-text-opacity)));\n}\n.dark\\:data-\\[hover\\=true\\]\\:text-warning-500[data-hover="true"]:is(.dark *){\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning-500) / var(--nextui-warning-500-opacity, var(--tw-text-opacity)));\n}\n.dark\\:data-\\[selected\\=true\\]\\:data-\\[hover\\=true\\]\\:text-danger-foreground[data-hover="true"][data-selected="true"]:is(.dark *){\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger-foreground) / var(--nextui-danger-foreground-opacity, var(--tw-text-opacity)));\n}\n.dark\\:data-\\[selected\\=true\\]\\:data-\\[hover\\=true\\]\\:text-success-foreground[data-hover="true"][data-selected="true"]:is(.dark *){\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success-foreground) / var(--nextui-success-foreground-opacity, var(--tw-text-opacity)));\n}\n.dark\\:data-\\[selected\\=true\\]\\:data-\\[hover\\=true\\]\\:text-warning-foreground[data-hover="true"][data-selected="true"]:is(.dark *){\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning-foreground) / var(--nextui-warning-foreground-opacity, var(--tw-text-opacity)));\n}\n.dark\\:data-\\[selected\\=true\\]\\:data-\\[range-selection\\=true\\]\\:text-success-500[data-range-selection="true"][data-selected="true"]:is(.dark *){\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success-500) / var(--nextui-success-500-opacity, var(--tw-text-opacity)));\n}\n.dark\\:data-\\[selected\\=true\\]\\:data-\\[selection-end\\=true\\]\\:data-\\[range-selection\\=true\\]\\:text-success-foreground[data-range-selection="true"][data-selection-end="true"][data-selected="true"]:is(.dark *){\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success-foreground) / var(--nextui-success-foreground-opacity, var(--tw-text-opacity)));\n}\n.dark\\:data-\\[selected\\=true\\]\\:data-\\[selection-start\\=true\\]\\:data-\\[range-selection\\=true\\]\\:text-success-foreground[data-range-selection="true"][data-selection-start="true"][data-selected="true"]:is(.dark *){\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success-foreground) / var(--nextui-success-foreground-opacity, var(--tw-text-opacity)));\n}\n.dark\\:data-\\[selected\\=true\\]\\:text-danger-500[data-selected="true"]:is(.dark *){\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-danger-500) / var(--nextui-danger-500-opacity, var(--tw-text-opacity)));\n}\n.dark\\:data-\\[selected\\=true\\]\\:text-success[data-selected="true"]:is(.dark *){\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-success) / var(--nextui-success-opacity, var(--tw-text-opacity)));\n}\n.dark\\:data-\\[selected\\=true\\]\\:text-warning[data-selected="true"]:is(.dark *){\n --tw-text-opacity: 1;\n color: hsl(var(--nextui-warning) / var(--nextui-warning-opacity, var(--tw-text-opacity)));\n}\n.dark\\:data-\\[selected\\=true\\]\\:data-\\[range-selection\\=true\\]\\:before\\:bg-success-50[data-range-selection="true"][data-selected="true"]:is(.dark *)::before{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-success-50) / var(--nextui-success-50-opacity, var(--tw-bg-opacity)));\n}\n.dark\\:data-\\[selected\\=true\\]\\:data-\\[range-selection\\=true\\]\\:before\\:bg-warning-50[data-range-selection="true"][data-selected="true"]:is(.dark *)::before{\n content: var(--tw-content);\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-warning-50) / var(--nextui-warning-50-opacity, var(--tw-bg-opacity)));\n}\n.dark\\:data-\\[invalid\\=true\\]\\:focus\\:bg-danger-400\\/20:focus[data-invalid="true"]:is(.dark *){\n background-color: hsl(var(--nextui-danger-400) / 0.2);\n}\n@media (min-width: 640px){\n .sm\\:mx-0{\n margin-left: 0px;\n margin-right: 0px;\n }\n .sm\\:mx-6{\n margin-left: 1.5rem;\n margin-right: 1.5rem;\n }\n .sm\\:my-0{\n margin-top: 0px;\n margin-bottom: 0px;\n }\n .sm\\:my-16{\n margin-top: 4rem;\n margin-bottom: 4rem;\n }\n .sm\\:items-start{\n align-items: flex-start;\n }\n .sm\\:items-end{\n align-items: flex-end;\n }\n .sm\\:items-center{\n align-items: center;\n }\n .sm\\:\\[--scale-enter\\:100\\%\\]{\n --scale-enter: 100%;\n }\n .sm\\:\\[--scale-exit\\:103\\%\\]{\n --scale-exit: 103%;\n }\n .sm\\:\\[--slide-enter\\:0px\\]{\n --slide-enter: 0px;\n }\n .sm\\:\\[--slide-exit\\:0px\\]{\n --slide-exit: 0px;\n }\n .sm\\:data-\\[visible\\=true\\]\\:pointer-events-none[data-visible="true"]{\n pointer-events: none;\n }\n .sm\\:data-\\[visible\\=true\\]\\:opacity-0[data-visible="true"]{\n opacity: 0;\n }\n .group[data-hover="true"] .sm\\:group-data-\\[hover\\=true\\]\\:data-\\[visible\\=true\\]\\:pointer-events-auto[data-visible="true"]{\n pointer-events: auto;\n }\n .group[data-hover="true"] .sm\\:group-data-\\[hover\\=true\\]\\:data-\\[visible\\=true\\]\\:opacity-100[data-visible="true"]{\n opacity: 1;\n }\n}\n.rtl\\:left-1:where([dir="rtl"], [dir="rtl"] *){\n left: 0.25rem;\n}\n.rtl\\:left-1\\.5:where([dir="rtl"], [dir="rtl"] *){\n left: 0.375rem;\n}\n.rtl\\:left-\\[unset\\]:where([dir="rtl"], [dir="rtl"] *){\n left: unset;\n}\n.rtl\\:right-0:where([dir="rtl"], [dir="rtl"] *){\n right: 0px;\n}\n.rtl\\:right-1\\.5:where([dir="rtl"], [dir="rtl"] *){\n right: 0.375rem;\n}\n.rtl\\:right-\\[unset\\]:where([dir="rtl"], [dir="rtl"] *){\n right: unset;\n}\n.rtl\\:ml-2:where([dir="rtl"], [dir="rtl"] *){\n margin-left: 0.5rem;\n}\n.rtl\\:ml-\\[unset\\]:where([dir="rtl"], [dir="rtl"] *){\n margin-left: unset;\n}\n.rtl\\:mr-2:where([dir="rtl"], [dir="rtl"] *){\n margin-right: 0.5rem;\n}\n.rtl\\:mr-\\[unset\\]:where([dir="rtl"], [dir="rtl"] *){\n margin-right: unset;\n}\n.rtl\\:origin-top-right:where([dir="rtl"], [dir="rtl"] *){\n transform-origin: top right;\n}\n.rtl\\:-rotate-180:where([dir="rtl"], [dir="rtl"] *){\n --tw-rotate: -180deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rtl\\:flex-row-reverse:where([dir="rtl"], [dir="rtl"] *){\n flex-direction: row-reverse;\n}\n.rtl\\:space-x-reverse:where([dir="rtl"], [dir="rtl"] *) > :not([hidden]) ~ :not([hidden]){\n --tw-space-x-reverse: 1;\n}\n.rtl\\:pl-6:where([dir="rtl"], [dir="rtl"] *){\n padding-left: 1.5rem;\n}\n.rtl\\:pr-0:where([dir="rtl"], [dir="rtl"] *){\n padding-right: 0px;\n}\n.rtl\\:text-right:where([dir="rtl"], [dir="rtl"] *){\n text-align: right;\n}\n.rtl\\:after\\:ml-\\[unset\\]:where([dir="rtl"], [dir="rtl"] *)::after{\n content: var(--tw-content);\n margin-left: unset;\n}\n.rtl\\:after\\:mr-0\\.5:where([dir="rtl"], [dir="rtl"] *)::after{\n content: var(--tw-content);\n margin-right: 0.125rem;\n}\n.rtl\\:data-\\[focus-visible\\=true\\]\\:translate-x-3[data-focus-visible="true"]:where([dir="rtl"], [dir="rtl"] *){\n --tw-translate-x: 0.75rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rtl\\:data-\\[hover\\=true\\]\\:translate-x-3[data-hover="true"]:where([dir="rtl"], [dir="rtl"] *){\n --tw-translate-x: 0.75rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rtl\\:data-\\[open\\=true\\]\\:-rotate-90[data-open="true"]:where([dir="rtl"], [dir="rtl"] *){\n --tw-rotate: -90deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group[data-selected="true"] .rtl\\:group-data-\\[selected\\=true\\]\\:ml-0:where([dir="rtl"], [dir="rtl"] *){\n margin-left: 0px;\n}\n.group[data-selected="true"] .rtl\\:group-data-\\[selected\\=true\\]\\:mr-4:where([dir="rtl"], [dir="rtl"] *){\n margin-right: 1rem;\n}\n.group[data-selected="true"] .rtl\\:group-data-\\[selected\\=true\\]\\:mr-5:where([dir="rtl"], [dir="rtl"] *){\n margin-right: 1.25rem;\n}\n.group[data-selected="true"] .rtl\\:group-data-\\[selected\\=true\\]\\:mr-6:where([dir="rtl"], [dir="rtl"] *){\n margin-right: 1.5rem;\n}\n.\\[\\&\\+\\.border-medium\\.border-danger\\]\\:ms-\\[calc\\(theme\\(borderWidth\\.medium\\)\\*-1\\)\\]+.border-medium.border-danger{\n margin-inline-start: calc(var(--nextui-border-width-medium) * -1);\n}\n.\\[\\&\\+\\.border-medium\\.border-default\\]\\:ms-\\[calc\\(theme\\(borderWidth\\.medium\\)\\*-1\\)\\]+.border-medium.border-default{\n margin-inline-start: calc(var(--nextui-border-width-medium) * -1);\n}\n.\\[\\&\\+\\.border-medium\\.border-primary\\]\\:ms-\\[calc\\(theme\\(borderWidth\\.medium\\)\\*-1\\)\\]+.border-medium.border-primary{\n margin-inline-start: calc(var(--nextui-border-width-medium) * -1);\n}\n.\\[\\&\\+\\.border-medium\\.border-secondary\\]\\:ms-\\[calc\\(theme\\(borderWidth\\.medium\\)\\*-1\\)\\]+.border-medium.border-secondary{\n margin-inline-start: calc(var(--nextui-border-width-medium) * -1);\n}\n.\\[\\&\\+\\.border-medium\\.border-success\\]\\:ms-\\[calc\\(theme\\(borderWidth\\.medium\\)\\*-1\\)\\]+.border-medium.border-success{\n margin-inline-start: calc(var(--nextui-border-width-medium) * -1);\n}\n.\\[\\&\\+\\.border-medium\\.border-warning\\]\\:ms-\\[calc\\(theme\\(borderWidth\\.medium\\)\\*-1\\)\\]+.border-medium.border-warning{\n margin-inline-start: calc(var(--nextui-border-width-medium) * -1);\n}\n.\\[\\&\\:not\\(\\:first-child\\)\\:not\\(\\:last-child\\)\\]\\:rounded-none:not(:first-child):not(:last-child){\n border-radius: 0px;\n}\n.\\[\\&\\:not\\(\\:first-child\\)\\]\\:-ml-1:not(:first-child){\n margin-left: -0.25rem;\n}\n.\\[\\&\\:not\\(\\:first-of-type\\)\\:not\\(\\:last-of-type\\)\\]\\:rounded-none:not(:first-of-type):not(:last-of-type){\n border-radius: 0px;\n}\n.\\[\\&\\:not\\(\\:first-of-type\\)\\]\\:ms-\\[calc\\(theme\\(borderWidth\\.2\\)\\*-1\\)\\]:not(:first-of-type){\n margin-inline-start: calc(2px * -1);\n}\n.\\[\\&\\>\\*\\]\\:relative>*{\n position: relative;\n}\n.\\[\\&\\>svg\\]\\:max-w-\\[theme\\(spacing\\.8\\)\\]>svg{\n max-width: 2rem;\n}\n.\\[\\&\\>tr\\]\\:first\\:rounded-lg:first-child>tr{\n border-radius: 0.5rem;\n}\n.\\[\\&\\>tr\\]\\:first\\:shadow-small:first-child>tr{\n --tw-shadow: var(--nextui-box-shadow-small);\n --tw-shadow-colored: var(--nextui-box-shadow-small);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.\\[\\&\\[data-hover\\=true\\]\\:not\\(\\[data-active\\=true\\]\\)\\]\\:bg-default-100[data-hover=true]:not([data-active=true]){\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default-100) / var(--nextui-default-100-opacity, var(--tw-bg-opacity)));\n}\n.\\[\\&\\[data-hover\\=true\\]\\:not\\(\\[data-active\\=true\\]\\)\\]\\:bg-default-200[data-hover=true]:not([data-active=true]){\n --tw-bg-opacity: 1;\n background-color: hsl(var(--nextui-default-200) / var(--nextui-default-200-opacity, var(--tw-bg-opacity)));\n}\n.\\[\\&_\\.chevron-icon\\]\\:flex-none .chevron-icon{\n flex: none;\n}\n.\\[\\&_\\.chevron-icon\\]\\:rotate-180 .chevron-icon{\n --tw-rotate: 180deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.\\[\\&_\\.chevron-icon\\]\\:transition-transform .chevron-icon{\n transition-property: transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 250ms;\n}\n');M(":root {\n --chat-ui-background-color: #f5f5f5;\n --chat-ui-border-color: #d9d9d9;\n --chat-ui-text-color: #000;\n --chat-ui-assistant-background-color: #fff;\n --chat-ui-user-background-color: #daf1da;\n --chat-ui-input-textarea-bg: #fff;\n --chat-ui-input-textarea-color: #000;\n --chat-ui-input-textarea-placeholder-color: #aaa;\n --chat-ui-copy-button-background-color: #f6f8fa;\n --chat-ui-copy-button-text-color: rgba(60, 60, 60, 0.33);\n --chat-ui-copy-button-border-color: #dadde1;\n --chat-ui-input-section-menu-button-hover-bg: rgba(0, 123, 255, 0.1);\n --chat-ui-input-container-background-color: #fff;\n --chat-ui-input-border-radius: 10px;\n --chat-ui-input-container-border-radius: 6px;\n --chat-ui-message-bubble-border-radius: 10px;\n --chat-ui-message-bubble-font-size: 14px;\n --chat-ui-container-border-radius: 0px;\n --chat-ui-at-panel-bg: #f8f9fa;\n --chat-ui-at-panel-border: #e9ecef;\n --chat-ui-at-panel-border-radius: 8px;\n --chat-ui-at-panel-item-border-radius: 6px;\n --chat-ui-at-panel-padding: 8px;\n --chat-ui-at-panel-item-padding: 8px;\n --chat-ui-at-panel-item-gap: 4px;\n --chat-ui-at-panel-scrollbar-track: #f8f9fa;\n --chat-ui-at-panel-scrollbar-thumb: #ced4da;\n --chat-ui-at-panel-scrollbar-thumb-hover: #adb5bd;\n --chat-ui-at-panel-item-hover: #e9ecef;\n --chat-ui-at-panel-item-selected: #d0ebff;\n --chat-ui-suggestion-bubble-bg: #edf1f6;\n --chat-ui-suggestion-bubble-hover-bg: #e2e8f0;\n --chat-ui-suggestion-text-color: #4b5563;\n --chat-ui-suggestion-icon-color: #64748b;\n --chat-ui-copy-button-border-radius: 6px;\n --chat-ui-send-button-font-size: 16px;\n --chat-ui-send-button-height: 40px;\n --chat-ui-send-button-text-color: #fff;\n --chat-ui-send-button-border-radius: 50%;\n --chat-ui-send-button-width: 40px;\n --chat-ui-send-button-margin: 0 0 0 8px;\n --chat-ui-ref-tag-bg-color: #ccc;\n --chat-ui-ref-tag-active-bg-color: #0e639c;\n --chat-ui-ref-tag-active-color: #ffffff;\n --chat-ui-ref-close-button-color: #ffffff;\n --chat-ui-ref-expand-overlay-bg: linear-gradient(\n transparent,\n rgba(255, 255, 255, 0.8)\n );\n --chat-ui-ref-expand-overlay-hover-bg: linear-gradient(\n transparent,\n rgba(255, 255, 255, 0.9)\n );\n --chat-ui-ref-expand-icon-color: #333333;\n --chat-ui-ref-shadow-color: rgba(0, 0, 0, 0.1);\n --chat-ui-ref-bg-color: #1e1e1e;\n --chat-ui-ref-tag-bg-color: #2d2d2d;\n --chat-ui-ref-tag-color: #cccccc;\n --chat-ui-ref-tag-hover-bg-color: #4d4d4d;\n --chat-ui-ref-tag-active-bg-color: #4d4d4d;\n --chat-ui-ref-expand-overlay-bg: linear-gradient(\n transparent,\n rgba(30, 30, 30, 0.8)\n );\n --chat-ui-ref-expand-overlay-hover-bg: linear-gradient(\n transparent,\n rgba(30, 30, 30, 0.9)\n );\n --chat-ui-ref-expand-icon-color: #cccccc;\n --chat-ui-ref-shadow-color: rgba(0, 0, 0, 0.15);\n}\n\n.dark {\n --chat-ui-background-color: #1a1a1a;\n --chat-ui-border-color: #333;\n --chat-ui-text-color: #fff;\n --chat-ui-input-textarea-bg: #252525;\n --chat-ui-input-textarea-color: #fff;\n --chat-ui-input-textarea-placeholder-color: #888;\n --chat-ui-assistant-background-color: #333;\n --chat-ui-user-background-color: #333;\n --chat-ui-copy-button-background-color: #3c3c3c;\n --chat-ui-copy-button-text-color: #cccccc;\n --chat-ui-copy-button-border-color: #3c3c3c;\n --chat-ui-input-container-background-color: #1a1a1a;\n --chat-ui-at-panel-bg: #2c3e50;\n --chat-ui-at-panel-border: #34495e;\n --chat-ui-at-panel-scrollbar-track: #2c3e50;\n --chat-ui-at-panel-scrollbar-thumb: #7f8c8d;\n --chat-ui-at-panel-scrollbar-thumb-hover: #95a5a6;\n --chat-ui-at-panel-item-hover: #34495e;\n --chat-ui-at-panel-item-selected: #2c3e50;\n --chat-ui-send-button-background-color: #016fee;\n --chat-ui-suggestion-bubble-bg: #2c3e50;\n --chat-ui-suggestion-bubble-hover-bg: #4a5568;\n --chat-ui-suggestion-text-color: #bdc3c7;\n --chat-ui-suggestion-icon-color: #95a5a6;\n}\n\n.ai-app-chat-container {\n display: flex;\n flex-direction: column;\n min-height: 100%;\n background-color: var(--chat-ui-background-color);\n color: var(--chat-ui-text-color);\n transition: width 0.25s ease-in-out;\n}\n\n.ai-app-chat-messages {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n overflow-y: auto;\n margin: 0 auto;\n max-width: 800px;\n min-width: min(100% - 20px, 800px);\n width: calc(100% - 20px);\n margin-bottom: 10px;\n margin-top: 10px;\n}\n\n.ai-app-chat-input-container {\n position: sticky;\n bottom: 0;\n max-width: 800px;\n min-width: min(100% - 20px, 800px);\n width: calc(100% - 20px);\n display: flex;\n margin: 0 auto;\n margin-bottom: 10px;\n z-index: 10;\n transition: width 0.25s ease-in-out;\n}");import{useState as Ae,useEffect as Ne,useRef as Le,useCallback as Re}from"react";import De from"classnames";import{Spinner as Ee}from"@nextui-org/react";import{memo as Pe,useEffect as $e,useState as Oe}from"react";import Be from"classnames";import We from"react-markdown";import He from"remark-gfm";import Ue from"remark-math";import qe from"rehype-katex";import{Prism as Ve}from"react-syntax-highlighter";import{vscDarkPlus as Je}from"react-syntax-highlighter/dist/esm/styles/prism";import"katex/dist/katex.min.css";M('@charset "UTF-8";\n.dark .markdown-body {\n --text-primary: #f7fafc;\n --text-secondary: #cbd5e0;\n --bg-primary: none;\n --bg-secondary: #2d3748;\n --bg-quote: #2d3748;\n --border-quote: #4a5568;\n --link-color: #63b3ed;\n --link-hover: #90cdf4;\n --code-bg: #2d3748;\n --border-color: #4a5568;\n --heading-color: #f7fafc;\n --syntax-bg: #1e293b;\n --syntax-border: #334155;\n --syntax-highlight: rgba(56, 139, 253, 0.15);\n color: var(--text-primary);\n background-color: var(--bg-primary);\n}\n.dark .markdown-body pre {\n background: var(--syntax-bg) !important;\n border: 1px solid var(--syntax-border);\n box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);\n}\n\n.markdown-body {\n font-size: 16px;\n line-height: 1.6;\n font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;\n letter-spacing: -0.011em;\n --text-primary: #1a202c;\n --text-secondary: #4a5568;\n --bg-primary: #ffffff;\n --bg-secondary: #f8fafc;\n --bg-quote: #f8fafc;\n --border-quote: #e2e8f0;\n --link-color: #3182ce;\n --link-hover: #2c5282;\n --code-bg: #f1f5f9;\n --border-color: #e2e8f0;\n --heading-color: #1a202c;\n --syntax-bg: #f8fafc;\n --syntax-border: #e2e8f0;\n --syntax-highlight: rgba(56, 139, 253, 0.15);\n color: var(--text-primary);\n background-color: var(--bg-primary);\n}\n.markdown-body h1,\n.markdown-body h2,\n.markdown-body h3,\n.markdown-body h4,\n.markdown-body h5,\n.markdown-body h6 {\n color: var(--heading-color);\n font-weight: 700;\n letter-spacing: -0.025em;\n margin: 2em 0 0.75em;\n line-height: 1.2;\n position: relative;\n}\n.markdown-body h1:first-child,\n.markdown-body h2:first-child,\n.markdown-body h3:first-child,\n.markdown-body h4:first-child,\n.markdown-body h5:first-child,\n.markdown-body h6:first-child {\n margin-top: 0.5em;\n}\n.markdown-body h1::before,\n.markdown-body h2::before,\n.markdown-body h3::before,\n.markdown-body h4::before,\n.markdown-body h5::before,\n.markdown-body h6::before {\n content: "";\n position: absolute;\n left: -0.8em;\n top: 0;\n bottom: 0;\n width: 3px;\n background: linear-gradient(to bottom, var(--link-color), transparent);\n border-radius: 3px;\n opacity: 0;\n transform: scaleY(0.7);\n transition: opacity 0.2s, transform 0.2s;\n}\n.markdown-body h1:hover::before,\n.markdown-body h2:hover::before,\n.markdown-body h3:hover::before,\n.markdown-body h4:hover::before,\n.markdown-body h5:hover::before,\n.markdown-body h6:hover::before {\n opacity: 1;\n transform: scaleY(1);\n}\n.markdown-body h1 {\n font-size: 2.25em;\n border-bottom: 1px solid var(--border-color);\n padding-bottom: 0.3em;\n margin-bottom: 1em;\n}\n.markdown-body h2 {\n font-size: 1.75em;\n border-bottom: 1px solid var(--border-color);\n padding-bottom: 0.2em;\n}\n.markdown-body h3 {\n font-size: 1.4em;\n}\n.markdown-body h4 {\n font-size: 1.2em;\n}\n.markdown-body h5 {\n font-size: 1em;\n}\n.markdown-body h6 {\n font-size: 0.9em;\n color: var(--text-secondary);\n}\n.markdown-body p {\n margin: 0 0 0.3em;\n line-height: 1.5;\n color: var(--text-secondary);\n}\n.markdown-body a {\n color: var(--link-color);\n text-decoration: none;\n transition: all 0.2s ease;\n border-bottom: 1px solid rgba(49, 130, 206, 0.2);\n padding-bottom: 1px;\n}\n.markdown-body a:hover {\n color: var(--link-hover);\n border-bottom-color: var(--link-color);\n}\n.markdown-body blockquote {\n margin: 1.75em 0;\n padding: 1em 1.5em;\n border-left: 4px solid var(--link-color);\n background: var(--bg-quote);\n border-radius: 0.5rem;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.markdown-body blockquote p {\n font-style: italic;\n}\n.markdown-body blockquote p:last-child {\n margin-bottom: 0;\n}\n.markdown-body blockquote cite {\n display: block;\n margin-top: 0.8em;\n font-size: 0.9em;\n text-align: right;\n color: var(--text-secondary);\n font-style: normal;\n}\n.markdown-body blockquote cite:before {\n content: "— ";\n}\n.markdown-body code:not([class*=language-]) {\n padding: 0.2em 0.4em;\n font-size: 0.875em;\n background: var(--code-bg);\n border-radius: 0.375rem;\n font-family: "SF Mono", Menlo, Monaco, Consolas, monospace;\n color: #e45649;\n}\n.markdown-body pre {\n margin: 1.75em 0;\n padding: 1.25em;\n border-radius: 0.5rem;\n background: var(--syntax-bg);\n overflow: auto;\n border: 1px solid var(--syntax-border);\n transition: all 0.3s ease;\n position: relative;\n}\n.markdown-body pre:hover {\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);\n}\n.markdown-body pre code {\n font-family: "SF Mono", Menlo, Monaco, Consolas, monospace;\n font-size: 0.9em;\n line-height: 1.6;\n color: var(--text-primary);\n display: block;\n padding: 0;\n overflow-x: auto;\n}\n.markdown-body pre code .token.comment,\n.markdown-body pre code .token.prolog,\n.markdown-body pre code .token.doctype,\n.markdown-body pre code .token.cdata {\n color: #8e96a3;\n}\n.markdown-body pre code .token.punctuation {\n color: #a8b2c0;\n}\n.markdown-body pre code .token.property,\n.markdown-body pre code .token.tag,\n.markdown-body pre code .token.constant,\n.markdown-body pre code .token.symbol {\n color: #e45649;\n}\n.markdown-body pre code .token.boolean,\n.markdown-body pre code .token.number {\n color: #986801;\n}\n.markdown-body pre code .token.selector,\n.markdown-body pre code .token.attr-name,\n.markdown-body pre code .token.string,\n.markdown-body pre code .token.char,\n.markdown-body pre code .token.builtin {\n color: #50a14f;\n}\n.markdown-body pre code .token.operator,\n.markdown-body pre code .token.entity,\n.markdown-body pre code .token.url,\n.markdown-body pre code .language-css .token.string,\n.markdown-body pre code .style .token.string {\n color: #0184bc;\n}\n.markdown-body pre code .token.atrule,\n.markdown-body pre code .token.attr-value,\n.markdown-body pre code .token.keyword {\n color: #a626a4;\n}\n.markdown-body pre code .token.function {\n color: #4078f2;\n}\n.markdown-body pre code .token.regex,\n.markdown-body pre code .token.important,\n.markdown-body pre code .token.variable {\n color: #e90;\n}\n.markdown-body pre code .token.important,\n.markdown-body pre code .token.bold {\n font-weight: bold;\n}\n.markdown-body pre code .token.italic {\n font-style: italic;\n}\n.markdown-body pre::before {\n content: attr(data-language);\n position: absolute;\n top: 0.5rem;\n right: 1rem;\n font-size: 0.7em;\n color: var(--text-secondary);\n opacity: 0.7;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n}\n.markdown-body table {\n width: 100%;\n margin: 2em 0;\n border-collapse: separate;\n border-spacing: 0;\n border-radius: 0.5rem;\n overflow: hidden;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n.markdown-body table th,\n.markdown-body table td {\n border: 1px solid var(--border-color);\n padding: 0.85em 1.25em;\n}\n.markdown-body table th {\n background: var(--bg-secondary);\n font-weight: 600;\n text-align: left;\n}\n.markdown-body table thead tr {\n background: var(--bg-secondary);\n}\n.markdown-body table tbody tr {\n transition: background-color 0.2s ease;\n}\n.markdown-body table tbody tr:hover {\n background-color: var(--bg-secondary);\n}\n.markdown-body table tr:nth-child(even) {\n background: var(--bg-quote);\n}\n.markdown-body img {\n max-width: 100%;\n height: auto;\n border-radius: 0.5rem;\n margin: 1.75em 0;\n transition: all 0.3s ease;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n.markdown-body img:hover {\n transform: scale(1.01);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);\n}\n.markdown-body ul,\n.markdown-body ol {\n padding-left: 1.5em;\n margin: 1em 0;\n}\n.markdown-body ul li,\n.markdown-body ol li {\n position: relative;\n margin: 0.3em 0;\n padding-left: 0.5em;\n color: var(--text-secondary);\n}\n.markdown-body ul {\n list-style-type: disc;\n}\n.markdown-body ul ul {\n list-style-type: circle;\n margin: 0.3em 0 0.3em 0.5em;\n}\n.markdown-body ul ul ul {\n list-style-type: square;\n}\n.markdown-body ol {\n list-style-type: decimal;\n padding-left: 1em;\n}\n.markdown-body ol li {\n padding-left: 0.2em;\n margin-bottom: 0.5em;\n}\n.markdown-body ol li::marker {\n margin-top: 0.2em;\n}\n.markdown-body ol ol {\n list-style-type: lower-alpha;\n margin: 0.5em 0 0.3em 0.5em;\n}\n.markdown-body ol ol ol {\n list-style-type: lower-roman;\n}\n.markdown-body ul li::before,\n.markdown-body ul li:hover::before,\n.markdown-body ol li::before,\n.markdown-body ol li:hover::before {\n display: none;\n}\n.markdown-body hr {\n margin: 2.5em 0;\n border: none;\n height: 1px;\n background: linear-gradient(to right, transparent, var(--border-color), transparent);\n}\n.markdown-body dl {\n margin: 1.5em 0;\n}\n.markdown-body dl dt {\n font-weight: 600;\n color: var(--heading-color);\n margin-top: 1em;\n}\n.markdown-body dl dd {\n margin-left: 1.5em;\n color: var(--text-secondary);\n}\n.markdown-body kbd {\n display: inline-block;\n padding: 0.2em 0.4em;\n font-size: 0.85em;\n font-family: "SF Mono", Menlo, Monaco, Consolas, monospace;\n line-height: 1;\n color: var(--text-primary);\n background-color: var(--bg-secondary);\n border: 1px solid var(--border-color);\n border-radius: 0.25em;\n box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1);\n white-space: nowrap;\n}\n.markdown-body mark {\n background-color: rgba(255, 220, 0, 0.2);\n padding: 0.1em 0.2em;\n border-radius: 0.2em;\n}\n.markdown-body .footnote {\n font-size: 0.85em;\n vertical-align: super;\n color: var(--link-color);\n}\n.markdown-body .footnotes {\n margin-top: 3em;\n border-top: 1px solid var(--border-color);\n padding-top: 1em;\n}\n.markdown-body .footnotes ol {\n font-size: 0.9em;\n color: var(--text-secondary);\n}\n.markdown-body .footnotes .footnote-backref {\n margin-left: 0.5em;\n}');import{jsx as Ke}from"react/jsx-runtime";var Ge=({content:t,isDark:e=!1})=>Ke("div",{className:"markdown-body "+(e?"dark":""),children:Ke(We,{remarkPlugins:[He,Ue],rehypePlugins:[qe],components:{code(t){var e=t,{node:n,className:a,children:r}=e,o=d(e,["node","className","children"]);const i=/language-(\w+)/.exec(a||"");return i?Ke(Ve,{language:i[1],style:Je,children:String(r).replace(/\n$/,"")}):Ke("code",s(c({className:a},o),{children:r}))}},children:t})});import{jsx as Ze,jsxs as Qe}from"react/jsx-runtime";var tn=Pe((function({loading:t,message:e,customMessageRender:n,className:a,isDark:r=!1,showAnimation:o=!1,slots:i={}}){var c;const[s,d]=Oe(!1);if($e((()=>{if(null==e?void 0:e.isDeleting){d(!0);const t=setTimeout((()=>{d(!1)}),250);return console.log(e),()=>clearTimeout(t)}}),[e]),t||!e)return Ze("div",{className:Be(a),children:null!=(c=i.customLoading)?c:Ze(Ee,{size:"sm"})});if(n){const t=n(e);if(t)return Ze("div",{className:Be("assistant"===e.role?"is-assistant":"is-user",s?"fade-out":"",a),children:t})}const{showCopyButton:l="plain-text"===e.type&&"assistant"===e.role}=e;return Ze("div",{className:Be("assistant"===e.role?"is-assistant":"is-user",s?"fade-out":"",o?"animate-in":"",a),children:(()=>{var t;const n=[];switch(e.type){case"plain-text":n.push(Ze(Ge,{content:String(e.content||""),isDark:r,smooth:!e.isFinal&&"assistant"===e.role},"plain-text"));break;case"file":n.push(Ze(Pt,{file:e.content,showDeleteIcon:!1},"file"));break;default:return null}return(i.renderCustomMessageActionUI||l)&&n.push(Qe("div",{className:"flex gap-2 items-center mt-2 w-full",children:[null==(t=i.renderCustomMessageActionUI)?void 0:t.call(i,e),l?Ze(N,{getCopyText:()=>e.content}):null]},"copy-button")),n})()})}));import{useCallback as en}from"react";import{IoArrowForward as nn}from"react-icons/io5";M(".ai-app-suggestion-bubble {\n display: flex;\n align-items: center;\n justify-content: space-between;\n max-width: 300px;\n width: 100%;\n margin-bottom: 6px;\n padding: 8px 12px;\n background-color: var(--chat-ui-assistant-background-color);\n border-radius: var(--chat-ui-message-bubble-border-radius);\n transition: background-color 0.3s ease;\n cursor: pointer;\n}\n.ai-app-suggestion-bubble:hover {\n background-color: var(--chat-ui-suggestion-bubble-hover-bg);\n}\n\n.ai-app-suggestion-text {\n font-size: 14px;\n color: var(--chat-ui-suggestion-text-color);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n margin-right: 8px;\n}\n\n.ai-app-suggestion-icon {\n flex-shrink: 0;\n color: var(--chat-ui-suggestion-icon-color);\n font-size: 18px;\n}");import{jsx as an,jsxs as rn}from"react/jsx-runtime";var on=({content:t,setInputText:e,onClick:n})=>{const a=en((()=>{e(t),null==n||n(t)}),[t,n,e]);return rn("div",{className:"ai-app-suggestion-bubble",onClick:a,children:[an("span",{className:"ai-app-suggestion-text",children:t}),an(nn,{className:"ai-app-suggestion-icon"})]})};import{Avatar as cn,AvatarIcon as sn}from"@nextui-org/react";import{FaRobot as dn}from"react-icons/fa";M(".ai-app-message-bubble {\n display: flex;\n align-items: start;\n font-size: var(--chat-ui-message-bubble-font-size);\n flex-direction: row;\n word-break: break-all;\n white-space: normal;\n font-weight: 400;\n min-width: 100%;\n gap: 8px;\n width: 0;\n flex: 1 1;\n padding: 4px 10px;\n margin-bottom: 10px;\n border-radius: var(--chat-ui-message-bubble-border-radius);\n position: relative;\n}\n@keyframes fadeInLeft {\n from {\n transform: translateX(-30px);\n opacity: 0;\n }\n to {\n transform: translateX(0);\n opacity: 1;\n }\n}\n.ai-app-message-bubble.fade-out {\n animation: fadeOutLeft 0.25s ease-out forwards;\n}\n@keyframes fadeOutLeft {\n from {\n transform: translateX(0);\n opacity: 1;\n }\n to {\n transform: translateX(-30px);\n opacity: 0;\n }\n}\n.ai-app-message-bubble.animate-in {\n animation: fadeInLeft 0.5s ease-out;\n}");import{jsx as ln,jsxs as un}from"react/jsx-runtime";var pn=t=>{const{messages:e,messageLoading:n,welcomeMessage:a,onMessageSend:r,slots:o,customClassNames:i,customStyles:c,customMessageRender:s,messageEndRef:d,isDark:l,setInputText:u,suggestions:p,onSuggestionClick:w,avatar:g={user:!0},autoScrollToBottom:v=!1,isUserScrollingRef:x}=t,[b,y]=Ae(15),[h,f]=Ae(!0),m=Le(null),k=Le(null),z=Le(null),_=Le(null),X=ln(dn,{width:22,height:22,size:22,style:{marginTop:8,marginLeft:4,color:"#4A90E2"}}),Y=ln("div",{className:"flex justify-center items-center",style:{width:22,height:22,borderRadius:"50%",marginTop:"1px"},children:ln(sn,{})}),S=Re((()=>{const t=_.current,n=(null==t?void 0:t.scrollHeight)||0,a=(null==t?void 0:t.scrollTop)||0;y((t=>Math.min(t+15,e.length))),requestAnimationFrame((()=>{if(t){const e=t.scrollHeight;h?(t.scrollTop=e,f(!1)):t.scrollTop=a+(e-n)}}))}),[e.length,h]),j=Re((()=>{y(15)}),[]);Ne((()=>{const t={root:_.current,rootMargin:"400px 0px 0px 0px",threshold:0};return m.current=new IntersectionObserver((t=>{t.forEach((t=>{t.isIntersecting&&(t.target===k.current?S():t.target===z.current&&j())}))}),t),k.current&&m.current.observe(k.current),z.current&&m.current.observe(z.current),()=>{m.current&&m.current.disconnect()}}),[S,j]);const C=e.slice(-b).filter(Boolean);Ne((()=>{d.current&&v&&d.current.scrollIntoView({behavior:"smooth"})}),[]),Ne((()=>{const t=_.current;if(!t)return;const e=()=>{const e=Math.abs(t.scrollHeight-t.scrollTop-t.clientHeight)<1;x.current=!e};return t.addEventListener("scroll",e),()=>{t.removeEventListener("scroll",e)}}),[x]);const F=(t,e)=>e?ln(cn,{src:e,radius:"sm",style:{width:"20px",height:"20px"}}):"assistant"===t?(null==g?void 0:g.assistant)?!0===g.assistant?X:g.assistant:null:"user"===t?(null==g?void 0:g.user)?!0===g.user?Y:g.user:null:void 0;return ln("div",{ref:_,className:De("ai-app-chat-messages",i.messageList),style:c.messageList,children:un("div",{style:{maxWidth:"800px",minWidth:"min(100%, 800px)",margin:"0 auto"},children:[ln("div",{ref:k}),a?un("div",{className:"ai-app-message-bubble mb-2",children:[ln("div",{className:"relative",children:F("assistant",a.avatar)}),ln(tn,{message:a,customMessageRender:s,setInputText:u,slots:o})]}):null,C.map(((t,n)=>un("div",{style:c.message,children:[o.beforeMessage,un("div",{className:"min-w-full ai-app-message-bubble",children:[F(t.role,t.avatar),ln(tn,{message:t,sendMessage:r,className:`w-0 flex-1 ${i.message}`,customMessageRender:s,isDark:l,setInputText:u,slots:o,showAnimation:e.findIndex((e=>e===t))>=C.length-15})]}),o.afterMessage]},`${t.role}-${t.timestamp||JSON.stringify(t.content)}_${n}`))),n?ln(tn,{className:"mx-2",loading:!0,setInputText:u,slots:o}):null,null==p?void 0:p.map((t=>ln(on,{content:t,setInputText:u,onClick:w},t))),ln("div",{ref:d}),ln("div",{ref:z})]})})};import{jsx as wn,jsxs as gn}from"react/jsx-runtime";var vn=je(Fe(((t,e)=>{const{states:n=x,onMessageSend:a,onMessageAbort:r,styles:o,classNames:i={},storageDbName:s,customMessageStorage:d,disableInput:l=!1,slots:u={},conversationId:p="default",features:g,customMessageRender:v,welcomeMessage:b,commandPanelConfig:y,inputPlaceholder:h,onCommandTrigger:f,onCommandSelect:m,onCommandDelete:k,isDark:_,onSuggestionClick:X,onClearConversationHistory:Y,suggestions:S=[],avatar:j}=t,C=Se((()=>d||(s?new w(s):void 0)),[d,s]),{messages:F,messageLoading:M,clearMessages:I,addMessage:T,setInputText:A}=z({states:n,conversationId:p,customMessageStorage:C()}),[N]=Te(n.messageEndRefAtom),[L]=Te(n.isUserScrollingRefAtom),R=Ce(null),D=Ce(null);Me(e,(()=>({triggerCommand:t=>{var e;null==(e=D.current)||e.triggerCommand(t)},focusInput:()=>{var t;null==(t=D.current)||t.focus()},getInputTextArea:()=>{var t;return null==(t=D.current)?void 0:t.getInputTextArea()}})));const E=Ye((()=>({container:null==o?void 0:o.container,message:null==o?void 0:o.message,input:null==o?void 0:o.input,inputContainer:null==o?void 0:o.inputContainer,messageList:null==o?void 0:o.messageList})),[o]),P=Ye((()=>({container:i.container,message:i.message,input:i.input,inputContainer:i.inputContainer,messageList:i.messageList})),[i]),$=Se((t=>null==v?void 0:v(t)),[v]),O=Ye((()=>F.filter((t=>"user"===t.role)).filter((t=>"plain-text"===t.type))),[F.length]);return gn("div",{className:Ie("ai-app-chat-container",P.container),ref:R,style:c({},E.container),children:[u.beforeMessageList,wn(pn,{messages:F,messageLoading:M,welcomeMessage:b,onMessageSend:a,slots:u,customClassNames:P,customStyles:E,customMessageRender:$,messageEndRef:N,isDark:_,setInputText:A,suggestions:S,avatar:j,onSuggestionClick:X,isUserScrollingRef:L}),u.afterMessageList,u.beforeInputContainer,wn("div",{className:Ie("ai-app-chat-input-container",P.inputContainer),style:E.inputContainer,children:wn(Xe,{ref:D,disableInput:l,userMessages:O,sendMessage:a,addMessage:T,slots:u,style:E.input,features:g,clearMessages:I,chatStates:n,commandPanelConfig:y,inputPlaceholder:h,abortMessage:r,onCommandTrigger:f,onCommandSelect:m,onCommandDelete:k,onClearConversationHistory:Y})}),u.afterInputContainer]})})));export{vn as ChatUI,ae as CommandPanel,N as CopyButton,w as DefaultMessageStorage,ie as FigmaIcon,Pt as FileItemPreview,$t as FilePreview,m as InputFileType,Ge as MarkdownRenderer,h as MessageRole,f as MessageType,v as createChatStateAtoms,gt as getFileIcon,pt as getFileType,zt as handleFileInput,kt as handleImage,bt as normalizeFiles,xt as normalizeFilesPrompt,Bt as parseCommandRules,z as useChat}; diff --git a/apps/omega/src/vendor/chat-ui/package.json b/apps/omega/src/vendor/chat-ui/package.json new file mode 100644 index 000000000..ff2e69c2e --- /dev/null +++ b/apps/omega/src/vendor/chat-ui/package.json @@ -0,0 +1,6 @@ +{ + "name": "chat-ui", + "module": "./index.js", + "main": "./index.js", + "types": "./index.d.ts" +} diff --git a/apps/omega/static/dmg-background.png b/apps/omega/static/dmg-background.png new file mode 100644 index 0000000000000000000000000000000000000000..21e9c9e8251dd135db5b86aa88f6d42921161057 GIT binary patch literal 914 zcmeAS@N?(olHy`uVBq!ia0y~yV4A|fz&L?}87QKj!O#lihzIzDxPJKX_36`Bvu4e0 zY;0M(cEkJkUmiSo>fzz3uWyi%k@f1;`>d>-H*Y?MhK3gxm%V%UIXOACwzj^#y{n?4 zYU0ExZ{L2(&o7)aXa4KgAJWn?mMvTL;>FvzxC8?O!}aSog@r{J85wWizWd?BX8{3$ zrlw{G4jj3A_o1h!mxYDp@#Cj&+_>Z7;$~xGd+yw&OP8+O+dDWoI9<7N^X%D+*48$z zuI@K)-aT^Ugt@tex3|yz`;YhTJ!oQL8W=Nhxh@ zo!QyBr%s)lF=KXJT|-Y#e@936q)AiD%d6(jU67iZzG1`WojdoQIB~|(((3&A%eJ<5 zj*iZcAHQ&O^Eh+nLPA24p`lS%SMSD+TQmM|YXF9snWu|mNCo5Dn}-)J$P{2WAou;l z&272GxyJuZ!tT#MaPL>ZR5w;&h|&Rku(zrF_2y^y3g)hv5@J37ZGL07PHNmaV9OxDyu==_~w~& zuDk~OC!Bp0bcNxx_RTfxTzNO_n|StF*cFD`);Hh0W4*GWe!|&@feyUK)o;$3$9kop zZsOUep$@#)H{ZPTh2_eJ8m-y48cBj%_J#OHNt2uE_ol&)B z*4*<9xDPa-hc5!zT}wmdKI;Vst E0EuW@?*IS* literal 0 HcmV?d00001 diff --git a/apps/omega/static/dmg-background@2x.png b/apps/omega/static/dmg-background@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6c79aeef71e5217cb2d94aa523ff528b302eadba GIT binary patch literal 2073 zcmeH{Sy0ng6vj^oqIJRPw4w!}YNyo>aoEC=07=lW1ds`c;2#tMNJ>GCNUcZ{iNygV zAc}x2QE(WbN&q1ukwxQFpu{9bFlgAqo)CjAbleL87+`gKCWujkI4&&82whqVn?#H5z?L$e|lI%J=U-uy3EAP}tblr}p%u z+1cS+TEuQ{dmS7c6^dsh64}d(*4Zf|5QypNyoV3l?%ivZN);X+UN>(FQc_ac?6a3H zT{(C#q_MGiaB!r(T~c0tv$**B<;%HsbqxUlfv&EkCr`SIimpXPMK?D;7#o|c?Fusl zFbbwo-2xLa`ho7InyC#&3fx3v{;|Hh=sBZ1rCwkcikj3m@*ORo?rw$Gk`-o!C-{tg z@$KR7Jd7aa8+)Q%^849JU{J`K2OsC+z?$p75dPq!1-zc`C{ZoM`2syl)-IaGP;9n` zezlw)2EG!DE0xrZP{FMIxf{#v$;2_`Yr#~gIb!1oF|xc7{I;BO6idSqoY^M8pIzR~8@Dvzwo48m0t*Ykdq_JYWxY^ZcbsEl=71{q z6${@d_<-U?({A3BGukQt9?|!j1AZd9;U^Z#uPT?Y7|JLkC=HF1^(SIZFa`X@=u?Z- z*BC}mr@(I&WKGTsiKs-*m+20H!YO%s6%UnE`XIQ%F9FXCmq)7dpfvtXh{{h_nkUGQq zPz!qxYqov?sZHL4?m8^@#(lok8c3DM&X{l@@w&2Kixm$GKJAWZ zRbS*_3tIi-*tuLNwX>?anrsNyuKCn&aU_AZr8mDVycWxqSICgXx4(e`X(aIuSe9YM z=>$ZIn3+RRjU@78u@+`Nu#lsJUzV;p0o$;EH2bB*a%uDqDQ+myFip=>HKcmoeb>G<)(%o|Hck!pD#9s zsw1~SCjT~JIbvjViy^4VY~+r^($3F3&j0aB+JIQymxBHGn{-?1v0P6-{2$F@=F1M# T>Ei~WpY$|$KWfb$#_#_C3_>ew literal 0 HcmV?d00001 diff --git a/apps/omega/tailwind.config.ts b/apps/omega/tailwind.config.ts new file mode 100644 index 000000000..c7979f504 --- /dev/null +++ b/apps/omega/tailwind.config.ts @@ -0,0 +1,36 @@ +import resolveConfig from 'tailwindcss/resolveConfig'; + +export default resolveConfig({ + content: ['./src/renderer/src/**/*.{html,ts,tsx,jsx,js}'], + theme: { + extend: { + animation: { + shine: 'shine 2s linear infinite', + pulse: 'pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite', + glow: 'glow 2s ease-in-out infinite alternate', + }, + keyframes: { + shine: { + '0%': { transform: 'translateX(-100%)' }, + '100%': { transform: 'translateX(100%)' }, + }, + glow: { + '0%': { + opacity: '0.5', + transform: 'translateX(-10%) translateY(-10%)', + }, + '100%': { + opacity: '0.7', + transform: 'translateX(10%) translateY(10%)', + }, + }, + }, + backdropFilter: { + none: 'none', + blur: 'blur(20px)', + }, + }, + }, + darkMode: 'class', + plugins: [], +}); diff --git a/apps/omega/tsconfig.base.json b/apps/omega/tsconfig.base.json new file mode 100644 index 000000000..9aaf3f00a --- /dev/null +++ b/apps/omega/tsconfig.base.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "moduleResolution": "bundler", + "paths": { + "@shared/*": ["./src/shared/*"], + "@main/*": ["./src/main/*"], + "@renderer/*": ["./src/renderer/src/*"], + "@resources/*": ["./resources/*"], + "@vendor/chat-ui": ["./src/vendor/chat-ui"] + } + } +} diff --git a/apps/omega/tsconfig.json b/apps/omega/tsconfig.json new file mode 100644 index 000000000..f2cb6f403 --- /dev/null +++ b/apps/omega/tsconfig.json @@ -0,0 +1,11 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.node.json" }, + { "path": "./tsconfig.web.json" }, + ], + "compilerOptions": { + "resolveJsonModule": true, + "esModuleInterop": true, + } +} diff --git a/apps/omega/tsconfig.node.json b/apps/omega/tsconfig.node.json new file mode 100644 index 000000000..f29a1317e --- /dev/null +++ b/apps/omega/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "extends": ["@electron-toolkit/tsconfig/tsconfig.node.json", "./tsconfig.base.json"], + "include": ["electron.vite.config.*", "src/main/**/*", "forge.config.ts", "src/preload/**/*", "app/electron.vite.config.ts"], + "compilerOptions": { + "composite": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "types": ["electron-vite/node"] + } +} diff --git a/apps/omega/tsconfig.web.json b/apps/omega/tsconfig.web.json new file mode 100644 index 000000000..1d66b0680 --- /dev/null +++ b/apps/omega/tsconfig.web.json @@ -0,0 +1,16 @@ +{ + "extends": ["@electron-toolkit/tsconfig/tsconfig.web.json", "./tsconfig.base.json"], + "include": [ + "src/renderer/src/env.d.ts", + "src/renderer/src/**/*", + "src/renderer/src/**/*.tsx", + "src/main/ipcRoutes/index.ts", + "src/preload/*.d.ts", + "src/enrdor/**/*" + ], + "compilerOptions": { + "composite": true, + "jsx": "react-jsx", + "baseUrl": "." + } +} diff --git a/apps/omega/vite.config.ts b/apps/omega/vite.config.ts new file mode 100644 index 000000000..3a9c44771 --- /dev/null +++ b/apps/omega/vite.config.ts @@ -0,0 +1,57 @@ +import path, { resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; +import { viteSingleFile } from 'vite-plugin-singlefile'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const workspaceDeps = ['@ui-tars/electron-ipc']; + +export default defineConfig( + (async () => { + const { default: tsconfigPaths } = await import('vite-tsconfig-paths'); + return { + worker: false, + root: 'src/renderer', + resolve: { + alias: { + '@ui-tars/electron-ipc/renderer': path.resolve( + __dirname, + './src/renderer/mock/ipc.ts', + ), + }, + }, + define: { + 'process.env.REPORT_HTML_MODE': 'true', + }, + build: { + outDir: resolve(__dirname, './dist/reporter'), + rollupOptions: { + input: { + main: resolve('./src/renderer/index.html'), + }, + output: { + manualChunks: undefined, + inlineDynamicImports: true, + format: 'iife', + entryFileNames: '[name].js', + chunkFileNames: '[name].js', + assetFileNames: '[name][extname]', + }, + }, + cssCodeSplit: false, + assetsInlineLimit: 100000000, + minify: true, + }, + css: { + preprocessorOptions: { + scss: { + api: 'modern', + }, + }, + }, + + plugins: [react(), tsconfigPaths(), viteSingleFile()], + }; + })(), +); diff --git a/apps/omega/vitest.config.ts b/apps/omega/vitest.config.ts new file mode 100644 index 000000000..35d1b79ef --- /dev/null +++ b/apps/omega/vitest.config.ts @@ -0,0 +1,15 @@ +import { defineConfig } from 'vitest/config'; +import path from 'path'; + +export default defineConfig({ + test: { + globals: true, + environment: 'jsdom', + }, + resolve: { + alias: { + '@renderer': path.resolve(__dirname, 'src/renderer/src'), + '@vendor': path.resolve(__dirname, 'src/renderer/vendor'), + }, + }, +}); diff --git a/apps/ui-tars/e2e/vitest.config.mts b/apps/ui-tars/e2e/vitest.config.mts index e28d01b3c..4add3cb7d 100644 --- a/apps/ui-tars/e2e/vitest.config.mts +++ b/apps/ui-tars/e2e/vitest.config.mts @@ -21,6 +21,7 @@ export default defineProject({ }, plugins: [ + // @ts-ignore tsconfigPath({ projects: ['../tsconfig.node.json'], }), diff --git a/apps/ui-tars/src/main/vitest.config.mts b/apps/ui-tars/src/main/vitest.config.mts index 1b73d9704..4310f4f72 100644 --- a/apps/ui-tars/src/main/vitest.config.mts +++ b/apps/ui-tars/src/main/vitest.config.mts @@ -20,6 +20,7 @@ export default defineProject({ }, plugins: [ + // @ts-ignore tsconfigPath({ projects: ['../../tsconfig.node.json'], }), diff --git a/apps/ui-tars/vitest.config.mts b/apps/ui-tars/vitest.config.mts index 3eda07bf6..6006ff3bd 100644 --- a/apps/ui-tars/vitest.config.mts +++ b/apps/ui-tars/vitest.config.mts @@ -19,6 +19,7 @@ export default defineProject({ }, plugins: [ + // @ts-ignore tsconfigPath({ projects: ['./tsconfig.node.json'], }), diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 44b525c1f..b15c990b6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -64,7 +64,7 @@ importers: version: 14.0.1(enquirer@2.4.1) opencommit: specifier: ^3.2.5 - version: 3.2.5(encoding@0.1.13)(ws@8.18.0) + version: 3.2.5(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)) prettier: specifier: ^3.3.2 version: 3.5.0 @@ -84,6 +84,291 @@ importers: specifier: ^5.7.2 version: 5.7.3 + apps/omega: + dependencies: + '@agent-infra/mcp-server-browser': + specifier: workspace:* + version: link:../../packages/agent-infra/mcp-servers/browser + '@agent-infra/mcp-server-commands': + specifier: workspace:* + version: link:../../packages/agent-infra/mcp-servers/commands + '@agent-infra/mcp-server-filesystem': + specifier: workspace:* + version: link:../../packages/agent-infra/mcp-servers/filesystem + esbuild-register: + specifier: '*' + version: 3.6.0(esbuild@0.25.0) + ts-node: + specifier: '*' + version: 10.9.2(@types/node@22.13.10)(typescript@5.7.3) + tsx: + specifier: '*' + version: 4.19.3 + devDependencies: + '@electron-forge/cli': + specifier: 7.7.0 + version: 7.7.0(encoding@0.1.13) + '@electron-forge/maker-deb': + specifier: 7.7.0 + version: 7.7.0 + '@electron-forge/maker-dmg': + specifier: 7.7.0 + version: 7.7.0 + '@electron-forge/maker-rpm': + specifier: 7.7.0 + version: 7.7.0 + '@electron-forge/maker-squirrel': + specifier: 7.7.0 + version: 7.7.0 + '@electron-forge/maker-zip': + specifier: 7.7.0 + version: 7.7.0 + '@electron-forge/plugin-auto-unpack-natives': + specifier: 7.7.0 + version: 7.7.0 + '@electron-forge/plugin-fuses': + specifier: 7.7.0 + version: 7.7.0(@electron/fuses@1.8.0) + '@electron-forge/plugin-vite': + specifier: 7.7.0 + version: 7.7.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) + '@electron-forge/publisher-github': + specifier: 7.7.0 + version: 7.7.0(encoding@0.1.13) + '@electron-toolkit/tsconfig': + specifier: ^1.0.1 + version: 1.0.1(@types/node@22.13.10) + '@types/node': + specifier: ^22.13.4 + version: 22.13.10 + '@vitejs/plugin-react': + specifier: ^4.3.4 + version: 4.3.4(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)) + autoprefixer: + specifier: 10.4.20 + version: 10.4.20(postcss@8.5.3) + electron: + specifier: 34.1.1 + version: 34.1.1 + electron-packager-languages: + specifier: 0.6.0 + version: 0.6.0 + electron-vite: + specifier: ^3.0.0 + version: 3.0.0(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)) + jsdom: + specifier: ^26.0.0 + version: 26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) + sass: + specifier: 1.85.1 + version: 1.85.1 + tailwindcss: + specifier: ^3.3.3 + version: 3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3)) + typescript: + specifier: ^5.7.3 + version: 5.7.3 + vite: + specifier: ^6.1.0 + version: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) + vite-plugin-singlefile: + specifier: 2.2.0 + version: 2.2.0(rollup@4.34.6)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)) + vite-tsconfig-paths: + specifier: ^5.1.4 + version: 5.1.4(typescript@5.7.3)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)) + vitest: + specifier: 3.0.8 + version: 3.0.8(@types/debug@4.1.12)(@types/node@22.13.10)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) + + apps/omega/src/main: + dependencies: + '@agent-infra/mcp-client': + specifier: workspace:* + version: link:../../../../packages/agent-infra/mcp-client + '@agent-infra/search': + specifier: workspace:* + version: link:../../../../packages/agent-infra/search/search + '@agent-infra/shared': + specifier: workspace:* + version: link:../../../../packages/agent-infra/shared + '@anthropic-ai/sdk': + specifier: 0.39.0 + version: 0.39.0(encoding@0.1.13) + '@electron-toolkit/preload': + specifier: ^3.0.1 + version: 3.0.1(electron@34.1.1) + '@electron-toolkit/utils': + specifier: ^4.0.0 + version: 4.0.0(electron@34.1.1) + '@google/generative-ai': + specifier: 0.24.0 + version: 0.24.0 + '@mistralai/mistralai': + specifier: 1.5.1 + version: 1.5.1(zod@3.24.2) + '@ui-tars/electron-ipc': + specifier: workspace:* + version: link:../../../../packages/ui-tars/electron-ipc + bufferutil: + specifier: 4.0.9 + version: 4.0.9 + dotenv: + specifier: 16.4.7 + version: 16.4.7 + fs-extra: + specifier: 11.3.0 + version: 11.3.0 + openai: + specifier: ^4.86.2 + version: 4.87.3(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.2) + update-electron-app: + specifier: ^3.1.0 + version: 3.1.1 + utf-8-validate: + specifier: 6.0.5 + version: 6.0.5 + ws: + specifier: 8.18.1 + version: 8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) + devDependencies: + '@types/fs-extra': + specifier: 11.0.4 + version: 11.0.4 + electron: + specifier: 34.1.1 + version: 34.1.1 + + apps/omega/src/renderer: + dependencies: + '@agent-infra/shared': + specifier: workspace:* + version: link:../../../../packages/agent-infra/shared + '@monaco-editor/react': + specifier: 4.7.0 + version: 4.7.0(monaco-editor@0.52.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/react': + specifier: 2.4.8 + version: 2.4.8(@types/react@18.3.18)(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@nextui-org/system': + specifier: 2.2.6 + version: 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': + specifier: 2.2.11 + version: 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@ui-tars/electron-ipc': + specifier: ^1.2.3 + version: 1.2.3(electron@34.3.3) + classnames: + specifier: 2.5.1 + version: 2.5.1 + clsx: + specifier: 2.1.1 + version: 2.1.1 + date-fns: + specifier: 4.1.0 + version: 4.1.0 + dayjs: + specifier: 1.11.13 + version: 1.11.13 + eventemitter3: + specifier: 5.0.1 + version: 5.0.1 + framer-motion: + specifier: 11.2.13 + version: 11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + jotai: + specifier: ^2.8.2 + version: 2.12.2(@types/react@18.3.18)(react@18.3.1) + jsonrepair: + specifier: 3.12.0 + version: 3.12.0 + jszip: + specifier: 3.10.1 + version: 3.10.1 + katex: + specifier: 0.16.21 + version: 0.16.21 + localforage: + specifier: ^1.10.0 + version: 1.10.0 + lodash-es: + specifier: 4.17.21 + version: 4.17.21 + lucide-react: + specifier: 0.479.0 + version: 0.479.0(react@18.3.1) + path-browserify: + specifier: 1.0.1 + version: 1.0.1 + react: + specifier: ^18.3.1 + version: 18.3.1 + react-dom: + specifier: ^18.3.1 + version: 18.3.1(react@18.3.1) + react-hot-toast: + specifier: 2.5.2 + version: 2.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-icons: + specifier: 5.2.1 + version: 5.2.1(react@18.3.1) + react-markdown: + specifier: 10.1.0 + version: 10.1.0(@types/react@18.3.18)(react@18.3.1) + react-split: + specifier: 2.0.14 + version: 2.0.14(react@18.3.1) + react-syntax-highlighter: + specifier: 15.5.0 + version: 15.5.0(react@18.3.1) + rehype-katex: + specifier: 7.0.1 + version: 7.0.1 + remark-gfm: + specifier: 4.0.1 + version: 4.0.1 + remark-math: + specifier: 6.0.0 + version: 6.0.0 + styled-components: + specifier: ^6.1.11 + version: 6.1.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + tailwind-merge: + specifier: 3.0.2 + version: 3.0.2 + use-dark-mode: + specifier: 2.3.1 + version: 2.3.1(react@18.3.1) + uuid: + specifier: 11.1.0 + version: 11.1.0 + xterm: + specifier: ^5.3.0 + version: 5.3.0 + xterm-addon-fit: + specifier: ^0.8.0 + version: 0.8.0(xterm@5.3.0) + xterm-addon-web-links: + specifier: ^0.9.0 + version: 0.9.0(xterm@5.3.0) + devDependencies: + '@agent-infra/search': + specifier: workspace:* + version: link:../../../../packages/agent-infra/search/search + '@tailwindcss/aspect-ratio': + specifier: 0.4.2 + version: 0.4.2(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@types/react': + specifier: ^18.3.18 + version: 18.3.18 + '@types/react-dom': + specifier: ^18.3.5 + version: 18.3.5(@types/react@18.3.18) + typescript: + specifier: ^5.7.3 + version: 5.7.3 + apps/ui-tars: dependencies: '@computer-use/node-mac-permissions': @@ -131,7 +416,7 @@ importers: version: 7.7.0(@electron/fuses@1.8.0) '@electron-forge/plugin-vite': specifier: ^7.7.0 - version: 7.7.0 + version: 7.7.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) '@electron-forge/publisher-github': specifier: ^7.7.0 version: 7.7.0(encoding@0.1.13) @@ -191,7 +476,7 @@ importers: version: link:../../packages/ui-tars/utio '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)) + version: 4.3.4(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1)) '@vitest/coverage-istanbul': specifier: ^3.0.3 version: 3.0.5(vitest@3.0.5) @@ -224,7 +509,7 @@ importers: version: 10.0.1 electron-vite: specifier: ^2.3.0 - version: 2.3.0(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)) + version: 2.3.0(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1)) eslint: specifier: ^8.57.0 version: 8.57.1 @@ -263,13 +548,13 @@ importers: version: 3.1.1 vite: specifier: ^5.3.1 - version: 5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4) + version: 5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.7.3)(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)) + version: 5.1.4(typescript@5.7.3)(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1)) vitest: specifier: ^3.0.2 - version: 3.0.5(@types/debug@4.1.12)(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4) + version: 3.0.5(@types/debug@4.1.12)(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) zustand: specifier: ^5.0.0 version: 5.0.3(@types/react@18.3.18)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) @@ -357,7 +642,7 @@ importers: version: link:../shared puppeteer-core: specifier: 24.1.1 - version: 24.1.1 + version: 24.1.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) devDependencies: '@rslib/core': specifier: 0.5.3 @@ -367,13 +652,13 @@ importers: version: 20.14.8 '@vitest/coverage-v8': specifier: 3.0.7 - version: 3.0.7(vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4)) + version: 3.0.7(vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)) typescript: specifier: ^5.7.3 version: 5.7.3 vitest: specifier: 3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4) + version: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) packages/agent-infra/browser-use: dependencies: @@ -388,26 +673,26 @@ importers: version: link:../shared '@langchain/core': specifier: 0.3.42 - version: 0.3.42(openai@4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2)) + version: 0.3.42(openai@4.87.3(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.2)) jsonrepair: specifier: 3.12.0 version: 3.12.0 openai: specifier: ^4.87.3 - version: 4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2) + version: 4.87.3(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.2) puppeteer-core: specifier: 24.1.1 - version: 24.1.1 + version: 24.1.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) zod: specifier: ^3.23.8 version: 3.24.2 devDependencies: '@langchain/aws': specifier: 0.1.6 - version: 0.1.6(@langchain/core@0.3.42(openai@4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2))) + version: 0.1.6(@langchain/core@0.3.42(openai@4.87.3(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.2))) '@langchain/openai': specifier: 0.4.4 - version: 0.4.4(@langchain/core@0.3.42(openai@4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2)))(encoding@0.1.13)(ws@8.18.0) + version: 0.4.4(@langchain/core@0.3.42(openai@4.87.3(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.2)))(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@rslib/core': specifier: 0.5.3 version: 0.5.3(typescript@5.7.3) @@ -416,7 +701,7 @@ importers: version: 20.14.8 '@vitest/coverage-v8': specifier: 3.0.7 - version: 3.0.7(vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4)) + version: 3.0.7(vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)) tsx: specifier: ^4.19.3 version: 4.19.3 @@ -425,7 +710,7 @@ importers: version: 5.7.3 vitest: specifier: 3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4) + version: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) packages/agent-infra/logger: devDependencies: @@ -468,7 +753,7 @@ importers: version: 10.0.0 openai: specifier: ^4.86.2 - version: 4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2) + version: 4.87.3(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.2) tsx: specifier: ^4.19.3 version: 4.19.3 @@ -477,7 +762,7 @@ importers: version: 5.7.3 vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4) + version: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) packages/agent-infra/mcp-servers/browser: dependencies: @@ -492,7 +777,7 @@ importers: version: 1.7.0 puppeteer-core: specifier: ^24.1.1 - version: 24.1.1 + version: 24.1.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) turndown: specifier: ^7.2.0 version: 7.2.0 @@ -523,7 +808,7 @@ importers: version: 5.7.3 vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.10)(happy-dom@17.1.1)(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.10)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) zod: specifier: ^3.23.8 version: 3.24.2 @@ -545,7 +830,7 @@ importers: version: 5.7.3 vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4) + version: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) zod: specifier: ^3.23.8 version: 3.24.2 @@ -588,7 +873,7 @@ importers: version: 5.7.3 vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.10)(happy-dom@17.1.1)(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.10)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) zod: specifier: ^3.23.8 version: 3.24.2 @@ -607,7 +892,7 @@ importers: version: 20.14.8 '@vitest/coverage-v8': specifier: 3.0.7 - version: 3.0.7(vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4)) + version: 3.0.7(vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)) rimraf: specifier: 4.1.0 version: 4.1.0 @@ -619,7 +904,7 @@ importers: version: 4.9.4 vitest: specifier: 3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4) + version: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) packages/agent-infra/search/browser-search: dependencies: @@ -641,7 +926,7 @@ importers: version: 20.14.8 '@vitest/coverage-v8': specifier: 3.0.7 - version: 3.0.7(vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4)) + version: 3.0.7(vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)) rimraf: specifier: 4.1.0 version: 4.1.0 @@ -653,7 +938,7 @@ importers: version: 4.9.4 vitest: specifier: 3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4) + version: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) packages/agent-infra/search/search: dependencies: @@ -681,7 +966,7 @@ importers: version: 20.14.8 '@vitest/coverage-v8': specifier: 3.0.7 - version: 3.0.7(vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4)) + version: 3.0.7(vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)) rimraf: specifier: 4.1.0 version: 4.1.0 @@ -693,7 +978,7 @@ importers: version: 4.9.4 vitest: specifier: 3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4) + version: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) packages/agent-infra/shared: dependencies: @@ -724,7 +1009,7 @@ importers: version: 4.9.4 vitest: specifier: 3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4) + version: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) packages/common/configs: devDependencies: @@ -746,13 +1031,13 @@ importers: version: 0.5.4(typescript@5.7.3) tsx: specifier: ^4.19.2 - version: 4.19.2 + version: 4.19.3 typescript: specifier: ^5.7.2 version: 5.7.3 vitest: specifier: ^3.0.2 - version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4) + version: 3.0.8(@types/debug@4.1.12)(@types/node@22.13.10)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) packages/ui-tars/action-parser: dependencies: @@ -771,7 +1056,7 @@ importers: version: 5.7.3 vitest: specifier: ^3.0.2 - version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) packages/ui-tars/cli: dependencies: @@ -811,7 +1096,7 @@ importers: version: 5.7.3 vitest: specifier: ^3.0.2 - version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) packages/ui-tars/electron-ipc: devDependencies: @@ -829,13 +1114,13 @@ importers: version: 5.7.3 vitest: specifier: ^3.0.2 - version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) packages/ui-tars/operators/browserbase: dependencies: '@browserbasehq/stagehand': specifier: ^1.13.0 - version: 1.13.0(@playwright/test@1.50.1)(deepmerge@2.2.1)(dotenv@16.4.7)(encoding@0.1.13)(openai@4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2))(zod@3.24.2) + version: 1.13.0(@playwright/test@1.50.1)(bufferutil@4.0.9)(deepmerge@4.3.1)(dotenv@16.4.7)(encoding@0.1.13)(openai@4.87.3(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.2))(utf-8-validate@6.0.5)(zod@3.24.2) '@ui-tars/shared': specifier: workspace:* version: link:../../shared @@ -860,7 +1145,7 @@ importers: version: 5.7.3 vitest: specifier: ^3.0.2 - version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) packages/ui-tars/operators/nut-js: dependencies: @@ -894,7 +1179,7 @@ importers: version: 5.7.3 vitest: specifier: ^3.0.2 - version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) packages/ui-tars/sdk: dependencies: @@ -912,7 +1197,7 @@ importers: version: 1.6.0 openai: specifier: 4.85.1 - version: 4.85.1(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2) + version: 4.85.1(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.2) devDependencies: '@common/configs': specifier: workspace:* @@ -925,7 +1210,7 @@ importers: version: 1.4.9 '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.3.4(vite@5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4)) + version: 4.3.4(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0)) happy-dom: specifier: ^17.1.1 version: 17.1.1 @@ -943,7 +1228,7 @@ importers: version: 5.7.3 vitest: specifier: ^3.0.2 - version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) vitest-browser-react: specifier: ^0.1.1 version: 0.1.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(@vitest/browser@3.0.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vitest@3.0.5) @@ -989,6 +1274,10 @@ packages: '@actions/io@1.1.3': resolution: {integrity: sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==} + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -999,6 +1288,12 @@ packages: '@anthropic-ai/sdk@0.27.3': resolution: {integrity: sha512-IjLt0gd3L4jlOfilxVXTifn42FnVffMgDC04RJK1KDZpmkBWLv0XC92MVVmkxrFZNS/7l3xWgP/I3nqtX1sQHw==} + '@anthropic-ai/sdk@0.39.0': + resolution: {integrity: sha512-eMyDIPRZbt1CCLErRCi3exlAvNkBtRe+kW5vvJyef93PmNr/clstYgHhtvmkxN82nlKgzyGPCyGxrm0JQ1ZIdg==} + + '@asamuzakjp/css-color@3.1.1': + resolution: {integrity: sha512-hpRD68SV2OMcZCsrbdkccTw5FXjNDLo5OuqSHyHZfwweGsDWZwDJ2+gONyNAbazZclobMirACLw0lk8WVxIqxA==} + '@ast-grep/napi-darwin-arm64@0.35.0': resolution: {integrity: sha512-T+MN4Oinc+sXjXCIHzfxDDWY7r2pKgPxM6zVeVlkMTrJV2mJtyKYBIS+CABhRM6kflps2T2I6l4DGaKV/8Ym9w==} engines: {node: '>= 10'} @@ -1632,6 +1927,34 @@ packages: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} + '@csstools/color-helpers@5.0.2': + resolution: {integrity: sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==} + engines: {node: '>=18'} + + '@csstools/css-calc@2.1.2': + resolution: {integrity: sha512-TklMyb3uBB28b5uQdxjReG4L80NxAqgrECqLZFQbyLekwwlcDDS8r3f07DKqeo8C4926Br0gf/ZDe17Zv4wIuw==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.4 + '@csstools/css-tokenizer': ^3.0.3 + + '@csstools/css-color-parser@3.0.8': + resolution: {integrity: sha512-pdwotQjCCnRPuNi06jFuP68cykU1f3ZWExLe/8MQ1LOs8Xq+fTkYgd+2V8mWUWMrOn9iS2HftPVaMZDaXzGbhQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.4 + '@csstools/css-tokenizer': ^3.0.3 + + '@csstools/css-parser-algorithms@3.0.4': + resolution: {integrity: sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-tokenizer': ^3.0.3 + + '@csstools/css-tokenizer@3.0.3': + resolution: {integrity: sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==} + engines: {node: '>=18'} + '@dqbd/tiktoken@1.0.20': resolution: {integrity: sha512-WsLzNYO1uzYOvIXunvwRcQObD4UsebirRnGzOuZc/x4oJ+0haEjdNxeeCfFaQami+Bai3u06QTt0/FWyYRsIhw==} @@ -1652,6 +1975,10 @@ packages: resolution: {integrity: sha512-9u+mmBLBAUHuH0+IGw94EGVTDD4CPKX05h5pp5/PIaijy16ss5dymK4vEp3s2XJMFlza2PsCgLLYBgDcAE2Dqg==} engines: {node: '>= 16.4.0'} + '@electron-forge/maker-deb@7.7.0': + resolution: {integrity: sha512-yMT0TWpCwXaC9+AYpSr9PBIhcZR297wdJUk5PnEnIROsvOW2y1sh7ny7YdHXTxkvhWdbqY8sLQruL3BE+CyE8w==} + engines: {node: '>= 16.4.0'} + '@electron-forge/maker-dmg@7.7.0': resolution: {integrity: sha512-Hq4nsY6eOdtigN4RLc9i2SbLEr46J6FfbdU+r39R/EVIJ82WRk7JPrCqbckEM7KY1TjhmrnhPWeviWoGAjbXhA==} engines: {node: '>= 16.4.0'} @@ -1660,6 +1987,10 @@ packages: resolution: {integrity: sha512-wF924UHrLV0CiO1iWXY3satPl9bW98o11l6cOA6JMxkbgpwO4OW86qJPffuqlwRJnAgaVwYbvggFPWv0ILXEUg==} engines: {node: '>= 16.4.0'} + '@electron-forge/maker-rpm@7.7.0': + resolution: {integrity: sha512-M9cFO6bCnOuA6BwBUUw35FrnWciWeFyLuByO0KOn3zEYeBDqG2fbBgXXS6OKcRHrpnJVTwiLY5S7eviyO1DJzQ==} + engines: {node: '>= 16.4.0'} + '@electron-forge/maker-squirrel@7.7.0': resolution: {integrity: sha512-9Gcq8e6+1MuXGeE7bEpk7VTd86c0riXTsDFKW8OqwVozeBYhoCd6GU59RmI3b7mcAIKOY1cBY97B+/5bnZ8ZYg==} engines: {node: '>= 16.4.0'} @@ -1756,6 +2087,11 @@ packages: peerDependencies: electron: '>=13.0.0' + '@electron-toolkit/utils@4.0.0': + resolution: {integrity: sha512-qXSntwEzluSzKl4z5yFNBknmPGjPa3zFhE4mp9+h0cgokY5ornAeP+CJQDBhKsL1S58aOQfcwkD3NwLZCl+64g==} + peerDependencies: + electron: '>=13.0.0' + '@electron/asar@3.3.1': resolution: {integrity: sha512-WtpC/+34p0skWZiarRjLAyqaAX78DofhDxnREy/V5XHfu1XEXbFCSSMcDQ6hNCPJFaPy8/NnUgYuf9uiCkvKPg==} engines: {node: '>=10.12.0'} @@ -1819,9 +2155,15 @@ packages: '@emotion/hash@0.9.2': resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} + '@emotion/is-prop-valid@1.2.2': + resolution: {integrity: sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==} + '@emotion/is-prop-valid@1.3.1': resolution: {integrity: sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==} + '@emotion/memoize@0.8.1': + resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} + '@emotion/memoize@0.9.0': resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} @@ -1845,7 +2187,7 @@ packages: peerDependencies: '@emotion/react': ^11.0.0-rc.0 '@types/react': '*' - react: 18.3.1 + react: '>=16.8.0' peerDependenciesMeta: '@types/react': optional: true @@ -1853,6 +2195,9 @@ packages: '@emotion/unitless@0.10.0': resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} + '@emotion/unitless@0.8.1': + resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} + '@emotion/use-insertion-effect-with-fallbacks@1.2.0': resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==} peerDependencies: @@ -1876,6 +2221,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.24.2': + resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.25.0': resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==} engines: {node: '>=18'} @@ -1894,6 +2245,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.24.2': + resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.25.0': resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==} engines: {node: '>=18'} @@ -1912,6 +2269,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.24.2': + resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.25.0': resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==} engines: {node: '>=18'} @@ -1930,6 +2293,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/android-x64@0.24.2': + resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.25.0': resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==} engines: {node: '>=18'} @@ -1948,6 +2317,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.24.2': + resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.25.0': resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==} engines: {node: '>=18'} @@ -1966,6 +2341,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.24.2': + resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.25.0': resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==} engines: {node: '>=18'} @@ -1984,6 +2365,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.24.2': + resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.25.0': resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==} engines: {node: '>=18'} @@ -2002,6 +2389,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.24.2': + resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.25.0': resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==} engines: {node: '>=18'} @@ -2020,6 +2413,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.24.2': + resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.25.0': resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==} engines: {node: '>=18'} @@ -2038,6 +2437,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.24.2': + resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.25.0': resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==} engines: {node: '>=18'} @@ -2056,6 +2461,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.24.2': + resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.25.0': resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==} engines: {node: '>=18'} @@ -2074,6 +2485,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.24.2': + resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.25.0': resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==} engines: {node: '>=18'} @@ -2092,6 +2509,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.24.2': + resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.25.0': resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==} engines: {node: '>=18'} @@ -2110,6 +2533,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.24.2': + resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.25.0': resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==} engines: {node: '>=18'} @@ -2128,6 +2557,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.24.2': + resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.25.0': resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==} engines: {node: '>=18'} @@ -2146,6 +2581,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.24.2': + resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.25.0': resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==} engines: {node: '>=18'} @@ -2164,12 +2605,24 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.24.2': + resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.25.0': resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==} engines: {node: '>=18'} cpu: [x64] os: [linux] + '@esbuild/netbsd-arm64@0.24.2': + resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-arm64@0.25.0': resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==} engines: {node: '>=18'} @@ -2188,6 +2641,12 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.24.2': + resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.25.0': resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==} engines: {node: '>=18'} @@ -2200,6 +2659,12 @@ packages: cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-arm64@0.24.2': + resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-arm64@0.25.0': resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==} engines: {node: '>=18'} @@ -2218,6 +2683,12 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.24.2': + resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.25.0': resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==} engines: {node: '>=18'} @@ -2236,6 +2707,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.24.2': + resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.25.0': resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==} engines: {node: '>=18'} @@ -2254,6 +2731,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.24.2': + resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.25.0': resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==} engines: {node: '>=18'} @@ -2272,6 +2755,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.24.2': + resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.25.0': resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==} engines: {node: '>=18'} @@ -2290,6 +2779,12 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.24.2': + resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.25.0': resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==} engines: {node: '>=18'} @@ -2318,6 +2813,21 @@ packages: resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} + '@formatjs/ecma402-abstract@2.3.3': + resolution: {integrity: sha512-pJT1OkhplSmvvr6i3CWTPvC/FGC06MbN5TNBfRO6Ox62AEz90eMq+dVvtX9Bl3jxCEkS0tATzDarRZuOLw7oFg==} + + '@formatjs/fast-memoize@2.2.6': + resolution: {integrity: sha512-luIXeE2LJbQnnzotY1f2U2m7xuQNj2DA8Vq4ce1BY9ebRZaoPB1+8eZ6nXpLzsxuW5spQxr7LdCg+CApZwkqkw==} + + '@formatjs/icu-messageformat-parser@2.11.1': + resolution: {integrity: sha512-o0AhSNaOfKoic0Sn1GkFCK4MxdRsw7mPJ5/rBpIqdvcC7MIuyUSW8WChUEvrK78HhNpYOgqCQbINxCTumJLzZA==} + + '@formatjs/icu-skeleton-parser@1.8.13': + resolution: {integrity: sha512-N/LIdTvVc1TpJmMt2jVg0Fr1F7Q1qJPdZSCs19unMskCmVQ/sa0H9L8PWt13vq+gLdLg1+pPsvBLydL1Apahjg==} + + '@formatjs/intl-localematcher@0.6.0': + resolution: {integrity: sha512-4rB4g+3hESy1bHSBG3tDFaMY2CH67iT7yne1e+0CLTsGLDcmoEWWpJjjpWVaYgYfYuohIRuo0E+N536gd2ZHZA==} + '@gar/promisify@1.1.3': resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} @@ -2325,6 +2835,10 @@ packages: resolution: {integrity: sha512-DviMgrnljEKh6qkDT2pVFW+NEuVhggqBUoEnyy2PNL7l4ewxXRJubk3PctC9yPl1AdRIlhqP7E076QQt+IWuTg==} engines: {node: '>=18.0.0'} + '@google/generative-ai@0.24.0': + resolution: {integrity: sha512-fnEITCGEB7NdX0BhoYZ/cq/7WPZ1QS5IzJJfC3Tg/OwkvBetMiVJciyaan297OvE4B9Jg1xvo0zIazX/9sGu1Q==} + engines: {node: '>=18.0.0'} + '@humanwhocodes/config-array@0.13.0': resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} @@ -2482,6 +2996,18 @@ packages: '@types/node': optional: true + '@internationalized/date@3.7.0': + resolution: {integrity: sha512-VJ5WS3fcVx0bejE/YHfbDKR/yawZgKqn/if+oEeLqNwBtPzVB06olkfcnojTmEMX+gTpH+FlQ69SHNitJ8/erQ==} + + '@internationalized/message@3.1.6': + resolution: {integrity: sha512-JxbK3iAcTIeNr1p0WIFg/wQJjIzJt9l/2KNY/48vXV7GRGZSv3zMxJsce008fZclk2cDC8y0Ig3odceHO7EfNQ==} + + '@internationalized/number@3.6.0': + resolution: {integrity: sha512-PtrRcJVy7nw++wn4W2OuePQQfTqDzfusSuY1QTtui4wa7r+rGVtR75pO8CyKvHvzyQYi3Q1uO5sY0AsB4e65Bw==} + + '@internationalized/string@3.2.5': + resolution: {integrity: sha512-rKs71Zvl2OKOHM+mzAFMIyqR5hI1d1O6BBkMK2/lkfg3fkmVh9Eeg0awcA8W2WqYqDOv6a86DIOlFpggwLtbuw==} + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -2804,6 +3330,10 @@ packages: peerDependencies: '@langchain/core': '>=0.3.39 <0.4.0' + '@malept/cross-spawn-promise@1.1.1': + resolution: {integrity: sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==} + engines: {node: '>= 10'} + '@malept/cross-spawn-promise@2.0.0': resolution: {integrity: sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==} engines: {node: '>= 12.13.0'} @@ -2814,8 +3344,8 @@ packages: '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} - '@mistralai/mistralai@1.5.0': - resolution: {integrity: sha512-AIn8pwAwA/fDvEUvmkt+40zH1ZmfaG3Q7oUWl17GUEC1tU7ZPwYz8Cv9P59lyS1SisHdDSu81oknO7f1ywkz8Q==} + '@mistralai/mistralai@1.5.1': + resolution: {integrity: sha512-Ie0EH4dAO11MEXR5N2kS2cgr+ycTWvqN/yP9bKrtmUEqjdcF4i7DLxtrFMUw5l2dOPhrkX93G4SziFiATPWu2w==} peerDependencies: zod: '>= 3' @@ -2841,6 +3371,16 @@ packages: '@module-federation/webpack-bundler-runtime@0.8.4': resolution: {integrity: sha512-HggROJhvHPUX7uqBD/XlajGygMNM1DG0+4OAkk8MBQe4a18QzrRNzZt6XQbRTSG4OaEoyRWhQHvYD3Yps405tQ==} + '@monaco-editor/loader@1.5.0': + resolution: {integrity: sha512-hKoGSM+7aAc7eRTRjpqAZucPmoNOC4UUbknb/VNoTkEIkCPhqV8LfbsgM1webRM7S/z21eHEx9Fkwx8Z/C/+Xw==} + + '@monaco-editor/react@4.7.0': + resolution: {integrity: sha512-cyzXQCtO47ydzxpQtCGSQGOC8Gk3ZUeBXFAxD+CWXYFo5OqZyZUonFl0DwUlTyAfRHntBfw2p3w4s9R6oe1eCA==} + peerDependencies: + monaco-editor: '>= 0.25.0 < 1' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + '@mozilla/readability@0.5.0': resolution: {integrity: sha512-Z+CZ3QaosfFaTqvhQsIktyGrjFjSC0Fa4EMph4mqKnWhmyoGICsV/8QK+8HpXut6zV7zwfWwqDmEjtk1Qf6EgQ==} engines: {node: '>=14.0.0'} @@ -2849,5995 +3389,8467 @@ packages: resolution: {integrity: sha512-wK+5pLK5XFmgtH3aQ2YVvA3HohS3xqV/OxuVOdNx9Wpnz7VE/fnC+e1A7ln6LFYeck7gOJ/dsZV6OLplOtAJ2w==} engines: {node: '>=18'} - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + '@nextui-org/accordion@2.0.40': + resolution: {integrity: sha512-aJmhflLOXOFTjbBWlWto30hYzimw+sw1EZwSRG9CdxbjRact2dRfCLsZQmHkJW2ifVx51g/qLNE2NSFAi2L8dA==} + deprecated: This package has been deprecated. Please use @heroui/accordion instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + framer-motion: '>=10.17.0' + react: '>=18' + react-dom: '>=18' - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} + '@nextui-org/aria-utils@2.0.26': + resolution: {integrity: sha512-e81HxkNI3/HCPPJT9OVK0g0ivTkuqeeQ043WlAxvgf+upFTEvNN5vmsSKBfWGgfZpsVHgNyHIzwbHjy9zKePLQ==} + peerDependencies: + react: '>=18' + react-dom: '>=18' - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@nextui-org/autocomplete@2.1.7': + resolution: {integrity: sha512-T3dF5akCXvJ21OxwPxAQmTjHoiB/GMUa2ppcJ9PStfCCPiI2vjwb4CO4q/duj/nXJIpQf/UfPhpSonnJ444o6g==} + deprecated: This package has been deprecated. Please use @heroui/autocomplete instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + framer-motion: '>=10.17.0' + react: '>=18' + react-dom: '>=18' - '@npmcli/fs@2.1.2': - resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + '@nextui-org/avatar@2.0.33': + resolution: {integrity: sha512-SPnIKM+34T/a+KCRCBiG8VwMBzu2/bap7IPHhmICtQ6KmG8Dzmazj3tGZsVt7HjhMRVY7e1vzev4IMaHqkIdRg==} + deprecated: This package has been deprecated. Please use @heroui/avatar instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + react: '>=18' + react-dom: '>=18' - '@npmcli/move-file@2.0.1': - resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - deprecated: This functionality has been moved to @npmcli/fs + '@nextui-org/badge@2.0.32': + resolution: {integrity: sha512-vlV/SY0e7/AmpVP7hB57XoSOo95Fr3kRWcLfMx8yL8VDR2UWMFaMlrT7JTghdgTGFSO7L1Ov1BFwDRRKVe3eyg==} + deprecated: This package has been deprecated. Please use @heroui/badge instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + react: '>=18' + react-dom: '>=18' - '@octokit/auth-token@2.5.0': - resolution: {integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==} + '@nextui-org/breadcrumbs@2.0.13': + resolution: {integrity: sha512-tdet47IBOwUaJL0PmxTuGH+ZI2nucyNwG3mX1OokfIXmq5HuMCGKaVFXaNP8mWb4Pii2bvtRqaqTfxmUb3kjGw==} + deprecated: This package has been deprecated. Please use @heroui/breadcrumbs instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + react: '>=18' + react-dom: '>=18' - '@octokit/core@3.6.0': - resolution: {integrity: sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==} + '@nextui-org/button@2.0.38': + resolution: {integrity: sha512-XbgyqBv+X7QirXeriGwkqkMOENpAxXRo+jzfMyBMvfsM3kwrFj92OSF1F7/dWDvcW7imVZB9o2Ci7LIppq9ZZQ==} + deprecated: This package has been deprecated. Please use @heroui/button instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + framer-motion: '>=10.17.0' + react: '>=18' + react-dom: '>=18' - '@octokit/endpoint@6.0.12': - resolution: {integrity: sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==} + '@nextui-org/calendar@2.0.12': + resolution: {integrity: sha512-FnEnOQnsuyN+F+hy4LEJBvZZcfXMpDGgLkTdnDdoZObXQWwd0PWPjU8GzY+ukhhR5eiU7QIj2AADVRCvuAkiLA==} + deprecated: This package has been deprecated. Please use @heroui/calendar instead. + peerDependencies: + '@nextui-org/system': '>=2.1.0' + '@nextui-org/theme': '>=2.2.0' + react: '>=18' + react-dom: '>=18' - '@octokit/graphql@4.8.0': - resolution: {integrity: sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==} + '@nextui-org/card@2.0.34': + resolution: {integrity: sha512-2RYNPsQkM0FOifGCKmRBR3AuYgYCNmPV7dyA5M3D9Lf0APsHHtsXRA/GeIJ/AuPnglZrYBX8wpM5kLt3dnlQjQ==} + deprecated: This package has been deprecated. Please use @heroui/card instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + framer-motion: '>=10.17.0' + react: '>=18' + react-dom: '>=18' - '@octokit/openapi-types@12.11.0': - resolution: {integrity: sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==} + '@nextui-org/checkbox@2.1.5': + resolution: {integrity: sha512-PSCWmxEzFPfeIJfoGAtbQS5T7JvBRblUMz5NdCMArA8MLvWW8EKL41cMPsqWjaUanjD0fAI8Q9HuDfBZnkcPbw==} + deprecated: This package has been deprecated. Please use @heroui/checkbox instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + react: '>=18' + react-dom: '>=18' - '@octokit/openapi-types@23.0.1': - resolution: {integrity: sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==} + '@nextui-org/chip@2.0.33': + resolution: {integrity: sha512-6cQkMTV/34iPprjnfK6xlwkv5lnZjMsbYBN3ZqHHrQfV2zQg19ewFcuIw9XlRYA3pGYPpoycdOmSdQ6qXc66lQ==} + deprecated: This package has been deprecated. Please use @heroui/chip instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + react: '>=18' + react-dom: '>=18' - '@octokit/plugin-paginate-rest@2.21.3': - resolution: {integrity: sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==} + '@nextui-org/code@2.0.33': + resolution: {integrity: sha512-G2254ov2rsPxFEoJ0UHVHe+rSmNYwoHZc7STAtiTsJ2HfebZPQbNnfuCifMIpa+kgvHrMBGb85eGk0gy1R+ArA==} + deprecated: This package has been deprecated. Please use @heroui/code instead. peerDependencies: - '@octokit/core': '>=2' + '@nextui-org/theme': '>=2.1.0' + react: '>=18' + react-dom: '>=18' - '@octokit/plugin-request-log@1.0.4': - resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==} + '@nextui-org/date-input@2.1.4': + resolution: {integrity: sha512-U8Pbe7EhMp9VTfFxB/32+A9N9cJJWswebIz1qpaPy0Hmr92AHS3c1qVTcspkop6wbIM8AnHWEST0QkR95IXPDA==} + deprecated: This package has been deprecated. Please use @heroui/date-input instead. peerDependencies: - '@octokit/core': '>=3' + '@nextui-org/system': '>=2.1.0' + '@nextui-org/theme': '>=2.2.0' + react: '>=18' + react-dom: '>=18' - '@octokit/plugin-rest-endpoint-methods@5.16.2': - resolution: {integrity: sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==} + '@nextui-org/date-picker@2.1.8': + resolution: {integrity: sha512-pokAFcrf6AdM53QHf1EzvqVhj8imQRZHWitK9eZPtIdGzJzx28dW0ir7ID0lQFMiNNIQTesSpBLzedTawbcJrg==} + deprecated: This package has been deprecated. Please use @heroui/date-picker instead. peerDependencies: - '@octokit/core': '>=3' + '@nextui-org/system': '>=2.1.0' + '@nextui-org/theme': '>=2.2.0' + react: '>=18' + react-dom: '>=18' - '@octokit/plugin-retry@3.0.9': - resolution: {integrity: sha512-r+fArdP5+TG6l1Rv/C9hVoty6tldw6cE2pRHNGmFPdyfrc696R6JjrQ3d7HdVqGwuzfyrcaLAKD7K8TX8aehUQ==} + '@nextui-org/divider@2.0.32': + resolution: {integrity: sha512-2B2j3VmvVDFnMc9Uw7UWMkByA+osgnRmVwMZNZjl9g3oCycz3UDXotNJXjgsLocT8tGO8UwMcrdgo7QBZl52uw==} + deprecated: This package has been deprecated. Please use @heroui/divider instead. + peerDependencies: + '@nextui-org/theme': '>=2.1.0' + react: '>=18' + react-dom: '>=18' - '@octokit/request-error@2.1.0': - resolution: {integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==} + '@nextui-org/dropdown@2.1.31': + resolution: {integrity: sha512-tP6c5MAhWK4hJ6U02oX6APUpjjrn97Zn7t+56Xx4YyQOSj0CJx18VF0JsU+MrjFZxPX3UBKU3B2zGBHOEGE4Kw==} + deprecated: This package has been deprecated. Please use @heroui/dropdown instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + framer-motion: '>=10.17.0' + react: '>=18' + react-dom: '>=18' - '@octokit/request-error@5.1.1': - resolution: {integrity: sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==} - engines: {node: '>= 18'} + '@nextui-org/framer-utils@2.0.25': + resolution: {integrity: sha512-bhQKDg4c5Da4II4UYLKyvYagusTd62eVwPqpfUP+GHZKKZcmRaS6MQZTh4xJYbpyh298S4jRSH/AUAiN/OK3TQ==} + peerDependencies: + framer-motion: '>=10.17.0' + react: '>=18' + react-dom: '>=18' - '@octokit/request@5.6.3': - resolution: {integrity: sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==} + '@nextui-org/image@2.0.32': + resolution: {integrity: sha512-JpE0O8qAeJpQA61ZnXNLH76to+dbx93PR5tTOxSvmTxtnuqVg4wl5ar/SBY3czibJPr0sj33k8Mv2EfULjoH7Q==} + deprecated: This package has been deprecated. Please use @heroui/image instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + react: '>=18' + react-dom: '>=18' - '@octokit/rest@18.12.0': - resolution: {integrity: sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==} + '@nextui-org/input@2.2.5': + resolution: {integrity: sha512-xLgyKcnb+RatRZ62AbCFfTpS3exd2bPSSR75UFKylHHhgX+nvVOkX0dQgmr9e0V8IEECeRvbltw2s/laNFPTtg==} + deprecated: This package has been deprecated. Please use @heroui/input instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + react: '>=18' + react-dom: '>=18' - '@octokit/types@13.8.0': - resolution: {integrity: sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==} + '@nextui-org/kbd@2.0.34': + resolution: {integrity: sha512-sO6RJPgEFccFV8gmfYMTVeQ4f9PBYh09OieRpsZhN4HqdfWwEaeT6LrmdBko3XnJ0T6Me3tBrYULgKWcDcNogw==} + deprecated: This package has been deprecated. Please use @heroui/kbd instead. + peerDependencies: + '@nextui-org/theme': '>=2.1.0' + react: '>=18' + react-dom: '>=18' - '@octokit/types@6.41.0': - resolution: {integrity: sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==} + '@nextui-org/link@2.0.35': + resolution: {integrity: sha512-0XVUsSsysu+WMssokTlLHiMnjr1N6D2Uh3bIBcdFwSqmTLyq+Llgexlm6Fuv1wADRwsR8/DGFp3Pr826cv2Svg==} + deprecated: This package has been deprecated. Please use @heroui/link instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + react: '>=18' + react-dom: '>=18' - '@octokit/webhooks-schemas@6.11.0': - resolution: {integrity: sha512-ekca2jZhb2vfQy43rjvJoV77IwEKvA42BmJ2m8H3WaNfG9BF05RodnFjh3MSOksNseoNO8w8IPLZ3d5546NH2w==} + '@nextui-org/listbox@2.1.27': + resolution: {integrity: sha512-B9HW/k0awfXsYaNyjaqv/GvEioVzrsCsOdSxVQZgQ3wQ6jNXmGRe1/X6IKg0fIa+P0v379kSgAqrZcwfRpKnWw==} + deprecated: This package has been deprecated. Please use @heroui/listbox instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + react: '>=18' + react-dom: '>=18' - '@octokit/webhooks-types@6.11.0': - resolution: {integrity: sha512-AanzbulOHljrku1NGfafxdpTCfw2ENaWzH01N2vqQM+cUFbk868Cgh0xylz0JIM9BoKbfI++bdD6EYX0Q/UTEw==} + '@nextui-org/menu@2.0.30': + resolution: {integrity: sha512-hZRr/EQ5JxB6yQFmUhDSv9pyLTJmaB4SFC/t5A17UljRhMexlvTU6QpalYIkbY0R/bUXvOkTJNzsRgI5OOQ/aA==} + deprecated: This package has been deprecated. Please use @heroui/menu instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + react: '>=18' + react-dom: '>=18' - '@open-draft/deferred-promise@2.2.0': - resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} + '@nextui-org/modal@2.0.41': + resolution: {integrity: sha512-Sirn319xAf7E4cZqvQ0o0Vd3Xqy0FRSuhOTwp8dALMGTMY61c2nIyurgVCNP6hh8dMvMT7zQEPP9/LE0boFCEQ==} + deprecated: This package has been deprecated. Please use @heroui/modal instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + framer-motion: '>=10.17.0' + react: '>=18' + react-dom: '>=18' - '@open-draft/logger@0.3.0': - resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} + '@nextui-org/navbar@2.0.37': + resolution: {integrity: sha512-HuHXMU+V367LlvSGjqRPBNKmOERLvc4XWceva+KmiT99BLqHmMECkQVTR6ogO36eJUU96aR8JSfAiHLjvw5msw==} + deprecated: This package has been deprecated. Please use @heroui/navbar instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + framer-motion: '>=10.17.0' + react: '>=18' + react-dom: '>=18' - '@open-draft/until@2.1.0': - resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} + '@nextui-org/pagination@2.0.36': + resolution: {integrity: sha512-VKs2vMj8dybNzb/WkAMmvFBsxdgBvpVihIA4eXSo2ve7fpcLjIF1iPLHuDgpSyv3h3dy009sQTVo3lVTVT1a6w==} + deprecated: This package has been deprecated. Please use @heroui/pagination instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + react: '>=18' + react-dom: '>=18' - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} + '@nextui-org/popover@2.1.29': + resolution: {integrity: sha512-qGjMnAQVHQNfG571h9Tah2MXPs5mhxcTIj4TuBgwPzQTWXjjeffaHV3FlHdg5PxjTpNZOdDfrg0eRhDqIjKocQ==} + deprecated: This package has been deprecated. Please use @heroui/popover instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + framer-motion: '>=10.17.0' + react: '>=18' + react-dom: '>=18' - '@pkgr/core@0.1.1': - resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@nextui-org/progress@2.0.34': + resolution: {integrity: sha512-rJmZCrLdufJKLsonJ37oPOEHEpZykD4c+0G749zcKOkRXHOD9DiQian2YoZEE/Yyf3pLdFQG3W9vSLbsgED3PQ==} + deprecated: This package has been deprecated. Please use @heroui/progress instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + react: '>=18' + react-dom: '>=18' - '@playwright/test@1.50.1': - resolution: {integrity: sha512-Jii3aBg+CEDpgnuDxEp/h7BimHcUTDlpEtce89xEumlJ5ef2hqepZ+PWp1DDpYC/VO9fmWVI1IlEaoI5fK9FXQ==} - engines: {node: '>=18'} - hasBin: true + '@nextui-org/radio@2.1.5': + resolution: {integrity: sha512-0tF/VkMQv+KeYmFQpkrpz9S7j7U8gqCet+F97Cz7fFjdb+Q3w9waBzg84QayD7EZdjsYW4FNSkjPeiBhLdVUsw==} + deprecated: This package has been deprecated. Please use @heroui/radio instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + react: '>=18' + react-dom: '>=18' - '@polka/url@1.0.0-next.28': - resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} + '@nextui-org/react-rsc-utils@2.0.14': + resolution: {integrity: sha512-s0GVgDhScyx+d9FtXd8BXf049REyaPvWsO4RRr7JDHrk91NlQ11Mqxka9o+8g5NX0rphI0rbe3/b1Dz+iQRx3w==} + peerDependencies: + react: '>=18' - '@popperjs/core@2.11.8': - resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + '@nextui-org/react-utils@2.0.17': + resolution: {integrity: sha512-U/b49hToVfhOM4dg4n57ZyUjLpts4JogQ139lfQBYPTb8z/ATNsJ3vLIqW5ZvDK6L0Er+JT11UVQ+03m7QMvaQ==} + peerDependencies: + react: '>=18' - '@puppeteer/browsers@2.7.0': - resolution: {integrity: sha512-bO61XnTuopsz9kvtfqhVbH6LTM1koxK0IlBR+yuVrM2LB7mk8+5o1w18l5zqd5cs8xlf+ntgambqRqGifMDjog==} - engines: {node: '>=18'} - hasBin: true + '@nextui-org/react@2.4.8': + resolution: {integrity: sha512-ZwXg6As3A+Gs+Jyc42t4MHNupHEsh9YmEaypE20ikqIPTCLQnrGQ/RWOGwzZ2a9kZWbZ89a/3rJwZMRKdcemxg==} + deprecated: This package has been deprecated. Please use @heroui/react instead. + peerDependencies: + framer-motion: '>=10.17.0' + react: '>=18' + react-dom: '>=18' - '@rollup/rollup-android-arm-eabi@4.34.6': - resolution: {integrity: sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==} - cpu: [arm] - os: [android] + '@nextui-org/ripple@2.0.33': + resolution: {integrity: sha512-Zsa60CXtGCF7weTCFbSfT0OlxlGHdd5b/sSJTYrmMZRHOIUpHW8kT0bxVYF/6X8nCCJYxzBKXUqdE3Y31fhNeQ==} + deprecated: This package has been deprecated. Please use @heroui/ripple instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + framer-motion: '>=10.17.0' + react: '>=18' + react-dom: '>=18' - '@rollup/rollup-android-arm64@4.34.6': - resolution: {integrity: sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==} - cpu: [arm64] - os: [android] + '@nextui-org/scroll-shadow@2.1.20': + resolution: {integrity: sha512-8ULiUmbZ/Jzr1okI8Yzjzl5M4Ow3pJEm34hT5id0EaMIgklNa3Nnp/Dyp54JwwUbI8Kt3jOAMqkPitGIZyo5Ag==} + deprecated: This package has been deprecated. Please use @heroui/scroll-shadow instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + react: '>=18' + react-dom: '>=18' - '@rollup/rollup-darwin-arm64@4.34.6': - resolution: {integrity: sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==} - cpu: [arm64] - os: [darwin] + '@nextui-org/select@2.2.7': + resolution: {integrity: sha512-lA2EOjquhiHmLSInHFEarq64ZOQV37+ry1d8kvsqJ7R9dsqw1QEuMzH2Kk8/NqwrYMccHh5iAZ7PaLp90NSSxg==} + deprecated: This package has been deprecated. Please use @heroui/select instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + framer-motion: '>=10.17.0' + react: '>=18' + react-dom: '>=18' - '@rollup/rollup-darwin-x64@4.34.6': - resolution: {integrity: sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==} - cpu: [x64] - os: [darwin] + '@nextui-org/shared-icons@2.0.9': + resolution: {integrity: sha512-WG3yinVY7Tk9VqJgcdF4V8Ok9+fcm5ey7S1els7kujrfqLYxtqoKywgiY/7QHwZlfQkzpykAfy+NAlHkTP5hMg==} + peerDependencies: + react: '>=18' - '@rollup/rollup-freebsd-arm64@4.34.6': - resolution: {integrity: sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==} - cpu: [arm64] - os: [freebsd] + '@nextui-org/shared-utils@2.0.8': + resolution: {integrity: sha512-ZEtoMPXS+IjT8GvpJTS9IWDnT1JNCKV+NDqqgysAf1niJmOFLyJgl6dh/9n4ufcGf1GbSEQN+VhJasEw7ajYGQ==} - '@rollup/rollup-freebsd-x64@4.34.6': - resolution: {integrity: sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==} - cpu: [x64] - os: [freebsd] + '@nextui-org/skeleton@2.0.32': + resolution: {integrity: sha512-dS0vuRrc4oWktW3wa/KFhcBNnV0oiDqKXP4BqRj7wgS01fOAqj3cJiqwUDLKO8GbEnxLkbqLBFcUoLgktpRszQ==} + deprecated: This package has been deprecated. Please use @heroui/skeleton instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + react: '>=18' + react-dom: '>=18' - '@rollup/rollup-linux-arm-gnueabihf@4.34.6': - resolution: {integrity: sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==} - cpu: [arm] - os: [linux] + '@nextui-org/slider@2.2.17': + resolution: {integrity: sha512-MgeJv3X+bT7Bw+LK1zba4vToOUzv8lCvDuGe0U5suJy1AKGN6uGDgSAxpIZhCYNWsuNRsopwdvsGtyeIjOEStA==} + deprecated: This package has been deprecated. Please use @heroui/slider instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + react: '>=18' + react-dom: '>=18' - '@rollup/rollup-linux-arm-musleabihf@4.34.6': - resolution: {integrity: sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==} - cpu: [arm] - os: [linux] + '@nextui-org/snippet@2.0.43': + resolution: {integrity: sha512-PLxc9ph9CLj52L26XSv4vBmQcSytCNc3ZBxkOTBEqmLSHCWwGQExrqKPnVZTE1etr6dcULiy5vNIpD8R7taO8A==} + deprecated: This package has been deprecated. Please use @heroui/snippet instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + framer-motion: '>=10.17.0' + react: '>=18' + react-dom: '>=18' - '@rollup/rollup-linux-arm64-gnu@4.34.6': - resolution: {integrity: sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==} - cpu: [arm64] - os: [linux] + '@nextui-org/spacer@2.0.33': + resolution: {integrity: sha512-0YDtovMWuAVgBvVXUmplzohObGxMPFhisHXn6v+0nflAE9LiVeiXf121WVOEMrd08S7xvmrAANcMwo4TsYi49g==} + deprecated: This package has been deprecated. Please use @heroui/spacer instead. + peerDependencies: + '@nextui-org/theme': '>=2.1.0' + react: '>=18' + react-dom: '>=18' - '@rollup/rollup-linux-arm64-musl@4.34.6': - resolution: {integrity: sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==} - cpu: [arm64] - os: [linux] + '@nextui-org/spinner@2.0.34': + resolution: {integrity: sha512-YKw/6xSLhsXU1k22OvYKyWhtJCHzW2bRAiieVSVG5xak3gYwknTds5H9s5uur+oAZVK9AkyAObD19QuZND32Jg==} + deprecated: This package has been deprecated. Please use @heroui/spinner instead. + peerDependencies: + '@nextui-org/theme': '>=2.1.0' + react: '>=18' + react-dom: '>=18' - '@rollup/rollup-linux-loongarch64-gnu@4.34.6': - resolution: {integrity: sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==} - cpu: [loong64] - os: [linux] + '@nextui-org/switch@2.0.34': + resolution: {integrity: sha512-SczQiHswo8eR94ecDgcULIsSIPfYVncqfKllcHEGqAs9BDpZun44KK0/R0xhWuPpx5oqB60VeSABN7JtEAxF+Q==} + deprecated: This package has been deprecated. Please use @heroui/switch instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + react: '>=18' + react-dom: '>=18' - '@rollup/rollup-linux-powerpc64le-gnu@4.34.6': - resolution: {integrity: sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==} - cpu: [ppc64] - os: [linux] + '@nextui-org/system-rsc@2.1.6': + resolution: {integrity: sha512-Wl2QwEFjYwuvw26R1RH3ZY81PD8YmfgtIjFvJZRP2VEIT6rPvlQ4ojgqdrkVkQZQ0L/K+5ZLbTKgLEFkj5ysdQ==} + peerDependencies: + '@nextui-org/theme': '>=2.1.0' + react: '>=18' - '@rollup/rollup-linux-riscv64-gnu@4.34.6': - resolution: {integrity: sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==} - cpu: [riscv64] - os: [linux] + '@nextui-org/system@2.2.6': + resolution: {integrity: sha512-tjIkOI0w32g68CGWleuSyIbEz8XBbeoNogR2lu7MWk3QovHCqgr4VVrP1cwMRYnwDPFQP3OpmH+NR9yzt+pIfg==} + peerDependencies: + framer-motion: '>=10.17.0' + react: '>=18' + react-dom: '>=18' - '@rollup/rollup-linux-s390x-gnu@4.34.6': - resolution: {integrity: sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==} - cpu: [s390x] - os: [linux] + '@nextui-org/table@2.0.40': + resolution: {integrity: sha512-qDbSsu6mpWnr1Mt3DYTBzTFtN8Z5Gv7GDqECGcDVradkDVuJFZvkB9Ke392LcVZoXSk99Rpamq4WSWkEewBhWg==} + deprecated: This package has been deprecated. Please use @heroui/table instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + react: '>=18' + react-dom: '>=18' - '@rollup/rollup-linux-x64-gnu@4.34.6': - resolution: {integrity: sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==} - cpu: [x64] - os: [linux] + '@nextui-org/tabs@2.0.37': + resolution: {integrity: sha512-IQicuDggxTL+JeW3fRoZR4Rr24EwinxAdfU1jqcvT6gZywumndV27+I00kARz8P03kobYoY9t73NY92qo8T5gg==} + deprecated: This package has been deprecated. Please use @heroui/tabs instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + framer-motion: '>=10.17.0' + react: '>=18' + react-dom: '>=18' - '@rollup/rollup-linux-x64-musl@4.34.6': - resolution: {integrity: sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==} - cpu: [x64] - os: [linux] + '@nextui-org/theme@2.2.11': + resolution: {integrity: sha512-bg9+KNnFxcP3w/ugivEJtvQibODbTxfl6UdVvx7TCY8Rd269U7F2+nhnw1Qd1xJT5yZQnX6m//9wOoGtJV+6Kg==} + peerDependencies: + tailwindcss: '>=3.4.0' - '@rollup/rollup-win32-arm64-msvc@4.34.6': - resolution: {integrity: sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==} - cpu: [arm64] - os: [win32] + '@nextui-org/tooltip@2.0.41': + resolution: {integrity: sha512-1c+vkCCszKcKl15HywlZ7UOL7c1UFgLudqBB/dEdWZiclT01BRiracMbcQ7McKHQCRl77Aa7LFv5x4wHOicWHQ==} + deprecated: This package has been deprecated. Please use @heroui/tooltip instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + framer-motion: '>=10.17.0' + react: '>=18' + react-dom: '>=18' - '@rollup/rollup-win32-ia32-msvc@4.34.6': - resolution: {integrity: sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==} - cpu: [ia32] - os: [win32] + '@nextui-org/use-aria-accordion@2.0.7': + resolution: {integrity: sha512-VzGlxmsu2tWG2Pht1e0PBz40jz95v0OEKYVXq91WpDMwj8Bl1CYvxrw2Qz41/5Xi0X843Mmo4sPwrc/hk0+RHA==} + peerDependencies: + react: '>=18' - '@rollup/rollup-win32-x64-msvc@4.34.6': - resolution: {integrity: sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==} - cpu: [x64] - os: [win32] + '@nextui-org/use-aria-button@2.0.10': + resolution: {integrity: sha512-tUpp4QMr1zugKPevyToeRHIufTuc/g+67/r/oQLRTG0mMo3yGVmggykQuYn22fqqZPpW6nHcB9VYc+XtZZ27TQ==} + peerDependencies: + react: '>=18' - '@rsbuild/core@1.2.17': - resolution: {integrity: sha512-e5J+Fn5kjwOcf254pGwNGeMdTSmsFFC3vmLEAmxVVRYOr8rgph4fSfKXxUwN1jbL2o5sEDdw0vFNq02PdEofnQ==} - engines: {node: '>=16.7.0'} - hasBin: true + '@nextui-org/use-aria-link@2.0.19': + resolution: {integrity: sha512-ef61cJLlwcR4zBWiaeHZy4K18juFjUup2SslfLIAiZz3kVosBCGKmkJkw1SASYY8+D/oUc2B6BFIk25YEsRKRw==} + peerDependencies: + react: '>=18' - '@rslib/core@0.5.3': - resolution: {integrity: sha512-HlFGd4PZ4kJDrGZ4VBPIglGPjsTI+LuVWTaFg/hrmElnmXpw3iq0Oln5Esv24L3VBofyvZGPMlu1fZTiqTPzcw==} - engines: {node: '>=16.7.0'} - hasBin: true + '@nextui-org/use-aria-menu@2.0.7': + resolution: {integrity: sha512-5U91zFiWTLXsOhE0W3CThsD5TmL3ANeTEtoimtPgSLWV9keZBD9Ja62WsnPZPPAWhmv7jtL0/qk4d/YOra7PVA==} peerDependencies: - '@microsoft/api-extractor': ^7 - typescript: ^5 - peerDependenciesMeta: - '@microsoft/api-extractor': - optional: true - typescript: - optional: true + react: '>=18' + react-dom: '>=18' - '@rslib/core@0.5.4': - resolution: {integrity: sha512-rJ+wG++/Y8SbyuJB1RhlgnOUPzsxubD0lBivZWXVhOGawAea7mUoI4kZQ6YmF0iybW1QA61wHOf3FY+R1BxvgQ==} - engines: {node: '>=16.7.0'} - hasBin: true + '@nextui-org/use-aria-modal-overlay@2.0.13': + resolution: {integrity: sha512-ifQxJwTX72lhVUofEVQqMbpe9vEUiCIqiimzlUjeVuE0cYOXaoJLEgPozHpYQrdjTNiwD5On0LLMRgz19XyAqw==} peerDependencies: - '@microsoft/api-extractor': ^7 - typescript: ^5 - peerDependenciesMeta: - '@microsoft/api-extractor': - optional: true - typescript: - optional: true + react: '>=18' + react-dom: '>=18' - '@rspack/binding-darwin-arm64@1.2.7': - resolution: {integrity: sha512-dT5eSMTknZaI8Djmz8KnaWM68rjZuBZwsKyF144o+ZSJM55vgiNXyL0lQYB8mX9nR3Gck+jKuGUAT2W/EF/t5Q==} - cpu: [arm64] - os: [darwin] + '@nextui-org/use-aria-multiselect@2.2.5': + resolution: {integrity: sha512-Gxo2M0LdnFL4/WCi192ziFB8JmSZm6yZYT8RB021Z3iAPBu/Pp9GnWEPZu5g15mKnn3jW5Ecnfw03jTEAQBR+Q==} + peerDependencies: + react: '>=18' + react-dom: '>=18' - '@rspack/binding-darwin-x64@1.2.7': - resolution: {integrity: sha512-5n8IhKBxH71d4BUIvyzTwSOAOKNneLPJwLIphSPNIbCMGjLI59/EVpxSQ/AAUfyMkqOs635NNCn0eGQVuzpI/w==} - cpu: [x64] - os: [darwin] + '@nextui-org/use-aria-toggle-button@2.0.10': + resolution: {integrity: sha512-U5jOmEO+nMIgYvBF0+gJtdq8C6dynGMjzAboPG4FhuHOzDoNiC12G5FIbGnRe8K1hMsKVuaI72p9986NhfqNgw==} + peerDependencies: + react: '>=18' - '@rspack/binding-linux-arm64-gnu@1.2.7': - resolution: {integrity: sha512-DTtFBJmgQQrVWjbklpgJDr3kE9Uf1fHsPh+1GVslsBuyn+o4O7JslrnjuVsQCYKoiEg0Lg4ZPQmwnhJLHssZ5A==} - cpu: [arm64] - os: [linux] + '@nextui-org/use-callback-ref@2.0.6': + resolution: {integrity: sha512-2WcwWuK1L/wIpTbibnLrysmmkzWomvkVIcgWayB6n/w+bpPrPCG7Zyg2WHzmMmDhe6imV//KKBgNKRi8Xhu/VA==} + peerDependencies: + react: '>=18' - '@rspack/binding-linux-arm64-musl@1.2.7': - resolution: {integrity: sha512-01/OoQQF9eyDvRKkxj4DzCznfGZIvnzI8qOsrv+M7VBm8FLoKpb3hygXixaGQOXmNL42XTh61qjgm++fBu6aUA==} - cpu: [arm64] - os: [linux] + '@nextui-org/use-clipboard@2.0.7': + resolution: {integrity: sha512-Bn1fF/goMwOA5DQyw3A4ebfgozwR8U5k5TAZMPiy1RBWgTFw7+lB0GNbH+DOnUGY5Vyztyaw6gtUyc3tVzJxeg==} + peerDependencies: + react: '>=18' - '@rspack/binding-linux-x64-gnu@1.2.7': - resolution: {integrity: sha512-lUOAUq0YSsofCXsP6XnlgfH0ZRDZ2X2XqXLXYjqf4xkSxCl5eBmE0EQYjAHF4zjUvU5rVx4a4bDLWv7+t3bOHg==} - cpu: [x64] - os: [linux] + '@nextui-org/use-data-scroll-overflow@2.1.7': + resolution: {integrity: sha512-MP4YLjBWyIt0KyWPndXyhnkKgOLqTZ2aPY82Czjqn+eZk/l8BNo0nfA+dZFfbfEuPJgqdt/JDkMOrS+uq0+vkQ==} + peerDependencies: + react: '>=18' - '@rspack/binding-linux-x64-musl@1.2.7': - resolution: {integrity: sha512-ZrPXfgT30p4DlydYavaTHiluxHkWvZHt7K4q7qNyTfYYowG6jRGwWi/PATdugNICGv027Wsh5nzEO4o27Iuhwg==} - cpu: [x64] - os: [linux] + '@nextui-org/use-disclosure@2.0.10': + resolution: {integrity: sha512-s2I58d7x2f1JRriZnNm9ZoxrGmxF+DnC9BXM1sD99Wq1VNMd0dhitmx0mUWfUB7l5HLyZgKOeiSLG+ugy1F1Yw==} + peerDependencies: + react: '>=18' - '@rspack/binding-win32-arm64-msvc@1.2.7': - resolution: {integrity: sha512-1OzzM+OUSWX39XYcDfxJ8bGX5vNNrRejCMGotBEdP+uQ3KMWCPz0G4KRc3QIjghaLIYk3ofd83hcfUxyk/2Xog==} - cpu: [arm64] - os: [win32] + '@nextui-org/use-image@2.0.6': + resolution: {integrity: sha512-VelN9y3vzwIpPfubFMh00YRQ0f4+I5FElcAvAqoo0Kfb0K7sGrTo1lZNApHm6yBN2gJMMeccG9u7bZB+wcDGZQ==} + peerDependencies: + react: '>=18' - '@rspack/binding-win32-ia32-msvc@1.2.7': - resolution: {integrity: sha512-VWlDCV9kDtijk9GK6ZtBQmYoVzKGpnrJB0iI3d2gIEa/2NwikJ89bLMFE4dFx8UNH3p/sSyb5pmPOQnbudFK7Q==} - cpu: [ia32] - os: [win32] + '@nextui-org/use-is-mobile@2.0.9': + resolution: {integrity: sha512-u5pRmPV0wacdpOcAkQnWwE30yNBl2uk1WvbWkrSELxIVRN22+fTIYn8ynnHK0JbJFTA6/5zh7uIfETQu3L6KjA==} + peerDependencies: + react: '>=18' - '@rspack/binding-win32-x64-msvc@1.2.7': - resolution: {integrity: sha512-l/sTdeMsQF1a1aB79cWykDNRZG6nkUA0biJo2/sEARP3ijdr8TuwUdirp2JRDmZfQJkoJnQ2un9y9qyW+TIZzA==} - cpu: [x64] - os: [win32] + '@nextui-org/use-is-mounted@2.0.6': + resolution: {integrity: sha512-/lcMdYnwBZ1EuKMLRIhHeAZG8stXWNTz7wBweAlLId23VC4VHgCp/s9K9Vbj1A5/r8FiFQeoTmXQuMAMUoPRtg==} + peerDependencies: + react: '>=18' - '@rspack/binding@1.2.7': - resolution: {integrity: sha512-QH+kxkG0I9C6lmlwgBUDFsy24ihXMGG5lfiNtQilk4CyBN+AgSWFENcYrnkUaBioZAvMBznQLiccV3X0JeH9iQ==} + '@nextui-org/use-measure@2.0.2': + resolution: {integrity: sha512-H/RSPPA9B5sZ10wiXR3jLlYFEuiVnc0O/sgLLQfrb5M0hvHoaqMThnsZpm//5iyS7tD7kxPeYNLa1EhzlQKxDA==} + peerDependencies: + react: '>=18' - '@rspack/core@1.2.7': - resolution: {integrity: sha512-Vg7ySflnqI1nNOBPd6VJkQozWADssxn3einbxa9OqDVAB+dGSj8qihTs6rlaTSewidoaYTGIAiTMHO2y+61qqQ==} - engines: {node: '>=16.0.0'} + '@nextui-org/use-pagination@2.0.10': + resolution: {integrity: sha512-PD6M8QKngUnTJfyoGiZrnrfUtA1A9ZVUjmbONO/1kxPuUegv0ZOQeFECPP2h7SFPxsyOceL1T97rg/2YPS247g==} peerDependencies: - '@rspack/tracing': ^1.x - '@swc/helpers': '>=0.5.1' - peerDependenciesMeta: - '@rspack/tracing': - optional: true - '@swc/helpers': - optional: true + react: '>=18' - '@rspack/lite-tapable@1.0.1': - resolution: {integrity: sha512-VynGOEsVw2s8TAlLf/uESfrgfrq2+rcXB1muPJYBWbsm1Oa6r5qVQhjA5ggM6z/coYPrsVMgovl3Ff7Q7OCp1w==} - engines: {node: '>=16.0.0'} + '@nextui-org/use-safe-layout-effect@2.0.6': + resolution: {integrity: sha512-xzEJXf/g9GaSqjLpQ4+Z2/pw1GPq2Fc5cWRGqEXbGauEMXuH8UboRls1BmIV1RuOpqI6FgxkEmxL1EuVIRVmvQ==} + peerDependencies: + react: '>=18' - '@rtsao/scc@1.1.0': - resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + '@nextui-org/use-scroll-position@2.0.9': + resolution: {integrity: sha512-tXbpb2bkKIjOp2I1uZ1T4T9Lxp0+Ta/TKu+5qvqsXkHRPbcoukdsquagYUDWK/fcumg72UPR8QP+na8KMn2gCg==} + peerDependencies: + react: '>=18' - '@sindresorhus/is@4.6.0': - resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} - engines: {node: '>=10'} + '@nextui-org/use-update-effect@2.0.6': + resolution: {integrity: sha512-n5Qiv3ferKn+cSxU3Vv+96LdG8I/00mzc7Veoan+P9GL0aCTrsPB6RslTsiblaiAXQcqTiFXd8xwsK309DXOXA==} + peerDependencies: + react: '>=18' - '@smithy/abort-controller@4.0.1': - resolution: {integrity: sha512-fiUIYgIgRjMWznk6iLJz35K2YxSLHzLBA/RC6lBrKfQ8fHbPfvk7Pk9UvpKoHgJjI18MnbPuEju53zcVy6KF1g==} - engines: {node: '>=18.0.0'} + '@nextui-org/user@2.0.34': + resolution: {integrity: sha512-7MN/xBaMhDJ0b+hB2YpGIm2DsC9CTpN1ab+EKwhUuWn26SgXw2FNu8CSHViyDEkvOP7sYKdHLp9UtSo/f3JnsQ==} + deprecated: This package has been deprecated. Please use @heroui/user instead. + peerDependencies: + '@nextui-org/system': '>=2.0.0' + '@nextui-org/theme': '>=2.1.0' + react: '>=18' + react-dom: '>=18' - '@smithy/config-resolver@4.0.1': - resolution: {integrity: sha512-Igfg8lKu3dRVkTSEm98QpZUvKEOa71jDX4vKRcvJVyRc3UgN3j7vFMf0s7xLQhYmKa8kyJGQgUJDOV5V3neVlQ==} - engines: {node: '>=18.0.0'} + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} - '@smithy/core@3.1.5': - resolution: {integrity: sha512-HLclGWPkCsekQgsyzxLhCQLa8THWXtB5PxyYN+2O6nkyLt550KQKTlbV2D1/j5dNIQapAZM1+qFnpBFxZQkgCA==} - engines: {node: '>=18.0.0'} + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} - '@smithy/credential-provider-imds@4.0.1': - resolution: {integrity: sha512-l/qdInaDq1Zpznpmev/+52QomsJNZ3JkTl5yrTl02V6NBgJOQ4LY0SFw/8zsMwj3tLe8vqiIuwF6nxaEwgf6mg==} - engines: {node: '>=18.0.0'} + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} - '@smithy/eventstream-codec@4.0.1': - resolution: {integrity: sha512-Q2bCAAR6zXNVtJgifsU16ZjKGqdw/DyecKNgIgi7dlqw04fqDu0mnq+JmGphqheypVc64CYq3azSuCpAdFk2+A==} - engines: {node: '>=18.0.0'} + '@npmcli/fs@2.1.2': + resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - '@smithy/eventstream-serde-browser@4.0.1': - resolution: {integrity: sha512-HbIybmz5rhNg+zxKiyVAnvdM3vkzjE6ccrJ620iPL8IXcJEntd3hnBl+ktMwIy12Te/kyrSbUb8UCdnUT4QEdA==} - engines: {node: '>=18.0.0'} + '@npmcli/move-file@2.0.1': + resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This functionality has been moved to @npmcli/fs - '@smithy/eventstream-serde-config-resolver@4.0.1': - resolution: {integrity: sha512-lSipaiq3rmHguHa3QFF4YcCM3VJOrY9oq2sow3qlhFY+nBSTF/nrO82MUQRPrxHQXA58J5G1UnU2WuJfi465BA==} - engines: {node: '>=18.0.0'} + '@octokit/auth-token@2.5.0': + resolution: {integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==} - '@smithy/eventstream-serde-node@4.0.1': - resolution: {integrity: sha512-o4CoOI6oYGYJ4zXo34U8X9szDe3oGjmHgsMGiZM0j4vtNoT+h80TLnkUcrLZR3+E6HIxqW+G+9WHAVfl0GXK0Q==} - engines: {node: '>=18.0.0'} + '@octokit/core@3.6.0': + resolution: {integrity: sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==} - '@smithy/eventstream-serde-universal@4.0.1': - resolution: {integrity: sha512-Z94uZp0tGJuxds3iEAZBqGU2QiaBHP4YytLUjwZWx+oUeohCsLyUm33yp4MMBmhkuPqSbQCXq5hDet6JGUgHWA==} - engines: {node: '>=18.0.0'} + '@octokit/endpoint@6.0.12': + resolution: {integrity: sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==} - '@smithy/fetch-http-handler@5.0.1': - resolution: {integrity: sha512-3aS+fP28urrMW2KTjb6z9iFow6jO8n3MFfineGbndvzGZit3taZhKWtTorf+Gp5RpFDDafeHlhfsGlDCXvUnJA==} - engines: {node: '>=18.0.0'} + '@octokit/graphql@4.8.0': + resolution: {integrity: sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==} - '@smithy/hash-node@4.0.1': - resolution: {integrity: sha512-TJ6oZS+3r2Xu4emVse1YPB3Dq3d8RkZDKcPr71Nj/lJsdAP1c7oFzYqEn1IBc915TsgLl2xIJNuxCz+gLbLE0w==} - engines: {node: '>=18.0.0'} + '@octokit/openapi-types@12.11.0': + resolution: {integrity: sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==} - '@smithy/invalid-dependency@4.0.1': - resolution: {integrity: sha512-gdudFPf4QRQ5pzj7HEnu6FhKRi61BfH/Gk5Yf6O0KiSbr1LlVhgjThcvjdu658VE6Nve8vaIWB8/fodmS1rBPQ==} - engines: {node: '>=18.0.0'} + '@octokit/openapi-types@23.0.1': + resolution: {integrity: sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==} - '@smithy/is-array-buffer@2.2.0': - resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} - engines: {node: '>=14.0.0'} + '@octokit/plugin-paginate-rest@2.21.3': + resolution: {integrity: sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==} + peerDependencies: + '@octokit/core': '>=2' - '@smithy/is-array-buffer@4.0.0': - resolution: {integrity: sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==} - engines: {node: '>=18.0.0'} + '@octokit/plugin-request-log@1.0.4': + resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==} + peerDependencies: + '@octokit/core': '>=3' - '@smithy/middleware-content-length@4.0.1': - resolution: {integrity: sha512-OGXo7w5EkB5pPiac7KNzVtfCW2vKBTZNuCctn++TTSOMpe6RZO/n6WEC1AxJINn3+vWLKW49uad3lo/u0WJ9oQ==} - engines: {node: '>=18.0.0'} + '@octokit/plugin-rest-endpoint-methods@5.16.2': + resolution: {integrity: sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==} + peerDependencies: + '@octokit/core': '>=3' - '@smithy/middleware-endpoint@4.0.6': - resolution: {integrity: sha512-ftpmkTHIFqgaFugcjzLZv3kzPEFsBFSnq1JsIkr2mwFzCraZVhQk2gqN51OOeRxqhbPTkRFj39Qd2V91E/mQxg==} - engines: {node: '>=18.0.0'} + '@octokit/plugin-retry@3.0.9': + resolution: {integrity: sha512-r+fArdP5+TG6l1Rv/C9hVoty6tldw6cE2pRHNGmFPdyfrc696R6JjrQ3d7HdVqGwuzfyrcaLAKD7K8TX8aehUQ==} - '@smithy/middleware-retry@4.0.7': - resolution: {integrity: sha512-58j9XbUPLkqAcV1kHzVX/kAR16GT+j7DUZJqwzsxh1jtz7G82caZiGyyFgUvogVfNTg3TeAOIJepGc8TXF4AVQ==} - engines: {node: '>=18.0.0'} + '@octokit/request-error@2.1.0': + resolution: {integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==} - '@smithy/middleware-serde@4.0.2': - resolution: {integrity: sha512-Sdr5lOagCn5tt+zKsaW+U2/iwr6bI9p08wOkCp6/eL6iMbgdtc2R5Ety66rf87PeohR0ExI84Txz9GYv5ou3iQ==} - engines: {node: '>=18.0.0'} + '@octokit/request-error@5.1.1': + resolution: {integrity: sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==} + engines: {node: '>= 18'} - '@smithy/middleware-stack@4.0.1': - resolution: {integrity: sha512-dHwDmrtR/ln8UTHpaIavRSzeIk5+YZTBtLnKwDW3G2t6nAupCiQUvNzNoHBpik63fwUaJPtlnMzXbQrNFWssIA==} - engines: {node: '>=18.0.0'} + '@octokit/request@5.6.3': + resolution: {integrity: sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==} - '@smithy/node-config-provider@4.0.1': - resolution: {integrity: sha512-8mRTjvCtVET8+rxvmzRNRR0hH2JjV0DFOmwXPrISmTIJEfnCBugpYYGAsCj8t41qd+RB5gbheSQ/6aKZCQvFLQ==} - engines: {node: '>=18.0.0'} + '@octokit/rest@18.12.0': + resolution: {integrity: sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==} - '@smithy/node-http-handler@4.0.3': - resolution: {integrity: sha512-dYCLeINNbYdvmMLtW0VdhW1biXt+PPCGazzT5ZjKw46mOtdgToQEwjqZSS9/EN8+tNs/RO0cEWG044+YZs97aA==} - engines: {node: '>=18.0.0'} + '@octokit/types@13.8.0': + resolution: {integrity: sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==} - '@smithy/property-provider@4.0.1': - resolution: {integrity: sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ==} - engines: {node: '>=18.0.0'} + '@octokit/types@6.41.0': + resolution: {integrity: sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==} - '@smithy/protocol-http@5.0.1': - resolution: {integrity: sha512-TE4cpj49jJNB/oHyh/cRVEgNZaoPaxd4vteJNB0yGidOCVR0jCw/hjPVsT8Q8FRmj8Bd3bFZt8Dh7xGCT+xMBQ==} - engines: {node: '>=18.0.0'} + '@octokit/webhooks-schemas@6.11.0': + resolution: {integrity: sha512-ekca2jZhb2vfQy43rjvJoV77IwEKvA42BmJ2m8H3WaNfG9BF05RodnFjh3MSOksNseoNO8w8IPLZ3d5546NH2w==} - '@smithy/querystring-builder@4.0.1': - resolution: {integrity: sha512-wU87iWZoCbcqrwszsOewEIuq+SU2mSoBE2CcsLwE0I19m0B2gOJr1MVjxWcDQYOzHbR1xCk7AcOBbGFUYOKvdg==} - engines: {node: '>=18.0.0'} + '@octokit/webhooks-types@6.11.0': + resolution: {integrity: sha512-AanzbulOHljrku1NGfafxdpTCfw2ENaWzH01N2vqQM+cUFbk868Cgh0xylz0JIM9BoKbfI++bdD6EYX0Q/UTEw==} - '@smithy/querystring-parser@4.0.1': - resolution: {integrity: sha512-Ma2XC7VS9aV77+clSFylVUnPZRindhB7BbmYiNOdr+CHt/kZNJoPP0cd3QxCnCFyPXC4eybmyE98phEHkqZ5Jw==} - engines: {node: '>=18.0.0'} + '@open-draft/deferred-promise@2.2.0': + resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} - '@smithy/service-error-classification@4.0.1': - resolution: {integrity: sha512-3JNjBfOWpj/mYfjXJHB4Txc/7E4LVq32bwzE7m28GN79+M1f76XHflUaSUkhOriprPDzev9cX/M+dEB80DNDKA==} - engines: {node: '>=18.0.0'} + '@open-draft/logger@0.3.0': + resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} - '@smithy/shared-ini-file-loader@4.0.1': - resolution: {integrity: sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw==} - engines: {node: '>=18.0.0'} + '@open-draft/until@2.1.0': + resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - '@smithy/signature-v4@5.0.1': - resolution: {integrity: sha512-nCe6fQ+ppm1bQuw5iKoeJ0MJfz2os7Ic3GBjOkLOPtavbD1ONoyE3ygjBfz2ythFWm4YnRm6OxW+8p/m9uCoIA==} - engines: {node: '>=18.0.0'} + '@parcel/watcher-android-arm64@2.5.1': + resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] - '@smithy/smithy-client@4.1.6': - resolution: {integrity: sha512-UYDolNg6h2O0L+cJjtgSyKKvEKCOa/8FHYJnBobyeoeWDmNpXjwOAtw16ezyeu1ETuuLEOZbrynK0ZY1Lx9Jbw==} - engines: {node: '>=18.0.0'} + '@parcel/watcher-darwin-arm64@2.5.1': + resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] - '@smithy/types@4.1.0': - resolution: {integrity: sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==} - engines: {node: '>=18.0.0'} + '@parcel/watcher-darwin-x64@2.5.1': + resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] - '@smithy/url-parser@4.0.1': - resolution: {integrity: sha512-gPXcIEUtw7VlK8f/QcruNXm7q+T5hhvGu9tl63LsJPZ27exB6dtNwvh2HIi0v7JcXJ5emBxB+CJxwaLEdJfA+g==} - engines: {node: '>=18.0.0'} + '@parcel/watcher-freebsd-x64@2.5.1': + resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] - '@smithy/util-base64@4.0.0': - resolution: {integrity: sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==} - engines: {node: '>=18.0.0'} + '@parcel/watcher-linux-arm-glibc@2.5.1': + resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] - '@smithy/util-body-length-browser@4.0.0': - resolution: {integrity: sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==} - engines: {node: '>=18.0.0'} + '@parcel/watcher-linux-arm-musl@2.5.1': + resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] - '@smithy/util-body-length-node@4.0.0': - resolution: {integrity: sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==} - engines: {node: '>=18.0.0'} + '@parcel/watcher-linux-arm64-glibc@2.5.1': + resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] - '@smithy/util-buffer-from@2.2.0': - resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} - engines: {node: '>=14.0.0'} + '@parcel/watcher-linux-arm64-musl@2.5.1': + resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] - '@smithy/util-buffer-from@4.0.0': - resolution: {integrity: sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==} - engines: {node: '>=18.0.0'} + '@parcel/watcher-linux-x64-glibc@2.5.1': + resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] - '@smithy/util-config-provider@4.0.0': - resolution: {integrity: sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==} - engines: {node: '>=18.0.0'} + '@parcel/watcher-linux-x64-musl@2.5.1': + resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] - '@smithy/util-defaults-mode-browser@4.0.7': - resolution: {integrity: sha512-CZgDDrYHLv0RUElOsmZtAnp1pIjwDVCSuZWOPhIOBvG36RDfX1Q9+6lS61xBf+qqvHoqRjHxgINeQz47cYFC2Q==} - engines: {node: '>=18.0.0'} + '@parcel/watcher-win32-arm64@2.5.1': + resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] - '@smithy/util-defaults-mode-node@4.0.7': - resolution: {integrity: sha512-79fQW3hnfCdrfIi1soPbK3zmooRFnLpSx3Vxi6nUlqaaQeC5dm8plt4OTNDNqEEEDkvKghZSaoti684dQFVrGQ==} - engines: {node: '>=18.0.0'} + '@parcel/watcher-win32-ia32@2.5.1': + resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] - '@smithy/util-endpoints@3.0.1': - resolution: {integrity: sha512-zVdUENQpdtn9jbpD9SCFK4+aSiavRb9BxEtw9ZGUR1TYo6bBHbIoi7VkrFQ0/RwZlzx0wRBaRmPclj8iAoJCLA==} - engines: {node: '>=18.0.0'} + '@parcel/watcher-win32-x64@2.5.1': + resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] - '@smithy/util-hex-encoding@4.0.0': - resolution: {integrity: sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==} - engines: {node: '>=18.0.0'} + '@parcel/watcher@2.5.1': + resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} + engines: {node: '>= 10.0.0'} - '@smithy/util-middleware@4.0.1': - resolution: {integrity: sha512-HiLAvlcqhbzhuiOa0Lyct5IIlyIz0PQO5dnMlmQ/ubYM46dPInB+3yQGkfxsk6Q24Y0n3/JmcA1v5iEhmOF5mA==} - engines: {node: '>=18.0.0'} + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} - '@smithy/util-retry@4.0.1': - resolution: {integrity: sha512-WmRHqNVwn3kI3rKk1LsKcVgPBG6iLTBGC1iYOV3GQegwJ3E8yjzHytPt26VNzOWr1qu0xE03nK0Ug8S7T7oufw==} - engines: {node: '>=18.0.0'} + '@pkgr/core@0.1.1': + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@smithy/util-stream@4.1.2': - resolution: {integrity: sha512-44PKEqQ303d3rlQuiDpcCcu//hV8sn+u2JBo84dWCE0rvgeiVl0IlLMagbU++o0jCWhYCsHaAt9wZuZqNe05Hw==} - engines: {node: '>=18.0.0'} + '@playwright/test@1.50.1': + resolution: {integrity: sha512-Jii3aBg+CEDpgnuDxEp/h7BimHcUTDlpEtce89xEumlJ5ef2hqepZ+PWp1DDpYC/VO9fmWVI1IlEaoI5fK9FXQ==} + engines: {node: '>=18'} + hasBin: true - '@smithy/util-uri-escape@4.0.0': - resolution: {integrity: sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==} - engines: {node: '>=18.0.0'} + '@polka/url@1.0.0-next.28': + resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} - '@smithy/util-utf8@2.3.0': - resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} - engines: {node: '>=14.0.0'} + '@popperjs/core@2.11.8': + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - '@smithy/util-utf8@4.0.0': - resolution: {integrity: sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==} - engines: {node: '>=18.0.0'} + '@puppeteer/browsers@2.7.0': + resolution: {integrity: sha512-bO61XnTuopsz9kvtfqhVbH6LTM1koxK0IlBR+yuVrM2LB7mk8+5o1w18l5zqd5cs8xlf+ntgambqRqGifMDjog==} + engines: {node: '>=18'} + hasBin: true - '@swc/helpers@0.5.15': - resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@react-aria/breadcrumbs@3.5.13': + resolution: {integrity: sha512-G1Gqf/P6kVdfs94ovwP18fTWuIxadIQgHsXS08JEVcFVYMjb9YjqnEBaohUxD1tq2WldMbYw53ahQblT4NTG+g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@szmarczak/http-timer@4.0.6': - resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} - engines: {node: '>=10'} + '@react-aria/button@3.9.5': + resolution: {integrity: sha512-dgcYR6j8WDOMLKuVrtxzx4jIC05cVKDzc+HnPO8lNkBAOfjcuN5tkGRtIjLtqjMvpZHhQT5aDbgFpIaZzxgFIg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@tavily/core@0.3.1': - resolution: {integrity: sha512-7jyvPWG4Zjst0s4v0FMLO1f/dfHqs4FnqvKm86zOGYzXxSfxHu0isbLzlwjJad0csYwF0kifdlECTuNouHfr5A==} + '@react-aria/calendar@3.5.8': + resolution: {integrity: sha512-Whlp4CeAA5/ZkzrAHUv73kgIRYjw088eYGSc+cvSOCxfrc/2XkBm9rNrnSBv0DvhJ8AG0Fjz3vYakTmF3BgZBw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@testing-library/dom@10.4.0': - resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} - engines: {node: '>=18'} + '@react-aria/checkbox@3.14.3': + resolution: {integrity: sha512-EtBJL6iu0gvrw3A4R7UeVLR6diaVk/mh4kFBc7c8hQjpEJweRr4hmJT3hrNg3MBcTWLxFiMEXPGgWEwXDBygtA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@testing-library/user-event@14.6.1': - resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} - engines: {node: '>=12', npm: '>=6'} + '@react-aria/combobox@3.9.1': + resolution: {integrity: sha512-SpK92dCmT8qn8aEcUAihRQrBb5LZUhwIbDExFII8PvUvEFy/PoQHXIo3j1V29WkutDBDpMvBv/6XRCHGXPqrhQ==} peerDependencies: - '@testing-library/dom': '>=7.21.4' + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@tokenizer/token@0.3.0': - resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + '@react-aria/datepicker@3.10.1': + resolution: {integrity: sha512-4HZL593nrNMa1GjBmWEN/OTvNS6d3/16G1YJWlqiUlv11ADulSbqBIjMmkgwrJVFcjrgqtXFy+yyrTA/oq94Zw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@tootallnate/once@2.0.0': - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} + '@react-aria/dialog@3.5.14': + resolution: {integrity: sha512-oqDCjQ8hxe3GStf48XWBf2CliEnxlR9GgSYPHJPUc69WBj68D9rVcCW3kogJnLAnwIyf3FnzbX4wSjvUa88sAQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@tootallnate/quickjs-emscripten@0.23.0': - resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + '@react-aria/focus@3.17.1': + resolution: {integrity: sha512-FLTySoSNqX++u0nWZJPPN5etXY0WBxaIe/YuL/GTEeuqUIuC/2bJSaw5hlsM6T2yjy6Y/VAxBcKSdAFUlU6njQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@trivago/prettier-plugin-sort-imports@5.2.2': - resolution: {integrity: sha512-fYDQA9e6yTNmA13TLVSA+WMQRc5Bn/c0EUBditUHNfMMxN7M82c38b1kEggVE3pLpZ0FwkwJkUEKMiOi52JXFA==} - engines: {node: '>18.12'} + '@react-aria/focus@3.20.1': + resolution: {integrity: sha512-lgYs+sQ1TtBrAXnAdRBQrBo0/7o5H6IrfDxec1j+VRpcXL0xyk0xPq+m3lZp8typzIghqDgpnKkJ5Jf4OrzPIw==} peerDependencies: - '@vue/compiler-sfc': 3.x - prettier: 2.x - 3.x - prettier-plugin-svelte: 3.x - svelte: 4.x || 5.x - peerDependenciesMeta: - '@vue/compiler-sfc': - optional: true - prettier-plugin-svelte: - optional: true - svelte: - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + '@react-aria/form@3.0.14': + resolution: {integrity: sha512-UYoqdGetKV+4lwGnJ22sWKywobOWYBcOetiBYTlrrnCI6e5j1Jk5iLkLvesCOoI7yfWIW9Ban5Qpze5MUrXUhQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@tsconfig/node12@1.0.11': - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + '@react-aria/form@3.0.5': + resolution: {integrity: sha512-n290jRwrrRXO3fS82MyWR+OKN7yznVesy5Q10IclSTVYHHI3VI53xtAPr/WzNjJR1um8aLhOcDNFKwnNIUUCsQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@tsconfig/node14@1.0.3': - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + '@react-aria/grid@3.12.1': + resolution: {integrity: sha512-f0Sx/O6VVjNcg5xq0cLhA7QSCkZodV+/Y0UXJTg/NObqgPX/tqh/KNEy7zeVd22FS6SUpXV+fJU99yLPo37rjQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@tsconfig/node16@1.0.4': - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@react-aria/i18n@3.11.1': + resolution: {integrity: sha512-vuiBHw1kZruNMYeKkTGGnmPyMnM5T+gT8bz97H1FqIq1hQ6OPzmtBZ6W6l6OIMjeHI5oJo4utTwfZl495GALFQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@types/appdmg@0.5.5': - resolution: {integrity: sha512-G+n6DgZTZFOteITE30LnWj+HRVIGr7wMlAiLWOO02uJFWVEitaPU9JVXm9wJokkgshBawb2O1OykdcsmkkZfgg==} + '@react-aria/i18n@3.12.7': + resolution: {integrity: sha512-eLbYO2xrpeOKIEmLv2KD5LFcB0wltFqS+pUjsOzkKZg6H3b6AFDmJPxr/a0x2KGHtpGJvuHwCSbpPi9PzSSQLg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/aria-query@5.0.4': - resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + '@react-aria/interactions@3.21.3': + resolution: {integrity: sha512-BWIuf4qCs5FreDJ9AguawLVS0lV9UU+sK4CCnbCNNmYqOWY+1+gRXCsnOM32K+oMESBxilAjdHW5n1hsMqYMpA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@types/async-retry@1.4.9': - resolution: {integrity: sha512-s1ciZQJzRh3708X/m3vPExr5KJlzlZJvXsKpbtE2luqNcbROr64qU+3KpJsYHqWMeaxI839OvXf9PrUSw1Xtyg==} + '@react-aria/interactions@3.24.1': + resolution: {integrity: sha512-OWEcIC6UQfWq4Td5Ptuh4PZQ4LHLJr/JL2jGYvuNL6EgL3bWvzPrRYIF/R64YbfVxIC7FeZpPSkS07sZ93/NoA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + '@react-aria/label@3.7.16': + resolution: {integrity: sha512-tPog3rc5pQ9s2/5bIBtmHtbj+Ebqs2yyJgJdFjZ1/HxrjF8HMrgtBPHCn/70YD5XvmuC3OSkua84kLjNX5rBbA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/babel__generator@7.6.8': - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + '@react-aria/label@3.7.8': + resolution: {integrity: sha512-MzgTm5+suPA3KX7Ug6ZBK2NX9cin/RFLsv1BdafJ6CZpmUSpWnGE/yQfYUB7csN7j31OsZrD3/P56eShYWAQfg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + '@react-aria/link@3.7.1': + resolution: {integrity: sha512-a4IaV50P3fXc7DQvEIPYkJJv26JknFbRzFT5MJOMgtzuhyJoQdILEUK6XHYjcSSNCA7uLgzpojArVk5Hz3lCpw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@types/babel__traverse@7.20.6': - resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + '@react-aria/link@3.7.10': + resolution: {integrity: sha512-prf7s7O1PHAtA+H2przeGr8Ig4cBjk1f0kO0bQQAC3QvVOOUO7WLNU/N+xgOMNkCKEazDl21QM1o0bDRQCcXZg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/big.js@6.2.2': - resolution: {integrity: sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA==} + '@react-aria/listbox@3.12.1': + resolution: {integrity: sha512-7JiUp0NGykbv/HgSpmTY1wqhuf/RmjFxs1HZcNaTv8A+DlzgJYc7yQqFjP3ZA/z5RvJFuuIxggIYmgIFjaRYdA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@types/cacheable-request@6.0.3': - resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + '@react-aria/listbox@3.14.2': + resolution: {integrity: sha512-pIwMNZs2WaH+XIax2yemI2CNs5LVV5ooVgEh7gTYoAVWj2eFa3Votmi54VlvkN937bhD5+blH32JRIu9U8XqVw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/conventional-commits-parser@5.0.1': - resolution: {integrity: sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==} + '@react-aria/live-announcer@3.4.1': + resolution: {integrity: sha512-4X2mcxgqLvvkqxv2l1n00jTzUxxe0kkLiapBGH1LHX/CxA1oQcHDqv8etJ2ZOwmS/MSBBiWnv3DwYHDOF6ubig==} - '@types/cookie@0.6.0': - resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + '@react-aria/menu@3.14.1': + resolution: {integrity: sha512-BYliRb38uAzq05UOFcD5XkjA5foQoXRbcH3ZufBsc4kvh79BcP1PMW6KsXKGJ7dC/PJWUwCui6QL1kUg8PqMHA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@react-aria/menu@3.18.1': + resolution: {integrity: sha512-czdJFNBW/B7QodyLDyQ+TvT8tZjCru7PrhUDkJS36ie/pTeQDFpIczgYjmKfJs5pP6olqLKXbwJy1iNTh01WTQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/diff@5.2.3': - resolution: {integrity: sha512-K0Oqlrq3kQMaO2RhfrNQX5trmt+XLyom88zS0u84nnIcLvFnRUMRRHmrGny5GSM+kNO9IZLARsdQHDzkhAgmrQ==} + '@react-aria/overlays@3.22.1': + resolution: {integrity: sha512-GHiFMWO4EQ6+j6b5QCnNoOYiyx1Gk8ZiwLzzglCI4q1NY5AG2EAmfU4Z1+Gtrf2S5Y0zHbumC7rs9GnPoGLUYg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@react-aria/overlays@3.26.1': + resolution: {integrity: sha512-AtQ0mp+H0alFFkojKBADEUIc1AKFsSobH4QNoxQa3V4bZKQoXxga7cRhD5RRYanu3XCQOkIxZJ3vdVK/LVVBXA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/gensync@1.0.4': - resolution: {integrity: sha512-C3YYeRQWp2fmq9OryX+FoDy8nXS6scQ7dPptD8LnFDAUNcKWJjXQKDNJD3HVm+kOUsXhTOkpi69vI4EuAr95bA==} + '@react-aria/progress@3.4.13': + resolution: {integrity: sha512-YBV9bOO5JzKvG8QCI0IAA00o6FczMgIDiK8Q9p5gKorFMatFUdRayxlbIPoYHMi+PguLil0jHgC7eOyaUcrZ0g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@types/hoist-non-react-statics@3.3.6': - resolution: {integrity: sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==} + '@react-aria/radio@3.10.4': + resolution: {integrity: sha512-3fmoMcQtCpgjTwJReFjnvIE/C7zOZeCeWUn4JKDqz9s1ILYsC3Rk5zZ4q66tFn6v+IQnecrKT52wH6+hlVLwTA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@types/http-cache-semantics@4.0.4': - resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + '@react-aria/selection@3.18.1': + resolution: {integrity: sha512-GSqN2jX6lh7v+ldqhVjAXDcrWS3N4IsKXxO6L6Ygsye86Q9q9Mq9twWDWWu5IjHD6LoVZLUBCMO+ENGbOkyqeQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@types/js-cookie@2.2.7': - resolution: {integrity: sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==} + '@react-aria/selection@3.23.1': + resolution: {integrity: sha512-z4vVw7Fw0+nK46PPlCV8TyieCS+EOUp3eguX8833fFJ/QDlFp3Ewgw2T5qCIix5U3siXPYU0ZmAMOdrjibdGpQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/js-yaml@4.0.9': - resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} + '@react-aria/slider@3.7.8': + resolution: {integrity: sha512-MYvPcM0K8jxEJJicUK2+WxUkBIM/mquBxOTOSSIL3CszA80nXIGVnLlCUnQV3LOUzpWtabbWaZokSPtGgOgQOw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@react-aria/spinbutton@3.6.13': + resolution: {integrity: sha512-phF7WU4mTryPY+IORqQC6eGvCdLItJ41KJ8ZWmpubnLkhqyyxBn8BirXlxWC5UIIvir9c3oohX2Vip/bE5WJiA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/json5@0.0.29': - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + '@react-aria/ssr@3.9.4': + resolution: {integrity: sha512-4jmAigVq409qcJvQyuorsmBR4+9r3+JEC60wC+Y0MZV0HCtTmm8D9guYXlJMdx0SSkgj0hHAyFm/HvPNFofCoQ==} + engines: {node: '>= 12'} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@types/keyv@3.1.4': - resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + '@react-aria/ssr@3.9.7': + resolution: {integrity: sha512-GQygZaGlmYjmYM+tiNBA5C6acmiDWF52Nqd40bBp0Znk4M4hP+LTmI0lpI1BuKMw45T8RIhrAsICIfKwZvi2Gg==} + engines: {node: '>= 12'} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/lodash.mergewith@4.6.9': - resolution: {integrity: sha512-fgkoCAOF47K7sxrQ7Mlud2TH023itugZs2bUg8h/KzT+BnZNrR2jAOmaokbLunHNnobXVWOezAeNn/lZqwxkcw==} + '@react-aria/switch@3.6.4': + resolution: {integrity: sha512-2nVqz4ZuJyof47IpGSt3oZRmp+EdS8wzeDYgf42WHQXrx4uEOk1mdLJ20+NnsYhj/2NHZsvXVrjBeKMjlMs+0w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@types/lodash@4.17.15': - resolution: {integrity: sha512-w/P33JFeySuhN6JLkysYUK2gEmy9kHHFN7E8ro0tkfmlDOgxBDzWEZ/J8cWA+fHqFevpswDTFZnDx+R9lbL6xw==} + '@react-aria/table@3.14.1': + resolution: {integrity: sha512-WaPgQe4zQF5OaluO5rm+Y2nEoFR63vsLd4BT4yjK1uaFhKhDY2Zk+1SCVQvBLLKS4WK9dhP05nrNzT0vp/ZPOw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@types/minimatch@5.1.2': - resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + '@react-aria/tabs@3.9.1': + resolution: {integrity: sha512-S5v/0sRcOaSXaJYZuuy1ZVzYc7JD4sDyseG1133GjyuNjJOFHgoWMb+b4uxNIJbZxnLgynn/ZDBZSO+qU+fIxw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@types/ms@2.1.0': - resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@react-aria/textfield@3.14.5': + resolution: {integrity: sha512-hj7H+66BjB1iTKKaFXwSZBZg88YT+wZboEXZ0DNdQB2ytzoz/g045wBItUuNi4ZjXI3P+0AOZznVMYadWBAmiA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@types/node-fetch@2.6.12': - resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} + '@react-aria/textfield@3.17.1': + resolution: {integrity: sha512-W/4nBdyXTOFPQXJ8eRK+74QFIpGR+x24SRjdl+y3WO6gFJNiiopWj8+slSK/T8LoD3g3QlzrtX/ooVQHCG3uQw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/node@12.20.55': - resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + '@react-aria/toggle@3.11.1': + resolution: {integrity: sha512-9SBvSFpGcLODN1u64tQ8aL6uLFnuuJRA2N0Kjmxp5PE1gk8IKG+BXsjZmq7auDAN5WPISBXw1RzEOmbghruBTQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/node@16.9.1': - resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==} + '@react-aria/tooltip@3.7.4': + resolution: {integrity: sha512-+XRx4HlLYqWY3fB8Z60bQi/rbWDIGlFUtXYbtoa1J+EyRWfhpvsYImP8qeeNO/vgjUtDy1j9oKa8p6App9mBMQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@types/node@18.19.75': - resolution: {integrity: sha512-UIksWtThob6ZVSyxcOqCLOUNg/dyO1Qvx4McgeuhrEtHTLFTf7BBhEazaE4K806FGTPtzd/2sE90qn4fVr7cyw==} + '@react-aria/utils@3.24.1': + resolution: {integrity: sha512-O3s9qhPMd6n42x9sKeJ3lhu5V1Tlnzhu6Yk8QOvDuXf7UGuUjXf9mzfHJt1dYzID4l9Fwm8toczBzPM9t0jc8Q==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@types/node@20.14.8': - resolution: {integrity: sha512-DO+2/jZinXfROG7j7WKFn/3C6nFwxy2lLpgLjEXJz+0XKphZlTLJ14mo8Vfg8X5BWN6XjyESXq+LcYdT7tR3bA==} + '@react-aria/utils@3.28.1': + resolution: {integrity: sha512-mnHFF4YOVu9BRFQ1SZSKfPhg3z+lBRYoW5mLcYTQihbKhz48+I1sqRkP7ahMITr8ANH3nb34YaMME4XWmK2Mgg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/node@20.17.17': - resolution: {integrity: sha512-/WndGO4kIfMicEQLTi/mDANUu/iVUhT7KboZPdEqqHQ4aTS+3qT3U5gIqWDFV+XouorjfgGqvKILJeHhuQgFYg==} + '@react-aria/visually-hidden@3.8.12': + resolution: {integrity: sha512-Bawm+2Cmw3Xrlr7ARzl2RLtKh0lNUdJ0eNqzWcyx4c0VHUAWtThmH5l+HRqFUGzzutFZVo89SAy40BAbd0gjVw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@types/node@22.13.10': - resolution: {integrity: sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==} + '@react-aria/visually-hidden@3.8.21': + resolution: {integrity: sha512-iii5qO+cVHrHiOeiBYCnTRUQG2eOgEPFmiMG4dAuby8+pJJ8U4BvffX2sDTYWL6ztLLBYyrsUHPSw1Ld03JhmA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/parse-json@4.0.2': - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + '@react-stately/calendar@3.5.1': + resolution: {integrity: sha512-7l7QhqGUJ5AzWHfvZzbTe3J4t72Ht5BmhW4hlVI7flQXtfrmYkVtl3ZdytEZkkHmWGYZRW9b4IQTQGZxhtlElA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@types/prop-types@15.7.14': - resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} + '@react-stately/checkbox@3.6.5': + resolution: {integrity: sha512-IXV3f9k+LtmfQLE+DKIN41Q5QB/YBLDCB1YVx5PEdRp52S9+EACD5683rjVm8NVRDwjMi2SP6RnFRk7fVb5Azg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@types/react-dom@18.3.5': - resolution: {integrity: sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==} + '@react-stately/collections@3.10.7': + resolution: {integrity: sha512-KRo5O2MWVL8n3aiqb+XR3vP6akmHLhLWYZEmPKjIv0ghQaEebBTrN3wiEjtd6dzllv0QqcWvDLM1LntNfJ2TsA==} peerDependencies: - '@types/react': ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@types/react@18.3.18': - resolution: {integrity: sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==} + '@react-stately/collections@3.12.2': + resolution: {integrity: sha512-RoehfGwrsYJ/WGtyGSLZNYysszajnq0Q3iTXg7plfW1vNEzom/A31vrLjOSOHJWAtwW339SDGGRpymDtLo4GWA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/responselike@1.0.3': - resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} + '@react-stately/combobox@3.8.4': + resolution: {integrity: sha512-iLVGvKRRz0TeJXZhZyK783hveHpYA6xovOSdzSD+WGYpiPXo1QrcrNoH3AE0Z2sHtorU+8nc0j58vh5PB+m2AA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@types/retry@0.12.0': - resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + '@react-stately/datepicker@3.9.4': + resolution: {integrity: sha512-yBdX01jn6gq4NIVvHIqdjBUPo+WN8Bujc4OnPw+ZnfA4jI0eIgq04pfZ84cp1LVXW0IB0VaCu1AlQ/kvtZjfGA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@types/retry@0.12.5': - resolution: {integrity: sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw==} + '@react-stately/flags@3.1.0': + resolution: {integrity: sha512-KSHOCxTFpBtxhIRcKwsD1YDTaNxFtCYuAUb0KEihc16QwqZViq4hasgPBs2gYm7fHRbw7WYzWKf6ZSo/+YsFlg==} - '@types/semver@7.5.8': - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + '@react-stately/form@3.0.3': + resolution: {integrity: sha512-92YYBvlHEWUGUpXgIaQ48J50jU9XrxfjYIN8BTvvhBHdD63oWgm8DzQnyT/NIAMzdLnhkg7vP+fjG8LjHeyIAg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@types/statuses@2.0.5': - resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==} + '@react-stately/form@3.1.2': + resolution: {integrity: sha512-sKgkV+rxeqM1lf0dCq2wWzdYa5Z0wz/MB3yxjodffy8D43PjFvUOMWpgw/752QHPGCd1XIxA3hE58Dw9FFValg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/tough-cookie@4.0.5': - resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + '@react-stately/grid@3.11.0': + resolution: {integrity: sha512-Wp6kza+2MzNybls9pRWvIwAHwMnSV1eUZXZxLwJy+JVS5lghkr731VvT+YD79z70osJKmgxgmiQGm4/yfetXdA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/turndown@5.0.5': - resolution: {integrity: sha512-TL2IgGgc7B5j78rIccBtlYAnkuv8nUQqhQc+DSYV5j9Be9XOcm/SKOVRuA47xAVI3680Tk9B1d8flK2GWT2+4w==} + '@react-stately/list@3.10.5': + resolution: {integrity: sha512-fV9plO+6QDHiewsYIhboxcDhF17GO95xepC5ki0bKXo44gr14g/LSo/BMmsaMnV+1BuGdBunB05bO4QOIaigXA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@types/uuid@10.0.0': - resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} + '@react-stately/list@3.12.0': + resolution: {integrity: sha512-6niQWJ6TZwOKLAOn2wIsxtOvWenh3rKiKdOh4L4O4f7U+h1Hu000Mu4lyIQm2P9uZAkF2Y5QNh6dHN+hSd6h3A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/uuid@9.0.8': - resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} + '@react-stately/menu@3.7.1': + resolution: {integrity: sha512-mX1w9HHzt+xal1WIT2xGrTQsoLvDwuB2R1Er1MBABs//MsJzccycatcgV/J/28m6tO5M9iuFQQvLV+i1dCtodg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@types/yauzl@2.10.3': - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + '@react-stately/menu@3.9.2': + resolution: {integrity: sha512-mVCFMUQnEMs6djOqgHC2d46k/5Mv5f6UYa4TMnNDSiY8QlHG4eIdmhBmuYpOwWuOOHJ0xKmLQ4PWLzma/mBorg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@typescript-eslint/eslint-plugin@5.62.0': - resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@react-stately/overlays@3.6.14': + resolution: {integrity: sha512-RRalTuHdwrKO1BmXKaqBtE1GGUXU4VUAWwgh4lsP2EFSixDHmOVLxHFDWYvOPChBhpi8KXfLEgm6DEgPBvLBZQ==} peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@typescript-eslint/eslint-plugin@7.18.0': - resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} - engines: {node: ^18.18.0 || >=20.0.0} + '@react-stately/overlays@3.6.7': + resolution: {integrity: sha512-6zp8v/iNUm6YQap0loaFx6PlvN8C0DgWHNlrlzMtMmNuvjhjR0wYXVaTfNoUZBWj25tlDM81ukXOjpRXg9rLrw==} peerDependencies: - '@typescript-eslint/parser': ^7.0.0 - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@typescript-eslint/parser@5.62.0': - resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@react-stately/radio@3.10.4': + resolution: {integrity: sha512-kCIc7tAl4L7Hu4Wt9l2jaa+MzYmAJm0qmC8G8yPMbExpWbLRu6J8Un80GZu+JxvzgDlqDyrVvyv9zFifwH/NkQ==} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@typescript-eslint/parser@7.18.0': - resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} - engines: {node: ^18.18.0 || >=20.0.0} + '@react-stately/select@3.6.11': + resolution: {integrity: sha512-8pD4PNbZQNWg33D4+Fa0mrajUCYV3aA5YIwW3GY8NSRwBspaW4PKSZJtDT5ieN0WAO44YkAmX4idRaMAvqRusA==} peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@typescript-eslint/scope-manager@5.62.0': - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@react-stately/selection@3.20.0': + resolution: {integrity: sha512-woUSHMTyQiNmCf63Dyot1WXFfWnm6PFYkI9kymcq1qrrly4g/j27U+5PaRWOHawMiJwn1e1GTogk8B+K5ahshQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@typescript-eslint/scope-manager@7.18.0': - resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@react-stately/slider@3.5.4': + resolution: {integrity: sha512-Jsf7K17dr93lkNKL9ij8HUcoM1sPbq8TvmibD6DhrK9If2lje+OOL8y4n4qreUnfMT56HCAeS9wCO3fg3eMyrw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@typescript-eslint/type-utils@5.62.0': - resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@react-stately/table@3.11.8': + resolution: {integrity: sha512-EdyRW3lT1/kAVDp5FkEIi1BQ7tvmD2YgniGdLuW/l9LADo0T+oxZqruv60qpUS6sQap+59Riaxl91ClDxrJnpg==} peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@typescript-eslint/type-utils@7.18.0': - resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@react-stately/tabs@3.6.6': + resolution: {integrity: sha512-sOLxorH2uqjAA+v1ppkMCc2YyjgqvSGeBDgtR/lyPSDd4CVMoTExszROX2dqG0c8il9RQvzFuufUtQWMY6PgSA==} peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@typescript-eslint/types@5.62.0': - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@react-stately/toggle@3.7.4': + resolution: {integrity: sha512-CoYFe9WrhLkDP4HGDpJYQKwfiYCRBAeoBQHv+JWl5eyK61S8xSwoHsveYuEZ3bowx71zyCnNAqWRrmNOxJ4CKA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@typescript-eslint/types@7.18.0': - resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} - engines: {node: ^18.18.0 || >=20.0.0} + '@react-stately/toggle@3.8.2': + resolution: {integrity: sha512-5KPpT6zvt8H+WC9UbubhCTZltREeYb/3hKdl4YkS7BbSOQlHTFC0pOk8SsQU70Pwk26jeVHbl5le/N8cw00x8w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@typescript-eslint/typescript-estree@5.62.0': - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@react-stately/tooltip@3.4.9': + resolution: {integrity: sha512-P7CDJsdoKarz32qFwf3VNS01lyC+63gXpDZG31pUu+EO5BeQd4WKN/AH1Beuswpr4GWzxzFc1aXQgERFGVzraA==} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@typescript-eslint/typescript-estree@7.18.0': - resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@react-stately/tree@3.8.1': + resolution: {integrity: sha512-LOdkkruJWch3W89h4B/bXhfr0t0t1aRfEp+IMrrwdRAl23NaPqwl5ILHs4Xu5XDHqqhg8co73pHrJwUyiTWEjw==} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@typescript-eslint/utils@5.62.0': - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@react-stately/tree@3.8.8': + resolution: {integrity: sha512-21WB9kKT9+/tr6B8Q4G53tZXl/3dftg5sZqCR6x055FGd2wGVbkxsLhQLmC+XVkTiLU9pB3BjvZ9eaSj1D8Wmg==} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@typescript-eslint/utils@7.18.0': - resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} - engines: {node: ^18.18.0 || >=20.0.0} + '@react-stately/utils@3.10.1': + resolution: {integrity: sha512-VS/EHRyicef25zDZcM/ClpzYMC5i2YGN6uegOeQawmgfGjb02yaCX0F0zR69Pod9m2Hr3wunTbtpgVXvYbZItg==} peerDependencies: - eslint: ^8.56.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@typescript-eslint/visitor-keys@5.62.0': - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@react-stately/utils@3.10.5': + resolution: {integrity: sha512-iMQSGcpaecghDIh3mZEpZfoFH3ExBwTtuBEcvZ2XnGzCgQjeYXcMdIUwAfVQLXFTdHUHGF6Gu6/dFrYsCzySBQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@typescript-eslint/visitor-keys@7.18.0': - resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} - engines: {node: ^18.18.0 || >=20.0.0} + '@react-stately/virtualizer@3.7.1': + resolution: {integrity: sha512-voHgE6EQ+oZaLv6u2umKxakvIKNkCQuUihqKACTjdslp7SJh4Mvs3oLBI0hf0JOh+rCcFIKDvQtFwy1fXFRYBA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@ungap/structured-clone@1.3.0': - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + '@react-types/accordion@3.0.0-alpha.21': + resolution: {integrity: sha512-cbE06jH/ZoI+1898xd7ocQ/A/Rtkz8wTJAVOYgc8VRY1SYNQ/XZTGH5T6dD6aERAmiDwL/kjD7xhsE80DyaEKA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@vitejs/plugin-react@4.3.4': - resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} - engines: {node: ^14.18.0 || >=16.0.0} + '@react-types/breadcrumbs@3.7.5': + resolution: {integrity: sha512-lV9IDYsMiu2TgdMIjEmsOE0YWwjb3jhUNK1DCZZfq6uWuiHLgyx2EncazJBUWSjHJ4ta32j7xTuXch+8Ai6u/A==} peerDependencies: - vite: ^4.2.0 || ^5.0.0 || ^6.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@vitest/browser@3.0.5': - resolution: {integrity: sha512-5WAWJoucuWcGYU5t0HPBY03k9uogbUEIu4pDmZHoB4Dt+6pXqzDbzEmxGjejZSitSYA3k/udYfuotKNxETVA3A==} + '@react-types/button@3.11.0': + resolution: {integrity: sha512-gJh5i0JiBiZGZGDo+tXMp6xbixPM7IKZ0sDuxTYBG49qNzzWJq0uNYltO3emwSVXFSsBgRV/Wu8kQGhfuN7wIw==} peerDependencies: - playwright: '*' - safaridriver: '*' - vitest: 3.0.5 - webdriverio: '*' - peerDependenciesMeta: - playwright: - optional: true - safaridriver: - optional: true - webdriverio: - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@vitest/coverage-istanbul@3.0.5': - resolution: {integrity: sha512-yTcIwrpLHOyPP28PXXLRv1NzzKCrqDnmT7oVypTa1Q24P6OwGT4Wi6dXNEaJg33vmrPpoe81f31kwB5MtfM+ow==} + '@react-types/button@3.9.4': + resolution: {integrity: sha512-raeQBJUxBp0axNF74TXB8/H50GY8Q3eV6cEKMbZFP1+Dzr09Ngv0tJBeW0ewAxAguNH5DRoMUAUGIXtSXskVdA==} peerDependencies: - vitest: 3.0.5 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@vitest/coverage-v8@3.0.7': - resolution: {integrity: sha512-Av8WgBJLTrfLOer0uy3CxjlVuWK4CzcLBndW1Nm2vI+3hZ2ozHututkfc7Blu1u6waeQ7J8gzPK/AsBRnWA5mQ==} + '@react-types/calendar@3.4.6': + resolution: {integrity: sha512-WSntZPwtvsIYWvBQRAPvuCn55UTJBZroTvX0vQvWykJRQnPAI20G1hMQ3dNsnAL+gLZUYxBXn66vphmjUuSYew==} peerDependencies: - '@vitest/browser': 3.0.7 - vitest: 3.0.7 - peerDependenciesMeta: - '@vitest/browser': - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@vitest/coverage-v8@3.0.8': - resolution: {integrity: sha512-y7SAKsQirsEJ2F8bulBck4DoluhI2EEgTimHd6EEUgJBGKy9tC25cpywh1MH4FvDGoG2Unt7+asVd1kj4qOSAw==} + '@react-types/calendar@3.6.1': + resolution: {integrity: sha512-EMbFJX/3gD5j+R0qZEGqK+wlhBxMSHhGP8GqP9XGbpuJPE3w9/M/PVWdh8FUdzf9srYxPOq5NgiGI1JUJvdZqw==} peerDependencies: - '@vitest/browser': 3.0.8 - vitest: 3.0.8 - peerDependenciesMeta: - '@vitest/browser': - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@vitest/expect@3.0.5': - resolution: {integrity: sha512-nNIOqupgZ4v5jWuQx2DSlHLEs7Q4Oh/7AYwNyE+k0UQzG7tSmjPXShUikn1mpNGzYEN2jJbTvLejwShMitovBA==} + '@react-types/checkbox@3.8.1': + resolution: {integrity: sha512-5/oVByPw4MbR/8QSdHCaalmyWC71H/QGgd4aduTJSaNi825o+v/hsN2/CH7Fq9atkLKsC8fvKD00Bj2VGaKriQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@vitest/expect@3.0.7': - resolution: {integrity: sha512-QP25f+YJhzPfHrHfYHtvRn+uvkCFCqFtW9CktfBxmB+25QqWsx7VB2As6f4GmwllHLDhXNHvqedwhvMmSnNmjw==} + '@react-types/checkbox@3.9.2': + resolution: {integrity: sha512-BruOLjr9s0BS2+G1Q2ZZ0ubnSTG54hZWr59lCHXaLxMdA/+KVsR6JVMQuYKsW0P8RDDlQXE/QGz3n9yB/Ara4A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@vitest/mocker@3.0.5': - resolution: {integrity: sha512-CLPNBFBIE7x6aEGbIjaQAX03ZZlBMaWwAjBdMkIf/cAn6xzLTiM3zYqO/WAbieEjsAZir6tO71mzeHZoodThvw==} + '@react-types/combobox@3.11.1': + resolution: {integrity: sha512-UNc3OHt5cUt5gCTHqhQIqhaWwKCpaNciD8R7eQazmHiA9fq8ROlV+7l3gdNgdhJbTf5Bu/V5ISnN7Y1xwL3zqQ==} peerDependencies: - msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@vitest/mocker@3.0.7': - resolution: {integrity: sha512-qui+3BLz9Eonx4EAuR/i+QlCX6AUZ35taDQgwGkK/Tw6/WgwodSrjN1X2xf69IA/643ZX5zNKIn2svvtZDrs4w==} + '@react-types/datepicker@3.7.4': + resolution: {integrity: sha512-ZfvgscvNzBJpYyVWg3nstJtA/VlWLwErwSkd1ivZYam859N30w8yH+4qoYLa6FzWLCFlrsRHyvtxlEM7lUAt5A==} peerDependencies: - msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@vitest/pretty-format@3.0.5': - resolution: {integrity: sha512-CjUtdmpOcm4RVtB+up8r2vVDLR16Mgm/bYdkGFe3Yj/scRfCpbSi2W/BDSDcFK7ohw8UXvjMbOp9H4fByd/cOA==} - - '@vitest/pretty-format@3.0.7': - resolution: {integrity: sha512-CiRY0BViD/V8uwuEzz9Yapyao+M9M008/9oMOSQydwbwb+CMokEq3XVaF3XK/VWaOK0Jm9z7ENhybg70Gtxsmg==} - - '@vitest/pretty-format@3.0.8': - resolution: {integrity: sha512-BNqwbEyitFhzYMYHUVbIvepOyeQOSFA/NeJMIP9enMntkkxLgOcgABH6fjyXG85ipTgvero6noreavGIqfJcIg==} - - '@vitest/runner@3.0.5': - resolution: {integrity: sha512-BAiZFityFexZQi2yN4OX3OkJC6scwRo8EhRB0Z5HIGGgd2q+Nq29LgHU/+ovCtd0fOfXj5ZI6pwdlUmC5bpi8A==} - - '@vitest/runner@3.0.7': - resolution: {integrity: sha512-WeEl38Z0S2ZcuRTeyYqaZtm4e26tq6ZFqh5y8YD9YxfWuu0OFiGFUbnxNynwLjNRHPsXyee2M9tV7YxOTPZl2g==} + '@react-types/dialog@3.5.16': + resolution: {integrity: sha512-2D16XjuW9fG3LkVIXu3RzUp3zcK2IZOWlAl+r5i0aLw2Q0QHyYMfGbmgvhxVeAhxhEj/57/ziSl/8rJ9pzmFnw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@vitest/snapshot@3.0.5': - resolution: {integrity: sha512-GJPZYcd7v8QNUJ7vRvLDmRwl+a1fGg4T/54lZXe+UOGy47F9yUfE18hRCtXL5aHN/AONu29NGzIXSVFh9K0feA==} + '@react-types/grid@3.2.6': + resolution: {integrity: sha512-XfHenL2jEBUYrhKiPdeM24mbLRXUn79wVzzMhrNYh24nBwhsPPpxF+gjFddT3Cy8dt6tRInfT6pMEu9nsXwaHw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@vitest/snapshot@3.0.7': - resolution: {integrity: sha512-eqTUryJWQN0Rtf5yqCGTQWsCFOQe4eNz5Twsu21xYEcnFJtMU5XvmG0vgebhdLlrHQTSq5p8vWHJIeJQV8ovsA==} + '@react-types/grid@3.3.0': + resolution: {integrity: sha512-9IXgD5qXXxz+S9RK+zT8umuTCEcE4Yfdl0zUGyTCB8LVcPEeZuarLGXZY/12Rkbd8+r6MUIKTxMVD3Nq9X5Ksg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@vitest/spy@3.0.5': - resolution: {integrity: sha512-5fOzHj0WbUNqPK6blI/8VzZdkBlQLnT25knX0r4dbZI9qoZDf3qAdjoMmDcLG5A83W6oUUFJgUd0EYBc2P5xqg==} + '@react-types/link@3.5.11': + resolution: {integrity: sha512-aX9sJod9msdQaOT0NUTYNaBKSkXGPazSPvUJ/Oe4/54T3sYkWeRqmgJ84RH55jdBzpbObBTg8qxKiPA26a1q9Q==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@vitest/spy@3.0.7': - resolution: {integrity: sha512-4T4WcsibB0B6hrKdAZTM37ekuyFZt2cGbEGd2+L0P8ov15J1/HUsUaqkXEQPNAWr4BtPPe1gI+FYfMHhEKfR8w==} + '@react-types/link@3.5.5': + resolution: {integrity: sha512-G6P5WagHDR87npN7sEuC5IIgL1GsoY4WFWKO4734i2CXRYx24G9P0Su3AX4GA3qpspz8sK1AWkaCzBMmvnunfw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@vitest/utils@3.0.5': - resolution: {integrity: sha512-N9AX0NUoUtVwKwy21JtwzaqR5L5R5A99GAbrHfCCXK1lp593i/3AZAXhSP43wRQuxYsflrdzEfXZFo1reR1Nkg==} + '@react-types/listbox@3.5.5': + resolution: {integrity: sha512-6cUjbYZVa0X2UMsenQ50ZaAssTUfzX3D0Q0Wd5nNf4W7ntBroDg6aBfNQoPDZikPUy8u+Y3uc/xZQfv30si7NA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@vitest/utils@3.0.7': - resolution: {integrity: sha512-xePVpCRfooFX3rANQjwoditoXgWb1MaFbzmGuPP59MK6i13mrnDw/yEIyJudLeW6/38mCNcwCiJIGmpDPibAIg==} + '@react-types/menu@3.9.15': + resolution: {integrity: sha512-vNEeGxKLYBJc3rwImnEhSVzeIrhUSSRYRk617oGZowX3NkWxnixFGBZNy0w8j0z8KeNz3wRM4xqInRord1mDbw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@vue/compiler-core@3.5.13': - resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} + '@react-types/menu@3.9.9': + resolution: {integrity: sha512-FamUaPVs1Fxr4KOMI0YcR2rYZHoN7ypGtgiEiJ11v/tEPjPPGgeKDxii0McCrdOkjheatLN1yd2jmMwYj6hTDg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@vue/compiler-dom@3.5.13': - resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} + '@react-types/overlays@3.8.13': + resolution: {integrity: sha512-xgT843KIh1otvYPQ6kCGTVUICiMF5UQ7SZUQZd4Zk3VtiFIunFVUvTvL03cpt0026UmY7tbv7vFrPKcT6xjsjw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@vue/compiler-sfc@3.5.13': - resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} + '@react-types/overlays@3.8.7': + resolution: {integrity: sha512-zCOYvI4at2DkhVpviIClJ7bRrLXYhSg3Z3v9xymuPH3mkiuuP/dm8mUCtkyY4UhVeUTHmrQh1bzaOP00A+SSQA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@vue/compiler-ssr@3.5.13': - resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} + '@react-types/progress@3.5.4': + resolution: {integrity: sha512-JNc246sTjasPyx5Dp7/s0rp3Bz4qlu4LrZTulZlxWyb53WgBNL7axc26CCi+I20rWL9+c7JjhrRxnLl/1cLN5g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@vue/shared@3.5.13': - resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} + '@react-types/radio@3.8.1': + resolution: {integrity: sha512-bK0gio/qj1+0Ldu/3k/s9BaOZvnnRgvFtL3u5ky479+aLG5qf1CmYed3SKz8ErZ70JkpuCSrSwSCFf0t1IHovw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@xmldom/xmldom@0.8.10': - resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} - engines: {node: '>=10.0.0'} + '@react-types/select@3.9.10': + resolution: {integrity: sha512-vvC5+cBSOu6J6lm74jhhP3Zvo1JO8m0FNX+Q95wapxrhs2aYYeMIgVuvNKeOuhVqzpBZxWmblBjCVNzCArZOaQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@xobotyi/scrollbar-width@1.9.5': - resolution: {integrity: sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==} + '@react-types/select@3.9.4': + resolution: {integrity: sha512-xI7dnOW2st91fPPcv6hdtrTdcfetYiqZuuVPZ5TRobY7Q10/Zqqe/KqtOw1zFKUj9xqNJe4Ov3xP5GSdcO60Eg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@zag-js/dom-query@0.31.1': - resolution: {integrity: sha512-oiuohEXAXhBxpzzNm9k2VHGEOLC1SXlXSbRPcfBZ9so5NRQUA++zCE7cyQJqGLTZR0t3itFLlZqDbYEXRrefwg==} + '@react-types/shared@3.23.1': + resolution: {integrity: sha512-5d+3HbFDxGZjhbMBeFHRQhexMFt4pUce3okyRtUVKbbedQFUrtXSBg9VszgF2RTeQDKDkMCIQDtz5ccP/Lk1gw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@zag-js/element-size@0.31.1': - resolution: {integrity: sha512-4T3yvn5NqqAjhlP326Fv+w9RqMIBbNN9H72g5q2ohwzhSgSfZzrKtjL4rs9axY/cw9UfMfXjRjEE98e5CMq7WQ==} + '@react-types/shared@3.28.0': + resolution: {integrity: sha512-9oMEYIDc3sk0G5rysnYvdNrkSg7B04yTKl50HHSZVbokeHpnU0yRmsDaWb9B/5RprcKj8XszEk5guBO8Sa/Q+Q==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@zag-js/focus-visible@0.31.1': - resolution: {integrity: sha512-dbLksz7FEwyFoANbpIlNnd3bVm0clQSUsnP8yUVQucStZPsuWjCrhL2jlAbGNrTrahX96ntUMXHb/sM68TibFg==} + '@react-types/slider@3.7.9': + resolution: {integrity: sha512-MxCIVkrBSbN3AxIYW4hOpTcwPmIuY4841HF36sDLFWR3wx06z70IY3GFwV7Cbp814vhc84d4ABnPMwtE+AZRGQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true + '@react-types/switch@3.5.9': + resolution: {integrity: sha512-7XIS5qycIKhdfcWfzl8n458/7tkZKCNfMfZmIREgozKOtTBirjmtRRsefom2hlFT8VIlG7COmY4btK3oEuEhnQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - abbrev@1.1.1: - resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + '@react-types/table@3.9.5': + resolution: {integrity: sha512-fgM2j9F/UR4Anmd28CueghCgBwOZoCVyN8fjaIFPd2MN4gCwUUfANwxLav65gZk4BpwUXGoQdsW+X50L3555mg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} + '@react-types/tabs@3.3.7': + resolution: {integrity: sha512-ZdLe5xOcFX6+/ni45Dl2jO0jFATpTnoSqj6kLIS/BYv8oh0n817OjJkLf+DS3CLfNjApJWrHqAk34xNh6nRnEg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} + '@react-types/textfield@3.12.0': + resolution: {integrity: sha512-B0vzCIBUbYWrlFk+odVXrSmPYwds9G+G+HiOO/sJr4eZ4RYiIqnFbZ7qiWhWXaou7vi71iXVqKQ8mxA6bJwPEQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - accepts@2.0.0: - resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} - engines: {node: '>= 0.6'} + '@react-types/textfield@3.9.3': + resolution: {integrity: sha512-DoAY6cYOL0pJhgNGI1Rosni7g72GAt4OVr2ltEx2S9ARmFZ0DBvdhA9lL2nywcnKMf27PEJcKMXzXc10qaHsJw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + '@react-types/tooltip@3.4.9': + resolution: {integrity: sha512-wZ+uF1+Zc43qG+cOJzioBmLUNjRa7ApdcT0LI1VvaYvH5GdfjzUJOorLX9V/vAci0XMJ50UZ+qsh79aUlw2yqg==} peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} - engines: {node: '>=0.4.0'} + '@rollup/rollup-android-arm-eabi@4.34.6': + resolution: {integrity: sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==} + cpu: [arm] + os: [android] - acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} - engines: {node: '>=0.4.0'} - hasBin: true + '@rollup/rollup-android-arm64@4.34.6': + resolution: {integrity: sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==} + cpu: [arm64] + os: [android] - agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} + '@rollup/rollup-darwin-arm64@4.34.6': + resolution: {integrity: sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==} + cpu: [arm64] + os: [darwin] - agent-base@7.1.3: - resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} - engines: {node: '>= 14'} + '@rollup/rollup-darwin-x64@4.34.6': + resolution: {integrity: sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==} + cpu: [x64] + os: [darwin] - agentkeepalive@4.6.0: - resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} - engines: {node: '>= 8.0.0'} + '@rollup/rollup-freebsd-arm64@4.34.6': + resolution: {integrity: sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==} + cpu: [arm64] + os: [freebsd] - aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} + '@rollup/rollup-freebsd-x64@4.34.6': + resolution: {integrity: sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==} + cpu: [x64] + os: [freebsd] - ajv-formats@3.0.1: - resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.34.6': + resolution: {integrity: sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==} + cpu: [arm] + os: [linux] - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + '@rollup/rollup-linux-arm-musleabihf@4.34.6': + resolution: {integrity: sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==} + cpu: [arm] + os: [linux] - ajv@8.17.1: - resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + '@rollup/rollup-linux-arm64-gnu@4.34.6': + resolution: {integrity: sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==} + cpu: [arm64] + os: [linux] - ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} + '@rollup/rollup-linux-arm64-musl@4.34.6': + resolution: {integrity: sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==} + cpu: [arm64] + os: [linux] - ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} + '@rollup/rollup-linux-loongarch64-gnu@4.34.6': + resolution: {integrity: sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==} + cpu: [loong64] + os: [linux] - ansi-escapes@5.0.0: - resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} - engines: {node: '>=12'} + '@rollup/rollup-linux-powerpc64le-gnu@4.34.6': + resolution: {integrity: sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==} + cpu: [ppc64] + os: [linux] - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} + '@rollup/rollup-linux-riscv64-gnu@4.34.6': + resolution: {integrity: sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==} + cpu: [riscv64] + os: [linux] - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} - engines: {node: '>=12'} + '@rollup/rollup-linux-s390x-gnu@4.34.6': + resolution: {integrity: sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==} + cpu: [s390x] + os: [linux] - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + '@rollup/rollup-linux-x64-gnu@4.34.6': + resolution: {integrity: sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==} + cpu: [x64] + os: [linux] - ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} + '@rollup/rollup-linux-x64-musl@4.34.6': + resolution: {integrity: sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==} + cpu: [x64] + os: [linux] - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} + '@rollup/rollup-win32-arm64-msvc@4.34.6': + resolution: {integrity: sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==} + cpu: [arm64] + os: [win32] - any-base@1.1.0: - resolution: {integrity: sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==} + '@rollup/rollup-win32-ia32-msvc@4.34.6': + resolution: {integrity: sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==} + cpu: [ia32] + os: [win32] - appdmg@0.6.6: - resolution: {integrity: sha512-GRmFKlCG+PWbcYF4LUNonTYmy0GjguDy6Jh9WP8mpd0T6j80XIJyXBiWlD0U+MLNhqV9Nhx49Gl9GpVToulpLg==} - engines: {node: '>=8.5'} - os: [darwin] + '@rollup/rollup-win32-x64-msvc@4.34.6': + resolution: {integrity: sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==} + cpu: [x64] + os: [win32] + + '@rsbuild/core@1.2.17': + resolution: {integrity: sha512-e5J+Fn5kjwOcf254pGwNGeMdTSmsFFC3vmLEAmxVVRYOr8rgph4fSfKXxUwN1jbL2o5sEDdw0vFNq02PdEofnQ==} + engines: {node: '>=16.7.0'} hasBin: true - arch@2.2.0: - resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} + '@rslib/core@0.5.3': + resolution: {integrity: sha512-HlFGd4PZ4kJDrGZ4VBPIglGPjsTI+LuVWTaFg/hrmElnmXpw3iq0Oln5Esv24L3VBofyvZGPMlu1fZTiqTPzcw==} + engines: {node: '>=16.7.0'} + hasBin: true + peerDependencies: + '@microsoft/api-extractor': ^7 + typescript: ^5 + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + typescript: + optional: true - arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + '@rslib/core@0.5.4': + resolution: {integrity: sha512-rJ+wG++/Y8SbyuJB1RhlgnOUPzsxubD0lBivZWXVhOGawAea7mUoI4kZQ6YmF0iybW1QA61wHOf3FY+R1BxvgQ==} + engines: {node: '>=16.7.0'} + hasBin: true + peerDependencies: + '@microsoft/api-extractor': ^7 + typescript: ^5 + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + typescript: + optional: true - argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + '@rspack/binding-darwin-arm64@1.2.7': + resolution: {integrity: sha512-dT5eSMTknZaI8Djmz8KnaWM68rjZuBZwsKyF144o+ZSJM55vgiNXyL0lQYB8mX9nR3Gck+jKuGUAT2W/EF/t5Q==} + cpu: [arm64] + os: [darwin] - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + '@rspack/binding-darwin-x64@1.2.7': + resolution: {integrity: sha512-5n8IhKBxH71d4BUIvyzTwSOAOKNneLPJwLIphSPNIbCMGjLI59/EVpxSQ/AAUfyMkqOs635NNCn0eGQVuzpI/w==} + cpu: [x64] + os: [darwin] - aria-hidden@1.2.4: - resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} - engines: {node: '>=10'} + '@rspack/binding-linux-arm64-gnu@1.2.7': + resolution: {integrity: sha512-DTtFBJmgQQrVWjbklpgJDr3kE9Uf1fHsPh+1GVslsBuyn+o4O7JslrnjuVsQCYKoiEg0Lg4ZPQmwnhJLHssZ5A==} + cpu: [arm64] + os: [linux] - aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + '@rspack/binding-linux-arm64-musl@1.2.7': + resolution: {integrity: sha512-01/OoQQF9eyDvRKkxj4DzCznfGZIvnzI8qOsrv+M7VBm8FLoKpb3hygXixaGQOXmNL42XTh61qjgm++fBu6aUA==} + cpu: [arm64] + os: [linux] - array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} + '@rspack/binding-linux-x64-gnu@1.2.7': + resolution: {integrity: sha512-lUOAUq0YSsofCXsP6XnlgfH0ZRDZ2X2XqXLXYjqf4xkSxCl5eBmE0EQYjAHF4zjUvU5rVx4a4bDLWv7+t3bOHg==} + cpu: [x64] + os: [linux] - array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + '@rspack/binding-linux-x64-musl@1.2.7': + resolution: {integrity: sha512-ZrPXfgT30p4DlydYavaTHiluxHkWvZHt7K4q7qNyTfYYowG6jRGwWi/PATdugNICGv027Wsh5nzEO4o27Iuhwg==} + cpu: [x64] + os: [linux] - array-ify@1.0.0: - resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + '@rspack/binding-win32-arm64-msvc@1.2.7': + resolution: {integrity: sha512-1OzzM+OUSWX39XYcDfxJ8bGX5vNNrRejCMGotBEdP+uQ3KMWCPz0G4KRc3QIjghaLIYk3ofd83hcfUxyk/2Xog==} + cpu: [arm64] + os: [win32] - array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} + '@rspack/binding-win32-ia32-msvc@1.2.7': + resolution: {integrity: sha512-VWlDCV9kDtijk9GK6ZtBQmYoVzKGpnrJB0iI3d2gIEa/2NwikJ89bLMFE4dFx8UNH3p/sSyb5pmPOQnbudFK7Q==} + cpu: [ia32] + os: [win32] - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} + '@rspack/binding-win32-x64-msvc@1.2.7': + resolution: {integrity: sha512-l/sTdeMsQF1a1aB79cWykDNRZG6nkUA0biJo2/sEARP3ijdr8TuwUdirp2JRDmZfQJkoJnQ2un9y9qyW+TIZzA==} + cpu: [x64] + os: [win32] - array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} + '@rspack/binding@1.2.7': + resolution: {integrity: sha512-QH+kxkG0I9C6lmlwgBUDFsy24ihXMGG5lfiNtQilk4CyBN+AgSWFENcYrnkUaBioZAvMBznQLiccV3X0JeH9iQ==} - array.prototype.findlastindex@1.2.5: - resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} - engines: {node: '>= 0.4'} + '@rspack/core@1.2.7': + resolution: {integrity: sha512-Vg7ySflnqI1nNOBPd6VJkQozWADssxn3einbxa9OqDVAB+dGSj8qihTs6rlaTSewidoaYTGIAiTMHO2y+61qqQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@rspack/tracing': ^1.x + '@swc/helpers': '>=0.5.1' + peerDependenciesMeta: + '@rspack/tracing': + optional: true + '@swc/helpers': + optional: true - array.prototype.flat@1.3.3: - resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} - engines: {node: '>= 0.4'} + '@rspack/lite-tapable@1.0.1': + resolution: {integrity: sha512-VynGOEsVw2s8TAlLf/uESfrgfrq2+rcXB1muPJYBWbsm1Oa6r5qVQhjA5ggM6z/coYPrsVMgovl3Ff7Q7OCp1w==} + engines: {node: '>=16.0.0'} - array.prototype.flatmap@1.3.3: - resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} - engines: {node: '>= 0.4'} + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} - engines: {node: '>= 0.4'} + '@sindresorhus/is@4.6.0': + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} - arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} + '@smithy/abort-controller@4.0.1': + resolution: {integrity: sha512-fiUIYgIgRjMWznk6iLJz35K2YxSLHzLBA/RC6lBrKfQ8fHbPfvk7Pk9UvpKoHgJjI18MnbPuEju53zcVy6KF1g==} + engines: {node: '>=18.0.0'} - assertion-error@2.0.1: - resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} - engines: {node: '>=12'} + '@smithy/config-resolver@4.0.1': + resolution: {integrity: sha512-Igfg8lKu3dRVkTSEm98QpZUvKEOa71jDX4vKRcvJVyRc3UgN3j7vFMf0s7xLQhYmKa8kyJGQgUJDOV5V3neVlQ==} + engines: {node: '>=18.0.0'} - ast-types@0.13.4: - resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} - engines: {node: '>=4'} + '@smithy/core@3.1.5': + resolution: {integrity: sha512-HLclGWPkCsekQgsyzxLhCQLa8THWXtB5PxyYN+2O6nkyLt550KQKTlbV2D1/j5dNIQapAZM1+qFnpBFxZQkgCA==} + engines: {node: '>=18.0.0'} - async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} - engines: {node: '>= 0.4'} + '@smithy/credential-provider-imds@4.0.1': + resolution: {integrity: sha512-l/qdInaDq1Zpznpmev/+52QomsJNZ3JkTl5yrTl02V6NBgJOQ4LY0SFw/8zsMwj3tLe8vqiIuwF6nxaEwgf6mg==} + engines: {node: '>=18.0.0'} - async-retry@1.3.3: - resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} + '@smithy/eventstream-codec@4.0.1': + resolution: {integrity: sha512-Q2bCAAR6zXNVtJgifsU16ZjKGqdw/DyecKNgIgi7dlqw04fqDu0mnq+JmGphqheypVc64CYq3azSuCpAdFk2+A==} + engines: {node: '>=18.0.0'} - async@1.5.2: - resolution: {integrity: sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==} + '@smithy/eventstream-serde-browser@4.0.1': + resolution: {integrity: sha512-HbIybmz5rhNg+zxKiyVAnvdM3vkzjE6ccrJ620iPL8IXcJEntd3hnBl+ktMwIy12Te/kyrSbUb8UCdnUT4QEdA==} + engines: {node: '>=18.0.0'} - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + '@smithy/eventstream-serde-config-resolver@4.0.1': + resolution: {integrity: sha512-lSipaiq3rmHguHa3QFF4YcCM3VJOrY9oq2sow3qlhFY+nBSTF/nrO82MUQRPrxHQXA58J5G1UnU2WuJfi465BA==} + engines: {node: '>=18.0.0'} - at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} + '@smithy/eventstream-serde-node@4.0.1': + resolution: {integrity: sha512-o4CoOI6oYGYJ4zXo34U8X9szDe3oGjmHgsMGiZM0j4vtNoT+h80TLnkUcrLZR3+E6HIxqW+G+9WHAVfl0GXK0Q==} + engines: {node: '>=18.0.0'} - atomically@2.0.3: - resolution: {integrity: sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==} + '@smithy/eventstream-serde-universal@4.0.1': + resolution: {integrity: sha512-Z94uZp0tGJuxds3iEAZBqGU2QiaBHP4YytLUjwZWx+oUeohCsLyUm33yp4MMBmhkuPqSbQCXq5hDet6JGUgHWA==} + engines: {node: '>=18.0.0'} - author-regex@1.0.0: - resolution: {integrity: sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g==} - engines: {node: '>=0.8'} + '@smithy/fetch-http-handler@5.0.1': + resolution: {integrity: sha512-3aS+fP28urrMW2KTjb6z9iFow6jO8n3MFfineGbndvzGZit3taZhKWtTorf+Gp5RpFDDafeHlhfsGlDCXvUnJA==} + engines: {node: '>=18.0.0'} - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} + '@smithy/hash-node@4.0.1': + resolution: {integrity: sha512-TJ6oZS+3r2Xu4emVse1YPB3Dq3d8RkZDKcPr71Nj/lJsdAP1c7oFzYqEn1IBc915TsgLl2xIJNuxCz+gLbLE0w==} + engines: {node: '>=18.0.0'} - await-to-js@3.0.0: - resolution: {integrity: sha512-zJAaP9zxTcvTHRlejau3ZOY4V7SRpiByf3/dxx2uyKxxor19tpmpV2QRsTKikckwhaPmr2dVpxxMr7jOCYVp5g==} - engines: {node: '>=6.0.0'} + '@smithy/invalid-dependency@4.0.1': + resolution: {integrity: sha512-gdudFPf4QRQ5pzj7HEnu6FhKRi61BfH/Gk5Yf6O0KiSbr1LlVhgjThcvjdu658VE6Nve8vaIWB8/fodmS1rBPQ==} + engines: {node: '>=18.0.0'} - axios@1.7.9: - resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} + '@smithy/is-array-buffer@2.2.0': + resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} + engines: {node: '>=14.0.0'} - b4a@1.6.7: - resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + '@smithy/is-array-buffer@4.0.0': + resolution: {integrity: sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==} + engines: {node: '>=18.0.0'} - babel-plugin-macros@3.1.0: - resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} - engines: {node: '>=10', npm: '>=6'} + '@smithy/middleware-content-length@4.0.1': + resolution: {integrity: sha512-OGXo7w5EkB5pPiac7KNzVtfCW2vKBTZNuCctn++TTSOMpe6RZO/n6WEC1AxJINn3+vWLKW49uad3lo/u0WJ9oQ==} + engines: {node: '>=18.0.0'} - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + '@smithy/middleware-endpoint@4.0.6': + resolution: {integrity: sha512-ftpmkTHIFqgaFugcjzLZv3kzPEFsBFSnq1JsIkr2mwFzCraZVhQk2gqN51OOeRxqhbPTkRFj39Qd2V91E/mQxg==} + engines: {node: '>=18.0.0'} - bare-events@2.5.4: - resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} + '@smithy/middleware-retry@4.0.7': + resolution: {integrity: sha512-58j9XbUPLkqAcV1kHzVX/kAR16GT+j7DUZJqwzsxh1jtz7G82caZiGyyFgUvogVfNTg3TeAOIJepGc8TXF4AVQ==} + engines: {node: '>=18.0.0'} - bare-fs@4.0.1: - resolution: {integrity: sha512-ilQs4fm/l9eMfWY2dY0WCIUplSUp7U0CT1vrqMg1MUdeZl4fypu5UP0XcDBK5WBQPJAKP1b7XEodISmekH/CEg==} - engines: {bare: '>=1.7.0'} + '@smithy/middleware-serde@4.0.2': + resolution: {integrity: sha512-Sdr5lOagCn5tt+zKsaW+U2/iwr6bI9p08wOkCp6/eL6iMbgdtc2R5Ety66rf87PeohR0ExI84Txz9GYv5ou3iQ==} + engines: {node: '>=18.0.0'} - bare-os@3.6.0: - resolution: {integrity: sha512-BUrFS5TqSBdA0LwHop4OjPJwisqxGy6JsWVqV6qaFoe965qqtaKfDzHY5T2YA1gUL0ZeeQeA+4BBc1FJTcHiPw==} - engines: {bare: '>=1.14.0'} + '@smithy/middleware-stack@4.0.1': + resolution: {integrity: sha512-dHwDmrtR/ln8UTHpaIavRSzeIk5+YZTBtLnKwDW3G2t6nAupCiQUvNzNoHBpik63fwUaJPtlnMzXbQrNFWssIA==} + engines: {node: '>=18.0.0'} - bare-path@3.0.0: - resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} + '@smithy/node-config-provider@4.0.1': + resolution: {integrity: sha512-8mRTjvCtVET8+rxvmzRNRR0hH2JjV0DFOmwXPrISmTIJEfnCBugpYYGAsCj8t41qd+RB5gbheSQ/6aKZCQvFLQ==} + engines: {node: '>=18.0.0'} - bare-stream@2.6.5: - resolution: {integrity: sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==} - peerDependencies: - bare-buffer: '*' - bare-events: '*' - peerDependenciesMeta: - bare-buffer: - optional: true - bare-events: - optional: true + '@smithy/node-http-handler@4.0.3': + resolution: {integrity: sha512-dYCLeINNbYdvmMLtW0VdhW1biXt+PPCGazzT5ZjKw46mOtdgToQEwjqZSS9/EN8+tNs/RO0cEWG044+YZs97aA==} + engines: {node: '>=18.0.0'} - base32-encode@1.2.0: - resolution: {integrity: sha512-cHFU8XeRyx0GgmoWi5qHMCVRiqU6J3MHWxVgun7jggCBUpVzm1Ir7M9dYr2whjSNc3tFeXfQ/oZjQu/4u55h9A==} + '@smithy/property-provider@4.0.1': + resolution: {integrity: sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ==} + engines: {node: '>=18.0.0'} - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + '@smithy/protocol-http@5.0.1': + resolution: {integrity: sha512-TE4cpj49jJNB/oHyh/cRVEgNZaoPaxd4vteJNB0yGidOCVR0jCw/hjPVsT8Q8FRmj8Bd3bFZt8Dh7xGCT+xMBQ==} + engines: {node: '>=18.0.0'} - basic-ftp@5.0.5: - resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} - engines: {node: '>=10.0.0'} + '@smithy/querystring-builder@4.0.1': + resolution: {integrity: sha512-wU87iWZoCbcqrwszsOewEIuq+SU2mSoBE2CcsLwE0I19m0B2gOJr1MVjxWcDQYOzHbR1xCk7AcOBbGFUYOKvdg==} + engines: {node: '>=18.0.0'} - before-after-hook@2.2.3: - resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} + '@smithy/querystring-parser@4.0.1': + resolution: {integrity: sha512-Ma2XC7VS9aV77+clSFylVUnPZRindhB7BbmYiNOdr+CHt/kZNJoPP0cd3QxCnCFyPXC4eybmyE98phEHkqZ5Jw==} + engines: {node: '>=18.0.0'} - better-path-resolve@1.0.0: - resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} - engines: {node: '>=4'} + '@smithy/service-error-classification@4.0.1': + resolution: {integrity: sha512-3JNjBfOWpj/mYfjXJHB4Txc/7E4LVq32bwzE7m28GN79+M1f76XHflUaSUkhOriprPDzev9cX/M+dEB80DNDKA==} + engines: {node: '>=18.0.0'} - big.js@6.2.2: - resolution: {integrity: sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==} + '@smithy/shared-ini-file-loader@4.0.1': + resolution: {integrity: sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw==} + engines: {node: '>=18.0.0'} - bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + '@smithy/signature-v4@5.0.1': + resolution: {integrity: sha512-nCe6fQ+ppm1bQuw5iKoeJ0MJfz2os7Ic3GBjOkLOPtavbD1ONoyE3ygjBfz2ythFWm4YnRm6OxW+8p/m9uCoIA==} + engines: {node: '>=18.0.0'} - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + '@smithy/smithy-client@4.1.6': + resolution: {integrity: sha512-UYDolNg6h2O0L+cJjtgSyKKvEKCOa/8FHYJnBobyeoeWDmNpXjwOAtw16ezyeu1ETuuLEOZbrynK0ZY1Lx9Jbw==} + engines: {node: '>=18.0.0'} - bluebird@3.7.2: - resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + '@smithy/types@4.1.0': + resolution: {integrity: sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==} + engines: {node: '>=18.0.0'} - bmp-js@0.1.0: - resolution: {integrity: sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==} + '@smithy/url-parser@4.0.1': + resolution: {integrity: sha512-gPXcIEUtw7VlK8f/QcruNXm7q+T5hhvGu9tl63LsJPZ27exB6dtNwvh2HIi0v7JcXJ5emBxB+CJxwaLEdJfA+g==} + engines: {node: '>=18.0.0'} - bmp-ts@1.0.9: - resolution: {integrity: sha512-cTEHk2jLrPyi+12M3dhpEbnnPOsaZuq7C45ylbbQIiWgDFZq4UVYPEY5mlqjvsj/6gJv9qX5sa+ebDzLXT28Vw==} + '@smithy/util-base64@4.0.0': + resolution: {integrity: sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==} + engines: {node: '>=18.0.0'} - body-parser@1.20.3: - resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + '@smithy/util-body-length-browser@4.0.0': + resolution: {integrity: sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==} + engines: {node: '>=18.0.0'} - body-parser@2.1.0: - resolution: {integrity: sha512-/hPxh61E+ll0Ujp24Ilm64cykicul1ypfwjVttduAiEdtnJFvLePSrIPk+HMImtNv5270wOGCb1Tns2rybMkoQ==} - engines: {node: '>=18'} + '@smithy/util-body-length-node@4.0.0': + resolution: {integrity: sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==} + engines: {node: '>=18.0.0'} - boolean@3.2.0: - resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + '@smithy/util-buffer-from@2.2.0': + resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} + engines: {node: '>=14.0.0'} - bottleneck@2.19.5: - resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} + '@smithy/util-buffer-from@4.0.0': + resolution: {integrity: sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==} + engines: {node: '>=18.0.0'} - bowser@2.11.0: - resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + '@smithy/util-config-provider@4.0.0': + resolution: {integrity: sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==} + engines: {node: '>=18.0.0'} - bplist-creator@0.0.8: - resolution: {integrity: sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA==} + '@smithy/util-defaults-mode-browser@4.0.7': + resolution: {integrity: sha512-CZgDDrYHLv0RUElOsmZtAnp1pIjwDVCSuZWOPhIOBvG36RDfX1Q9+6lS61xBf+qqvHoqRjHxgINeQz47cYFC2Q==} + engines: {node: '>=18.0.0'} - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + '@smithy/util-defaults-mode-node@4.0.7': + resolution: {integrity: sha512-79fQW3hnfCdrfIi1soPbK3zmooRFnLpSx3Vxi6nUlqaaQeC5dm8plt4OTNDNqEEEDkvKghZSaoti684dQFVrGQ==} + engines: {node: '>=18.0.0'} - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + '@smithy/util-endpoints@3.0.1': + resolution: {integrity: sha512-zVdUENQpdtn9jbpD9SCFK4+aSiavRb9BxEtw9ZGUR1TYo6bBHbIoi7VkrFQ0/RwZlzx0wRBaRmPclj8iAoJCLA==} + engines: {node: '>=18.0.0'} - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} + '@smithy/util-hex-encoding@4.0.0': + resolution: {integrity: sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==} + engines: {node: '>=18.0.0'} - browserslist@4.24.4: - resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + '@smithy/util-middleware@4.0.1': + resolution: {integrity: sha512-HiLAvlcqhbzhuiOa0Lyct5IIlyIz0PQO5dnMlmQ/ubYM46dPInB+3yQGkfxsk6Q24Y0n3/JmcA1v5iEhmOF5mA==} + engines: {node: '>=18.0.0'} - buffer-builder@0.2.0: - resolution: {integrity: sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==} + '@smithy/util-retry@4.0.1': + resolution: {integrity: sha512-WmRHqNVwn3kI3rKk1LsKcVgPBG6iLTBGC1iYOV3GQegwJ3E8yjzHytPt26VNzOWr1qu0xE03nK0Ug8S7T7oufw==} + engines: {node: '>=18.0.0'} - buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + '@smithy/util-stream@4.1.2': + resolution: {integrity: sha512-44PKEqQ303d3rlQuiDpcCcu//hV8sn+u2JBo84dWCE0rvgeiVl0IlLMagbU++o0jCWhYCsHaAt9wZuZqNe05Hw==} + engines: {node: '>=18.0.0'} - buffer-equal@0.0.1: - resolution: {integrity: sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==} - engines: {node: '>=0.4.0'} + '@smithy/util-uri-escape@4.0.0': + resolution: {integrity: sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==} + engines: {node: '>=18.0.0'} - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + '@smithy/util-utf8@2.3.0': + resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} + engines: {node: '>=14.0.0'} - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + '@smithy/util-utf8@4.0.0': + resolution: {integrity: sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==} + engines: {node: '>=18.0.0'} - buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} + '@szmarczak/http-timer@4.0.6': + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} + '@tailwindcss/aspect-ratio@0.4.2': + resolution: {integrity: sha512-8QPrypskfBa7QIMuKHg2TA7BqES6vhBrDLOv8Unb6FcFyd3TjKbc6lcmb9UPQHxfl24sXoJ41ux/H7qQQvfaSQ==} + peerDependencies: + tailwindcss: '>=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1' - cacache@16.1.3: - resolution: {integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + '@tavily/core@0.3.1': + resolution: {integrity: sha512-7jyvPWG4Zjst0s4v0FMLO1f/dfHqs4FnqvKm86zOGYzXxSfxHu0isbLzlwjJad0csYwF0kifdlECTuNouHfr5A==} - cacheable-lookup@5.0.4: - resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} - engines: {node: '>=10.6.0'} + '@testing-library/dom@10.4.0': + resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} + engines: {node: '>=18'} - cacheable-request@7.0.4: - resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} - engines: {node: '>=8'} + '@testing-library/user-event@14.6.1': + resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' - call-bind-apply-helpers@1.0.1: - resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} - engines: {node: '>= 0.4'} + '@tokenizer/token@0.3.0': + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} - call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} - engines: {node: '>= 0.4'} + '@tootallnate/once@2.0.0': + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} - call-bound@1.0.3: - resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} - engines: {node: '>= 0.4'} + '@tootallnate/quickjs-emscripten@0.23.0': + resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} + '@trivago/prettier-plugin-sort-imports@5.2.2': + resolution: {integrity: sha512-fYDQA9e6yTNmA13TLVSA+WMQRc5Bn/c0EUBditUHNfMMxN7M82c38b1kEggVE3pLpZ0FwkwJkUEKMiOi52JXFA==} + engines: {node: '>18.12'} + peerDependencies: + '@vue/compiler-sfc': 3.x + prettier: 2.x - 3.x + prettier-plugin-svelte: 3.x + svelte: 4.x || 5.x + peerDependenciesMeta: + '@vue/compiler-sfc': + optional: true + prettier-plugin-svelte: + optional: true + svelte: + optional: true - camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - caniuse-lite@1.0.30001703: - resolution: {integrity: sha512-kRlAGTRWgPsOj7oARC9m1okJEXdL/8fekFVcxA8Hl7GH4r/sN4OJn/i6Flde373T50KS7Y37oFbMwlE8+F42kQ==} + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - centra@2.7.0: - resolution: {integrity: sha512-PbFMgMSrmgx6uxCdm57RUos9Tc3fclMvhLSATYN39XsDV29B89zZ3KA89jmY0vwSGazyU+uerqwa6t+KaodPcg==} + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - chai@5.1.2: - resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} - engines: {node: '>=12'} + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - chai@5.2.0: - resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} - engines: {node: '>=12'} + '@types/appdmg@0.5.5': + resolution: {integrity: sha512-G+n6DgZTZFOteITE30LnWj+HRVIGr7wMlAiLWOO02uJFWVEitaPU9JVXm9wJokkgshBawb2O1OykdcsmkkZfgg==} - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} - chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + '@types/async-retry@1.4.9': + resolution: {integrity: sha512-s1ciZQJzRh3708X/m3vPExr5KJlzlZJvXsKpbtE2luqNcbROr64qU+3KpJsYHqWMeaxI839OvXf9PrUSw1Xtyg==} - chalk@5.4.1: - resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} - check-error@2.1.1: - resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} - engines: {node: '>= 16'} + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} - chrome-trace-event@1.0.4: - resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} - engines: {node: '>=6.0'} + '@types/big.js@6.2.2': + resolution: {integrity: sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA==} - chromium-bidi@1.1.0: - resolution: {integrity: sha512-HislCEczCuamWm3+55Lig9XKmMF13K+BGKum9rwtDAzgUAHT4h5jNwhDmD4U20VoVUG8ujnv9UZ89qiIf5uF8w==} - peerDependencies: - devtools-protocol: '*' + '@types/cacheable-request@6.0.3': + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} - ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} + '@types/conventional-commits-parser@5.0.1': + resolution: {integrity: sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==} - clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - cleye@1.3.4: - resolution: {integrity: sha512-Rd6M8ecBDtdYdPR22h6gG37lPqqJ3hSOaplaGwuGYey9xKmEElOvTgupqfyLSlISshroRpVhYjDtW3vwNUNBaQ==} + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} + '@types/diff@5.2.3': + resolution: {integrity: sha512-K0Oqlrq3kQMaO2RhfrNQX5trmt+XLyom88zS0u84nnIcLvFnRUMRRHmrGny5GSM+kNO9IZLARsdQHDzkhAgmrQ==} - cli-cursor@4.0.0: - resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + '@types/estree-jsx@1.0.5': + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} - cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - cli-truncate@3.1.0: - resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + '@types/fs-extra@11.0.4': + resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} - cli-width@4.1.0: - resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} - engines: {node: '>= 12'} + '@types/fs-extra@9.0.13': + resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} - clipboardy@2.3.0: - resolution: {integrity: sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==} - engines: {node: '>=8'} + '@types/gensync@1.0.4': + resolution: {integrity: sha512-C3YYeRQWp2fmq9OryX+FoDy8nXS6scQ7dPptD8LnFDAUNcKWJjXQKDNJD3HVm+kOUsXhTOkpi69vI4EuAr95bA==} - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + '@types/hast@2.3.10': + resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} - clone-response@1.0.3: - resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} + '@types/hoist-non-react-statics@3.3.6': + resolution: {integrity: sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==} - clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} + '@types/http-cache-semantics@4.0.4': + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} - color-convert@0.5.3: - resolution: {integrity: sha512-RwBeO/B/vZR3dfKL1ye/vx8MHZ40ugzpyfeVG5GsiuGnrlMWe2o8wxBbLCpw9CsxV+wHuzYlCiWnybrIA0ling==} + '@types/js-cookie@2.2.7': + resolution: {integrity: sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==} - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + '@types/js-yaml@4.0.9': + resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - color2k@2.0.3: - resolution: {integrity: sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==} + '@types/jsonfile@6.1.4': + resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} - color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} + '@types/katex@0.16.7': + resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} - colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + '@types/keyv@3.1.4': + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} - colorjs.io@0.5.2: - resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==} + '@types/lodash.debounce@4.0.9': + resolution: {integrity: sha512-Ma5JcgTREwpLRwMM+XwBR7DaWe96nC38uCBDFKZWbNKD+osjVzdpnUSwBcqCptrp16sSOLBAUb50Car5I0TCsQ==} - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} + '@types/lodash.mergewith@4.6.9': + resolution: {integrity: sha512-fgkoCAOF47K7sxrQ7Mlud2TH023itugZs2bUg8h/KzT+BnZNrR2jAOmaokbLunHNnobXVWOezAeNn/lZqwxkcw==} - commander@11.0.0: - resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} - engines: {node: '>=16'} + '@types/lodash@4.17.15': + resolution: {integrity: sha512-w/P33JFeySuhN6JLkysYUK2gEmy9kHHFN7E8ro0tkfmlDOgxBDzWEZ/J8cWA+fHqFevpswDTFZnDx+R9lbL6xw==} - commander@11.1.0: - resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} - engines: {node: '>=16'} + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} - commander@13.1.0: - resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} - engines: {node: '>=18'} + '@types/minimatch@5.1.2': + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - commander@5.1.0: - resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} - engines: {node: '>= 6'} + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} + '@types/node-fetch@2.6.12': + resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} - compare-func@2.0.0: - resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - compare-version@0.1.2: - resolution: {integrity: sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==} - engines: {node: '>=0.10.0'} + '@types/node@16.9.1': + resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==} - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + '@types/node@18.19.75': + resolution: {integrity: sha512-UIksWtThob6ZVSyxcOqCLOUNg/dyO1Qvx4McgeuhrEtHTLFTf7BBhEazaE4K806FGTPtzd/2sE90qn4fVr7cyw==} - conf@13.1.0: - resolution: {integrity: sha512-Bi6v586cy1CoTFViVO4lGTtx780lfF96fUmS1lSX6wpZf6330NvHUu6fReVuDP1de8Mg0nkZb01c8tAQdz1o3w==} - engines: {node: '>=18'} + '@types/node@20.14.8': + resolution: {integrity: sha512-DO+2/jZinXfROG7j7WKFn/3C6nFwxy2lLpgLjEXJz+0XKphZlTLJ14mo8Vfg8X5BWN6XjyESXq+LcYdT7tR3bA==} - console-table-printer@2.12.1: - resolution: {integrity: sha512-wKGOQRRvdnd89pCeH96e2Fn4wkbenSP6LMHfjfyNLMbGuHEFbMqQNuxXqd0oXG9caIOQ1FTvc5Uijp9/4jujnQ==} + '@types/node@20.17.17': + resolution: {integrity: sha512-/WndGO4kIfMicEQLTi/mDANUu/iVUhT7KboZPdEqqHQ4aTS+3qT3U5gIqWDFV+XouorjfgGqvKILJeHhuQgFYg==} - content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} + '@types/node@22.13.10': + resolution: {integrity: sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==} - content-disposition@1.0.0: - resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} - engines: {node: '>= 0.6'} + '@types/parse-json@4.0.2': + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} + '@types/prop-types@15.7.14': + resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} - conventional-changelog-angular@7.0.0: - resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} - engines: {node: '>=16'} + '@types/react-dom@18.3.5': + resolution: {integrity: sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==} + peerDependencies: + '@types/react': ^18.0.0 - conventional-changelog-conventionalcommits@7.0.2: - resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} - engines: {node: '>=16'} + '@types/react@18.3.18': + resolution: {integrity: sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==} - conventional-commits-parser@5.0.0: - resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} - engines: {node: '>=16'} - hasBin: true + '@types/responselike@1.0.3': + resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} - convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + '@types/retry@0.12.0': + resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + '@types/retry@0.12.5': + resolution: {integrity: sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw==} - cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + '@types/semver@7.5.8': + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - cookie-signature@1.2.2: - resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} - engines: {node: '>=6.6.0'} + '@types/statuses@2.0.5': + resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==} - cookie@0.7.1: - resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} - engines: {node: '>= 0.6'} + '@types/stylis@4.2.5': + resolution: {integrity: sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==} - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} - cookie@1.0.2: - resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} - engines: {node: '>=18'} + '@types/turndown@5.0.5': + resolution: {integrity: sha512-TL2IgGgc7B5j78rIccBtlYAnkuv8nUQqhQc+DSYV5j9Be9XOcm/SKOVRuA47xAVI3680Tk9B1d8flK2GWT2+4w==} - copy-to-clipboard@3.3.3: - resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} - core-js@3.41.0: - resolution: {integrity: sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==} + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + '@types/uuid@10.0.0': + resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} - cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} + '@types/uuid@9.0.8': + resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} - cosmiconfig-typescript-loader@6.1.0: - resolution: {integrity: sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==} - engines: {node: '>=v18'} + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + + '@typescript-eslint/eslint-plugin@5.62.0': + resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - '@types/node': '*' - cosmiconfig: '>=9' - typescript: '>=5' + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true - cosmiconfig@7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} - engines: {node: '>=10'} + '@typescript-eslint/eslint-plugin@7.18.0': + resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true - cosmiconfig@9.0.0: - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} - engines: {node: '>=14'} + '@typescript-eslint/parser@5.62.0': + resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - typescript: '>=4.9.5' + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' peerDependenciesMeta: typescript: optional: true - create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + '@typescript-eslint/parser@7.18.0': + resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true - cross-dirname@0.1.0: - resolution: {integrity: sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==} + '@typescript-eslint/scope-manager@5.62.0': + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - cross-env@7.0.3: - resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} - engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} - hasBin: true + '@typescript-eslint/scope-manager@7.18.0': + resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} + engines: {node: ^18.18.0 || >=20.0.0} - cross-spawn@6.0.6: - resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} - engines: {node: '>=4.8'} + '@typescript-eslint/type-utils@5.62.0': + resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} + '@typescript-eslint/type-utils@7.18.0': + resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true - cross-zip@4.0.1: - resolution: {integrity: sha512-n63i0lZ0rvQ6FXiGQ+/JFCKAUyPFhLQYJIqKaa+tSJtfKeULF/IDNDAbdnSIxgS4NTuw2b0+lj8LzfITuq+ZxQ==} - engines: {node: '>=12.10'} + '@typescript-eslint/types@5.62.0': + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - crypto@1.0.1: - resolution: {integrity: sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==} - deprecated: This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in. + '@typescript-eslint/types@7.18.0': + resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} + engines: {node: ^18.18.0 || >=20.0.0} - css-in-js-utils@3.1.0: - resolution: {integrity: sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==} + '@typescript-eslint/typescript-estree@5.62.0': + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true - css-tree@1.1.3: - resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} - engines: {node: '>=8.0.0'} + '@typescript-eslint/typescript-estree@7.18.0': + resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + '@typescript-eslint/utils@5.62.0': + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dargs@8.1.0: - resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} - engines: {node: '>=12'} + '@typescript-eslint/utils@7.18.0': + resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 - data-uri-to-buffer@6.0.2: - resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} - engines: {node: '>= 14'} + '@typescript-eslint/visitor-keys@5.62.0': + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} + '@typescript-eslint/visitor-keys@7.18.0': + resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} + engines: {node: ^18.18.0 || >=20.0.0} - data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} + '@ui-tars/electron-ipc@1.2.3': + resolution: {integrity: sha512-QRuCntx8TZHIwjntnpBwNoyN5NsAwdyKKyxQYGxpXZrQx2Xne2ORM+4XnbMGBG53xePCTmj1a32T5MQOShhY8g==} + peerDependencies: + electron: '>=26.0.0' - data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - debounce-fn@6.0.0: - resolution: {integrity: sha512-rBMW+F2TXryBwB54Q0d8drNEI+TfoS9JpNTAoVpukbWEhjXQq4rySFYLaqXMFXwdv61Zb2OHtj5bviSoimqxRQ==} - engines: {node: '>=18'} + '@use-it/event-listener@0.1.7': + resolution: {integrity: sha512-hgfExDzUU9uTRTPDCpw2s9jWTxcxmpJya3fK5ADpf5VDpSy8WYwY/kh28XE0tUcbsljeP8wfan48QvAQTSSa3Q==} + peerDependencies: + react: '>=16.8.0' - debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + '@vitejs/plugin-react@4.3.4': + resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} + engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - supports-color: '*' + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 + + '@vitest/browser@3.0.5': + resolution: {integrity: sha512-5WAWJoucuWcGYU5t0HPBY03k9uogbUEIu4pDmZHoB4Dt+6pXqzDbzEmxGjejZSitSYA3k/udYfuotKNxETVA3A==} + peerDependencies: + playwright: '*' + safaridriver: '*' + vitest: 3.0.5 + webdriverio: '*' peerDependenciesMeta: - supports-color: + playwright: + optional: true + safaridriver: + optional: true + webdriverio: optional: true - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + '@vitest/coverage-istanbul@3.0.5': + resolution: {integrity: sha512-yTcIwrpLHOyPP28PXXLRv1NzzKCrqDnmT7oVypTa1Q24P6OwGT4Wi6dXNEaJg33vmrPpoe81f31kwB5MtfM+ow==} peerDependencies: - supports-color: '*' + vitest: 3.0.5 + + '@vitest/coverage-v8@3.0.7': + resolution: {integrity: sha512-Av8WgBJLTrfLOer0uy3CxjlVuWK4CzcLBndW1Nm2vI+3hZ2ozHututkfc7Blu1u6waeQ7J8gzPK/AsBRnWA5mQ==} + peerDependencies: + '@vitest/browser': 3.0.7 + vitest: 3.0.7 peerDependenciesMeta: - supports-color: + '@vitest/browser': optional: true - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} + '@vitest/coverage-v8@3.0.8': + resolution: {integrity: sha512-y7SAKsQirsEJ2F8bulBck4DoluhI2EEgTimHd6EEUgJBGKy9tC25cpywh1MH4FvDGoG2Unt7+asVd1kj4qOSAw==} peerDependencies: - supports-color: '*' + '@vitest/browser': 3.0.8 + vitest: 3.0.8 peerDependenciesMeta: - supports-color: + '@vitest/browser': optional: true - debug@4.3.6: - resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} - engines: {node: '>=6.0'} + '@vitest/expect@3.0.5': + resolution: {integrity: sha512-nNIOqupgZ4v5jWuQx2DSlHLEs7Q4Oh/7AYwNyE+k0UQzG7tSmjPXShUikn1mpNGzYEN2jJbTvLejwShMitovBA==} + + '@vitest/expect@3.0.7': + resolution: {integrity: sha512-QP25f+YJhzPfHrHfYHtvRn+uvkCFCqFtW9CktfBxmB+25QqWsx7VB2As6f4GmwllHLDhXNHvqedwhvMmSnNmjw==} + + '@vitest/expect@3.0.8': + resolution: {integrity: sha512-Xu6TTIavTvSSS6LZaA3EebWFr6tsoXPetOWNMOlc7LO88QVVBwq2oQWBoDiLCN6YTvNYsGSjqOO8CAdjom5DCQ==} + + '@vitest/mocker@3.0.5': + resolution: {integrity: sha512-CLPNBFBIE7x6aEGbIjaQAX03ZZlBMaWwAjBdMkIf/cAn6xzLTiM3zYqO/WAbieEjsAZir6tO71mzeHZoodThvw==} peerDependencies: - supports-color: '*' + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 peerDependenciesMeta: - supports-color: + msw: + optional: true + vite: optional: true - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} - engines: {node: '>=6.0'} + '@vitest/mocker@3.0.7': + resolution: {integrity: sha512-qui+3BLz9Eonx4EAuR/i+QlCX6AUZ35taDQgwGkK/Tw6/WgwodSrjN1X2xf69IA/643ZX5zNKIn2svvtZDrs4w==} peerDependencies: - supports-color: '*' + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 peerDependenciesMeta: - supports-color: + msw: + optional: true + vite: optional: true - decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - - decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} + '@vitest/mocker@3.0.8': + resolution: {integrity: sha512-n3LjS7fcW1BCoF+zWZxG7/5XvuYH+lsFg+BDwwAz0arIwHQJFUEsKBQ0BLU49fCxuM/2HSeBPHQD8WjgrxMfow==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true - deep-eql@5.0.2: - resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} - engines: {node: '>=6'} + '@vitest/pretty-format@3.0.5': + resolution: {integrity: sha512-CjUtdmpOcm4RVtB+up8r2vVDLR16Mgm/bYdkGFe3Yj/scRfCpbSi2W/BDSDcFK7ohw8UXvjMbOp9H4fByd/cOA==} - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + '@vitest/pretty-format@3.0.7': + resolution: {integrity: sha512-CiRY0BViD/V8uwuEzz9Yapyao+M9M008/9oMOSQydwbwb+CMokEq3XVaF3XK/VWaOK0Jm9z7ENhybg70Gtxsmg==} - deepmerge@2.2.1: - resolution: {integrity: sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==} - engines: {node: '>=0.10.0'} + '@vitest/pretty-format@3.0.8': + resolution: {integrity: sha512-BNqwbEyitFhzYMYHUVbIvepOyeQOSFA/NeJMIP9enMntkkxLgOcgABH6fjyXG85ipTgvero6noreavGIqfJcIg==} - defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + '@vitest/runner@3.0.5': + resolution: {integrity: sha512-BAiZFityFexZQi2yN4OX3OkJC6scwRo8EhRB0Z5HIGGgd2q+Nq29LgHU/+ovCtd0fOfXj5ZI6pwdlUmC5bpi8A==} - defer-to-connect@2.0.1: - resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} - engines: {node: '>=10'} + '@vitest/runner@3.0.7': + resolution: {integrity: sha512-WeEl38Z0S2ZcuRTeyYqaZtm4e26tq6ZFqh5y8YD9YxfWuu0OFiGFUbnxNynwLjNRHPsXyee2M9tV7YxOTPZl2g==} - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} + '@vitest/runner@3.0.8': + resolution: {integrity: sha512-c7UUw6gEcOzI8fih+uaAXS5DwjlBaCJUo7KJ4VvJcjL95+DSR1kova2hFuRt3w41KZEFcOEiq098KkyrjXeM5w==} - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + '@vitest/snapshot@3.0.5': + resolution: {integrity: sha512-GJPZYcd7v8QNUJ7vRvLDmRwl+a1fGg4T/54lZXe+UOGy47F9yUfE18hRCtXL5aHN/AONu29NGzIXSVFh9K0feA==} - degenerator@5.0.1: - resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} - engines: {node: '>= 14'} + '@vitest/snapshot@3.0.7': + resolution: {integrity: sha512-eqTUryJWQN0Rtf5yqCGTQWsCFOQe4eNz5Twsu21xYEcnFJtMU5XvmG0vgebhdLlrHQTSq5p8vWHJIeJQV8ovsA==} - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} + '@vitest/snapshot@3.0.8': + resolution: {integrity: sha512-x8IlMGSEMugakInj44nUrLSILh/zy1f2/BgH0UeHpNyOocG18M9CWVIFBaXPt8TrqVZWmcPjwfG/ht5tnpba8A==} - depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} + '@vitest/spy@3.0.5': + resolution: {integrity: sha512-5fOzHj0WbUNqPK6blI/8VzZdkBlQLnT25knX0r4dbZI9qoZDf3qAdjoMmDcLG5A83W6oUUFJgUd0EYBc2P5xqg==} - deprecation@2.3.1: - resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} + '@vitest/spy@3.0.7': + resolution: {integrity: sha512-4T4WcsibB0B6hrKdAZTM37ekuyFZt2cGbEGd2+L0P8ov15J1/HUsUaqkXEQPNAWr4BtPPe1gI+FYfMHhEKfR8w==} - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} + '@vitest/spy@3.0.8': + resolution: {integrity: sha512-MR+PzJa+22vFKYb934CejhR4BeRpMSoxkvNoDit68GQxRLSf11aT6CTj3XaqUU9rxgWJFnqicN/wxw6yBRkI1Q==} - destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + '@vitest/utils@3.0.5': + resolution: {integrity: sha512-N9AX0NUoUtVwKwy21JtwzaqR5L5R5A99GAbrHfCCXK1lp593i/3AZAXhSP43wRQuxYsflrdzEfXZFo1reR1Nkg==} - detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} + '@vitest/utils@3.0.7': + resolution: {integrity: sha512-xePVpCRfooFX3rANQjwoditoXgWb1MaFbzmGuPP59MK6i13mrnDw/yEIyJudLeW6/38mCNcwCiJIGmpDPibAIg==} - detect-libc@2.0.3: - resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} - engines: {node: '>=8'} + '@vitest/utils@3.0.8': + resolution: {integrity: sha512-nkBC3aEhfX2PdtQI/QwAWp8qZWwzASsU4Npbcd5RdMPBSSLCpkZp52P3xku3s3uA0HIEhGvEcF8rNkBsz9dQ4Q==} - detect-node-es@1.1.0: - resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} - - detect-node@2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - - devtools-protocol@0.0.1380148: - resolution: {integrity: sha512-1CJABgqLxbYxVI+uJY/UDUHJtJ0KZTSjNYJYKqd9FRoXT33WDakDHNxRapMEgzeJ/C3rcs01+avshMnPmKQbvA==} - - diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} + '@vue/compiler-core@3.5.13': + resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} - diff@5.2.0: - resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} - engines: {node: '>=0.3.1'} + '@vue/compiler-dom@3.5.13': + resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} - dir-compare@4.2.0: - resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} + '@vue/compiler-sfc@3.5.13': + resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} + '@vue/compiler-ssr@3.5.13': + resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} + '@vue/shared@3.5.13': + resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} + '@xmldom/xmldom@0.8.10': + resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} + engines: {node: '>=10.0.0'} - dom-accessibility-api@0.5.16: - resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + '@xobotyi/scrollbar-width@1.9.5': + resolution: {integrity: sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==} - dom-walk@0.1.2: - resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} + '@zag-js/dom-query@0.31.1': + resolution: {integrity: sha512-oiuohEXAXhBxpzzNm9k2VHGEOLC1SXlXSbRPcfBZ9so5NRQUA++zCE7cyQJqGLTZR0t3itFLlZqDbYEXRrefwg==} - dot-prop@5.3.0: - resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} - engines: {node: '>=8'} + '@zag-js/element-size@0.31.1': + resolution: {integrity: sha512-4T3yvn5NqqAjhlP326Fv+w9RqMIBbNN9H72g5q2ohwzhSgSfZzrKtjL4rs9axY/cw9UfMfXjRjEE98e5CMq7WQ==} - dot-prop@9.0.0: - resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} - engines: {node: '>=18'} + '@zag-js/focus-visible@0.31.1': + resolution: {integrity: sha512-dbLksz7FEwyFoANbpIlNnd3bVm0clQSUsnP8yUVQucStZPsuWjCrhL2jlAbGNrTrahX96ntUMXHb/sM68TibFg==} - dotenv@16.4.7: - resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} - engines: {node: '>=12'} + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true - ds-store@0.1.6: - resolution: {integrity: sha512-kY21M6Lz+76OS3bnCzjdsJSF7LBpLYGCVfavW8TgQD2XkcqIZ86W0y9qUDZu6fp7SIZzqosMDW2zi7zVFfv4hw==} + abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} - ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} - electron-debug@3.2.0: - resolution: {integrity: sha512-7xZh+LfUvJ52M9rn6N+tPuDw6oRAjxUj9SoxAZfJ0hVCXhZCsdkrSt7TgXOiWiEOBgEV8qwUIO/ScxllsPS7ow==} + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - electron-devtools-installer@3.2.1: - resolution: {integrity: sha512-FaCi+oDCOBTw0gJUsuw5dXW32b2Ekh5jO8lI1NRCQigo3azh2VogsIi0eelMVrP1+LkN/bewyH3Xoo1USjO0eQ==} + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} - electron-installer-dmg@5.0.1: - resolution: {integrity: sha512-qOa1aAQdX57C+vzhDk3549dd/PRlNL4F8y736MTD1a43qptD+PvHY97Bo9gSf+OZ8iUWE7BrYSpk/FgLUe40EA==} - engines: {node: '>= 16'} + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} hasBin: true - electron-is-accelerator@0.1.2: - resolution: {integrity: sha512-fLGSAjXZtdn1sbtZxx52+krefmtNuVwnJCV2gNiVt735/ARUboMl8jnNC9fZEqQdlAv2ZrETfmBUsoQci5evJA==} - - electron-is-dev@1.2.0: - resolution: {integrity: sha512-R1oD5gMBPS7PVU8gJwH6CtT0e6VSoD0+SzSnYpNm+dBkcijgA+K7VAMHDfnRq/lkKPZArpzplTW6jfiMYosdzw==} - - electron-localshortcut@3.2.1: - resolution: {integrity: sha512-DWvhKv36GsdXKnaFFhEiK8kZZA+24/yFLgtTwJJHc7AFgDjNRIBJZ/jq62Y/dWv9E4ypYwrVWN2bVrCYw1uv7Q==} + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} - electron-log@5.2.4: - resolution: {integrity: sha512-iX12WXc5XAaKeHg2QpiFjVwL+S1NVHPFd3V5RXtCmKhpAzXsVQnR3UEc0LovM6p6NkUQxDWnkdkaam9FNUVmCA==} + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} engines: {node: '>= 14'} - electron-packager-languages@0.5.0: - resolution: {integrity: sha512-ryJsVXgHq0+7eZpJ+YSUQNYUnH4yPq2J4gXtmP9HEq8N6PHtygLEmohKMm4VrwI5qTir4HRCxy+O1UNo8mbwgg==} - engines: {node: '>6.0.0'} - - electron-playwright-helpers@1.7.1: - resolution: {integrity: sha512-S9mo7LfpERgub2WIuYVPpib4XKFeAqBP+mxYf5Bv7E0B5GUB+LUbSj6Fpu39h18Ar635Nf9nQYTmypjuvaYJng==} - - electron-squirrel-startup@1.0.1: - resolution: {integrity: sha512-sTfFIHGku+7PsHLJ7v0dRcZNkALrV+YEozINTW8X1nM//e5O3L+rfYuvSW00lmGHnYmUjARZulD8F2V8ISI9RA==} - - electron-store@10.0.1: - resolution: {integrity: sha512-Ok0bF13WWdTzZi9rCtPN8wUfwx+yDMmV6PAnCMqjNRKEXHmklW/rV+6DofV/Vf5qoAh+Bl9Bj7dQ+0W+IL2psg==} - engines: {node: '>=20'} - - electron-to-chromium@1.5.97: - resolution: {integrity: sha512-HKLtaH02augM7ZOdYRuO19rWDeY+QSJ1VxnXFa/XDFLf07HvM90pALIJFgrO+UVaajI3+aJMMpojoUTLZyQ7JQ==} + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} - electron-util@0.17.2: - resolution: {integrity: sha512-4Kg/aZxJ2BZklgyfH86px/D2GyROPyIcnAZar+7KiNmKI2I5l09pwQTP7V95zM3FVhgDQwV9iuJta5dyEvuWAw==} + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} - electron-vite@2.3.0: - resolution: {integrity: sha512-lsN2FymgJlp4k6MrcsphGqZQ9fKRdJKasoaiwIrAewN1tapYI/KINLdfEL7n10LuF0pPSNf/IqjzZbB5VINctg==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} peerDependencies: - '@swc/core': ^1.0.0 - vite: ^4.0.0 || ^5.0.0 + ajv: ^8.0.0 peerDependenciesMeta: - '@swc/core': + ajv: optional: true - electron-winstaller@5.4.0: - resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==} - engines: {node: '>=8.0.0'} + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - electron@30.5.1: - resolution: {integrity: sha512-AhL7+mZ8Lg14iaNfoYTkXQ2qee8mmsQyllKdqxlpv/zrKgfxz6jNVtcRRbQtLxtF8yzcImWdfTQROpYiPumdbw==} - engines: {node: '>= 12.20.55'} - hasBin: true + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - electron@34.1.1: - resolution: {integrity: sha512-1aDYk9Gsv1/fFeClMrxWGoVMl7uCUgl1pe26BiTnLXmAoqEXCa3f3sCKFWV+cuDzUjQGAZcpkWhGYTgWUSQrLA==} - engines: {node: '>= 12.20.55'} - hasBin: true + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + ansi-escapes@5.0.0: + resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} + engines: {node: '>=12'} - encode-utf8@1.0.3: - resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==} + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} - encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} - encodeurl@2.0.0: - resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} - engines: {node: '>= 0.8'} + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} - encoding@0.1.13: - resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} - end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} - enquirer@2.4.1: - resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} - engines: {node: '>=8.6'} + any-base@1.1.0: + resolution: {integrity: sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==} - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} - env-paths@3.0.0: - resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + appdmg@0.6.6: + resolution: {integrity: sha512-GRmFKlCG+PWbcYF4LUNonTYmy0GjguDy6Jh9WP8mpd0T6j80XIJyXBiWlD0U+MLNhqV9Nhx49Gl9GpVToulpLg==} + engines: {node: '>=8.5'} + os: [darwin] + hasBin: true - err-code@2.0.3: - resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + arch@2.2.0: + resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - error-stack-parser@2.1.4: - resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - es-abstract@1.23.9: - resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} - engines: {node: '>= 0.4'} + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} + aria-hidden@1.2.4: + resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} + engines: {node: '>=10'} - es-iterator-helpers@1.2.1: - resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} - engines: {node: '>= 0.4'} + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} - es-module-lexer@1.6.0: - resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + array-ify@1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} engines: {node: '>= 0.4'} - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} engines: {node: '>= 0.4'} - es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + engines: {node: '>= 0.4'} - es-to-primitive@1.3.0: - resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} engines: {node: '>= 0.4'} - es6-error@4.1.1: - resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} + array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} - esbuild-register@3.6.0: - resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} - peerDependencies: - esbuild: '>=0.12 <1' + array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} - hasBin: true - esbuild@0.23.1: - resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} - engines: {node: '>=18'} - hasBin: true + ast-types@0.13.4: + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} + engines: {node: '>=4'} - esbuild@0.25.0: - resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==} - engines: {node: '>=18'} - hasBin: true + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} + async-retry@1.3.3: + resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} - escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + async@1.5.2: + resolution: {integrity: sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==} - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} - escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true + atomically@2.0.3: + resolution: {integrity: sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==} - eslint-config-prettier@9.1.0: - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + author-regex@1.0.0: + resolution: {integrity: sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g==} + engines: {node: '>=0.8'} + + autoprefixer@10.4.20: + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: - eslint: '>=7.0.0' + postcss: ^8.1.0 - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} - eslint-module-utils@2.12.0: - resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true + await-to-js@3.0.0: + resolution: {integrity: sha512-zJAaP9zxTcvTHRlejau3ZOY4V7SRpiByf3/dxx2uyKxxor19tpmpV2QRsTKikckwhaPmr2dVpxxMr7jOCYVp5g==} + engines: {node: '>=6.0.0'} - eslint-plugin-import@2.31.0: - resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true + axios@1.7.9: + resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} - eslint-plugin-prettier@5.2.3: - resolution: {integrity: sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - '@types/eslint': '>=8.0.0' - eslint: '>=8.0.0' - eslint-config-prettier: '*' - prettier: '>=3.0.0' - peerDependenciesMeta: - '@types/eslint': - optional: true - eslint-config-prettier: - optional: true + b4a@1.6.7: + resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} - eslint-plugin-react@7.37.4: - resolution: {integrity: sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} - eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + bare-events@2.5.4: + resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} - eslint@8.57.1: - resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. - hasBin: true + bare-fs@4.0.1: + resolution: {integrity: sha512-ilQs4fm/l9eMfWY2dY0WCIUplSUp7U0CT1vrqMg1MUdeZl4fypu5UP0XcDBK5WBQPJAKP1b7XEodISmekH/CEg==} + engines: {bare: '>=1.7.0'} - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + bare-os@3.6.0: + resolution: {integrity: sha512-BUrFS5TqSBdA0LwHop4OjPJwisqxGy6JsWVqV6qaFoe965qqtaKfDzHY5T2YA1gUL0ZeeQeA+4BBc1FJTcHiPw==} + engines: {bare: '>=1.14.0'} - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true + bare-path@3.0.0: + resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} + bare-stream@2.6.5: + resolution: {integrity: sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==} + peerDependencies: + bare-buffer: '*' + bare-events: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + bare-events: + optional: true - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + base32-encode@1.2.0: + resolution: {integrity: sha512-cHFU8XeRyx0GgmoWi5qHMCVRiqU6J3MHWxVgun7jggCBUpVzm1Ir7M9dYr2whjSNc3tFeXfQ/oZjQu/4u55h9A==} - estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} + basic-ftp@5.0.5: + resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} + engines: {node: '>=10.0.0'} - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + before-after-hook@2.2.3: + resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} - estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + better-path-resolve@1.0.0: + resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} + engines: {node: '>=4'} - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} + big.js@6.2.2: + resolution: {integrity: sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==} - etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} - event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} - events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - - eventsource-parser@3.0.0: - resolution: {integrity: sha512-T1C0XCUimhxVQzW4zFipdx0SficT651NnkR0ZSH3yQwh+mFMdLfgjABVi4YtMTtaL4s168593DaoaRLMqryavA==} - engines: {node: '>=18.0.0'} + bmp-js@0.1.0: + resolution: {integrity: sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==} - eventsource@3.0.5: - resolution: {integrity: sha512-LT/5J605bx5SNyE+ITBDiM3FxffBiq9un7Vx0EwMDM3vg8sWKx/tO2zC+LMqZ+smAM0F2hblaDZUVZF0te2pSw==} - engines: {node: '>=18.0.0'} + bmp-ts@1.0.9: + resolution: {integrity: sha512-cTEHk2jLrPyi+12M3dhpEbnnPOsaZuq7C45ylbbQIiWgDFZq4UVYPEY5mlqjvsj/6gJv9qX5sa+ebDzLXT28Vw==} - execa@1.0.0: - resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} - engines: {node: '>=6'} + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + body-parser@2.1.0: + resolution: {integrity: sha512-/hPxh61E+ll0Ujp24Ilm64cykicul1ypfwjVttduAiEdtnJFvLePSrIPk+HMImtNv5270wOGCb1Tns2rybMkoQ==} + engines: {node: '>=18'} - execa@7.2.0: - resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} - engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + boolean@3.2.0: + resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - exif-parser@0.1.12: - resolution: {integrity: sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==} + bottleneck@2.19.5: + resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} - expect-type@1.1.0: - resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} - engines: {node: '>=12.0.0'} + bowser@2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} - exponential-backoff@3.1.2: - resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} + bplist-creator@0.0.8: + resolution: {integrity: sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA==} - express-rate-limit@7.5.0: - resolution: {integrity: sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==} - engines: {node: '>= 16'} - peerDependencies: - express: ^4.11 || 5 || ^5.0.0-beta.1 + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - express-ws@5.0.2: - resolution: {integrity: sha512-0uvmuk61O9HXgLhGl3QhNSEtRsQevtmbL94/eILaliEADZBHZOQUAiHFrGPrgsjikohyrmSG5g+sCfASTt0lkQ==} - engines: {node: '>=4.5.0'} - peerDependencies: - express: ^4.0.0 || ^5.0.0-alpha.1 + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - express@4.21.2: - resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} - engines: {node: '>= 0.10.0'} + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} - express@5.0.1: - resolution: {integrity: sha512-ORF7g6qGnD+YtUG9yx4DFoqCShNMmUKiXuT5oWMHiOvt/4WFbHC6yCwQMTSBMno7AqntNCAzzcnnjowRkTL9eQ==} - engines: {node: '>= 18'} + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true - extendable-error@0.1.7: - resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} + buffer-builder@0.2.0: + resolution: {integrity: sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==} - external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - extract-zip@2.0.1: - resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} - engines: {node: '>= 10.17.0'} - hasBin: true + buffer-equal@0.0.1: + resolution: {integrity: sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==} + engines: {node: '>=0.4.0'} - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - fast-fifo@1.3.2: - resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} + bufferutil@4.0.9: + resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==} + engines: {node: '>=6.14.2'} - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} - fast-shallow-equal@1.0.0: - resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==} + cacache@16.1.3: + resolution: {integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - fast-uri@3.0.6: - resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + cacheable-lookup@5.0.4: + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} - fast-xml-parser@4.4.1: - resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} - hasBin: true + cacheable-request@7.0.4: + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} + engines: {node: '>=8'} - fastest-stable-stringify@2.0.2: - resolution: {integrity: sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==} + call-bind-apply-helpers@1.0.1: + resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} + engines: {node: '>= 0.4'} - fastq@1.19.0: - resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} - fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + call-bound@1.0.3: + resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} + engines: {node: '>= 0.4'} - fdir@6.4.3: - resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} - file-type@16.5.4: - resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==} + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - - filename-reserved-regex@2.0.0: - resolution: {integrity: sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==} - engines: {node: '>=4'} + camelize@1.0.1: + resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} - filenamify@4.3.0: - resolution: {integrity: sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==} - engines: {node: '>=8'} + caniuse-lite@1.0.30001703: + resolution: {integrity: sha512-kRlAGTRWgPsOj7oARC9m1okJEXdL/8fekFVcxA8Hl7GH4r/sN4OJn/i6Flde373T50KS7Y37oFbMwlE8+F42kQ==} - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - finalhandler@1.3.1: - resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} - engines: {node: '>= 0.8'} + centra@2.7.0: + resolution: {integrity: sha512-PbFMgMSrmgx6uxCdm57RUos9Tc3fclMvhLSATYN39XsDV29B89zZ3KA89jmY0vwSGazyU+uerqwa6t+KaodPcg==} - finalhandler@2.1.0: - resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} - engines: {node: '>= 0.8'} + chai@5.1.2: + resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} + engines: {node: '>=12'} - find-root@1.1.0: - resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + chai@5.2.0: + resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} + engines: {node: '>=12'} - find-up@2.1.0: - resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} - engines: {node: '>=4'} + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} - find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - find-up@7.0.0: - resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} - engines: {node: '>=18'} + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + character-entities-legacy@1.1.4: + resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} - flatted@3.3.2: - resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} - flora-colossus@2.0.0: - resolution: {integrity: sha512-dz4HxH6pOvbUzZpZ/yXhafjbR2I8cenK5xL0KtBFb7U2ADsR+OwXifnxZjij/pZWF775uSCMzWVd+jDik2H2IA==} - engines: {node: '>= 12'} + character-entities@1.2.4: + resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} - fmix@0.1.0: - resolution: {integrity: sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==} + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - focus-lock@1.3.6: - resolution: {integrity: sha512-Ik/6OCk9RQQ0T5Xw+hKNLWrjSMtv51dD4GRmJjbD5a58TIEpI5a5iXagKVl3Z5UuyslMCA8Xwnu76jQob62Yhg==} - engines: {node: '>=10'} + character-reference-invalid@1.1.4: + resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} - follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true + character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - foreground-child@3.3.0: - resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} - engines: {node: '>=14'} + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} - form-data-encoder@1.7.2: - resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} - form-data@4.0.1: - resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} - engines: {node: '>= 6'} + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} - formdata-node@4.4.1: - resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} - engines: {node: '>= 12.20'} + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} - formik@2.4.6: - resolution: {integrity: sha512-A+2EI7U7aG296q2TLGvNapDNTZp1khVt5Vk0Q/fyfSROss0V/V6+txt2aJnwEos44IxTCW/LYAi/zgWzlevj+g==} - peerDependencies: - react: '>=16.8.0' - - forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} - framer-motion@11.18.2: - resolution: {integrity: sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==} + chromium-bidi@1.1.0: + resolution: {integrity: sha512-HislCEczCuamWm3+55Lig9XKmMF13K+BGKum9rwtDAzgUAHT4h5jNwhDmD4U20VoVUG8ujnv9UZ89qiIf5uF8w==} peerDependencies: - '@emotion/is-prop-valid': '*' - react: ^18.0.0 || ^19.0.0 - react-dom: ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@emotion/is-prop-valid': - optional: true - react: - optional: true - react-dom: - optional: true - - framesync@6.1.2: - resolution: {integrity: sha512-jBTqhX6KaQVDyus8muwZbBeGGP0XgujBRbQ7gM7BRdS3CadCZIHiawyzYLnafYcvZIh5j8WE7cxZKFn7dXhu9g==} - - fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - - fresh@2.0.0: - resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} - engines: {node: '>= 0.8'} - - fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} - - fs-extra@11.3.0: - resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} - engines: {node: '>=14.14'} + devtools-protocol: '*' - fs-extra@7.0.1: - resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} - engines: {node: '>=6 <7 || >=8'} + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} - fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} + classnames@2.5.1: + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} - fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} - fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} + cleye@1.3.4: + resolution: {integrity: sha512-Rd6M8ecBDtdYdPR22h6gG37lPqqJ3hSOaplaGwuGYey9xKmEElOvTgupqfyLSlISshroRpVhYjDtW3vwNUNBaQ==} - fs-temp@1.2.1: - resolution: {integrity: sha512-okTwLB7/Qsq82G6iN5zZJFsOfZtx2/pqrA7Hk/9fvy+c+eJS9CvgGXT2uNxwnI14BDY9L/jQPkaBgSvlKfSW9w==} + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} - fs-xattr@0.3.1: - resolution: {integrity: sha512-UVqkrEW0GfDabw4C3HOrFlxKfx0eeigfRne69FxSBdHIP8Qt5Sq6Pu3RM9KmMlkygtC4pPKkj5CiPO5USnj2GA==} - engines: {node: '>=8.6.0'} - os: ['!win32'] + cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} - fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] + cli-truncate@3.1.0: + resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + clipboardy@2.3.0: + resolution: {integrity: sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==} + engines: {node: '>=8'} - function.prototype.name@1.1.8: - resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} - engines: {node: '>= 0.4'} + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} - galactus@1.0.0: - resolution: {integrity: sha512-R1fam6D4CyKQGNlvJne4dkNF+PvUUl7TAJInvTGa9fti9qAv95quQz29GXapA4d8Ec266mJJxFVh82M4GIIGDQ==} - engines: {node: '>= 12'} + clone-response@1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} - generate-function@2.3.1: - resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} - generate-object-property@1.2.0: - resolution: {integrity: sha512-TuOwZWgJ2VAMEGJvAyPWvpqxSANF0LDpmyHauMjFYzaACvn+QTT/AZomvPCzVBV7yDN3OmwHQ5OvHaeLKre3JQ==} + clsx@1.2.1: + resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} + engines: {node: '>=6'} - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} + color-convert@0.5.3: + resolution: {integrity: sha512-RwBeO/B/vZR3dfKL1ye/vx8MHZ40ugzpyfeVG5GsiuGnrlMWe2o8wxBbLCpw9CsxV+wHuzYlCiWnybrIA0ling==} - get-intrinsic@1.2.7: - resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} - engines: {node: '>= 0.4'} + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} - get-nonce@1.0.1: - resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} - engines: {node: '>=6'} + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - get-package-info@1.0.0: - resolution: {integrity: sha512-SCbprXGAPdIhKAXiG+Mk6yeoFH61JlYunqdFQFHDtLjJlDjFf6x07dsS8acO+xWt52jpdVo49AlVDnUVK1sDNw==} - engines: {node: '>= 4.0'} + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} - get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} + color2k@2.0.3: + resolution: {integrity: sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==} - get-stream@4.1.0: - resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} - engines: {node: '>=6'} + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} - get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} + colorjs.io@0.5.2: + resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==} - get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} - get-tsconfig@4.10.0: - resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} + comma-separated-tokens@1.0.8: + resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} - get-uri@6.0.4: - resolution: {integrity: sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==} - engines: {node: '>= 14'} + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - gifwrap@0.10.1: - resolution: {integrity: sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw==} + commander@11.0.0: + resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} + engines: {node: '>=16'} - git-raw-commits@4.0.0: - resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} + commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} engines: {node: '>=16'} - hasBin: true - github-url-to-object@4.0.6: - resolution: {integrity: sha512-NaqbYHMUAlPcmWFdrAB7bcxrNIiiJWJe8s/2+iOc9vlcHlwHqSGrPk+Yi3nu6ebTwgsZEa7igz+NH2vEq3gYwQ==} + commander@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} + engines: {node: '>=18'} - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + commander@5.1.0: + resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} + engines: {node: '>= 6'} - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - hasBin: true + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} - glob@11.0.1: - resolution: {integrity: sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==} - engines: {node: 20 || >=22} - hasBin: true + commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + compare-func@2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} - glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} - deprecated: Glob versions prior to v9 are no longer supported + compare-version@0.1.2: + resolution: {integrity: sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==} + engines: {node: '>=0.10.0'} - global-agent@3.0.0: - resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} - engines: {node: '>=10.0'} + compute-scroll-into-view@3.1.1: + resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==} - global-directory@4.0.1: - resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + conf@13.1.0: + resolution: {integrity: sha512-Bi6v586cy1CoTFViVO4lGTtx780lfF96fUmS1lSX6wpZf6330NvHUu6fReVuDP1de8Mg0nkZb01c8tAQdz1o3w==} engines: {node: '>=18'} - global-dirs@3.0.1: - resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} - engines: {node: '>=10'} + console-table-printer@2.12.1: + resolution: {integrity: sha512-wKGOQRRvdnd89pCeH96e2Fn4wkbenSP6LMHfjfyNLMbGuHEFbMqQNuxXqd0oXG9caIOQ1FTvc5Uijp9/4jujnQ==} - global@4.4.0: - resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} + content-disposition@1.0.0: + resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} + engines: {node: '>= 0.6'} - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - - globrex@0.1.2: - resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} + conventional-changelog-angular@7.0.0: + resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} + engines: {node: '>=16'} - got@11.8.6: - resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} - engines: {node: '>=10.19.0'} + conventional-changelog-conventionalcommits@7.0.2: + resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} + engines: {node: '>=16'} - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + conventional-commits-parser@5.0.0: + resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} + engines: {node: '>=16'} + hasBin: true - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - graphql@16.10.0: - resolution: {integrity: sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==} - engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - happy-dom@17.1.1: - resolution: {integrity: sha512-OSTkBlmD/6Do7gCd7nZB5iFq1bF9VQg/iFmjHmxvVX2S1UiOpo6sT+aFNnu3XUsB8hCZb9+GZ0G1g1TaMiAggw==} - engines: {node: '>=18.0.0'} + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + engines: {node: '>= 0.6'} - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} + cookie@1.0.2: + resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + engines: {node: '>=18'} - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} + copy-to-clipboard@3.3.3: + resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} + core-js@3.41.0: + resolution: {integrity: sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==} - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - headers-polyfill@4.0.3: - resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} - hoist-non-react-statics@3.3.2: - resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + cosmiconfig-typescript-loader@6.1.0: + resolution: {integrity: sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==} + engines: {node: '>=v18'} + peerDependencies: + '@types/node': '*' + cosmiconfig: '>=9' + typescript: '>=5' - hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} - html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true - http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} + cross-dirname@0.1.0: + resolution: {integrity: sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==} - http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} + cross-env@7.0.3: + resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} + engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + hasBin: true - http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} + cross-spawn@6.0.6: + resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} + engines: {node: '>=4.8'} - http2-wrapper@1.0.3: - resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} - engines: {node: '>=10.19.0'} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} - https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} + cross-zip@4.0.1: + resolution: {integrity: sha512-n63i0lZ0rvQ6FXiGQ+/JFCKAUyPFhLQYJIqKaa+tSJtfKeULF/IDNDAbdnSIxgS4NTuw2b0+lj8LzfITuq+ZxQ==} + engines: {node: '>=12.10'} - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} + crypto@1.0.1: + resolution: {integrity: sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==} + deprecated: This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in. - human-id@1.0.2: - resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} + css-color-keywords@1.0.0: + resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} + engines: {node: '>=4'} - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} + css-in-js-utils@3.1.0: + resolution: {integrity: sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==} - human-signals@4.3.1: - resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} - engines: {node: '>=14.18.0'} + css-to-react-native@3.2.0: + resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} - humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} - husky@9.1.7: - resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} - engines: {node: '>=18'} + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} hasBin: true - hyphenate-style-name@1.1.0: - resolution: {integrity: sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==} + cssstyle@4.3.0: + resolution: {integrity: sha512-6r0NiY0xizYqfBvWp1G7WXJ06/bZyrk7Dc6PHql82C/pKGUTKu4yAX4Y8JPamb1ob9nBKuxWzCGTRuGwU3yxJQ==} + engines: {node: '>=18'} - iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - iconv-lite@0.5.2: - resolution: {integrity: sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==} - engines: {node: '>=0.10.0'} + dargs@8.1.0: + resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} + engines: {node: '>=12'} - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} + data-uri-to-buffer@6.0.2: + resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} + engines: {node: '>= 14'} - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + data-urls@5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} - ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} - image-q@4.0.0: - resolution: {integrity: sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==} + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} - image-size@0.7.5: - resolution: {integrity: sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g==} - engines: {node: '>=6.9.0'} - hasBin: true + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} - immediate@3.0.6: - resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + date-fns@4.1.0: + resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} - immutable@5.0.3: - resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==} + dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} + debounce-fn@6.0.0: + resolution: {integrity: sha512-rBMW+F2TXryBwB54Q0d8drNEI+TfoS9JpNTAoVpukbWEhjXQq4rySFYLaqXMFXwdv61Zb2OHtj5bviSoimqxRQ==} + engines: {node: '>=18'} - import-meta-resolve@4.1.0: - resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true - imul@1.0.1: - resolution: {integrity: sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==} - engines: {node: '>=0.10.0'} + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true - indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - - infer-owner@1.0.4: - resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true - ini@2.0.0: - resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} - engines: {node: '>=10'} + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} - ini@3.0.1: - resolution: {integrity: sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + decimal.js@10.5.0: + resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==} - ini@4.1.1: - resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + decode-named-character-reference@1.1.0: + resolution: {integrity: sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==} - inline-style-prefixer@7.0.1: - resolution: {integrity: sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw==} + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} - inquirer@9.3.7: - resolution: {integrity: sha512-LJKFHCSeIRq9hanN14IlOtPSTe3lNES7TYDTE2xxdAy1LS5rYphajK1qtwvj3YmQXvvk0U2Vbmcni8P9EIQW9w==} - engines: {node: '>=18'} + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} - internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - interpret@1.4.0: - resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} - engines: {node: '>= 0.10'} + deepmerge@2.2.1: + resolution: {integrity: sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==} + engines: {node: '>=0.10.0'} - interpret@3.1.1: - resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} - engines: {node: '>=10.13.0'} + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} - ip-address@9.0.5: - resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} - engines: {node: '>= 12'} + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} - is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - - is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} - is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} + degenerator@5.0.1: + resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} + engines: {node: '>= 14'} - is-boolean-object@1.2.2: - resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} - engines: {node: '>= 0.4'} + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} + deprecation@2.3.1: + resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} - is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} - is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} - hasBin: true - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} engines: {node: '>=8'} - is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} - is-function@1.0.2: - resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} + detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - is-generator-function@1.1.0: - resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} - engines: {node: '>= 0.4'} + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + devtools-protocol@0.0.1380148: + resolution: {integrity: sha512-1CJABgqLxbYxVI+uJY/UDUHJtJ0KZTSjNYJYKqd9FRoXT33WDakDHNxRapMEgzeJ/C3rcs01+avshMnPmKQbvA==} - is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - is-lambda@1.0.1: - resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} - is-my-ip-valid@1.0.1: - resolution: {integrity: sha512-jxc8cBcOWbNK2i2aTkCZP6i7wkHF1bqKFrwEHuN5Jtg5BSaZHUZQ/JTOJwoV41YvHnOaRyWWh72T/KvfNz9DJg==} + dir-compare@4.2.0: + resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} - is-my-json-valid@2.20.6: - resolution: {integrity: sha512-1JQwulVNjx8UqkPE/bqDaxtH4PXCe/2VRh/y3p99heOV87HG4Id5/VfDswd+YiAfHcRTfDlWgISycnHuhZq1aw==} + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} - is-node-process@1.2.0: - resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} - is-obj@2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} - engines: {node: '>=8'} + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + dom-walk@0.1.2: + resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} + + dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} - is-plain-object@5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} + dot-prop@9.0.0: + resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} + engines: {node: '>=18'} - is-promise@4.0.0: - resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} + engines: {node: '>=12'} - is-property@1.0.2: - resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} + ds-store@0.1.6: + resolution: {integrity: sha512-kY21M6Lz+76OS3bnCzjdsJSF7LBpLYGCVfavW8TgQD2XkcqIZ86W0y9qUDZu6fp7SIZzqosMDW2zi7zVFfv4hw==} - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - is-stream@1.1.0: - resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} - engines: {node: '>=0.10.0'} + electron-debug@3.2.0: + resolution: {integrity: sha512-7xZh+LfUvJ52M9rn6N+tPuDw6oRAjxUj9SoxAZfJ0hVCXhZCsdkrSt7TgXOiWiEOBgEV8qwUIO/ScxllsPS7ow==} - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} + electron-devtools-installer@3.2.1: + resolution: {integrity: sha512-FaCi+oDCOBTw0gJUsuw5dXW32b2Ekh5jO8lI1NRCQigo3azh2VogsIi0eelMVrP1+LkN/bewyH3Xoo1USjO0eQ==} - is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + electron-installer-common@0.10.4: + resolution: {integrity: sha512-8gMNPXfAqUE5CfXg8RL0vXpLE9HAaPkgLXVoHE3BMUzogMWenf4LmwQ27BdCUrEhkjrKl+igs2IHJibclR3z3Q==} + engines: {node: '>= 10.0.0'} - is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} + electron-installer-debian@3.2.0: + resolution: {integrity: sha512-58ZrlJ1HQY80VucsEIG9tQ//HrTlG6sfofA3nRGr6TmkX661uJyu4cMPPh6kXW+aHdq/7+q25KyQhDrXvRL7jw==} + engines: {node: '>= 10.0.0'} + os: [darwin, linux] + hasBin: true - is-subdir@1.2.0: - resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} - engines: {node: '>=4'} + electron-installer-dmg@5.0.1: + resolution: {integrity: sha512-qOa1aAQdX57C+vzhDk3549dd/PRlNL4F8y736MTD1a43qptD+PvHY97Bo9gSf+OZ8iUWE7BrYSpk/FgLUe40EA==} + engines: {node: '>= 16'} + hasBin: true - is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} + electron-installer-redhat@3.4.0: + resolution: {integrity: sha512-gEISr3U32Sgtj+fjxUAlSDo3wyGGq6OBx7rF5UdpIgbnpUvMN4W5uYb0ThpnAZ42VEJh/3aODQXHbFS4f5J3Iw==} + engines: {node: '>= 10.0.0'} + os: [darwin, linux] + hasBin: true - is-text-path@2.0.0: - resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} - engines: {node: '>=8'} + electron-is-accelerator@0.1.2: + resolution: {integrity: sha512-fLGSAjXZtdn1sbtZxx52+krefmtNuVwnJCV2gNiVt735/ARUboMl8jnNC9fZEqQdlAv2ZrETfmBUsoQci5evJA==} - is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} + electron-is-dev@1.2.0: + resolution: {integrity: sha512-R1oD5gMBPS7PVU8gJwH6CtT0e6VSoD0+SzSnYpNm+dBkcijgA+K7VAMHDfnRq/lkKPZArpzplTW6jfiMYosdzw==} - is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} + electron-localshortcut@3.2.1: + resolution: {integrity: sha512-DWvhKv36GsdXKnaFFhEiK8kZZA+24/yFLgtTwJJHc7AFgDjNRIBJZ/jq62Y/dWv9E4ypYwrVWN2bVrCYw1uv7Q==} - is-url@1.2.4: - resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} + electron-log@5.2.4: + resolution: {integrity: sha512-iX12WXc5XAaKeHg2QpiFjVwL+S1NVHPFd3V5RXtCmKhpAzXsVQnR3UEc0LovM6p6NkUQxDWnkdkaam9FNUVmCA==} + engines: {node: '>= 14'} - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} + electron-packager-languages@0.5.0: + resolution: {integrity: sha512-ryJsVXgHq0+7eZpJ+YSUQNYUnH4yPq2J4gXtmP9HEq8N6PHtygLEmohKMm4VrwI5qTir4HRCxy+O1UNo8mbwgg==} + engines: {node: '>6.0.0'} - is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} - engines: {node: '>= 0.4'} + electron-packager-languages@0.6.0: + resolution: {integrity: sha512-vdSTJ6nH93RFo2YnoFbQDb9IAgMTG8ixYOQZuunpFVIUhKpPrRhmbQOuTBk7zJt5eaKUhMZixMD87WQynnM5iQ==} + engines: {node: '>6.0.0'} - is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} + electron-playwright-helpers@1.7.1: + resolution: {integrity: sha512-S9mo7LfpERgub2WIuYVPpib4XKFeAqBP+mxYf5Bv7E0B5GUB+LUbSj6Fpu39h18Ar635Nf9nQYTmypjuvaYJng==} - is-windows@1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} + electron-squirrel-startup@1.0.1: + resolution: {integrity: sha512-sTfFIHGku+7PsHLJ7v0dRcZNkALrV+YEozINTW8X1nM//e5O3L+rfYuvSW00lmGHnYmUjARZulD8F2V8ISI9RA==} - is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} + electron-store@10.0.1: + resolution: {integrity: sha512-Ok0bF13WWdTzZi9rCtPN8wUfwx+yDMmV6PAnCMqjNRKEXHmklW/rV+6DofV/Vf5qoAh+Bl9Bj7dQ+0W+IL2psg==} + engines: {node: '>=20'} - isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + electron-to-chromium@1.5.97: + resolution: {integrity: sha512-HKLtaH02augM7ZOdYRuO19rWDeY+QSJ1VxnXFa/XDFLf07HvM90pALIJFgrO+UVaajI3+aJMMpojoUTLZyQ7JQ==} - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + electron-util@0.17.2: + resolution: {integrity: sha512-4Kg/aZxJ2BZklgyfH86px/D2GyROPyIcnAZar+7KiNmKI2I5l09pwQTP7V95zM3FVhgDQwV9iuJta5dyEvuWAw==} - isbinaryfile@4.0.10: - resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} - engines: {node: '>= 8.0.0'} + electron-vite@2.3.0: + resolution: {integrity: sha512-lsN2FymgJlp4k6MrcsphGqZQ9fKRdJKasoaiwIrAewN1tapYI/KINLdfEL7n10LuF0pPSNf/IqjzZbB5VINctg==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@swc/core': ^1.0.0 + vite: ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + '@swc/core': + optional: true - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + electron-vite@3.0.0: + resolution: {integrity: sha512-Uf8NpF4OB2Juo1Vq8pobkLVp9BZTO70VwkW7fKXSCkod0SRkc7Dkw7ddR6b1fbsgT7lcZ0HD29WRxsCcbkHXUw==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@swc/core': ^1.0.0 + vite: ^4.0.0 || ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + '@swc/core': + optional: true - isomorphic-fetch@3.0.0: - resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==} + electron-winstaller@5.4.0: + resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==} + engines: {node: '>=8.0.0'} - isomorphic-rslog@0.0.6: - resolution: {integrity: sha512-HM0q6XqQ93psDlqvuViNs/Ea3hAyGDkIdVAHlrEocjjAwGrs1fZ+EdQjS9eUPacnYB7Y8SoDdSY3H8p3ce205A==} - engines: {node: '>=14.17.6'} + electron@30.5.1: + resolution: {integrity: sha512-AhL7+mZ8Lg14iaNfoYTkXQ2qee8mmsQyllKdqxlpv/zrKgfxz6jNVtcRRbQtLxtF8yzcImWdfTQROpYiPumdbw==} + engines: {node: '>= 12.20.55'} + hasBin: true - istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} + electron@34.1.1: + resolution: {integrity: sha512-1aDYk9Gsv1/fFeClMrxWGoVMl7uCUgl1pe26BiTnLXmAoqEXCa3f3sCKFWV+cuDzUjQGAZcpkWhGYTgWUSQrLA==} + engines: {node: '>= 12.20.55'} + hasBin: true - istanbul-lib-instrument@6.0.3: - resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} - engines: {node: '>=10'} + electron@34.3.3: + resolution: {integrity: sha512-7m1FiO1mwc1K/UqqnnkG7Ik/kAngDzmLfHwcl+xaWgCQ+Sts9rlEqzOh6g1GHhDqebrbs4bO/aU+NDi32fCciQ==} + engines: {node: '>= 12.20.55'} + hasBin: true - istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - istanbul-lib-source-maps@5.0.6: - resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} - engines: {node: '>=10'} + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - istanbul-reports@3.1.7: - resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} - engines: {node: '>=8'} + encode-utf8@1.0.3: + resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==} - iterator.prototype@1.1.5: - resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} - engines: {node: '>= 0.4'} + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} - jackspeak@4.0.3: - resolution: {integrity: sha512-oSwM7q8PTHQWuZAlp995iPpPJ4Vkl7qT0ZRD+9duL9j2oBy6KcTfyxc8mEuHJYC+z/kbps80aJLkaNzTOrf/kw==} - engines: {node: 20 || >=22} + encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} - javascript-natural-sort@0.7.1: - resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==} + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - jimp@0.22.10: - resolution: {integrity: sha512-lCaHIJAgTOsplyJzC1w/laxSxrbSsEBw4byKwXgUdMmh+ayPsnidTblenQm+IvhIs44Gcuvlb6pd2LQ0wcKaKg==} + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} - jimp@1.6.0: - resolution: {integrity: sha512-YcwCHw1kiqEeI5xRpDlPPBGL2EOpBKLwO4yIBJcXWHPj5PnA5urGq0jbyhM5KoNpypQ6VboSoxc9D8HyfvngSg==} - engines: {node: '>=18'} + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} - jiti@2.4.2: - resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} - hasBin: true + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} - jpeg-js@0.4.4: - resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==} + env-paths@3.0.0: + resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - js-cookie@2.2.1: - resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==} + err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - js-tiktoken@1.0.19: - resolution: {integrity: sha512-XC63YQeEcS47Y53gg950xiZ4IWmkfMe4p2V9OSaBt26q+p47WHn18izuXzSclCI73B7yGqtfRsT6jcZQI0y08g==} + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + error-stack-parser@2.1.4: + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} - js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true + es-abstract@1.23.9: + resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} + engines: {node: '>= 0.4'} - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} - jsbn@1.1.0: - resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} - hasBin: true + es-iterator-helpers@1.2.1: + resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} + engines: {node: '>= 0.4'} - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} - json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - json-schema-typed@8.0.1: - resolution: {integrity: sha512-XQmWYj2Sm4kn4WeTYvmpKEbyPsL7nBsb647c7pMe6l02/yx2+Jfc4dT6UZkEXnIUb5LhD55r2HPsJ1milQ4rDg==} + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + es6-error@4.1.1: + resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} - json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + esbuild-register@3.6.0: + resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} + peerDependencies: + esbuild: '>=0.12 <1' - json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} hasBin: true - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} + esbuild@0.23.1: + resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} + engines: {node: '>=18'} hasBin: true - jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + esbuild@0.24.2: + resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} + engines: {node: '>=18'} + hasBin: true - jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} + esbuild@0.25.0: + resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==} + engines: {node: '>=18'} + hasBin: true - jsonpointer@5.0.1: - resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} - engines: {node: '>=0.10.0'} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} - jsonrepair@3.12.0: - resolution: {integrity: sha512-SWfjz8SuQ0wZjwsxtSJ3Zy8vvLg6aO/kxcp9TWNPGwJKgTZVfhNEQBMk/vPOpYCDFWRxD6QWuI6IHR1t615f0w==} - hasBin: true + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} - jszip@3.10.1: - resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} - junk@3.1.0: - resolution: {integrity: sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==} - engines: {node: '>=8'} + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} - keyboardevent-from-electron-accelerator@2.0.0: - resolution: {integrity: sha512-iQcmNA0M4ETMNi0kG/q0h/43wZk7rMeKYrXP7sqKIJbHkTU8Koowgzv+ieR/vWJbOwxx5nDC3UnudZ0aLSu4VA==} + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true - keyboardevents-areequal@0.2.2: - resolution: {integrity: sha512-Nv+Kr33T0mEjxR500q+I6IWisOQ0lK1GGOncV0kWE6n4KFmpcu7RUX5/2B0EUtX51Cb0HjZ9VJsSY3u4cBa0kw==} + eslint-config-prettier@9.1.0: + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - langsmith@0.3.14: - resolution: {integrity: sha512-MzoxdRkFFV/6140vpP5V2e2fkTG6x/0zIjw77bsRwAXEMjPRTUyDazfXeSyrS5uJvbLgxAXc+MF1h6vPWe6SXQ==} + eslint-module-utils@2.12.0: + resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} + engines: {node: '>=4'} peerDependencies: - openai: '*' + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' peerDependenciesMeta: - openai: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: optional: true - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - - lie@3.3.0: - resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + eslint-plugin-import@2.31.0: + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true - lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} + eslint-plugin-prettier@5.2.3: + resolution: {integrity: sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + eslint-plugin-react@7.37.4: + resolution: {integrity: sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - linkify-it@5.0.0: - resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} - lint-staged@14.0.1: - resolution: {integrity: sha512-Mw0cL6HXnHN1ag0mN/Dg4g6sr8uf8sn98w2Oc1ECtFto9tvRF7nkXGJRbx8gPlHyoR0pLyBr2lQHbWwmUHe1Sw==} - engines: {node: ^16.14.0 || >=18.0.0} - hasBin: true + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - listr2@6.6.1: - resolution: {integrity: sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==} - engines: {node: '>=16.0.0'} - peerDependencies: - enquirer: '>= 2.3.0 < 3' - peerDependenciesMeta: - enquirer: - optional: true + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - listr2@7.0.2: - resolution: {integrity: sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g==} - engines: {node: '>=16.0.0'} + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true - load-bmfont@1.4.2: - resolution: {integrity: sha512-qElWkmjW9Oq1F9EI5Gt7aD9zcdHb9spJCW1L/dmPf7KzCCEJxq8nhHz5eCgI9aMf7vrG/wyaCqdsI+Iy9ZTlog==} + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - load-json-file@2.0.0: - resolution: {integrity: sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ==} + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} + hasBin: true - locate-path@2.0.0: - resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} - engines: {node: '>=4'} + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} - locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} - locate-path@7.2.0: - resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} - lodash-es@4.17.21: - resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} - lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - lodash.get@4.4.2: - resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} - deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} - lodash.kebabcase@4.1.1: - resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} - lodash.mergewith@4.6.2: - resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - lodash.snakecase@4.1.1: - resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - lodash.startcase@4.4.0: - resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} - lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + eventsource-parser@3.0.0: + resolution: {integrity: sha512-T1C0XCUimhxVQzW4zFipdx0SficT651NnkR0ZSH3yQwh+mFMdLfgjABVi4YtMTtaL4s168593DaoaRLMqryavA==} + engines: {node: '>=18.0.0'} - lodash.upperfirst@4.3.1: - resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} + eventsource@3.0.5: + resolution: {integrity: sha512-LT/5J605bx5SNyE+ITBDiM3FxffBiq9un7Vx0EwMDM3vg8sWKx/tO2zC+LMqZ+smAM0F2hblaDZUVZF0te2pSw==} + engines: {node: '>=18.0.0'} - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + execa@1.0.0: + resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} + engines: {node: '>=6'} - log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} - log-update@5.0.1: - resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true + execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} - loupe@3.1.3: - resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} + exif-parser@0.1.12: + resolution: {integrity: sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==} - lowercase-keys@2.0.0: - resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} - engines: {node: '>=8'} + expect-type@1.1.0: + resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} + engines: {node: '>=12.0.0'} - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + exponential-backoff@3.1.2: + resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} - lru-cache@11.0.2: - resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==} - engines: {node: 20 || >=22} - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} + express-rate-limit@7.5.0: + resolution: {integrity: sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==} + engines: {node: '>= 16'} + peerDependencies: + express: ^4.11 || 5 || ^5.0.0-beta.1 - lz-string@1.5.0: - resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} - hasBin: true + express-ws@5.0.2: + resolution: {integrity: sha512-0uvmuk61O9HXgLhGl3QhNSEtRsQevtmbL94/eILaliEADZBHZOQUAiHFrGPrgsjikohyrmSG5g+sCfASTt0lkQ==} + engines: {node: '>=4.5.0'} + peerDependencies: + express: ^4.0.0 || ^5.0.0-alpha.1 - macos-alias@0.2.12: - resolution: {integrity: sha512-yiLHa7cfJcGRFq4FrR4tMlpNHb4Vy4mWnpajlSSIFM5k4Lv8/7BbbDLzCAVogWNl0LlLhizRp1drXv0hK9h0Yw==} - os: [darwin] + express@4.21.2: + resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} + engines: {node: '>= 0.10.0'} - macos-version@5.2.1: - resolution: {integrity: sha512-OHJU8nTNxHYL1FQhD+nZawWgXKXAqDGr4kluLtaqKO4au3cR41y1mKuVShOU5U4rOYiuPanljq6oFGmV2B9DFA==} - engines: {node: '>=6'} + express@5.0.1: + resolution: {integrity: sha512-ORF7g6qGnD+YtUG9yx4DFoqCShNMmUKiXuT5oWMHiOvt/4WFbHC6yCwQMTSBMno7AqntNCAzzcnnjowRkTL9eQ==} + engines: {node: '>= 18'} - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - magicast@0.3.5: - resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + extendable-error@0.1.7: + resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} - make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} - make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true - make-fetch-happen@10.2.1: - resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - map-age-cleaner@0.1.3: - resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==} - engines: {node: '>=6'} + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - markdown-it@14.1.0: - resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} - hasBin: true + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} - matcher@3.0.0: - resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} - engines: {node: '>=10'} + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - mdn-data@2.0.14: - resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - mdurl@2.0.0: - resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + fast-shallow-equal@1.0.0: + resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==} - media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} + fast-uri@3.0.6: + resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} - media-typer@1.1.0: - resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} - engines: {node: '>= 0.8'} + fast-xml-parser@4.4.1: + resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} + hasBin: true - medium-zoom@1.1.0: - resolution: {integrity: sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==} + fastest-stable-stringify@2.0.2: + resolution: {integrity: sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==} - mem@4.3.0: - resolution: {integrity: sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==} - engines: {node: '>=6'} + fastq@1.19.0: + resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} - meow@12.1.1: - resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} - engines: {node: '>=16.10'} + fault@1.0.4: + resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} - merge-descriptors@1.0.3: - resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - merge-descriptors@2.0.0: - resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} - engines: {node: '>=18'} + fdir@6.4.3: + resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} + file-type@16.5.4: + resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==} + engines: {node: '>=10'} - methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} + filename-reserved-regex@2.0.0: + resolution: {integrity: sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==} + engines: {node: '>=4'} - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} + filenamify@4.3.0: + resolution: {integrity: sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==} + engines: {node: '>=8'} - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} - mime-db@1.53.0: - resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} - engines: {node: '>= 0.6'} + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + engines: {node: '>= 0.8'} - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + finalhandler@2.1.0: + resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} + engines: {node: '>= 0.8'} - mime-types@3.0.0: - resolution: {integrity: sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w==} - engines: {node: '>= 0.6'} + find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} - mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + find-up@2.1.0: + resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} engines: {node: '>=4'} - hasBin: true - - mime@3.0.0: - resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} - engines: {node: '>=10.0.0'} - hasBin: true - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} - mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} - mimic-function@5.0.1: - resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + find-up@7.0.0: + resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} engines: {node: '>=18'} - mimic-response@1.0.1: - resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} - engines: {node: '>=4'} + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} - mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true - min-document@2.19.0: - resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} + flatted@3.3.2: + resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} - minimatch@10.0.1: - resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} - engines: {node: 20 || >=22} + flora-colossus@2.0.0: + resolution: {integrity: sha512-dz4HxH6pOvbUzZpZ/yXhafjbR2I8cenK5xL0KtBFb7U2ADsR+OwXifnxZjij/pZWF775uSCMzWVd+jDik2H2IA==} + engines: {node: '>= 12'} - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + fmix@0.1.0: + resolution: {integrity: sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==} - minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + focus-lock@1.3.6: + resolution: {integrity: sha512-Ik/6OCk9RQQ0T5Xw+hKNLWrjSMtv51dD4GRmJjbD5a58TIEpI5a5iXagKVl3Z5UuyslMCA8Xwnu76jQob62Yhg==} engines: {node: '>=10'} - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} - minipass-collect@1.0.2: - resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} - engines: {node: '>= 8'} + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} - minipass-fetch@2.1.2: - resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + form-data-encoder@1.7.2: + resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} - minipass-flush@1.0.5: - resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} - engines: {node: '>= 8'} + form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + engines: {node: '>= 6'} - minipass-pipeline@1.2.4: - resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} - engines: {node: '>=8'} + format@0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} - minipass-sized@1.0.3: - resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} - engines: {node: '>=8'} + formdata-node@4.4.1: + resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} + engines: {node: '>= 12.20'} - minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} + formik@2.4.6: + resolution: {integrity: sha512-A+2EI7U7aG296q2TLGvNapDNTZp1khVt5Vk0Q/fyfSROss0V/V6+txt2aJnwEos44IxTCW/LYAi/zgWzlevj+g==} + peerDependencies: + react: '>=16.8.0' - minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} + framer-motion@11.18.2: + resolution: {integrity: sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true - mitt@3.0.1: - resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + framer-motion@11.2.13: + resolution: {integrity: sha512-AyIeegfkXlkX1lWEudRYsJlC+0A59cE8oFK9IsN9bUQzxLwcvN3AEaYaznkELiWlHC7a0eD7pxsYQo7BC05S5A==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 + react-dom: ^18.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true - mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true + framesync@6.1.2: + resolution: {integrity: sha512-jBTqhX6KaQVDyus8muwZbBeGGP0XgujBRbQ7gM7BRdS3CadCZIHiawyzYLnafYcvZIh5j8WE7cxZKFn7dXhu9g==} - mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} - motion-dom@11.18.1: - resolution: {integrity: sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==} + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} - motion-utils@11.18.1: - resolution: {integrity: sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==} + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} - mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} - engines: {node: '>=4'} + fs-extra@11.3.0: + resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} + engines: {node: '>=14.14'} - mrmime@2.0.1: - resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} - engines: {node: '>=10'} + fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} - ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} - msw@2.7.0: - resolution: {integrity: sha512-BIodwZ19RWfCbYTxWTUfTXc+sg4OwjCAgxU1ZsgmggX/7S3LdUifsbUPJs61j0rWb19CZRGY5if77duhc0uXzw==} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - typescript: '>= 4.8.x' - peerDependenciesMeta: - typescript: - optional: true + fs-temp@1.2.1: + resolution: {integrity: sha512-okTwLB7/Qsq82G6iN5zZJFsOfZtx2/pqrA7Hk/9fvy+c+eJS9CvgGXT2uNxwnI14BDY9L/jQPkaBgSvlKfSW9w==} - murmur-32@0.2.0: - resolution: {integrity: sha512-ZkcWZudylwF+ir3Ld1n7gL6bI2mQAzXvSobPwVtu8aYi2sbXeipeSkdcanRLzIofLcM5F53lGaKm2dk7orBi7Q==} + fs-xattr@0.3.1: + resolution: {integrity: sha512-UVqkrEW0GfDabw4C3HOrFlxKfx0eeigfRne69FxSBdHIP8Qt5Sq6Pu3RM9KmMlkygtC4pPKkj5CiPO5USnj2GA==} + engines: {node: '>=8.6.0'} + os: ['!win32'] - mustache@4.2.0: - resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} - hasBin: true + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - mute-stream@1.0.0: - resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] - mute-stream@2.0.0: - resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} - engines: {node: ^18.17.0 || >=20.5.0} + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] - nan@2.22.0: - resolution: {integrity: sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==} + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - nano-css@5.6.2: - resolution: {integrity: sha512-+6bHaC8dSDGALM1HJjOHVXpuastdu2xFoZlC77Jh4cg+33Zcgm+Gxd+1xsnpZK14eyHObSp82+ll5y3SX75liw==} - peerDependencies: - react: '*' - react-dom: '*' + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} - nanoid@3.3.8: - resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + galactus@1.0.0: + resolution: {integrity: sha512-R1fam6D4CyKQGNlvJne4dkNF+PvUUl7TAJInvTGa9fti9qAv95quQz29GXapA4d8Ec266mJJxFVh82M4GIIGDQ==} + engines: {node: '>= 12'} - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + gar@1.0.4: + resolution: {integrity: sha512-w4n9cPWyP7aHxKxYHFQMegj7WIAsL/YX/C4Bs5Rr8s1H9M1rNtRWRsw+ovYMkXDQ5S4ZbYHsHAPmevPjPgw44w==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} + generate-function@2.3.1: + resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} - negotiator@0.6.4: - resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} - engines: {node: '>= 0.6'} + generate-object-property@1.2.0: + resolution: {integrity: sha512-TuOwZWgJ2VAMEGJvAyPWvpqxSANF0LDpmyHauMjFYzaACvn+QTT/AZomvPCzVBV7yDN3OmwHQ5OvHaeLKre3JQ==} - negotiator@1.0.0: - resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} - engines: {node: '>= 0.6'} + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} - netmask@2.0.2: - resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} - engines: {node: '>= 0.4.0'} + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} - new-github-issue-url@0.2.1: - resolution: {integrity: sha512-md4cGoxuT4T4d/HDOXbrUHkTKrp/vp+m3aOA7XXVYwNsUNMK49g3SQicTSeV5GIz/5QVGAeYRAOlyp9OvlgsYA==} - engines: {node: '>=10'} + get-folder-size@2.0.1: + resolution: {integrity: sha512-+CEb+GDCM7tkOS2wdMKTn9vU7DgnKUTuDlehkNJKNSovdCOVxs14OfKCk4cvSaR3za4gj+OBdl9opPN9xrJ0zA==} + hasBin: true - nice-try@1.0.5: - resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + get-intrinsic@1.2.7: + resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} + engines: {node: '>= 0.4'} - node-abi@3.74.0: - resolution: {integrity: sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w==} - engines: {node: '>=10'} + get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} - node-abort-controller@3.1.1: - resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + get-package-info@1.0.0: + resolution: {integrity: sha512-SCbprXGAPdIhKAXiG+Mk6yeoFH61JlYunqdFQFHDtLjJlDjFf6x07dsS8acO+xWt52jpdVo49AlVDnUVK1sDNw==} + engines: {node: '>= 4.0'} - node-addon-api@5.0.0: - resolution: {integrity: sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==} + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} - node-api-version@0.2.0: - resolution: {integrity: sha512-fthTTsi8CxaBXMaBAD7ST2uylwvsnYxh2PfaScwpMhos6KlSFajXQPcM4ogNE1q2s3Lbz9GCGqeIHC+C6OZnKg==} + get-stream@4.1.0: + resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} + engines: {node: '>=6'} - node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} - node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} - node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} - nopt@6.0.0: - resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - hasBin: true + get-tsconfig@4.10.0: + resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} - normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + get-uri@6.0.4: + resolution: {integrity: sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==} + engines: {node: '>= 14'} - normalize-url@6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} + gifwrap@0.10.1: + resolution: {integrity: sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw==} - npm-run-path@2.0.2: - resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} - engines: {node: '>=4'} + git-raw-commits@4.0.0: + resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} + engines: {node: '>=16'} + hasBin: true - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} + github-url-to-object@4.0.6: + resolution: {integrity: sha512-NaqbYHMUAlPcmWFdrAB7bcxrNIiiJWJe8s/2+iOc9vlcHlwHqSGrPk+Yi3nu6ebTwgsZEa7igz+NH2vEq3gYwQ==} - npm-run-path@5.3.0: - resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} - object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} + glob@11.0.1: + resolution: {integrity: sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==} + engines: {node: 20 || >=22} + hasBin: true - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported - object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} - engines: {node: '>= 0.4'} + glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} + global-agent@3.0.0: + resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} + engines: {node: '>=10.0'} - object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} + global-directory@4.0.1: + resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} + engines: {node: '>=18'} - object.values@1.2.1: - resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} - engines: {node: '>= 0.4'} + global-dirs@3.0.1: + resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} + engines: {node: '>=10'} - omggif@1.0.10: - resolution: {integrity: sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==} + global@4.4.0: + resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} - on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} - onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} - openai@4.85.1: - resolution: {integrity: sha512-jkX2fntHljUvSH3MkWh4jShl10oNkb+SsCj4auKlbu2oF4KWAnmHLNR5EpnUHK1ZNW05Rp0fjbJzYwQzMsH8ZA==} - hasBin: true - peerDependencies: - ws: ^8.18.0 - zod: ^3.23.8 - peerDependenciesMeta: - ws: - optional: true - zod: - optional: true + globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - openai@4.87.3: - resolution: {integrity: sha512-d2D54fzMuBYTxMW8wcNmhT1rYKcTfMJ8t+4KjH2KtvYenygITiGBgHoIrzHwnDQWW+C5oCA+ikIR2jgPCFqcKQ==} - hasBin: true + goober@2.1.16: + resolution: {integrity: sha512-erjk19y1U33+XAMe1VTvIONHYoSqE4iS7BYUZfHaqeohLmnC0FdxEh7rQU+6MZ4OajItzjZFSRtVANrQwNq6/g==} peerDependencies: - ws: ^8.18.0 - zod: ^3.23.8 - peerDependenciesMeta: - ws: - optional: true - zod: - optional: true + csstype: ^3.0.10 - opencommit@3.2.5: - resolution: {integrity: sha512-hIleBRrmQh2L8KXzwUZQr2ggM4TABjFlL1iUfinfAVWu3DqIQKDmck9oq1Qq6TYN56kCGTErm9z4uiRNUHqnVw==} - hasBin: true + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} + got@11.8.6: + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} - ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - outdent@0.5.0: - resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + graphql@16.10.0: + resolution: {integrity: sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} - outvariant@1.4.3: - resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} + happy-dom@17.1.1: + resolution: {integrity: sha512-OSTkBlmD/6Do7gCd7nZB5iFq1bF9VQg/iFmjHmxvVX2S1UiOpo6sT+aFNnu3XUsB8hCZb9+GZ0G1g1TaMiAggw==} + engines: {node: '>=18.0.0'} - own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} engines: {node: '>= 0.4'} - p-cancelable@2.1.1: - resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - p-defer@1.0.0: - resolution: {integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==} - engines: {node: '>=4'} + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - p-filter@2.1.0: - resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} - engines: {node: '>=8'} + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} - p-finally@1.0.0: - resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} - engines: {node: '>=4'} + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} - p-is-promise@2.1.0: - resolution: {integrity: sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==} - engines: {node: '>=6'} + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} - p-limit@1.3.0: - resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} - engines: {node: '>=4'} + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} - p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + hast-util-from-dom@5.0.1: + resolution: {integrity: sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==} - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + hast-util-from-html-isomorphic@2.0.0: + resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==} - p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hast-util-from-html@2.0.3: + resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} - p-locate@2.0.0: - resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} - engines: {node: '>=4'} + hast-util-from-parse5@8.0.3: + resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} - p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} + hast-util-is-element@3.0.0: + resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + hast-util-parse-selector@2.2.5: + resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} - p-locate@6.0.0: - resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} - p-map@2.1.0: - resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} - engines: {node: '>=6'} + hast-util-to-jsx-runtime@2.3.6: + resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} - p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} + hast-util-to-text@4.0.2: + resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} - p-queue@6.6.2: - resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} - engines: {node: '>=8'} + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - p-retry@4.6.2: - resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} - engines: {node: '>=8'} + hastscript@6.0.0: + resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} - p-timeout@3.2.0: - resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} - engines: {node: '>=8'} + hastscript@9.0.1: + resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} - p-try@1.0.0: - resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} - engines: {node: '>=4'} + headers-polyfill@4.0.3: + resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} - p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} + highlight.js@10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} - pac-proxy-agent@7.2.0: - resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} - engines: {node: '>= 14'} + hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - pac-resolver@7.0.1: - resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} - engines: {node: '>= 14'} + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} - package-manager-detector@0.2.9: - resolution: {integrity: sha512-+vYvA/Y31l8Zk8dwxHhL3JfTuHPm6tlxM2A3GeQyl7ovYnSp1+mzAxClxaOr0qO1TtPxbQxetI7v5XqKLJZk7Q==} + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - pako@1.0.11: - resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + html-url-attributes@3.0.1: + resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==} - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - parse-author@2.0.0: - resolution: {integrity: sha512-yx5DfvkN8JsHL2xk2Os9oTia467qnvRgey4ahSm2X8epehBLx/gWLcy5KI+Y36ful5DzGbCS6RazqZGgy1gHNw==} - engines: {node: '>=0.10.0'} + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} - parse-bmfont-ascii@1.0.6: - resolution: {integrity: sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==} + http-proxy-agent@5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} - parse-bmfont-binary@1.0.6: - resolution: {integrity: sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==} + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} - parse-bmfont-xml@1.1.6: - resolution: {integrity: sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==} + http2-wrapper@1.0.3: + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} - parse-color@1.0.0: - resolution: {integrity: sha512-fuDHYgFHJGbpGMgw9skY/bj3HL/Jrn4l/5rSspy00DoT4RyLnDcRvPxdZ+r6OFwIsgAuhDh4I09tAId4mI12bw==} + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} - parse-headers@2.0.5: - resolution: {integrity: sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==} + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} - parse-json@2.2.0: - resolution: {integrity: sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==} - engines: {node: '>=0.10.0'} + human-id@1.0.2: + resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} - parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} + human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} - path-exists@3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} + husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} + engines: {node: '>=18'} + hasBin: true - path-exists@5.0.0: - resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hyphenate-style-name@1.1.0: + resolution: {integrity: sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==} - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} - path-key@2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} - engines: {node: '>=4'} + iconv-lite@0.5.2: + resolution: {integrity: sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==} + engines: {node: '>=0.10.0'} - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} - path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} + image-q@4.0.0: + resolution: {integrity: sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==} - path-scurry@2.0.0: - resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} - engines: {node: 20 || >=22} + image-size@0.7.5: + resolution: {integrity: sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g==} + engines: {node: '>=6.9.0'} + hasBin: true - path-to-regexp@0.1.12: - resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - path-to-regexp@6.3.0: - resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + immutable@5.0.3: + resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==} - path-to-regexp@8.2.0: - resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} - engines: {node: '>=16'} + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} - path-type@2.0.0: - resolution: {integrity: sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ==} - engines: {node: '>=4'} + import-meta-resolve@4.1.0: + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} + imul@1.0.1: + resolution: {integrity: sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==} + engines: {node: '>=0.10.0'} - pathe@2.0.3: - resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} - pathval@2.0.0: - resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} - engines: {node: '>= 14.16'} + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} - pe-library@1.0.1: - resolution: {integrity: sha512-nh39Mo1eGWmZS7y+mK/dQIqg7S1lp38DpRxkyoHf0ZcUs/HDc+yyTjuOtTvSMZHmfSLuSQaX945u05Y2Q6UWZg==} - engines: {node: '>=14', npm: '>=7'} + infer-owner@1.0.4: + resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} - peek-readable@4.1.0: - resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==} - engines: {node: '>=8'} + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - phin@3.7.1: - resolution: {integrity: sha512-GEazpTWwTZaEQ9RhL7Nyz0WwqilbqgLahDM3D0hxWwmVDI52nXEybHqiN6/elwpkJBhcuj+WbBu+QfT0uhPGfQ==} - engines: {node: '>= 8'} + ini@2.0.0: + resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} + engines: {node: '>=10'} - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + ini@3.0.1: + resolution: {integrity: sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} + ini@4.1.1: + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} - engines: {node: '>=12'} + inline-style-parser@0.2.4: + resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} - pidtree@0.6.0: - resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} - engines: {node: '>=0.10'} - hasBin: true + inline-style-prefixer@7.0.1: + resolution: {integrity: sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw==} - pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} + inquirer@9.3.7: + resolution: {integrity: sha512-LJKFHCSeIRq9hanN14IlOtPSTe3lNES7TYDTE2xxdAy1LS5rYphajK1qtwvj3YmQXvvk0U2Vbmcni8P9EIQW9w==} + engines: {node: '>=18'} - pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} - engines: {node: '>=6'} + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} - pixelmatch@4.0.2: - resolution: {integrity: sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==} - hasBin: true + interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} - pixelmatch@5.3.0: - resolution: {integrity: sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q==} - hasBin: true + interpret@3.1.1: + resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} + engines: {node: '>=10.13.0'} - pkce-challenge@4.1.0: - resolution: {integrity: sha512-ZBmhE1C9LcPoH9XZSdwiPtbPHZROwAnMy+kIFQVrnMCxY4Cudlz3gBOpzilgc0jOgRaiT3sIWfpMomW2ar2orQ==} - engines: {node: '>=16.20.0'} + intl-messageformat@10.7.15: + resolution: {integrity: sha512-LRyExsEsefQSBjU2p47oAheoKz+EOJxSLDdjOaEjdriajfHsMXOmV/EhMvYSg9bAgCUHasuAC+mcUBe/95PfIg==} - playwright-core@1.50.1: - resolution: {integrity: sha512-ra9fsNWayuYumt+NiM069M6OkcRb1FZSK8bgi66AtpFoWkg2+y0bJSNmkFrWhMbEBbVKC/EruAHH3g0zmtwGmQ==} - engines: {node: '>=18'} - hasBin: true + ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} - playwright@1.50.1: - resolution: {integrity: sha512-G8rwsOQJ63XG6BbKj2w5rHeavFjy5zynBA9zsJMMtBoe/Uf757oG12NXz6e6OirF7RCrTVAKFXbLmn1RbL7Qaw==} - engines: {node: '>=18'} - hasBin: true + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} - plist@3.1.0: - resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} - engines: {node: '>=10.4.0'} + is-alphabetical@1.0.4: + resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} - pngjs@3.4.0: - resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==} - engines: {node: '>=4.0.0'} + is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} - pngjs@6.0.0: - resolution: {integrity: sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==} - engines: {node: '>=12.13.0'} + is-alphanumerical@1.0.4: + resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} - pngjs@7.0.0: - resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==} - engines: {node: '>=14.19.0'} + is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} - possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} engines: {node: '>= 0.4'} - postcss@8.5.2: - resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} - engines: {node: ^10 || ^12 || >=14} + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - postject@1.0.0-alpha.6: - resolution: {integrity: sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A==} - engines: {node: '>=14.0.0'} - hasBin: true + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} - prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} - prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} - hasBin: true + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} - prettier@3.5.0: - resolution: {integrity: sha512-quyMrVt6svPS7CjQ9gKb3GLEX/rl3BCL2oa/QkNcXv4YNVBC9olt3s+H7ukto06q7B1Qz46PbrKLO34PR6vXcA==} - engines: {node: '>=14'} - hasBin: true + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} - pretty-format@27.5.1: - resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} - proc-log@2.0.1: - resolution: {integrity: sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} - process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} - process@0.11.10: - resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} - engines: {node: '>= 0.6.0'} + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} - progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} + is-decimal@1.0.4: + resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} - promise-inflight@1.0.1: - resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} - peerDependencies: - bluebird: '*' - peerDependenciesMeta: - bluebird: - optional: true + is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} - promise-retry@2.0.1: - resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} - engines: {node: '>=10'} + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} - proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} - proxy-agent@6.5.0: - resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} - engines: {node: '>= 14'} + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} - psl@1.15.0: - resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} + is-function@1.0.2: + resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} - pump@3.0.2: - resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + engines: {node: '>= 0.4'} - punycode.js@2.3.1: - resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} - engines: {node: '>=6'} + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} + is-hexadecimal@1.0.4: + resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} - puppeteer-core@24.1.1: - resolution: {integrity: sha512-7FF3gq6bpIsbq3I8mfbodXh3DCzXagoz3l2eGv1cXooYU4g0P4mcHQVHuBD4iSZPXNg8WjzlP5kmRwK9UvwF0A==} - engines: {node: '>=18'} + is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} - qs@6.13.0: - resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} - engines: {node: '>=0.6'} + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} - qs@6.13.1: - resolution: {integrity: sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==} - engines: {node: '>=0.6'} + is-lambda@1.0.1: + resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} - qs@6.14.0: - resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} - engines: {node: '>=0.6'} + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} - querystringify@2.2.0: - resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + is-my-ip-valid@1.0.1: + resolution: {integrity: sha512-jxc8cBcOWbNK2i2aTkCZP6i7wkHF1bqKFrwEHuN5Jtg5BSaZHUZQ/JTOJwoV41YvHnOaRyWWh72T/KvfNz9DJg==} - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + is-my-json-valid@2.20.6: + resolution: {integrity: sha512-1JQwulVNjx8UqkPE/bqDaxtH4PXCe/2VRh/y3p99heOV87HG4Id5/VfDswd+YiAfHcRTfDlWgISycnHuhZq1aw==} - quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} + is-node-process@1.2.0: + resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} - random-path@0.1.2: - resolution: {integrity: sha512-4jY0yoEaQ5v9StCl5kZbNIQlg1QheIDBrdkDn53EynpPb9FgO6//p3X/tgMnrC45XN6QZCzU1Xz/+pSSsJBpRw==} + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} - range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} - raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} - engines: {node: '>= 0.8'} + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} - raw-body@3.0.0: - resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} - engines: {node: '>= 0.8'} + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} - react-clientside-effect@1.2.7: - resolution: {integrity: sha512-gce9m0Pk/xYYMEojRI9bgvqQAkl6hm7ozQvqWPyQx+kULiatdHgkNM1QG4DQRx5N9BAzWSCJmt9mMV8/KsdgVg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} - react-dom@18.3.1: - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} - peerDependencies: - react: ^18.3.1 + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} - react-fast-compare@2.0.4: - resolution: {integrity: sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==} + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - react-fast-compare@3.2.2: - resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} - react-focus-lock@2.13.6: - resolution: {integrity: sha512-ehylFFWyYtBKXjAO9+3v8d0i+cnc1trGS0vlTGhzFW1vbFXVUTmR8s2tt/ZQG8x5hElg6rhENlLG1H3EZK0Llg==} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true + is-property@1.0.2: + resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} - react-icons@5.4.0: - resolution: {integrity: sha512-7eltJxgVt7X64oHh6wSWNwwbKTCtMfK35hcjvJS0yxEAhPM8oUKdS3+kqaW1vicIltw+kR2unHaa12S9pPALoQ==} - peerDependencies: - react: '*' + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} - react-is@17.0.2: - resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} - react-refresh@0.14.2: - resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + is-stream@1.1.0: + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} engines: {node: '>=0.10.0'} - react-remove-scroll-bar@2.3.8: - resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@types/react': - optional: true + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} - react-remove-scroll@2.6.3: - resolution: {integrity: sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - react-router@7.1.5: - resolution: {integrity: sha512-8BUF+hZEU4/z/JD201yK6S+UYhsf58bzYIDq2NS1iGpwxSXDu7F+DeGSkIXMFBuHZB21FSiCzEcUb18cQNdRkA==} - engines: {node: '>=20.0.0'} - peerDependencies: - react: '>=18' - react-dom: '>=18' - peerDependenciesMeta: - react-dom: - optional: true + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} - react-style-singleton@2.2.3: - resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true + is-subdir@1.2.0: + resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} + engines: {node: '>=4'} - react-universal-interface@0.6.2: - resolution: {integrity: sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==} - peerDependencies: - react: '*' - tslib: '*' + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} - react-use@17.6.0: - resolution: {integrity: sha512-OmedEScUMKFfzn1Ir8dBxiLLSOzhKe/dPZwVxcujweSj45aNM7BEGPb9BEVIgVEqEXx6f3/TsXzwIktNgUR02g==} - peerDependencies: - react: '*' - react-dom: '*' + is-text-path@2.0.0: + resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} + engines: {node: '>=8'} - react@18.3.1: - resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-url@1.2.4: + resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} - read-binary-file-arch@1.0.6: - resolution: {integrity: sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==} - hasBin: true + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} - read-pkg-up@2.0.0: - resolution: {integrity: sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w==} - engines: {node: '>=4'} + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - read-pkg@2.0.0: - resolution: {integrity: sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA==} - engines: {node: '>=4'} + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - read-yaml-file@1.1.0: - resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} - engines: {node: '>=6'} + isbinaryfile@4.0.10: + resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} + engines: {node: '>= 8.0.0'} - readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} + isomorphic-fetch@3.0.0: + resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==} - readable-stream@4.7.0: - resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + isomorphic-rslog@0.0.6: + resolution: {integrity: sha512-HM0q6XqQ93psDlqvuViNs/Ea3hAyGDkIdVAHlrEocjjAwGrs1fZ+EdQjS9eUPacnYB7Y8SoDdSY3H8p3ce205A==} + engines: {node: '>=14.17.6'} - readable-web-to-node-stream@3.0.3: - resolution: {integrity: sha512-In3boYjBnbGVrLuuRu/Ath/H6h1jgk30nAsk/71tCare1dTVoe1oMBGRn5LGf0n3c1BcHwwAqpraxX4AUAP5KA==} + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} - rechoir@0.6.2: - resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} - engines: {node: '>= 0.10'} - - rechoir@0.8.0: - resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} - engines: {node: '>= 10.13.0'} + istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} - regenerator-runtime@0.13.11: - resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + istanbul-lib-source-maps@5.0.6: + resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} + engines: {node: '>=10'} - regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} - regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + iterator.prototype@1.1.5: + resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} engines: {node: '>= 0.4'} - repeat-string@1.6.1: - resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} - engines: {node: '>=0.10'} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} + jackspeak@4.0.3: + resolution: {integrity: sha512-oSwM7q8PTHQWuZAlp995iPpPJ4Vkl7qT0ZRD+9duL9j2oBy6KcTfyxc8mEuHJYC+z/kbps80aJLkaNzTOrf/kw==} + engines: {node: 20 || >=22} - require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} + javascript-natural-sort@0.7.1: + resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==} - requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + jimp@0.22.10: + resolution: {integrity: sha512-lCaHIJAgTOsplyJzC1w/laxSxrbSsEBw4byKwXgUdMmh+ayPsnidTblenQm+IvhIs44Gcuvlb6pd2LQ0wcKaKg==} - resedit@2.0.3: - resolution: {integrity: sha512-oTeemxwoMuxxTYxXUwjkrOPfngTQehlv0/HoYFNkB4uzsP1Un1A9nI8JQKGOFkxpqkC7qkMs0lUsGrvUlbLNUA==} - engines: {node: '>=14', npm: '>=7'} + jimp@1.6.0: + resolution: {integrity: sha512-YcwCHw1kiqEeI5xRpDlPPBGL2EOpBKLwO4yIBJcXWHPj5PnA5urGq0jbyhM5KoNpypQ6VboSoxc9D8HyfvngSg==} + engines: {node: '>=18'} - resize-observer-polyfill@1.5.1: - resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + hasBin: true - resolve-alpn@1.2.1: - resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} + jotai@2.12.2: + resolution: {integrity: sha512-oN8715y7MkjXlSrpyjlR887TOuc/NLZMs9gvgtfWH/JP47ChwO0lR2ijSwBvPMYyXRAPT+liIAhuBavluKGgtA==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=17.0.0' + react: '>=17.0.0' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true - resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} + jpeg-js@0.4.4: + resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==} - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + js-cookie@2.2.1: + resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==} - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} - engines: {node: '>= 0.4'} + js-tiktoken@1.0.19: + resolution: {integrity: sha512-XC63YQeEcS47Y53gg950xiZ4IWmkfMe4p2V9OSaBt26q+p47WHn18izuXzSclCI73B7yGqtfRsT6jcZQI0y08g==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - responselike@2.0.1: - resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} + jsdom@26.0.0: + resolution: {integrity: sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^3.0.0 + peerDependenciesMeta: + canvas: + optional: true - restore-cursor@4.0.0: - resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true - retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - rfdc@1.4.1: - resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - rimraf@2.6.3: - resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true + json-schema-typed@8.0.1: + resolution: {integrity: sha512-XQmWYj2Sm4kn4WeTYvmpKEbyPsL7nBsb647c7pMe6l02/yx2+Jfc4dT6UZkEXnIUb5LhD55r2HPsJ1milQ4rDg==} - rimraf@2.7.1: - resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - rimraf@4.1.0: - resolution: {integrity: sha512-ZJdkUR5/dRrRJHdcSKJLrpRn6tVjl9ALxd4yrTCxFsMpjQNzwHF6GLqMsuEzEYIXxHlFPDSk21Vr8VPuFBEz0g==} - engines: {node: '>=14'} - deprecated: Please upgrade to 4.3.1 or higher to fix a potentially damaging issue regarding symbolic link following. See https://github.com/isaacs/rimraf/issues/259 for details. + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true - rimraf@6.0.1: - resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} - engines: {node: 20 || >=22} + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} hasBin: true - roarr@2.15.4: - resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} - engines: {node: '>=8.0'} + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - rollup@4.34.6: - resolution: {integrity: sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - router@2.1.0: - resolution: {integrity: sha512-/m/NSLxeYEgWNtyC+WtNHCF7jbGxOibVWKnn+1Psff4dJGOfoXP+MuC/f2CwSmyiHdOIzYnYFp4W6GxWfekaLA==} - engines: {node: '>= 18'} + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} - rsbuild-plugin-dts@0.5.3: - resolution: {integrity: sha512-NLy2oKyStcM89CwSdgQUu10BlNTpZieshGj7p7w/sge9VM7aADp8mUqo86bDKX4ITMMACLTO6Q/VQmp9B/1tMg==} - engines: {node: '>=16.7.0'} - peerDependencies: - '@microsoft/api-extractor': ^7 - '@rsbuild/core': 1.x - typescript: ^5 - peerDependenciesMeta: - '@microsoft/api-extractor': - optional: true - typescript: - optional: true + jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} - rsbuild-plugin-dts@0.5.4: - resolution: {integrity: sha512-8z4gC7/vj2acLb5zdkgQ4N6l4EnFqC16x3tcqkkpsv/C+2W2Jyr6SKHRWbfWrki/hiv9K5WansHlsmL7TKC+BQ==} - engines: {node: '>=16.7.0'} - peerDependencies: - '@microsoft/api-extractor': ^7 - '@rsbuild/core': 1.x - typescript: ^5 - peerDependenciesMeta: - '@microsoft/api-extractor': - optional: true - typescript: - optional: true + jsonrepair@3.12.0: + resolution: {integrity: sha512-SWfjz8SuQ0wZjwsxtSJ3Zy8vvLg6aO/kxcp9TWNPGwJKgTZVfhNEQBMk/vPOpYCDFWRxD6QWuI6IHR1t615f0w==} + hasBin: true - rtl-css-js@1.16.1: - resolution: {integrity: sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==} + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} - run-async@3.0.0: - resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} - engines: {node: '>=0.12.0'} + jszip@3.10.1: + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + junk@3.1.0: + resolution: {integrity: sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==} + engines: {node: '>=8'} - rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + katex@0.16.21: + resolution: {integrity: sha512-XvqR7FgOHtWupfMiigNzmh+MgUVmDGU2kXZm899ZkPfcuoPuFxyHmXsgATDpFZDAXCI8tvinaVcDo8PIIJSo4A==} + hasBin: true - safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} - engines: {node: '>=0.4'} + keyboardevent-from-electron-accelerator@2.0.0: + resolution: {integrity: sha512-iQcmNA0M4ETMNi0kG/q0h/43wZk7rMeKYrXP7sqKIJbHkTU8Koowgzv+ieR/vWJbOwxx5nDC3UnudZ0aLSu4VA==} - safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + keyboardevents-areequal@0.2.2: + resolution: {integrity: sha512-Nv+Kr33T0mEjxR500q+I6IWisOQ0lK1GGOncV0kWE6n4KFmpcu7RUX5/2B0EUtX51Cb0HjZ9VJsSY3u4cBa0kw==} - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} + langsmith@0.3.14: + resolution: {integrity: sha512-MzoxdRkFFV/6140vpP5V2e2fkTG6x/0zIjw77bsRwAXEMjPRTUyDazfXeSyrS5uJvbLgxAXc+MF1h6vPWe6SXQ==} + peerDependencies: + openai: '*' + peerDependenciesMeta: + openai: + optional: true - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + lie@3.1.1: + resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} - sass-embedded-android-arm64@1.83.4: - resolution: {integrity: sha512-tgX4FzmbVqnQmD67ZxQDvI+qFNABrboOQgwsG05E5bA/US42zGajW9AxpECJYiMXVOHmg+d81ICbjb0fsVHskw==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [android] + lie@3.3.0: + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} - sass-embedded-android-arm@1.83.4: - resolution: {integrity: sha512-9Z4pJAOgEkXa3VDY/o+U6l5XvV0mZTJcSl0l/mSPHihjAHSpLYnOW6+KOWeM8dxqrsqTYcd6COzhanI/a++5Gw==} - engines: {node: '>=14.0.0'} - cpu: [arm] - os: [android] + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} - sass-embedded-android-ia32@1.83.4: - resolution: {integrity: sha512-RsFOziFqPcfZXdFRULC4Ayzy9aK6R6FwQ411broCjlOBX+b0gurjRadkue3cfUEUR5mmy0KeCbp7zVKPLTK+5Q==} - engines: {node: '>=14.0.0'} - cpu: [ia32] - os: [android] + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} - sass-embedded-android-riscv64@1.83.4: - resolution: {integrity: sha512-EHwh0nmQarBBrMRU928eTZkFGx19k/XW2YwbPR4gBVdWLkbTgCA5aGe8hTE6/1zStyx++3nDGvTZ78+b/VvvLg==} - engines: {node: '>=14.0.0'} - cpu: [riscv64] - os: [android] + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - sass-embedded-android-x64@1.83.4: - resolution: {integrity: sha512-0PgQNuPWYy1jEOEPDVsV89KfqOsMLIp9CSbjBY7jRcwRhyVAcigqrUG6bDeNtojHUYKA1kU+Eh/85WxOHUOgBw==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [android] + linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - sass-embedded-darwin-arm64@1.83.4: - resolution: {integrity: sha512-rp2ywymWc3nymnSnAFG5R/8hvxWCsuhK3wOnD10IDlmNB7o4rzKby1c+2ZfpQGowlYGWsWWTgz8FW2qzmZsQRw==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [darwin] + lint-staged@14.0.1: + resolution: {integrity: sha512-Mw0cL6HXnHN1ag0mN/Dg4g6sr8uf8sn98w2Oc1ECtFto9tvRF7nkXGJRbx8gPlHyoR0pLyBr2lQHbWwmUHe1Sw==} + engines: {node: ^16.14.0 || >=18.0.0} + hasBin: true - sass-embedded-darwin-x64@1.83.4: - resolution: {integrity: sha512-kLkN2lXz9PCgGfDS8Ev5YVcl/V2173L6379en/CaFuJJi7WiyPgBymW7hOmfCt4uO4R1y7CP2Uc08DRtZsBlAA==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [darwin] + listr2@6.6.1: + resolution: {integrity: sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==} + engines: {node: '>=16.0.0'} + peerDependencies: + enquirer: '>= 2.3.0 < 3' + peerDependenciesMeta: + enquirer: + optional: true - sass-embedded-linux-arm64@1.83.4: - resolution: {integrity: sha512-E0zjsZX2HgESwyqw31EHtI39DKa7RgK7nvIhIRco1d0QEw227WnoR9pjH3M/ZQy4gQj3GKilOFHM5Krs/omeIA==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [linux] + listr2@7.0.2: + resolution: {integrity: sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g==} + engines: {node: '>=16.0.0'} - sass-embedded-linux-arm@1.83.4: - resolution: {integrity: sha512-nL90ryxX2lNmFucr9jYUyHHx21AoAgdCL1O5Ltx2rKg2xTdytAGHYo2MT5S0LIeKLa/yKP/hjuSvrbICYNDvtA==} - engines: {node: '>=14.0.0'} - cpu: [arm] - os: [linux] + load-bmfont@1.4.2: + resolution: {integrity: sha512-qElWkmjW9Oq1F9EI5Gt7aD9zcdHb9spJCW1L/dmPf7KzCCEJxq8nhHz5eCgI9aMf7vrG/wyaCqdsI+Iy9ZTlog==} - sass-embedded-linux-ia32@1.83.4: - resolution: {integrity: sha512-ew5HpchSzgAYbQoriRh8QhlWn5Kw2nQ2jHoV9YLwGKe3fwwOWA0KDedssvDv7FWnY/FCqXyymhLd6Bxae4Xquw==} - engines: {node: '>=14.0.0'} - cpu: [ia32] - os: [linux] + load-json-file@2.0.0: + resolution: {integrity: sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ==} + engines: {node: '>=4'} - sass-embedded-linux-musl-arm64@1.83.4: - resolution: {integrity: sha512-IzMgalf6MZOxgp4AVCgsaWAFDP/IVWOrgVXxkyhw29fyAEoSWBJH4k87wyPhEtxSuzVHLxKNbc8k3UzdWmlBFg==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [linux] + localforage@1.10.0: + resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} - sass-embedded-linux-musl-arm@1.83.4: - resolution: {integrity: sha512-0RrJRwMrmm+gG0VOB5b5Cjs7Sd+lhqpQJa6EJNEaZHljJokEfpE5GejZsGMRMIQLxEvVphZnnxl6sonCGFE/QQ==} - engines: {node: '>=14.0.0'} - cpu: [arm] - os: [linux] + locate-path@2.0.0: + resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} + engines: {node: '>=4'} - sass-embedded-linux-musl-ia32@1.83.4: - resolution: {integrity: sha512-LLb4lYbcxPzX4UaJymYXC+WwokxUlfTJEFUv5VF0OTuSsHAGNRs/rslPtzVBTvMeG9TtlOQDhku1F7G6iaDotA==} - engines: {node: '>=14.0.0'} - cpu: [ia32] - os: [linux] + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} - sass-embedded-linux-musl-riscv64@1.83.4: - resolution: {integrity: sha512-zoKlPzD5Z13HKin1UGR74QkEy+kZEk2AkGX5RelRG494mi+IWwRuWCppXIovor9+BQb9eDWPYPoMVahwN5F7VA==} - engines: {node: '>=14.0.0'} - cpu: [riscv64] - os: [linux] + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} - sass-embedded-linux-musl-x64@1.83.4: - resolution: {integrity: sha512-hB8+/PYhfEf2zTIcidO5Bpof9trK6WJjZ4T8g2MrxQh8REVtdPcgIkoxczRynqybf9+fbqbUwzXtiUao2GV+vQ==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [linux] + locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - sass-embedded-linux-riscv64@1.83.4: - resolution: {integrity: sha512-83fL4n+oeDJ0Y4KjASmZ9jHS1Vl9ESVQYHMhJE0i4xDi/P3BNarm2rsKljq/QtrwGpbqwn8ujzOu7DsNCMDSHA==} - engines: {node: '>=14.0.0'} - cpu: [riscv64] - os: [linux] + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} - sass-embedded-linux-x64@1.83.4: - resolution: {integrity: sha512-NlnGdvCmTD5PK+LKXlK3sAuxOgbRIEoZfnHvxd157imCm/s2SYF/R28D0DAAjEViyI8DovIWghgbcqwuertXsA==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [linux] + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - sass-embedded-win32-arm64@1.83.4: - resolution: {integrity: sha512-J2BFKrEaeSrVazU2qTjyQdAk+MvbzJeTuCET0uAJEXSKtvQ3AzxvzndS7LqkDPbF32eXAHLw8GVpwcBwKbB3Uw==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [win32] + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - sass-embedded-win32-ia32@1.83.4: - resolution: {integrity: sha512-uPAe9T/5sANFhJS5dcfAOhOJy8/l2TRYG4r+UO3Wp4yhqbN7bggPvY9c7zMYS0OC8tU/bCvfYUDFHYMCl91FgA==} - engines: {node: '>=14.0.0'} - cpu: [ia32] - os: [win32] + lodash.foreach@4.5.0: + resolution: {integrity: sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==} - sass-embedded-win32-x64@1.83.4: - resolution: {integrity: sha512-C9fkDY0jKITdJFij4UbfPFswxoXN9O/Dr79v17fJnstVwtUojzVJWKHUXvF0Zg2LIR7TCc4ju3adejKFxj7ueA==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [win32] + lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. - sass-embedded@1.83.4: - resolution: {integrity: sha512-Hf2burRA/y5PGxsg6jB9UpoK/xZ6g/pgrkOcdl6j+rRg1Zj8XhGKZ1MTysZGtTPUUmiiErqzkP5+Kzp95yv9GQ==} - engines: {node: '>=16.0.0'} - hasBin: true + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - sax@1.4.1: - resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + lodash.kebabcase@4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} - scheduler@0.23.2: - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + lodash.mapkeys@4.6.0: + resolution: {integrity: sha512-0Al+hxpYvONWtg+ZqHpa/GaVzxuN3V7Xeo2p+bY06EaK/n+Y9R7nBePPN2o1LxmL0TWQSwP8LYZ008/hc9JzhA==} - screenfull@5.2.0: - resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==} - engines: {node: '>=0.10.0'} + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - semver-compare@1.0.0: - resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} + lodash.mergewith@4.6.2: + resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} - semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true + lodash.omit@4.5.0: + resolution: {integrity: sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==} + deprecated: This package is deprecated. Use destructuring assignment syntax instead. - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true + lodash.snakecase@4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} - semver@7.7.1: - resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} - engines: {node: '>=10'} - hasBin: true + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - send@0.19.0: - resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} - engines: {node: '>= 0.8.0'} + lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - send@1.1.0: - resolution: {integrity: sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA==} - engines: {node: '>= 18'} + lodash.upperfirst@4.3.1: + resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} - serialize-error@7.0.1: - resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} - serve-static@1.16.2: - resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} - engines: {node: '>= 0.8.0'} + log-update@5.0.1: + resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - serve-static@2.1.0: - resolution: {integrity: sha512-A3We5UfEjG8Z7VkDv6uItWw6HY2bBSBJT1KtVESn6EOoOr2jAxNhxWCLY3jDE2WcuHXByWju74ck3ZgLwL8xmA==} - engines: {node: '>= 18'} + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - set-cookie-parser@2.7.1: - resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} + loupe@3.1.3: + resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} + lowercase-keys@2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} - set-harmonic-interval@1.0.1: - resolution: {integrity: sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==} - engines: {node: '>=6.9'} + lowlight@1.20.0: + resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==} - set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - setimmediate@1.0.5: - resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + lru-cache@11.0.2: + resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==} + engines: {node: 20 || >=22} - setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - sharp@0.33.3: - resolution: {integrity: sha512-vHUeXJU1UvlO/BNwTpT0x/r53WkLUVxrmb5JTgW92fdFCFk0ispLMAeu/jPO2vjkXM1fYUi3K7/qcLF47pwM1A==} - engines: {libvips: '>=8.15.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0} + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} - shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} + lucide-react@0.479.0: + resolution: {integrity: sha512-aBhNnveRhorBOK7uA4gDjgaf+YlHMdMhQ/3cupk6exM10hWlEU+2QtWYOfhXhjAsmdb6LeKR+NZnow4UxRRiTQ==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true - shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} + macos-alias@0.2.12: + resolution: {integrity: sha512-yiLHa7cfJcGRFq4FrR4tMlpNHb4Vy4mWnpajlSSIFM5k4Lv8/7BbbDLzCAVogWNl0LlLhizRp1drXv0hK9h0Yw==} + os: [darwin] - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} + macos-version@5.2.1: + resolution: {integrity: sha512-OHJU8nTNxHYL1FQhD+nZawWgXKXAqDGr4kluLtaqKO4au3cR41y1mKuVShOU5U4rOYiuPanljq6oFGmV2B9DFA==} + engines: {node: '>=6'} - shelljs@0.8.5: - resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} - engines: {node: '>=4'} - hasBin: true + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - shx@0.3.4: - resolution: {integrity: sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==} + magicast@0.3.5: + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + make-fetch-happen@10.2.1: + resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + map-age-cleaner@0.1.3: + resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==} engines: {node: '>=6'} + + markdown-it@14.1.0: + resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} hasBin: true - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} + matcher@3.0.0: + resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} + engines: {node: '>=10'} - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} - siginfo@2.0.0: - resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + mdast-util-from-markdown@2.0.2: + resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} + mdast-util-gfm-footnote@2.1.0: + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} - simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} - simple-wcswidth@1.0.1: - resolution: {integrity: sha512-xMO/8eNREtaROt7tJvWJqHBDTMFN4eiQ5I4JRMuilwfnFcV5W9u7RUkueNkdw0jPqGMX36iCywelS5yilTuOxg==} + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} - simple-xml-to-json@1.2.3: - resolution: {integrity: sha512-kWJDCr9EWtZ+/EYYM5MareWj2cRnZGF93YDNpH4jQiHB+hBIZnfPFSQiVMzZOdk+zXWqTZ/9fTeQNu2DqeiudA==} - engines: {node: '>=20.12.2'} + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} - sirv@3.0.1: - resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==} - engines: {node: '>=18'} + mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} - sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + mdast-util-math@3.0.0: + resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==} - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} + mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} - slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} + mdast-util-mdx-jsx@3.2.0: + resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} - smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} - socks-proxy-agent@7.0.0: - resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} - engines: {node: '>= 10'} + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} - socks-proxy-agent@8.0.5: - resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} - engines: {node: '>= 14'} + mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} - socks@2.8.4: - resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} - source-map@0.5.6: - resolution: {integrity: sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==} - engines: {node: '>=0.10.0'} + mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} - source-map@0.5.7: - resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} - engines: {node: '>=0.10.0'} + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} - spawndamnit@3.0.1: - resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} + medium-zoom@1.1.0: + resolution: {integrity: sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==} - spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + mem@4.3.0: + resolution: {integrity: sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==} + engines: {node: '>=6'} - spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + meow@12.1.1: + resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} + engines: {node: '>=16.10'} - spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} - spdx-license-ids@3.0.21: - resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} - split2@4.2.0: - resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} - engines: {node: '>= 10.x'} + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} - sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} - ssri@9.0.1: - resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} - stack-generator@2.0.10: - resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==} + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} - stackback@0.0.2: - resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} - stackframe@1.3.4: - resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} - stacktrace-gps@3.1.2: - resolution: {integrity: sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==} + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} - stacktrace-js@2.0.2: - resolution: {integrity: sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==} + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} - statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - - std-env@3.8.0: - resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} - stream-buffers@2.2.0: - resolution: {integrity: sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==} - engines: {node: '>= 0.10.0'} + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} - streamx@2.22.0: - resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} + micromark-extension-math@3.1.0: + resolution: {integrity: sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==} - strict-event-emitter@0.5.1: - resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} - string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} - string.prototype.matchall@4.0.12: - resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} - engines: {node: '>= 0.4'} + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} - string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} - string.prototype.trim@1.2.10: - resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} - engines: {node: '>= 0.4'} + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} - string.prototype.trimend@1.0.9: - resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} - engines: {node: '>= 0.4'} + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} - string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} - strip-eof@1.0.0: - resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} - engines: {node: '>=0.10.0'} + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} - strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} - strip-outer@1.0.1: - resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} - engines: {node: '>=0.10.0'} + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} - strnum@1.1.2: - resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==} + micromark@4.0.2: + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} - strtok3@6.3.0: - resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} - engines: {node: '>=10'} + micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} - stubborn-fs@1.2.5: - resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} - stylis@4.2.0: - resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} - stylis@4.3.6: - resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} + mime-db@1.53.0: + resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} + engines: {node: '>= 0.6'} - sudo-prompt@9.2.1: - resolution: {integrity: sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} - sumchecker@3.0.1: - resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==} - engines: {node: '>= 8.0'} + mime-types@3.0.0: + resolution: {integrity: sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w==} + engines: {node: '>= 0.6'} - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true - supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} + mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} - swr@2.3.2: - resolution: {integrity: sha512-RosxFpiabojs75IwQ316DGoDRmOqtiAj0tg8wCcbEu4CiLZBs/a9QNtHV7TUfDXmmlgqij/NqzKq/eLelyv9xA==} - peerDependencies: - react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} - sync-child-process@1.0.2: - resolution: {integrity: sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==} - engines: {node: '>=16.0.0'} + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} - sync-message-port@1.1.3: - resolution: {integrity: sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==} - engines: {node: '>=16.0.0'} + mimic-response@1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} - synckit@0.9.2: - resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} - engines: {node: ^14.18.0 || >=16.0.0} + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} - tailwind-merge@2.5.5: - resolution: {integrity: sha512-0LXunzzAZzo0tEPxV3I297ffKZPlKDrjj7NXphC8V5ak9yHC5zRmxnOe2m/Rd/7ivsOMJe3JZ2JVocoDdQTRBA==} + min-document@2.19.0: + resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} - tar-fs@3.0.8: - resolution: {integrity: sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==} + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} - tar-stream@3.1.7: - resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - tar@6.2.1: - resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} - temp@0.9.4: - resolution: {integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==} - engines: {node: '>=6.0.0'} + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} - term-size@2.2.1: - resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} - engines: {node: '>=8'} + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - terminal-columns@1.4.1: - resolution: {integrity: sha512-IKVL/itiMy947XWVv4IHV7a0KQXvKjj4ptbi7Ew9MPMcOLzkiQeyx3Gyvh62hKrfJ0RZc4M1nbhzjNM39Kyujw==} + minipass-collect@1.0.2: + resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} + engines: {node: '>= 8'} - test-exclude@7.0.1: - resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} - engines: {node: '>=18'} + minipass-fetch@2.1.2: + resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - text-decoder@1.2.3: - resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + minipass-flush@1.0.5: + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} - text-extensions@2.4.0: - resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} + minipass-pipeline@1.2.4: + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} engines: {node: '>=8'} - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + minipass-sized@1.0.3: + resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} + engines: {node: '>=8'} - throttle-debounce@3.0.1: - resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==} - engines: {node: '>=10'} + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} - through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} - timm@1.7.1: - resolution: {integrity: sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==} + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} - tiny-warning@1.0.3: - resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} - tinybench@2.9.0: - resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} - tinycolor2@1.6.0: - resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true - tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true - tinyglobby@0.2.12: - resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} - engines: {node: '>=12.0.0'} + monaco-editor@0.52.2: + resolution: {integrity: sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ==} - tinypool@1.0.2: - resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} - engines: {node: ^18.0.0 || >=20.0.0} + motion-dom@11.18.1: + resolution: {integrity: sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==} - tinyrainbow@2.0.0: - resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} - engines: {node: '>=14.0.0'} + motion-utils@11.18.1: + resolution: {integrity: sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==} - tinyspy@3.0.2: - resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} - engines: {node: '>=14.0.0'} + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} - tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} - tn1150@0.1.0: - resolution: {integrity: sha512-DbplOfQFkqG5IHcDyyrs/lkvSr3mPUVsFf/RbDppOshs22yTPnSJWEe6FkYd1txAwU/zcnR905ar2fi4kwF29w==} - engines: {node: '>=0.12'} + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - to-data-view@1.1.0: - resolution: {integrity: sha512-1eAdufMg6mwgmlojAx3QeMnzB/BTVp7Tbndi3U7ftcT2zCZadjxkkmLmd97zmaxWi+sgGcgWrokmpEoy0Dn0vQ==} + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - toggle-selection@1.0.6: - resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} + msw@2.7.0: + resolution: {integrity: sha512-BIodwZ19RWfCbYTxWTUfTXc+sg4OwjCAgxU1ZsgmggX/7S3LdUifsbUPJs61j0rWb19CZRGY5if77duhc0uXzw==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + typescript: '>= 4.8.x' + peerDependenciesMeta: + typescript: + optional: true - toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} + murmur-32@0.2.0: + resolution: {integrity: sha512-ZkcWZudylwF+ir3Ld1n7gL6bI2mQAzXvSobPwVtu8aYi2sbXeipeSkdcanRLzIofLcM5F53lGaKm2dk7orBi7Q==} - token-types@4.2.1: - resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} - engines: {node: '>=10'} + mustache@4.2.0: + resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true - totalist@3.0.1: - resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} - engines: {node: '>=6'} + mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - tough-cookie@4.1.4: - resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} - engines: {node: '>=6'} + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} - tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - trim-repeated@1.0.0: - resolution: {integrity: sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==} - engines: {node: '>=0.10.0'} + nan@2.22.0: + resolution: {integrity: sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==} - ts-api-utils@1.4.3: - resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} - engines: {node: '>=16'} + nano-css@5.6.2: + resolution: {integrity: sha512-+6bHaC8dSDGALM1HJjOHVXpuastdu2xFoZlC77Jh4cg+33Zcgm+Gxd+1xsnpZK14eyHObSp82+ll5y3SX75liw==} peerDependencies: - typescript: '>=4.2.0' - - ts-easing@0.2.0: - resolution: {integrity: sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==} + react: '*' + react-dom: '*' - ts-node@10.9.2: - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - tsconfck@3.1.5: - resolution: {integrity: sha512-CLDfGgUp7XPswWnezWwsCRxNmgQjhYq3VXHM0/XIRxhVrKw0M1if9agzryh1QS3nxjCROvV+xWxoJO1YctzzWg==} - engines: {node: ^18 || >=20} - hasBin: true - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true + natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - tsconfig-paths@4.2.0: - resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} - engines: {node: '>=6'} + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} - tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} - tslib@2.4.0: - resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + netmask@2.0.2: + resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + engines: {node: '>= 0.4.0'} - tsutils@3.21.0: - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} + new-github-issue-url@0.2.1: + resolution: {integrity: sha512-md4cGoxuT4T4d/HDOXbrUHkTKrp/vp+m3aOA7XXVYwNsUNMK49g3SQicTSeV5GIz/5QVGAeYRAOlyp9OvlgsYA==} + engines: {node: '>=10'} + + nice-try@1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + + node-abi@3.74.0: + resolution: {integrity: sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w==} + engines: {node: '>=10'} + + node-abort-controller@3.1.1: + resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + + node-addon-api@5.0.0: + resolution: {integrity: sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==} + + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + + node-api-version@0.2.0: + resolution: {integrity: sha512-fthTTsi8CxaBXMaBAD7ST2uylwvsnYxh2PfaScwpMhos6KlSFajXQPcM4ogNE1q2s3Lbz9GCGqeIHC+C6OZnKg==} + + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true - tsx@4.19.2: - resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} - engines: {node: '>=18.0.0'} + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true - tsx@4.19.3: - resolution: {integrity: sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==} - engines: {node: '>=18.0.0'} + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + nopt@6.0.0: + resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} hasBin: true - tunnel@0.0.6: - resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} - engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} + normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - turbo-stream@2.4.0: - resolution: {integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==} + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} - turndown-plugin-gfm@1.0.2: - resolution: {integrity: sha512-vwz9tfvF7XN/jE0dGoBei3FXWuvll78ohzCZQuOb+ZjWrs3a0XhQVomJEb2Qh4VHTPNRO4GPZh0V7VRbiWwkRg==} + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} - turndown@7.2.0: - resolution: {integrity: sha512-eCZGBN4nNNqM9Owkv9HAtWRYfLA4h909E/WGAWWBpmB275ehNhZyk87/Tpvjbp0jjNl9XwCsbe6bm6CqFsgD+A==} + normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + npm-run-path@2.0.2: + resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} + engines: {node: '>=4'} - type-fest@0.13.1: - resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} - engines: {node: '>=10'} + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} + nwsapi@2.2.18: + resolution: {integrity: sha512-p1TRH/edngVEHVbwqWnxUViEmq5znDvyB+Sik5cmuLpGOIfDf/39zLiq3swPF8Vakqn+gvNiOQAZu8djYlQILA==} - type-fest@1.4.0: - resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} - engines: {node: '>=10'} + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} - type-fest@4.34.1: - resolution: {integrity: sha512-6kSc32kT0rbwxD6QL1CYe8IqdzN/J/ILMrNK+HMQCKH3insCDRY/3ITb0vcBss0a3t72fzh2YSzj8ko1HgwT3g==} - engines: {node: '>=16'} + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} - type-flag@3.0.0: - resolution: {integrity: sha512-3YaYwMseXCAhBB14RXW5cRQfJQlEknS6i4C8fCfeUdS3ihG9EdccdR9kt3vP73ZdeTGmPb4bZtkDn5XMIn1DLA==} + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} - type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} - type-is@2.0.0: - resolution: {integrity: sha512-gd0sGezQYCbWSbkZr75mln4YBidWUN60+devscpLF5mtRDUpiaTvKpBNrdaCvel1NdR2k6vclXybU5fBd2i+nw==} - engines: {node: '>= 0.6'} + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} - typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} engines: {node: '>= 0.4'} - typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} engines: {node: '>= 0.4'} - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} engines: {node: '>= 0.4'} - typed-array-length@1.0.7: - resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} - typed-query-selector@2.12.0: - resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} + omggif@1.0.10: + resolution: {integrity: sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==} - typescript@4.9.4: - resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==} - engines: {node: '>=4.2.0'} - hasBin: true + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} - typescript@5.7.3: - resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} - engines: {node: '>=14.17'} - hasBin: true + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - uc.micro@2.1.0: - resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} - uint8array-extras@1.4.0: - resolution: {integrity: sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==} - engines: {node: '>=18'} + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} + openai@4.85.1: + resolution: {integrity: sha512-jkX2fntHljUvSH3MkWh4jShl10oNkb+SsCj4auKlbu2oF4KWAnmHLNR5EpnUHK1ZNW05Rp0fjbJzYwQzMsH8ZA==} + hasBin: true + peerDependencies: + ws: ^8.18.0 + zod: ^3.23.8 + peerDependenciesMeta: + ws: + optional: true + zod: + optional: true - unbzip2-stream@1.4.3: - resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + openai@4.87.3: + resolution: {integrity: sha512-d2D54fzMuBYTxMW8wcNmhT1rYKcTfMJ8t+4KjH2KtvYenygITiGBgHoIrzHwnDQWW+C5oCA+ikIR2jgPCFqcKQ==} + hasBin: true + peerDependencies: + ws: ^8.18.0 + zod: ^3.23.8 + peerDependenciesMeta: + ws: + optional: true + zod: + optional: true - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + opencommit@3.2.5: + resolution: {integrity: sha512-hIleBRrmQh2L8KXzwUZQr2ggM4TABjFlL1iUfinfAVWu3DqIQKDmck9oq1Qq6TYN56kCGTErm9z4uiRNUHqnVw==} + hasBin: true - undici-types@6.19.8: - resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} - undici-types@6.20.0: - resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} - undici@5.28.5: - resolution: {integrity: sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==} - engines: {node: '>=14.0'} + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} - unicorn-magic@0.1.0: - resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} - engines: {node: '>=18'} + outdent@0.5.0: + resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} - unique-filename@2.0.1: - resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + outvariant@1.4.3: + resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} - unique-slug@3.0.0: - resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} - universal-user-agent@6.0.1: - resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} + p-cancelable@2.1.1: + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} - universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} + p-defer@1.0.0: + resolution: {integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==} + engines: {node: '>=4'} - universalify@0.2.0: - resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} - engines: {node: '>= 4.0.0'} + p-filter@2.1.0: + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} + engines: {node: '>=8'} - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} + p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} - unorm@1.6.0: - resolution: {integrity: sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==} - engines: {node: '>= 0.4.0'} + p-is-promise@2.1.0: + resolution: {integrity: sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==} + engines: {node: '>=6'} - unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} + p-limit@1.3.0: + resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} + engines: {node: '>=4'} - unzip-crx-3@0.2.0: - resolution: {integrity: sha512-0+JiUq/z7faJ6oifVB5nSwt589v1KCduqIJupNVDoWSXZtWDmjDGO3RAEOvwJ07w90aoXoP4enKsR7ecMrJtWQ==} + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} - update-browserslist-db@1.1.2: - resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} - update-electron-app@3.1.1: - resolution: {integrity: sha512-7duRr6sYn014tifhKgT/5i8N+6xLzmJVJ8hVtNrHXlIDNP6QbRe6VxZ1hSi2UH5oJPzhor/PH7yKU9em5xjRzQ==} + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + p-locate@2.0.0: + resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} + engines: {node: '>=4'} - url-parse@1.5.10: - resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} - use-callback-ref@1.3.3: - resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - use-sidecar@1.1.3: - resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} + p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - use-sync-external-store@1.4.0: - resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + p-queue@6.6.2: + resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} + engines: {node: '>=8'} - username@5.1.0: - resolution: {integrity: sha512-PCKbdWw85JsYMvmCv5GH3kXmM66rCd9m1hBEDutPNv94b/pqCMT4NtcKyeWYvLFiE8b+ha1Jdl8XAaUdPn5QTg==} + p-retry@4.6.2: + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} engines: {node: '>=8'} - utif2@4.1.0: - resolution: {integrity: sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w==} + p-timeout@3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + p-try@1.0.0: + resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} + engines: {node: '>=4'} - utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} - uuid@10.0.0: - resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} - hasBin: true + pac-proxy-agent@7.2.0: + resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} + engines: {node: '>= 14'} - uuid@11.1.0: - resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} - hasBin: true + pac-resolver@7.0.1: + resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} + engines: {node: '>= 14'} - uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + package-manager-detector@0.2.9: + resolution: {integrity: sha512-+vYvA/Y31l8Zk8dwxHhL3JfTuHPm6tlxM2A3GeQyl7ovYnSp1+mzAxClxaOr0qO1TtPxbQxetI7v5XqKLJZk7Q==} - validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} - varint@6.0.0: - resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} - vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} + parse-author@2.0.0: + resolution: {integrity: sha512-yx5DfvkN8JsHL2xk2Os9oTia467qnvRgey4ahSm2X8epehBLx/gWLcy5KI+Y36ful5DzGbCS6RazqZGgy1gHNw==} + engines: {node: '>=0.10.0'} - vite-node@3.0.5: - resolution: {integrity: sha512-02JEJl7SbtwSDJdYS537nU6l+ktdvcREfLksk/NDAqtdKWGqHl+joXzEubHROmS3E6pip+Xgu2tFezMu75jH7A==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true + parse-bmfont-ascii@1.0.6: + resolution: {integrity: sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==} - vite-node@3.0.7: - resolution: {integrity: sha512-2fX0QwX4GkkkpULXdT1Pf4q0tC1i1lFOyseKoonavXUNlQ77KpW2XqBGGNIm/J4Ows4KxgGJzDguYVPKwG/n5A==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true + parse-bmfont-binary@1.0.6: + resolution: {integrity: sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==} - vite-tsconfig-paths@5.1.4: - resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==} - peerDependencies: - vite: '*' - peerDependenciesMeta: - vite: - optional: true + parse-bmfont-xml@1.1.6: + resolution: {integrity: sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==} - vite@5.4.14: - resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true + parse-color@1.0.0: + resolution: {integrity: sha512-fuDHYgFHJGbpGMgw9skY/bj3HL/Jrn4l/5rSspy00DoT4RyLnDcRvPxdZ+r6OFwIsgAuhDh4I09tAId4mI12bw==} - vitest-browser-react@0.1.1: - resolution: {integrity: sha512-n9l+sIAexKqqfBuEkjVGdfZ4xAn1Gn/+wc4Mo8KsUSUOVoM9evSY0rVXdMIzCQqloT/zvmFGAtziFINkqu+t7g==} - engines: {node: ^18.0.0 || >=20.0.0} - peerDependencies: - '@types/react': '>18.0.0' - '@types/react-dom': '>18.0.0' - '@vitest/browser': '>=2.1.0' - react: '>18.0.0' - react-dom: '>18.0.0' - vitest: '>=2.1.0' - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + parse-entities@2.0.0: + resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} - vitest@3.0.5: - resolution: {integrity: sha512-4dof+HvqONw9bvsYxtkfUp2uHsTN9bV2CZIi1pWgoFpL1Lld8LA1ka9q/ONSsoScAKG7NVGf2stJTI7XRkXb2Q==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@types/debug': ^4.1.12 - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.0.5 - '@vitest/ui': 3.0.5 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@types/debug': - optional: true - '@types/node': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true + parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} - vitest@3.0.7: - resolution: {integrity: sha512-IP7gPK3LS3Fvn44x30X1dM9vtawm0aesAa2yBIZ9vQf+qB69NXC5776+Qmcr7ohUXIQuLhk7xQR0aSUIDPqavg==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@types/debug': ^4.1.12 - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.0.7 - '@vitest/ui': 3.0.7 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@types/debug': - optional: true - '@types/node': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true + parse-headers@2.0.5: + resolution: {integrity: sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==} - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + parse-json@2.2.0: + resolution: {integrity: sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==} + engines: {node: '>=0.10.0'} - web-streams-polyfill@3.3.3: - resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} - engines: {node: '>= 8'} + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} - web-streams-polyfill@4.0.0-beta.3: - resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} - engines: {node: '>= 14'} + parse5@7.2.1: + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} - webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} - webidl-conversions@7.0.0: - resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} - engines: {node: '>=12'} + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} - whatwg-fetch@3.6.20: - resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} + path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} - whatwg-mimetype@3.0.0: - resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} - engines: {node: '>=12'} + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} - whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - when-exit@2.1.4: - resolution: {integrity: sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg==} + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} - which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} + path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} - which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} - which-typed-array@1.1.18: - resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} - engines: {node: '>= 0.4'} + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + engines: {node: 20 || >=22} - why-is-node-running@2.3.0: - resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} - engines: {node: '>=8'} - hasBin: true + path-to-regexp@0.1.12: + resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} - wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} + path-to-regexp@8.2.0: + resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} + engines: {node: '>=16'} - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + path-type@2.0.0: + resolution: {integrity: sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ==} + engines: {node: '>=4'} - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - ws@7.5.10: - resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} - ws@8.18.0: - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true + pe-library@1.0.1: + resolution: {integrity: sha512-nh39Mo1eGWmZS7y+mK/dQIqg7S1lp38DpRxkyoHf0ZcUs/HDc+yyTjuOtTvSMZHmfSLuSQaX945u05Y2Q6UWZg==} + engines: {node: '>=14', npm: '>=7'} - xhr@2.6.0: - resolution: {integrity: sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==} + peek-readable@4.1.0: + resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==} + engines: {node: '>=8'} - xml-parse-from-string@1.0.1: - resolution: {integrity: sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==} + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - xml2js@0.5.0: - resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} - engines: {node: '>=4.0.0'} + phin@3.7.1: + resolution: {integrity: sha512-GEazpTWwTZaEQ9RhL7Nyz0WwqilbqgLahDM3D0hxWwmVDI52nXEybHqiN6/elwpkJBhcuj+WbBu+QfT0uhPGfQ==} + engines: {node: '>= 8'} - xmlbuilder@11.0.1: - resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} - engines: {node: '>=4.0'} - - xmlbuilder@15.1.1: - resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} - engines: {node: '>=8.0'} - - xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - xterm-addon-fit@0.5.0: - resolution: {integrity: sha512-DsS9fqhXHacEmsPxBJZvfj2la30Iz9xk+UKjhQgnYNkrUIN5CYLbw7WEfz117c7+S86S/tpHPfvNxJsF5/G8wQ==} - deprecated: This package is now deprecated. Move to @xterm/addon-fit instead. - peerDependencies: - xterm: ^4.0.0 + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} - xterm-addon-search@0.8.2: - resolution: {integrity: sha512-I1863mjn8P6uVrqm/X+btalVsqjAKLhnhpbP7SavAOpEkI1jJhbHU2UTp7NjeRtcKTks6UWk/ycgds5snDSejg==} - deprecated: This package is now deprecated. Move to @xterm/addon-search instead. - peerDependencies: - xterm: ^4.0.0 + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} - xterm@4.19.0: - resolution: {integrity: sha512-c3Cp4eOVsYY5Q839dR5IejghRPpxciGmLWWaP9g+ppfMeBChMeLa1DCA+pmX/jyDZ+zxFOmlJL/82qVdayVoGQ==} - deprecated: This package is now deprecated. Move to @xterm/xterm instead. + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} - yaku@0.16.7: - resolution: {integrity: sha512-Syu3IB3rZvKvYk7yTiyl1bo/jiEFaaStrgv1V2TIJTqYPStSMQVO8EQjg/z+DRzLq/4LIIharNT3iH1hylEIRw==} + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + pixelmatch@4.0.2: + resolution: {integrity: sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==} + hasBin: true - yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} + pixelmatch@5.3.0: + resolution: {integrity: sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q==} + hasBin: true - yaml@2.3.1: - resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} - engines: {node: '>= 14'} + pkce-challenge@4.1.0: + resolution: {integrity: sha512-ZBmhE1C9LcPoH9XZSdwiPtbPHZROwAnMy+kIFQVrnMCxY4Cudlz3gBOpzilgc0jOgRaiT3sIWfpMomW2ar2orQ==} + engines: {node: '>=16.20.0'} - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} + playwright-core@1.50.1: + resolution: {integrity: sha512-ra9fsNWayuYumt+NiM069M6OkcRb1FZSK8bgi66AtpFoWkg2+y0bJSNmkFrWhMbEBbVKC/EruAHH3g0zmtwGmQ==} + engines: {node: '>=18'} + hasBin: true - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + playwright@1.50.1: + resolution: {integrity: sha512-G8rwsOQJ63XG6BbKj2w5rHeavFjy5zynBA9zsJMMtBoe/Uf757oG12NXz6e6OirF7RCrTVAKFXbLmn1RbL7Qaw==} + engines: {node: '>=18'} + hasBin: true - yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + plist@3.1.0: + resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} + engines: {node: '>=10.4.0'} - yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} + pngjs@3.4.0: + resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==} + engines: {node: '>=4.0.0'} - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} + pngjs@6.0.0: + resolution: {integrity: sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==} + engines: {node: '>=12.13.0'} - yocto-queue@1.1.1: - resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} - engines: {node: '>=12.20'} + pngjs@7.0.0: + resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==} + engines: {node: '>=14.19.0'} - yoctocolors-cjs@2.1.2: - resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} - engines: {node: '>=18'} + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} - zod-to-json-schema@3.24.1: - resolution: {integrity: sha512-3h08nf3Vw3Wl3PK+q3ow/lIil81IT2Oa7YpQyUUDsEWbXveMesdfK1xBd2RhCkynwZndAxixji/7SYJJowr62w==} + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} peerDependencies: - zod: ^3.24.1 - - zod@3.24.1: - resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} + postcss: ^8.0.0 - zod@3.24.2: - resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 - zustand@5.0.3: - resolution: {integrity: sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg==} - engines: {node: '>=12.20.0'} + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} peerDependencies: - '@types/react': '>=18.0.0' - immer: '>=9.0.6' - react: '>=18.0.0' - use-sync-external-store: '>=1.2.0' + postcss: '>=8.0.9' + ts-node: '>=9.0.0' peerDependenciesMeta: - '@types/react': - optional: true - immer: - optional: true - react: + postcss: optional: true - use-sync-external-store: + ts-node: optional: true -snapshots: + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 - '@actions/core@1.11.1': - dependencies: - '@actions/exec': 1.1.1 - '@actions/http-client': 2.2.3 + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} - '@actions/exec@1.1.1': - dependencies: - '@actions/io': 1.1.3 + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - '@actions/github@5.1.1(encoding@0.1.13)': - dependencies: - '@actions/http-client': 2.2.3 - '@octokit/core': 3.6.0(encoding@0.1.13) - '@octokit/plugin-paginate-rest': 2.21.3(@octokit/core@3.6.0(encoding@0.1.13)) - '@octokit/plugin-rest-endpoint-methods': 5.16.2(@octokit/core@3.6.0(encoding@0.1.13)) - transitivePeerDependencies: - - encoding + postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} + engines: {node: ^10 || ^12 || >=14} - '@actions/http-client@2.2.3': - dependencies: - tunnel: 0.0.6 - undici: 5.28.5 + postcss@8.5.2: + resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} + engines: {node: ^10 || ^12 || >=14} - '@actions/io@1.1.3': {} + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + engines: {node: ^10 || ^12 || >=14} - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 + postject@1.0.0-alpha.6: + resolution: {integrity: sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A==} + engines: {node: '>=14.0.0'} + hasBin: true - '@anthropic-ai/sdk@0.19.2(encoding@0.1.13)': - dependencies: - '@types/node': 18.19.75 - '@types/node-fetch': 2.6.12 - abort-controller: 3.0.0 - agentkeepalive: 4.6.0 - form-data-encoder: 1.7.2 - formdata-node: 4.4.1 - node-fetch: 2.7.0(encoding@0.1.13) - web-streams-polyfill: 3.3.3 - transitivePeerDependencies: - - encoding + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} - '@anthropic-ai/sdk@0.27.3(encoding@0.1.13)': - dependencies: - '@types/node': 18.19.75 - '@types/node-fetch': 2.6.12 - abort-controller: 3.0.0 - agentkeepalive: 4.6.0 - form-data-encoder: 1.7.2 - formdata-node: 4.4.1 - node-fetch: 2.7.0(encoding@0.1.13) - transitivePeerDependencies: - - encoding + prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} - '@ast-grep/napi-darwin-arm64@0.35.0': - optional: true + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true - '@ast-grep/napi-darwin-arm64@0.36.0': - optional: true + prettier@3.5.0: + resolution: {integrity: sha512-quyMrVt6svPS7CjQ9gKb3GLEX/rl3BCL2oa/QkNcXv4YNVBC9olt3s+H7ukto06q7B1Qz46PbrKLO34PR6vXcA==} + engines: {node: '>=14'} + hasBin: true - '@ast-grep/napi-darwin-x64@0.35.0': - optional: true + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - '@ast-grep/napi-darwin-x64@0.36.0': - optional: true + prismjs@1.27.0: + resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} + engines: {node: '>=6'} - '@ast-grep/napi-linux-arm64-gnu@0.35.0': - optional: true + prismjs@1.30.0: + resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} + engines: {node: '>=6'} - '@ast-grep/napi-linux-arm64-gnu@0.36.0': - optional: true + proc-log@2.0.1: + resolution: {integrity: sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - '@ast-grep/napi-linux-arm64-musl@0.35.0': - optional: true + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - '@ast-grep/napi-linux-arm64-musl@0.36.0': - optional: true + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} - '@ast-grep/napi-linux-x64-gnu@0.35.0': - optional: true + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} - '@ast-grep/napi-linux-x64-gnu@0.36.0': - optional: true + promise-inflight@1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true - '@ast-grep/napi-linux-x64-musl@0.35.0': - optional: true + promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} - '@ast-grep/napi-linux-x64-musl@0.36.0': - optional: true + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - '@ast-grep/napi-win32-arm64-msvc@0.35.0': - optional: true + property-information@5.6.0: + resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==} - '@ast-grep/napi-win32-arm64-msvc@0.36.0': - optional: true + property-information@7.0.0: + resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==} - '@ast-grep/napi-win32-ia32-msvc@0.35.0': - optional: true + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} - '@ast-grep/napi-win32-ia32-msvc@0.36.0': - optional: true + proxy-agent@6.5.0: + resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} + engines: {node: '>= 14'} - '@ast-grep/napi-win32-x64-msvc@0.35.0': - optional: true + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - '@ast-grep/napi-win32-x64-msvc@0.36.0': - optional: true + psl@1.15.0: + resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} - '@ast-grep/napi@0.35.0': - optionalDependencies: - '@ast-grep/napi-darwin-arm64': 0.35.0 - '@ast-grep/napi-darwin-x64': 0.35.0 - '@ast-grep/napi-linux-arm64-gnu': 0.35.0 - '@ast-grep/napi-linux-arm64-musl': 0.35.0 - '@ast-grep/napi-linux-x64-gnu': 0.35.0 - '@ast-grep/napi-linux-x64-musl': 0.35.0 - '@ast-grep/napi-win32-arm64-msvc': 0.35.0 - '@ast-grep/napi-win32-ia32-msvc': 0.35.0 - '@ast-grep/napi-win32-x64-msvc': 0.35.0 + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} - '@ast-grep/napi@0.36.0': - optionalDependencies: - '@ast-grep/napi-darwin-arm64': 0.36.0 - '@ast-grep/napi-darwin-x64': 0.36.0 - '@ast-grep/napi-linux-arm64-gnu': 0.36.0 - '@ast-grep/napi-linux-arm64-musl': 0.36.0 - '@ast-grep/napi-linux-x64-gnu': 0.36.0 - '@ast-grep/napi-linux-x64-musl': 0.36.0 - '@ast-grep/napi-win32-arm64-msvc': 0.36.0 - '@ast-grep/napi-win32-ia32-msvc': 0.36.0 - '@ast-grep/napi-win32-x64-msvc': 0.36.0 + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} - '@aws-crypto/crc32@5.2.0': - dependencies: - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.734.0 - tslib: 2.8.1 + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} - '@aws-crypto/sha256-browser@5.2.0': - dependencies: - '@aws-crypto/sha256-js': 5.2.0 - '@aws-crypto/supports-web-crypto': 5.2.0 - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.734.0 - '@aws-sdk/util-locate-window': 3.723.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.8.1 + puppeteer-core@24.1.1: + resolution: {integrity: sha512-7FF3gq6bpIsbq3I8mfbodXh3DCzXagoz3l2eGv1cXooYU4g0P4mcHQVHuBD4iSZPXNg8WjzlP5kmRwK9UvwF0A==} + engines: {node: '>=18'} - '@aws-crypto/sha256-js@5.2.0': - dependencies: - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.734.0 - tslib: 2.8.1 + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} - '@aws-crypto/supports-web-crypto@5.2.0': - dependencies: - tslib: 2.8.1 + qs@6.13.1: + resolution: {integrity: sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==} + engines: {node: '>=0.6'} - '@aws-crypto/util@5.2.0': - dependencies: - '@aws-sdk/types': 3.734.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.8.1 + qs@6.14.0: + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + engines: {node: '>=0.6'} - '@aws-sdk/client-bedrock-agent-runtime@3.765.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.758.0 - '@aws-sdk/credential-provider-node': 3.758.0 - '@aws-sdk/middleware-host-header': 3.734.0 - '@aws-sdk/middleware-logger': 3.734.0 - '@aws-sdk/middleware-recursion-detection': 3.734.0 - '@aws-sdk/middleware-user-agent': 3.758.0 - '@aws-sdk/region-config-resolver': 3.734.0 - '@aws-sdk/types': 3.734.0 - '@aws-sdk/util-endpoints': 3.743.0 - '@aws-sdk/util-user-agent-browser': 3.734.0 - '@aws-sdk/util-user-agent-node': 3.758.0 - '@smithy/config-resolver': 4.0.1 - '@smithy/core': 3.1.5 - '@smithy/eventstream-serde-browser': 4.0.1 - '@smithy/eventstream-serde-config-resolver': 4.0.1 - '@smithy/eventstream-serde-node': 4.0.1 - '@smithy/fetch-http-handler': 5.0.1 - '@smithy/hash-node': 4.0.1 - '@smithy/invalid-dependency': 4.0.1 - '@smithy/middleware-content-length': 4.0.1 - '@smithy/middleware-endpoint': 4.0.6 - '@smithy/middleware-retry': 4.0.7 - '@smithy/middleware-serde': 4.0.2 - '@smithy/middleware-stack': 4.0.1 - '@smithy/node-config-provider': 4.0.1 - '@smithy/node-http-handler': 4.0.3 - '@smithy/protocol-http': 5.0.1 - '@smithy/smithy-client': 4.1.6 - '@smithy/types': 4.1.0 - '@smithy/url-parser': 4.0.1 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.7 - '@smithy/util-defaults-mode-node': 4.0.7 - '@smithy/util-endpoints': 3.0.1 - '@smithy/util-middleware': 4.0.1 - '@smithy/util-retry': 4.0.1 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - '@aws-sdk/client-bedrock-runtime@3.758.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.758.0 - '@aws-sdk/credential-provider-node': 3.758.0 - '@aws-sdk/middleware-host-header': 3.734.0 - '@aws-sdk/middleware-logger': 3.734.0 - '@aws-sdk/middleware-recursion-detection': 3.734.0 - '@aws-sdk/middleware-user-agent': 3.758.0 - '@aws-sdk/region-config-resolver': 3.734.0 - '@aws-sdk/types': 3.734.0 - '@aws-sdk/util-endpoints': 3.743.0 - '@aws-sdk/util-user-agent-browser': 3.734.0 - '@aws-sdk/util-user-agent-node': 3.758.0 - '@smithy/config-resolver': 4.0.1 - '@smithy/core': 3.1.5 - '@smithy/eventstream-serde-browser': 4.0.1 - '@smithy/eventstream-serde-config-resolver': 4.0.1 - '@smithy/eventstream-serde-node': 4.0.1 - '@smithy/fetch-http-handler': 5.0.1 - '@smithy/hash-node': 4.0.1 - '@smithy/invalid-dependency': 4.0.1 - '@smithy/middleware-content-length': 4.0.1 - '@smithy/middleware-endpoint': 4.0.6 - '@smithy/middleware-retry': 4.0.7 - '@smithy/middleware-serde': 4.0.2 - '@smithy/middleware-stack': 4.0.1 - '@smithy/node-config-provider': 4.0.1 - '@smithy/node-http-handler': 4.0.3 - '@smithy/protocol-http': 5.0.1 - '@smithy/smithy-client': 4.1.6 - '@smithy/types': 4.1.0 - '@smithy/url-parser': 4.0.1 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.7 - '@smithy/util-defaults-mode-node': 4.0.7 - '@smithy/util-endpoints': 3.0.1 - '@smithy/util-middleware': 4.0.1 - '@smithy/util-retry': 4.0.1 - '@smithy/util-stream': 4.1.2 - '@smithy/util-utf8': 4.0.0 - '@types/uuid': 9.0.8 - tslib: 2.8.1 - uuid: 9.0.1 - transitivePeerDependencies: - - aws-crt + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - '@aws-sdk/client-kendra@3.758.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.758.0 - '@aws-sdk/credential-provider-node': 3.758.0 - '@aws-sdk/middleware-host-header': 3.734.0 - '@aws-sdk/middleware-logger': 3.734.0 - '@aws-sdk/middleware-recursion-detection': 3.734.0 - '@aws-sdk/middleware-user-agent': 3.758.0 - '@aws-sdk/region-config-resolver': 3.734.0 - '@aws-sdk/types': 3.734.0 - '@aws-sdk/util-endpoints': 3.743.0 - '@aws-sdk/util-user-agent-browser': 3.734.0 - '@aws-sdk/util-user-agent-node': 3.758.0 - '@smithy/config-resolver': 4.0.1 - '@smithy/core': 3.1.5 - '@smithy/fetch-http-handler': 5.0.1 - '@smithy/hash-node': 4.0.1 - '@smithy/invalid-dependency': 4.0.1 - '@smithy/middleware-content-length': 4.0.1 - '@smithy/middleware-endpoint': 4.0.6 - '@smithy/middleware-retry': 4.0.7 - '@smithy/middleware-serde': 4.0.2 - '@smithy/middleware-stack': 4.0.1 - '@smithy/node-config-provider': 4.0.1 - '@smithy/node-http-handler': 4.0.3 - '@smithy/protocol-http': 5.0.1 - '@smithy/smithy-client': 4.1.6 - '@smithy/types': 4.1.0 - '@smithy/url-parser': 4.0.1 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.7 - '@smithy/util-defaults-mode-node': 4.0.7 - '@smithy/util-endpoints': 3.0.1 - '@smithy/util-middleware': 4.0.1 - '@smithy/util-retry': 4.0.1 - '@smithy/util-utf8': 4.0.0 - '@types/uuid': 9.0.8 - tslib: 2.8.1 - uuid: 9.0.1 - transitivePeerDependencies: - - aws-crt + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} - '@aws-sdk/client-sso@3.758.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.758.0 - '@aws-sdk/middleware-host-header': 3.734.0 - '@aws-sdk/middleware-logger': 3.734.0 - '@aws-sdk/middleware-recursion-detection': 3.734.0 - '@aws-sdk/middleware-user-agent': 3.758.0 - '@aws-sdk/region-config-resolver': 3.734.0 - '@aws-sdk/types': 3.734.0 - '@aws-sdk/util-endpoints': 3.743.0 - '@aws-sdk/util-user-agent-browser': 3.734.0 - '@aws-sdk/util-user-agent-node': 3.758.0 + random-path@0.1.2: + resolution: {integrity: sha512-4jY0yoEaQ5v9StCl5kZbNIQlg1QheIDBrdkDn53EynpPb9FgO6//p3X/tgMnrC45XN6QZCzU1Xz/+pSSsJBpRw==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + raw-body@3.0.0: + resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} + engines: {node: '>= 0.8'} + + react-clientside-effect@1.2.7: + resolution: {integrity: sha512-gce9m0Pk/xYYMEojRI9bgvqQAkl6hm7ozQvqWPyQx+kULiatdHgkNM1QG4DQRx5N9BAzWSCJmt9mMV8/KsdgVg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + + react-fast-compare@2.0.4: + resolution: {integrity: sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==} + + react-fast-compare@3.2.2: + resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} + + react-focus-lock@2.13.6: + resolution: {integrity: sha512-ehylFFWyYtBKXjAO9+3v8d0i+cnc1trGS0vlTGhzFW1vbFXVUTmR8s2tt/ZQG8x5hElg6rhENlLG1H3EZK0Llg==} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react-hot-toast@2.5.2: + resolution: {integrity: sha512-Tun3BbCxzmXXM7C+NI4qiv6lT0uwGh4oAfeJyNOjYUejTsm35mK9iCaYLGv8cBz9L5YxZLx/2ii7zsIwPtPUdw==} + engines: {node: '>=10'} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + react-icons@5.2.1: + resolution: {integrity: sha512-zdbW5GstTzXaVKvGSyTaBalt7HSfuK5ovrzlpyiWHAFXndXTdd/1hdDHI4xBM1Mn7YriT6aqESucFl9kEXzrdw==} + peerDependencies: + react: '*' + + react-icons@5.4.0: + resolution: {integrity: sha512-7eltJxgVt7X64oHh6wSWNwwbKTCtMfK35hcjvJS0yxEAhPM8oUKdS3+kqaW1vicIltw+kR2unHaa12S9pPALoQ==} + peerDependencies: + react: '*' + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + + react-markdown@10.1.0: + resolution: {integrity: sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==} + peerDependencies: + '@types/react': '>=18' + react: '>=18' + + react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + + react-remove-scroll-bar@2.3.8: + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.6.3: + resolution: {integrity: sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react-router@7.1.5: + resolution: {integrity: sha512-8BUF+hZEU4/z/JD201yK6S+UYhsf58bzYIDq2NS1iGpwxSXDu7F+DeGSkIXMFBuHZB21FSiCzEcUb18cQNdRkA==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + peerDependenciesMeta: + react-dom: + optional: true + + react-split@2.0.14: + resolution: {integrity: sha512-bKWydgMgaKTg/2JGQnaJPg51T6dmumTWZppFgEbbY0Fbme0F5TuatAScCLaqommbGQQf/ZT1zaejuPDriscISA==} + peerDependencies: + react: '*' + + react-style-singleton@2.2.3: + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react-syntax-highlighter@15.5.0: + resolution: {integrity: sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg==} + peerDependencies: + react: '>= 0.14.0' + + react-textarea-autosize@8.5.8: + resolution: {integrity: sha512-iUiIj70JefrTuSJ4LbVFiSqWiHHss5L63L717bqaWHMgkm9sz6eEvro4vZ3uQfGJbevzwT6rHOszHKA8RkhRMg==} + engines: {node: '>=10'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + react-universal-interface@0.6.2: + resolution: {integrity: sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==} + peerDependencies: + react: '*' + tslib: '*' + + react-use@17.6.0: + resolution: {integrity: sha512-OmedEScUMKFfzn1Ir8dBxiLLSOzhKe/dPZwVxcujweSj45aNM7BEGPb9BEVIgVEqEXx6f3/TsXzwIktNgUR02g==} + peerDependencies: + react: '*' + react-dom: '*' + + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + + read-binary-file-arch@1.0.6: + resolution: {integrity: sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==} + hasBin: true + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + read-pkg-up@2.0.0: + resolution: {integrity: sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w==} + engines: {node: '>=4'} + + read-pkg@2.0.0: + resolution: {integrity: sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA==} + engines: {node: '>=4'} + + read-yaml-file@1.1.0: + resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} + engines: {node: '>=6'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readable-stream@4.7.0: + resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + readable-web-to-node-stream@3.0.3: + resolution: {integrity: sha512-In3boYjBnbGVrLuuRu/Ath/H6h1jgk30nAsk/71tCare1dTVoe1oMBGRn5LGf0n3c1BcHwwAqpraxX4AUAP5KA==} + engines: {node: '>=8'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + rechoir@0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + + rechoir@0.8.0: + resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} + engines: {node: '>= 10.13.0'} + + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + refractor@3.6.0: + resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==} + + regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + rehype-katex@7.0.1: + resolution: {integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==} + + remark-gfm@4.0.1: + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + + remark-math@6.0.0: + resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==} + + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + + remark-rehype@11.1.1: + resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==} + + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + + repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + resedit@2.0.3: + resolution: {integrity: sha512-oTeemxwoMuxxTYxXUwjkrOPfngTQehlv0/HoYFNkB4uzsP1Un1A9nI8JQKGOFkxpqkC7qkMs0lUsGrvUlbLNUA==} + engines: {node: '>=14', npm: '>=7'} + + resize-observer-polyfill@1.5.1: + resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} + + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + + responselike@2.0.1: + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rimraf@2.6.3: + resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rimraf@2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rimraf@4.1.0: + resolution: {integrity: sha512-ZJdkUR5/dRrRJHdcSKJLrpRn6tVjl9ALxd4yrTCxFsMpjQNzwHF6GLqMsuEzEYIXxHlFPDSk21Vr8VPuFBEz0g==} + engines: {node: '>=14'} + deprecated: Please upgrade to 4.3.1 or higher to fix a potentially damaging issue regarding symbolic link following. See https://github.com/isaacs/rimraf/issues/259 for details. + hasBin: true + + rimraf@6.0.1: + resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} + engines: {node: 20 || >=22} + hasBin: true + + roarr@2.15.4: + resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} + engines: {node: '>=8.0'} + + rollup@4.34.6: + resolution: {integrity: sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + router@2.1.0: + resolution: {integrity: sha512-/m/NSLxeYEgWNtyC+WtNHCF7jbGxOibVWKnn+1Psff4dJGOfoXP+MuC/f2CwSmyiHdOIzYnYFp4W6GxWfekaLA==} + engines: {node: '>= 18'} + + rrweb-cssom@0.8.0: + resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} + + rsbuild-plugin-dts@0.5.3: + resolution: {integrity: sha512-NLy2oKyStcM89CwSdgQUu10BlNTpZieshGj7p7w/sge9VM7aADp8mUqo86bDKX4ITMMACLTO6Q/VQmp9B/1tMg==} + engines: {node: '>=16.7.0'} + peerDependencies: + '@microsoft/api-extractor': ^7 + '@rsbuild/core': 1.x + typescript: ^5 + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + typescript: + optional: true + + rsbuild-plugin-dts@0.5.4: + resolution: {integrity: sha512-8z4gC7/vj2acLb5zdkgQ4N6l4EnFqC16x3tcqkkpsv/C+2W2Jyr6SKHRWbfWrki/hiv9K5WansHlsmL7TKC+BQ==} + engines: {node: '>=16.7.0'} + peerDependencies: + '@microsoft/api-extractor': ^7 + '@rsbuild/core': 1.x + typescript: ^5 + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + typescript: + optional: true + + rtl-css-js@1.16.1: + resolution: {integrity: sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==} + + run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sass-embedded-android-arm64@1.83.4: + resolution: {integrity: sha512-tgX4FzmbVqnQmD67ZxQDvI+qFNABrboOQgwsG05E5bA/US42zGajW9AxpECJYiMXVOHmg+d81ICbjb0fsVHskw==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [android] + + sass-embedded-android-arm@1.83.4: + resolution: {integrity: sha512-9Z4pJAOgEkXa3VDY/o+U6l5XvV0mZTJcSl0l/mSPHihjAHSpLYnOW6+KOWeM8dxqrsqTYcd6COzhanI/a++5Gw==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [android] + + sass-embedded-android-ia32@1.83.4: + resolution: {integrity: sha512-RsFOziFqPcfZXdFRULC4Ayzy9aK6R6FwQ411broCjlOBX+b0gurjRadkue3cfUEUR5mmy0KeCbp7zVKPLTK+5Q==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [android] + + sass-embedded-android-riscv64@1.83.4: + resolution: {integrity: sha512-EHwh0nmQarBBrMRU928eTZkFGx19k/XW2YwbPR4gBVdWLkbTgCA5aGe8hTE6/1zStyx++3nDGvTZ78+b/VvvLg==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [android] + + sass-embedded-android-x64@1.83.4: + resolution: {integrity: sha512-0PgQNuPWYy1jEOEPDVsV89KfqOsMLIp9CSbjBY7jRcwRhyVAcigqrUG6bDeNtojHUYKA1kU+Eh/85WxOHUOgBw==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [android] + + sass-embedded-darwin-arm64@1.83.4: + resolution: {integrity: sha512-rp2ywymWc3nymnSnAFG5R/8hvxWCsuhK3wOnD10IDlmNB7o4rzKby1c+2ZfpQGowlYGWsWWTgz8FW2qzmZsQRw==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [darwin] + + sass-embedded-darwin-x64@1.83.4: + resolution: {integrity: sha512-kLkN2lXz9PCgGfDS8Ev5YVcl/V2173L6379en/CaFuJJi7WiyPgBymW7hOmfCt4uO4R1y7CP2Uc08DRtZsBlAA==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [darwin] + + sass-embedded-linux-arm64@1.83.4: + resolution: {integrity: sha512-E0zjsZX2HgESwyqw31EHtI39DKa7RgK7nvIhIRco1d0QEw227WnoR9pjH3M/ZQy4gQj3GKilOFHM5Krs/omeIA==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + + sass-embedded-linux-arm@1.83.4: + resolution: {integrity: sha512-nL90ryxX2lNmFucr9jYUyHHx21AoAgdCL1O5Ltx2rKg2xTdytAGHYo2MT5S0LIeKLa/yKP/hjuSvrbICYNDvtA==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + + sass-embedded-linux-ia32@1.83.4: + resolution: {integrity: sha512-ew5HpchSzgAYbQoriRh8QhlWn5Kw2nQ2jHoV9YLwGKe3fwwOWA0KDedssvDv7FWnY/FCqXyymhLd6Bxae4Xquw==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [linux] + + sass-embedded-linux-musl-arm64@1.83.4: + resolution: {integrity: sha512-IzMgalf6MZOxgp4AVCgsaWAFDP/IVWOrgVXxkyhw29fyAEoSWBJH4k87wyPhEtxSuzVHLxKNbc8k3UzdWmlBFg==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + + sass-embedded-linux-musl-arm@1.83.4: + resolution: {integrity: sha512-0RrJRwMrmm+gG0VOB5b5Cjs7Sd+lhqpQJa6EJNEaZHljJokEfpE5GejZsGMRMIQLxEvVphZnnxl6sonCGFE/QQ==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + + sass-embedded-linux-musl-ia32@1.83.4: + resolution: {integrity: sha512-LLb4lYbcxPzX4UaJymYXC+WwokxUlfTJEFUv5VF0OTuSsHAGNRs/rslPtzVBTvMeG9TtlOQDhku1F7G6iaDotA==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [linux] + + sass-embedded-linux-musl-riscv64@1.83.4: + resolution: {integrity: sha512-zoKlPzD5Z13HKin1UGR74QkEy+kZEk2AkGX5RelRG494mi+IWwRuWCppXIovor9+BQb9eDWPYPoMVahwN5F7VA==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [linux] + + sass-embedded-linux-musl-x64@1.83.4: + resolution: {integrity: sha512-hB8+/PYhfEf2zTIcidO5Bpof9trK6WJjZ4T8g2MrxQh8REVtdPcgIkoxczRynqybf9+fbqbUwzXtiUao2GV+vQ==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + + sass-embedded-linux-riscv64@1.83.4: + resolution: {integrity: sha512-83fL4n+oeDJ0Y4KjASmZ9jHS1Vl9ESVQYHMhJE0i4xDi/P3BNarm2rsKljq/QtrwGpbqwn8ujzOu7DsNCMDSHA==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [linux] + + sass-embedded-linux-x64@1.83.4: + resolution: {integrity: sha512-NlnGdvCmTD5PK+LKXlK3sAuxOgbRIEoZfnHvxd157imCm/s2SYF/R28D0DAAjEViyI8DovIWghgbcqwuertXsA==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + + sass-embedded-win32-arm64@1.83.4: + resolution: {integrity: sha512-J2BFKrEaeSrVazU2qTjyQdAk+MvbzJeTuCET0uAJEXSKtvQ3AzxvzndS7LqkDPbF32eXAHLw8GVpwcBwKbB3Uw==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [win32] + + sass-embedded-win32-ia32@1.83.4: + resolution: {integrity: sha512-uPAe9T/5sANFhJS5dcfAOhOJy8/l2TRYG4r+UO3Wp4yhqbN7bggPvY9c7zMYS0OC8tU/bCvfYUDFHYMCl91FgA==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [win32] + + sass-embedded-win32-x64@1.83.4: + resolution: {integrity: sha512-C9fkDY0jKITdJFij4UbfPFswxoXN9O/Dr79v17fJnstVwtUojzVJWKHUXvF0Zg2LIR7TCc4ju3adejKFxj7ueA==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [win32] + + sass-embedded@1.83.4: + resolution: {integrity: sha512-Hf2burRA/y5PGxsg6jB9UpoK/xZ6g/pgrkOcdl6j+rRg1Zj8XhGKZ1MTysZGtTPUUmiiErqzkP5+Kzp95yv9GQ==} + engines: {node: '>=16.0.0'} + hasBin: true + + sass@1.85.1: + resolution: {integrity: sha512-Uk8WpxM5v+0cMR0XjX9KfRIacmSG86RH4DCCZjLU2rFh5tyutt9siAXJ7G+YfxQ99Q6wrRMbMlVl6KqUms71ag==} + engines: {node: '>=14.0.0'} + hasBin: true + + sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + screenfull@5.2.0: + resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==} + engines: {node: '>=0.10.0'} + + scroll-into-view-if-needed@3.0.10: + resolution: {integrity: sha512-t44QCeDKAPf1mtQH3fYpWz8IM/DyvHLjs8wUvvwMYxk5moOqCzrMSxK6HQVD0QVmVjXFavoFIPRVrMuJPKAvtg==} + + semver-compare@1.0.0: + resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} + + send@1.1.0: + resolution: {integrity: sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA==} + engines: {node: '>= 18'} + + serialize-error@7.0.1: + resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} + engines: {node: '>=10'} + + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} + + serve-static@2.1.0: + resolution: {integrity: sha512-A3We5UfEjG8Z7VkDv6uItWw6HY2bBSBJT1KtVESn6EOoOr2jAxNhxWCLY3jDE2WcuHXByWju74ck3ZgLwL8xmA==} + engines: {node: '>= 18'} + + set-cookie-parser@2.7.1: + resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-harmonic-interval@1.0.1: + resolution: {integrity: sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==} + engines: {node: '>=6.9'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + shallowequal@1.1.0: + resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} + + sharp@0.33.3: + resolution: {integrity: sha512-vHUeXJU1UvlO/BNwTpT0x/r53WkLUVxrmb5JTgW92fdFCFk0ispLMAeu/jPO2vjkXM1fYUi3K7/qcLF47pwM1A==} + engines: {libvips: '>=8.15.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shelljs@0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true + + shx@0.3.4: + resolution: {integrity: sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==} + engines: {node: '>=6'} + hasBin: true + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + simple-wcswidth@1.0.1: + resolution: {integrity: sha512-xMO/8eNREtaROt7tJvWJqHBDTMFN4eiQ5I4JRMuilwfnFcV5W9u7RUkueNkdw0jPqGMX36iCywelS5yilTuOxg==} + + simple-xml-to-json@1.2.3: + resolution: {integrity: sha512-kWJDCr9EWtZ+/EYYM5MareWj2cRnZGF93YDNpH4jQiHB+hBIZnfPFSQiVMzZOdk+zXWqTZ/9fTeQNu2DqeiudA==} + engines: {node: '>=20.12.2'} + + sirv@3.0.1: + resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==} + engines: {node: '>=18'} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + + socks-proxy-agent@7.0.0: + resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} + engines: {node: '>= 10'} + + socks-proxy-agent@8.0.5: + resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} + engines: {node: '>= 14'} + + socks@2.8.4: + resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.5.6: + resolution: {integrity: sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==} + engines: {node: '>=0.10.0'} + + source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + space-separated-tokens@1.1.5: + resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + spawndamnit@3.0.1: + resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.21: + resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} + + split.js@1.6.5: + resolution: {integrity: sha512-mPTnGCiS/RiuTNsVhCm9De9cCAUsrNFFviRbADdKiiV+Kk8HKp/0fWu7Kr8pi3/yBmsqLFHuXGT9UUZ+CNLwFw==} + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + + ssri@9.0.1: + resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + stack-generator@2.0.10: + resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + stackframe@1.3.4: + resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + + stacktrace-gps@3.1.2: + resolution: {integrity: sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==} + + stacktrace-js@2.0.2: + resolution: {integrity: sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==} + + state-local@1.0.7: + resolution: {integrity: sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + std-env@3.8.0: + resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} + + stream-buffers@2.2.0: + resolution: {integrity: sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==} + engines: {node: '>= 0.10.0'} + + streamx@2.22.0: + resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} + + strict-event-emitter@0.5.1: + resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} + + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string.prototype.matchall@4.0.12: + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} + engines: {node: '>= 0.4'} + + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-eof@1.0.0: + resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} + engines: {node: '>=0.10.0'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strip-outer@1.0.1: + resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} + engines: {node: '>=0.10.0'} + + strnum@1.1.2: + resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==} + + strtok3@6.3.0: + resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} + engines: {node: '>=10'} + + stubborn-fs@1.2.5: + resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} + + style-to-js@1.1.16: + resolution: {integrity: sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==} + + style-to-object@1.0.8: + resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==} + + styled-components@6.1.15: + resolution: {integrity: sha512-PpOTEztW87Ua2xbmLa7yssjNyUF9vE7wdldRfn1I2E6RTkqknkBYpj771OxM/xrvRGinLy2oysa7GOd7NcZZIA==} + engines: {node: '>= 16'} + peerDependencies: + react: '>= 16.8.0' + react-dom: '>= 16.8.0' + + stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + + stylis@4.3.2: + resolution: {integrity: sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==} + + stylis@4.3.6: + resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + sudo-prompt@9.2.1: + resolution: {integrity: sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + sumchecker@3.0.1: + resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==} + engines: {node: '>= 8.0'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + swr@2.3.2: + resolution: {integrity: sha512-RosxFpiabojs75IwQ316DGoDRmOqtiAj0tg8wCcbEu4CiLZBs/a9QNtHV7TUfDXmmlgqij/NqzKq/eLelyv9xA==} + peerDependencies: + react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + + sync-child-process@1.0.2: + resolution: {integrity: sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==} + engines: {node: '>=16.0.0'} + + sync-message-port@1.1.3: + resolution: {integrity: sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==} + engines: {node: '>=16.0.0'} + + synckit@0.9.2: + resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} + engines: {node: ^14.18.0 || >=16.0.0} + + tailwind-merge@1.14.0: + resolution: {integrity: sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==} + + tailwind-merge@2.5.5: + resolution: {integrity: sha512-0LXunzzAZzo0tEPxV3I297ffKZPlKDrjj7NXphC8V5ak9yHC5zRmxnOe2m/Rd/7ivsOMJe3JZ2JVocoDdQTRBA==} + + tailwind-merge@3.0.2: + resolution: {integrity: sha512-l7z+OYZ7mu3DTqrL88RiKrKIqO3NcpEO8V/Od04bNpvk0kiIFndGEoqfuzvj4yuhRkHKjRkII2z+KS2HfPcSxw==} + + tailwind-variants@0.1.20: + resolution: {integrity: sha512-AMh7x313t/V+eTySKB0Dal08RHY7ggYK0MSn/ad8wKWOrDUIzyiWNayRUm2PIJ4VRkvRnfNuyRuKbLV3EN+ewQ==} + engines: {node: '>=16.x', pnpm: '>=7.x'} + peerDependencies: + tailwindcss: '*' + + tailwindcss@3.4.17: + resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} + engines: {node: '>=14.0.0'} + hasBin: true + + tar-fs@3.0.8: + resolution: {integrity: sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==} + + tar-stream@3.1.7: + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + temp@0.9.4: + resolution: {integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==} + engines: {node: '>=6.0.0'} + + term-size@2.2.1: + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} + engines: {node: '>=8'} + + terminal-columns@1.4.1: + resolution: {integrity: sha512-IKVL/itiMy947XWVv4IHV7a0KQXvKjj4ptbi7Ew9MPMcOLzkiQeyx3Gyvh62hKrfJ0RZc4M1nbhzjNM39Kyujw==} + + test-exclude@7.0.1: + resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} + engines: {node: '>=18'} + + text-decoder@1.2.3: + resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + + text-extensions@2.4.0: + resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} + engines: {node: '>=8'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + throttle-debounce@3.0.1: + resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==} + engines: {node: '>=10'} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + timm@1.7.1: + resolution: {integrity: sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==} + + tiny-each-async@2.0.3: + resolution: {integrity: sha512-5ROII7nElnAirvFn8g7H7MtpfV1daMcyfTGQwsn/x2VtyV+VPiO5CjReCJtWLvoKTDEDmZocf3cNPraiMnBXLA==} + + tiny-warning@1.0.3: + resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinycolor2@1.6.0: + resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinyglobby@0.2.12: + resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} + engines: {node: '>=12.0.0'} + + tinypool@1.0.2: + resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + + tinyspy@3.0.2: + resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + engines: {node: '>=14.0.0'} + + tldts-core@6.1.84: + resolution: {integrity: sha512-NaQa1W76W2aCGjXybvnMYzGSM4x8fvG2AN/pla7qxcg0ZHbooOPhA8kctmOZUDfZyhDL27OGNbwAeig8P4p1vg==} + + tldts@6.1.84: + resolution: {integrity: sha512-aRGIbCIF3teodtUFAYSdQONVmDRy21REM3o6JnqWn5ZkQBJJ4gHxhw6OfwQ+WkSAi3ASamrS4N4nyazWx6uTYg==} + hasBin: true + + tmp-promise@3.0.3: + resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + tmp@0.2.3: + resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} + engines: {node: '>=14.14'} + + tn1150@0.1.0: + resolution: {integrity: sha512-DbplOfQFkqG5IHcDyyrs/lkvSr3mPUVsFf/RbDppOshs22yTPnSJWEe6FkYd1txAwU/zcnR905ar2fi4kwF29w==} + engines: {node: '>=0.12'} + + to-data-view@1.1.0: + resolution: {integrity: sha512-1eAdufMg6mwgmlojAx3QeMnzB/BTVp7Tbndi3U7ftcT2zCZadjxkkmLmd97zmaxWi+sgGcgWrokmpEoy0Dn0vQ==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toggle-selection@1.0.6: + resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + token-types@4.2.1: + resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} + engines: {node: '>=10'} + + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + + tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} + + tough-cookie@5.1.2: + resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} + engines: {node: '>=16'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tr46@5.1.0: + resolution: {integrity: sha512-IUWnUK7ADYR5Sl1fZlO1INDUhVhatWl7BtJWsIhwJ0UAK7ilzzIa8uIqOO/aYVWHZPJkKbEL+362wrzoeRF7bw==} + engines: {node: '>=18'} + + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + trim-repeated@1.0.0: + resolution: {integrity: sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==} + engines: {node: '>=0.10.0'} + + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + + ts-api-utils@1.4.3: + resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + ts-easing@0.2.0: + resolution: {integrity: sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==} + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tsconfck@3.1.5: + resolution: {integrity: sha512-CLDfGgUp7XPswWnezWwsCRxNmgQjhYq3VXHM0/XIRxhVrKw0M1if9agzryh1QS3nxjCROvV+xWxoJO1YctzzWg==} + engines: {node: ^18 || >=20} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.4.0: + resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + + tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsutils@3.21.0: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + + tsx@4.19.2: + resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} + engines: {node: '>=18.0.0'} + hasBin: true + + tsx@4.19.3: + resolution: {integrity: sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==} + engines: {node: '>=18.0.0'} + hasBin: true + + tunnel@0.0.6: + resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} + engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} + + turbo-stream@2.4.0: + resolution: {integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==} + + turndown-plugin-gfm@1.0.2: + resolution: {integrity: sha512-vwz9tfvF7XN/jE0dGoBei3FXWuvll78ohzCZQuOb+ZjWrs3a0XhQVomJEb2Qh4VHTPNRO4GPZh0V7VRbiWwkRg==} + + turndown@7.2.0: + resolution: {integrity: sha512-eCZGBN4nNNqM9Owkv9HAtWRYfLA4h909E/WGAWWBpmB275ehNhZyk87/Tpvjbp0jjNl9XwCsbe6bm6CqFsgD+A==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.13.1: + resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} + engines: {node: '>=10'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + + type-fest@4.34.1: + resolution: {integrity: sha512-6kSc32kT0rbwxD6QL1CYe8IqdzN/J/ILMrNK+HMQCKH3insCDRY/3ITb0vcBss0a3t72fzh2YSzj8ko1HgwT3g==} + engines: {node: '>=16'} + + type-flag@3.0.0: + resolution: {integrity: sha512-3YaYwMseXCAhBB14RXW5cRQfJQlEknS6i4C8fCfeUdS3ihG9EdccdR9kt3vP73ZdeTGmPb4bZtkDn5XMIn1DLA==} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + type-is@2.0.0: + resolution: {integrity: sha512-gd0sGezQYCbWSbkZr75mln4YBidWUN60+devscpLF5mtRDUpiaTvKpBNrdaCvel1NdR2k6vclXybU5fBd2i+nw==} + engines: {node: '>= 0.6'} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + + typed-query-selector@2.12.0: + resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} + + typescript@4.9.4: + resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==} + engines: {node: '>=4.2.0'} + hasBin: true + + typescript@5.7.3: + resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + engines: {node: '>=14.17'} + hasBin: true + + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + + uint8array-extras@1.4.0: + resolution: {integrity: sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==} + engines: {node: '>=18'} + + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + + unbzip2-stream@1.4.3: + resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + + undici@5.28.5: + resolution: {integrity: sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==} + engines: {node: '>=14.0'} + + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + + unique-filename@2.0.1: + resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + unique-slug@3.0.0: + resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + unist-util-find-after@5.0.0: + resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} + + unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-remove-position@5.0.0: + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + + universal-user-agent@6.0.1: + resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unorm@1.6.0: + resolution: {integrity: sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==} + engines: {node: '>= 0.4.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + unzip-crx-3@0.2.0: + resolution: {integrity: sha512-0+JiUq/z7faJ6oifVB5nSwt589v1KCduqIJupNVDoWSXZtWDmjDGO3RAEOvwJ07w90aoXoP4enKsR7ecMrJtWQ==} + + update-browserslist-db@1.1.2: + resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + update-electron-app@3.1.1: + resolution: {integrity: sha512-7duRr6sYn014tifhKgT/5i8N+6xLzmJVJ8hVtNrHXlIDNP6QbRe6VxZ1hSi2UH5oJPzhor/PH7yKU9em5xjRzQ==} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + + use-callback-ref@1.3.3: + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + use-composed-ref@1.4.0: + resolution: {integrity: sha512-djviaxuOOh7wkj0paeO1Q/4wMZ8Zrnag5H6yBvzN7AKKe8beOaED9SF5/ByLqsku8NP4zQqsvM2u3ew/tJK8/w==} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + use-dark-mode@2.3.1: + resolution: {integrity: sha512-hmcdJR96tTustRQdaQwe6jMrZHnmPqXBxgy4jaQ4gsfhwajsCpjECuq9prgDe9XxMx/f9r96o2/md6O4Lwhwjg==} + peerDependencies: + react: ^16.8.0 + + use-isomorphic-layout-effect@1.2.0: + resolution: {integrity: sha512-q6ayo8DWoPZT0VdG4u3D3uxcgONP3Mevx2i2b0434cwWBoL+aelL1DzkXI6w3PhTZzUeR2kaVlZn70iCiseP6w==} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + use-latest@1.3.0: + resolution: {integrity: sha512-mhg3xdm9NaM8q+gLT8KryJPnRFOz1/5XPBhmDEVZK1webPzDjrPk7f/mbpeLqTgB9msytYWANxgALOCJKnLvcQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + use-persisted-state@0.3.3: + resolution: {integrity: sha512-pCNlvYC8+XjRxwnIut4teGC9f2p9aD88R8OGseQGZa2dvqG/h1vEGk1vRE1IZG0Vf161UDpn+NlW4+UGubQflQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + + use-sidecar@1.1.3: + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + use-sync-external-store@1.4.0: + resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + username@5.1.0: + resolution: {integrity: sha512-PCKbdWw85JsYMvmCv5GH3kXmM66rCd9m1hBEDutPNv94b/pqCMT4NtcKyeWYvLFiE8b+ha1Jdl8XAaUdPn5QTg==} + engines: {node: '>=8'} + + utf-8-validate@6.0.5: + resolution: {integrity: sha512-EYZR+OpIXp9Y1eG1iueg8KRsY8TuT8VNgnanZ0uA3STqhHQTLwbl+WX76/9X5OY12yQubymBpaBSmMPkSTQcKA==} + engines: {node: '>=6.14.2'} + + utif2@4.1.0: + resolution: {integrity: sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@10.0.0: + resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + hasBin: true + + uuid@11.1.0: + resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} + hasBin: true + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + varint@6.0.0: + resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vfile-location@5.0.3: + resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} + + vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + vite-node@3.0.5: + resolution: {integrity: sha512-02JEJl7SbtwSDJdYS537nU6l+ktdvcREfLksk/NDAqtdKWGqHl+joXzEubHROmS3E6pip+Xgu2tFezMu75jH7A==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + + vite-node@3.0.7: + resolution: {integrity: sha512-2fX0QwX4GkkkpULXdT1Pf4q0tC1i1lFOyseKoonavXUNlQ77KpW2XqBGGNIm/J4Ows4KxgGJzDguYVPKwG/n5A==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + + vite-node@3.0.8: + resolution: {integrity: sha512-6PhR4H9VGlcwXZ+KWCdMqbtG649xCPZqfI9j2PsK1FcXgEzro5bGHcVKFCTqPLaNKZES8Evqv4LwvZARsq5qlg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + + vite-plugin-singlefile@2.2.0: + resolution: {integrity: sha512-Ik1wXmJaGzeQtUeIV7JprDUqqy6DlLzXAY27Blei5peE4c9VJF+Kp9xWDJeuX0RJUZmFbIAuw1/RAh06A+Ql7w==} + engines: {node: '>18.0.0'} + peerDependencies: + rollup: ^4.35.0 + vite: ^5.4.11 || ^6.0.0 + + vite-tsconfig-paths@5.1.4: + resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==} + peerDependencies: + vite: '*' + peerDependenciesMeta: + vite: + optional: true + + vite@5.4.14: + resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vite@6.2.2: + resolution: {integrity: sha512-yW7PeMM+LkDzc7CgJuRLMW2Jz0FxMOsVJ8Lv3gpgW9WLcb9cTW+121UEr1hvmfR7w3SegR5ItvYyzVz1vxNJgQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest-browser-react@0.1.1: + resolution: {integrity: sha512-n9l+sIAexKqqfBuEkjVGdfZ4xAn1Gn/+wc4Mo8KsUSUOVoM9evSY0rVXdMIzCQqloT/zvmFGAtziFINkqu+t7g==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + '@types/react': '>18.0.0' + '@types/react-dom': '>18.0.0' + '@vitest/browser': '>=2.1.0' + react: '>18.0.0' + react-dom: '>18.0.0' + vitest: '>=2.1.0' + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + vitest@3.0.5: + resolution: {integrity: sha512-4dof+HvqONw9bvsYxtkfUp2uHsTN9bV2CZIi1pWgoFpL1Lld8LA1ka9q/ONSsoScAKG7NVGf2stJTI7XRkXb2Q==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.0.5 + '@vitest/ui': 3.0.5 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/debug': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + vitest@3.0.7: + resolution: {integrity: sha512-IP7gPK3LS3Fvn44x30X1dM9vtawm0aesAa2yBIZ9vQf+qB69NXC5776+Qmcr7ohUXIQuLhk7xQR0aSUIDPqavg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.0.7 + '@vitest/ui': 3.0.7 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/debug': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + vitest@3.0.8: + resolution: {integrity: sha512-dfqAsNqRGUc8hB9OVR2P0w8PZPEckti2+5rdZip0WIz9WW0MnImJ8XiR61QhqLa92EQzKP2uPkzenKOAHyEIbA==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.0.8 + '@vitest/ui': 3.0.8 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/debug': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + + web-streams-polyfill@4.0.0-beta.3: + resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} + engines: {node: '>= 14'} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + + whatwg-fetch@3.6.20: + resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} + + whatwg-mimetype@3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + + whatwg-url@14.2.0: + resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} + engines: {node: '>=18'} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + when-exit@2.1.4: + resolution: {integrity: sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg==} + + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.18: + resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} + engines: {node: '>= 0.4'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.18.1: + resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xhr@2.6.0: + resolution: {integrity: sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==} + + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + + xml-parse-from-string@1.0.1: + resolution: {integrity: sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==} + + xml2js@0.5.0: + resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} + engines: {node: '>=4.0.0'} + + xmlbuilder@11.0.1: + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} + engines: {node: '>=4.0'} + + xmlbuilder@15.1.1: + resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} + engines: {node: '>=8.0'} + + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + xterm-addon-fit@0.5.0: + resolution: {integrity: sha512-DsS9fqhXHacEmsPxBJZvfj2la30Iz9xk+UKjhQgnYNkrUIN5CYLbw7WEfz117c7+S86S/tpHPfvNxJsF5/G8wQ==} + deprecated: This package is now deprecated. Move to @xterm/addon-fit instead. + peerDependencies: + xterm: ^4.0.0 + + xterm-addon-fit@0.8.0: + resolution: {integrity: sha512-yj3Np7XlvxxhYF/EJ7p3KHaMt6OdwQ+HDu573Vx1lRXsVxOcnVJs51RgjZOouIZOczTsskaS+CpXspK81/DLqw==} + deprecated: This package is now deprecated. Move to @xterm/addon-fit instead. + peerDependencies: + xterm: ^5.0.0 + + xterm-addon-search@0.8.2: + resolution: {integrity: sha512-I1863mjn8P6uVrqm/X+btalVsqjAKLhnhpbP7SavAOpEkI1jJhbHU2UTp7NjeRtcKTks6UWk/ycgds5snDSejg==} + deprecated: This package is now deprecated. Move to @xterm/addon-search instead. + peerDependencies: + xterm: ^4.0.0 + + xterm-addon-web-links@0.9.0: + resolution: {integrity: sha512-LIzi4jBbPlrKMZF3ihoyqayWyTXAwGfu4yprz1aK2p71e9UKXN6RRzVONR0L+Zd+Ik5tPVI9bwp9e8fDTQh49Q==} + deprecated: This package is now deprecated. Move to @xterm/addon-web-links instead. + peerDependencies: + xterm: ^5.0.0 + + xterm@4.19.0: + resolution: {integrity: sha512-c3Cp4eOVsYY5Q839dR5IejghRPpxciGmLWWaP9g+ppfMeBChMeLa1DCA+pmX/jyDZ+zxFOmlJL/82qVdayVoGQ==} + deprecated: This package is now deprecated. Move to @xterm/xterm instead. + + xterm@5.3.0: + resolution: {integrity: sha512-8QqjlekLUFTrU6x7xck1MsPzPA571K5zNqWm0M0oroYEWVOptZ0+ubQSkQ3uxIEhcIHRujJy6emDWX4A7qyFzg==} + deprecated: This package is now deprecated. Move to @xterm/xterm instead. + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yaku@0.16.7: + resolution: {integrity: sha512-Syu3IB3rZvKvYk7yTiyl1bo/jiEFaaStrgv1V2TIJTqYPStSMQVO8EQjg/z+DRzLq/4LIIharNT3iH1hylEIRw==} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + + yaml@2.3.1: + resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} + engines: {node: '>= 14'} + + yaml@2.7.0: + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} + engines: {node: '>= 14'} + hasBin: true + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yocto-queue@1.1.1: + resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} + engines: {node: '>=12.20'} + + yoctocolors-cjs@2.1.2: + resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + engines: {node: '>=18'} + + zod-to-json-schema@3.24.1: + resolution: {integrity: sha512-3h08nf3Vw3Wl3PK+q3ow/lIil81IT2Oa7YpQyUUDsEWbXveMesdfK1xBd2RhCkynwZndAxixji/7SYJJowr62w==} + peerDependencies: + zod: ^3.24.1 + + zod@3.24.1: + resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} + + zod@3.24.2: + resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} + + zustand@5.0.3: + resolution: {integrity: sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=18.0.0' + immer: '>=9.0.6' + react: '>=18.0.0' + use-sync-external-store: '>=1.2.0' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + use-sync-external-store: + optional: true + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + '@actions/core@1.11.1': + dependencies: + '@actions/exec': 1.1.1 + '@actions/http-client': 2.2.3 + + '@actions/exec@1.1.1': + dependencies: + '@actions/io': 1.1.3 + + '@actions/github@5.1.1(encoding@0.1.13)': + dependencies: + '@actions/http-client': 2.2.3 + '@octokit/core': 3.6.0(encoding@0.1.13) + '@octokit/plugin-paginate-rest': 2.21.3(@octokit/core@3.6.0(encoding@0.1.13)) + '@octokit/plugin-rest-endpoint-methods': 5.16.2(@octokit/core@3.6.0(encoding@0.1.13)) + transitivePeerDependencies: + - encoding + + '@actions/http-client@2.2.3': + dependencies: + tunnel: 0.0.6 + undici: 5.28.5 + + '@actions/io@1.1.3': {} + + '@alloc/quick-lru@5.2.0': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@anthropic-ai/sdk@0.19.2(encoding@0.1.13)': + dependencies: + '@types/node': 18.19.75 + '@types/node-fetch': 2.6.12 + abort-controller: 3.0.0 + agentkeepalive: 4.6.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0(encoding@0.1.13) + web-streams-polyfill: 3.3.3 + transitivePeerDependencies: + - encoding + + '@anthropic-ai/sdk@0.27.3(encoding@0.1.13)': + dependencies: + '@types/node': 18.19.75 + '@types/node-fetch': 2.6.12 + abort-controller: 3.0.0 + agentkeepalive: 4.6.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + '@anthropic-ai/sdk@0.39.0(encoding@0.1.13)': + dependencies: + '@types/node': 18.19.75 + '@types/node-fetch': 2.6.12 + abort-controller: 3.0.0 + agentkeepalive: 4.6.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + '@asamuzakjp/css-color@3.1.1': + dependencies: + '@csstools/css-calc': 2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) + '@csstools/css-color-parser': 3.0.8(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) + '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) + '@csstools/css-tokenizer': 3.0.3 + lru-cache: 10.4.3 + + '@ast-grep/napi-darwin-arm64@0.35.0': + optional: true + + '@ast-grep/napi-darwin-arm64@0.36.0': + optional: true + + '@ast-grep/napi-darwin-x64@0.35.0': + optional: true + + '@ast-grep/napi-darwin-x64@0.36.0': + optional: true + + '@ast-grep/napi-linux-arm64-gnu@0.35.0': + optional: true + + '@ast-grep/napi-linux-arm64-gnu@0.36.0': + optional: true + + '@ast-grep/napi-linux-arm64-musl@0.35.0': + optional: true + + '@ast-grep/napi-linux-arm64-musl@0.36.0': + optional: true + + '@ast-grep/napi-linux-x64-gnu@0.35.0': + optional: true + + '@ast-grep/napi-linux-x64-gnu@0.36.0': + optional: true + + '@ast-grep/napi-linux-x64-musl@0.35.0': + optional: true + + '@ast-grep/napi-linux-x64-musl@0.36.0': + optional: true + + '@ast-grep/napi-win32-arm64-msvc@0.35.0': + optional: true + + '@ast-grep/napi-win32-arm64-msvc@0.36.0': + optional: true + + '@ast-grep/napi-win32-ia32-msvc@0.35.0': + optional: true + + '@ast-grep/napi-win32-ia32-msvc@0.36.0': + optional: true + + '@ast-grep/napi-win32-x64-msvc@0.35.0': + optional: true + + '@ast-grep/napi-win32-x64-msvc@0.36.0': + optional: true + + '@ast-grep/napi@0.35.0': + optionalDependencies: + '@ast-grep/napi-darwin-arm64': 0.35.0 + '@ast-grep/napi-darwin-x64': 0.35.0 + '@ast-grep/napi-linux-arm64-gnu': 0.35.0 + '@ast-grep/napi-linux-arm64-musl': 0.35.0 + '@ast-grep/napi-linux-x64-gnu': 0.35.0 + '@ast-grep/napi-linux-x64-musl': 0.35.0 + '@ast-grep/napi-win32-arm64-msvc': 0.35.0 + '@ast-grep/napi-win32-ia32-msvc': 0.35.0 + '@ast-grep/napi-win32-x64-msvc': 0.35.0 + + '@ast-grep/napi@0.36.0': + optionalDependencies: + '@ast-grep/napi-darwin-arm64': 0.36.0 + '@ast-grep/napi-darwin-x64': 0.36.0 + '@ast-grep/napi-linux-arm64-gnu': 0.36.0 + '@ast-grep/napi-linux-arm64-musl': 0.36.0 + '@ast-grep/napi-linux-x64-gnu': 0.36.0 + '@ast-grep/napi-linux-x64-musl': 0.36.0 + '@ast-grep/napi-win32-arm64-msvc': 0.36.0 + '@ast-grep/napi-win32-ia32-msvc': 0.36.0 + '@ast-grep/napi-win32-x64-msvc': 0.36.0 + + '@aws-crypto/crc32@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.734.0 + tslib: 2.8.1 + + '@aws-crypto/sha256-browser@5.2.0': + dependencies: + '@aws-crypto/sha256-js': 5.2.0 + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-locate-window': 3.723.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-crypto/sha256-js@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.734.0 + tslib: 2.8.1 + + '@aws-crypto/supports-web-crypto@5.2.0': + dependencies: + tslib: 2.8.1 + + '@aws-crypto/util@5.2.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-sdk/client-bedrock-agent-runtime@3.765.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.758.0 + '@aws-sdk/credential-provider-node': 3.758.0 + '@aws-sdk/middleware-host-header': 3.734.0 + '@aws-sdk/middleware-logger': 3.734.0 + '@aws-sdk/middleware-recursion-detection': 3.734.0 + '@aws-sdk/middleware-user-agent': 3.758.0 + '@aws-sdk/region-config-resolver': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.743.0 + '@aws-sdk/util-user-agent-browser': 3.734.0 + '@aws-sdk/util-user-agent-node': 3.758.0 + '@smithy/config-resolver': 4.0.1 + '@smithy/core': 3.1.5 + '@smithy/eventstream-serde-browser': 4.0.1 + '@smithy/eventstream-serde-config-resolver': 4.0.1 + '@smithy/eventstream-serde-node': 4.0.1 + '@smithy/fetch-http-handler': 5.0.1 + '@smithy/hash-node': 4.0.1 + '@smithy/invalid-dependency': 4.0.1 + '@smithy/middleware-content-length': 4.0.1 + '@smithy/middleware-endpoint': 4.0.6 + '@smithy/middleware-retry': 4.0.7 + '@smithy/middleware-serde': 4.0.2 + '@smithy/middleware-stack': 4.0.1 + '@smithy/node-config-provider': 4.0.1 + '@smithy/node-http-handler': 4.0.3 + '@smithy/protocol-http': 5.0.1 + '@smithy/smithy-client': 4.1.6 + '@smithy/types': 4.1.0 + '@smithy/url-parser': 4.0.1 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.7 + '@smithy/util-defaults-mode-node': 4.0.7 + '@smithy/util-endpoints': 3.0.1 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-retry': 4.0.1 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-bedrock-runtime@3.758.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.758.0 + '@aws-sdk/credential-provider-node': 3.758.0 + '@aws-sdk/middleware-host-header': 3.734.0 + '@aws-sdk/middleware-logger': 3.734.0 + '@aws-sdk/middleware-recursion-detection': 3.734.0 + '@aws-sdk/middleware-user-agent': 3.758.0 + '@aws-sdk/region-config-resolver': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.743.0 + '@aws-sdk/util-user-agent-browser': 3.734.0 + '@aws-sdk/util-user-agent-node': 3.758.0 + '@smithy/config-resolver': 4.0.1 + '@smithy/core': 3.1.5 + '@smithy/eventstream-serde-browser': 4.0.1 + '@smithy/eventstream-serde-config-resolver': 4.0.1 + '@smithy/eventstream-serde-node': 4.0.1 + '@smithy/fetch-http-handler': 5.0.1 + '@smithy/hash-node': 4.0.1 + '@smithy/invalid-dependency': 4.0.1 + '@smithy/middleware-content-length': 4.0.1 + '@smithy/middleware-endpoint': 4.0.6 + '@smithy/middleware-retry': 4.0.7 + '@smithy/middleware-serde': 4.0.2 + '@smithy/middleware-stack': 4.0.1 + '@smithy/node-config-provider': 4.0.1 + '@smithy/node-http-handler': 4.0.3 + '@smithy/protocol-http': 5.0.1 + '@smithy/smithy-client': 4.1.6 + '@smithy/types': 4.1.0 + '@smithy/url-parser': 4.0.1 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.7 + '@smithy/util-defaults-mode-node': 4.0.7 + '@smithy/util-endpoints': 3.0.1 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-retry': 4.0.1 + '@smithy/util-stream': 4.1.2 + '@smithy/util-utf8': 4.0.0 + '@types/uuid': 9.0.8 + tslib: 2.8.1 + uuid: 9.0.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-kendra@3.758.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.758.0 + '@aws-sdk/credential-provider-node': 3.758.0 + '@aws-sdk/middleware-host-header': 3.734.0 + '@aws-sdk/middleware-logger': 3.734.0 + '@aws-sdk/middleware-recursion-detection': 3.734.0 + '@aws-sdk/middleware-user-agent': 3.758.0 + '@aws-sdk/region-config-resolver': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.743.0 + '@aws-sdk/util-user-agent-browser': 3.734.0 + '@aws-sdk/util-user-agent-node': 3.758.0 + '@smithy/config-resolver': 4.0.1 + '@smithy/core': 3.1.5 + '@smithy/fetch-http-handler': 5.0.1 + '@smithy/hash-node': 4.0.1 + '@smithy/invalid-dependency': 4.0.1 + '@smithy/middleware-content-length': 4.0.1 + '@smithy/middleware-endpoint': 4.0.6 + '@smithy/middleware-retry': 4.0.7 + '@smithy/middleware-serde': 4.0.2 + '@smithy/middleware-stack': 4.0.1 + '@smithy/node-config-provider': 4.0.1 + '@smithy/node-http-handler': 4.0.3 + '@smithy/protocol-http': 5.0.1 + '@smithy/smithy-client': 4.1.6 + '@smithy/types': 4.1.0 + '@smithy/url-parser': 4.0.1 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.7 + '@smithy/util-defaults-mode-node': 4.0.7 + '@smithy/util-endpoints': 3.0.1 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-retry': 4.0.1 + '@smithy/util-utf8': 4.0.0 + '@types/uuid': 9.0.8 + tslib: 2.8.1 + uuid: 9.0.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sso@3.758.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.758.0 + '@aws-sdk/middleware-host-header': 3.734.0 + '@aws-sdk/middleware-logger': 3.734.0 + '@aws-sdk/middleware-recursion-detection': 3.734.0 + '@aws-sdk/middleware-user-agent': 3.758.0 + '@aws-sdk/region-config-resolver': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.743.0 + '@aws-sdk/util-user-agent-browser': 3.734.0 + '@aws-sdk/util-user-agent-node': 3.758.0 + '@smithy/config-resolver': 4.0.1 + '@smithy/core': 3.1.5 + '@smithy/fetch-http-handler': 5.0.1 + '@smithy/hash-node': 4.0.1 + '@smithy/invalid-dependency': 4.0.1 + '@smithy/middleware-content-length': 4.0.1 + '@smithy/middleware-endpoint': 4.0.6 + '@smithy/middleware-retry': 4.0.7 + '@smithy/middleware-serde': 4.0.2 + '@smithy/middleware-stack': 4.0.1 + '@smithy/node-config-provider': 4.0.1 + '@smithy/node-http-handler': 4.0.3 + '@smithy/protocol-http': 5.0.1 + '@smithy/smithy-client': 4.1.6 + '@smithy/types': 4.1.0 + '@smithy/url-parser': 4.0.1 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.7 + '@smithy/util-defaults-mode-node': 4.0.7 + '@smithy/util-endpoints': 3.0.1 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-retry': 4.0.1 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/core@3.758.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/core': 3.1.5 + '@smithy/node-config-provider': 4.0.1 + '@smithy/property-provider': 4.0.1 + '@smithy/protocol-http': 5.0.1 + '@smithy/signature-v4': 5.0.1 + '@smithy/smithy-client': 4.1.6 + '@smithy/types': 4.1.0 + '@smithy/util-middleware': 4.0.1 + fast-xml-parser: 4.4.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-env@3.758.0': + dependencies: + '@aws-sdk/core': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-http@3.758.0': + dependencies: + '@aws-sdk/core': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/fetch-http-handler': 5.0.1 + '@smithy/node-http-handler': 4.0.3 + '@smithy/property-provider': 4.0.1 + '@smithy/protocol-http': 5.0.1 + '@smithy/smithy-client': 4.1.6 + '@smithy/types': 4.1.0 + '@smithy/util-stream': 4.1.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-ini@3.758.0': + dependencies: + '@aws-sdk/core': 3.758.0 + '@aws-sdk/credential-provider-env': 3.758.0 + '@aws-sdk/credential-provider-http': 3.758.0 + '@aws-sdk/credential-provider-process': 3.758.0 + '@aws-sdk/credential-provider-sso': 3.758.0 + '@aws-sdk/credential-provider-web-identity': 3.758.0 + '@aws-sdk/nested-clients': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/credential-provider-imds': 4.0.1 + '@smithy/property-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-node@3.758.0': + dependencies: + '@aws-sdk/credential-provider-env': 3.758.0 + '@aws-sdk/credential-provider-http': 3.758.0 + '@aws-sdk/credential-provider-ini': 3.758.0 + '@aws-sdk/credential-provider-process': 3.758.0 + '@aws-sdk/credential-provider-sso': 3.758.0 + '@aws-sdk/credential-provider-web-identity': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/credential-provider-imds': 4.0.1 + '@smithy/property-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-process@3.758.0': + dependencies: + '@aws-sdk/core': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-sso@3.758.0': + dependencies: + '@aws-sdk/client-sso': 3.758.0 + '@aws-sdk/core': 3.758.0 + '@aws-sdk/token-providers': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-web-identity@3.758.0': + dependencies: + '@aws-sdk/core': 3.758.0 + '@aws-sdk/nested-clients': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/middleware-host-header@3.734.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-logger@3.734.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-recursion-detection@3.734.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-user-agent@3.758.0': + dependencies: + '@aws-sdk/core': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.743.0 + '@smithy/core': 3.1.5 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@aws-sdk/nested-clients@3.758.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.758.0 + '@aws-sdk/middleware-host-header': 3.734.0 + '@aws-sdk/middleware-logger': 3.734.0 + '@aws-sdk/middleware-recursion-detection': 3.734.0 + '@aws-sdk/middleware-user-agent': 3.758.0 + '@aws-sdk/region-config-resolver': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.743.0 + '@aws-sdk/util-user-agent-browser': 3.734.0 + '@aws-sdk/util-user-agent-node': 3.758.0 '@smithy/config-resolver': 4.0.1 '@smithy/core': 3.1.5 '@smithy/fetch-http-handler': 5.0.1 @@ -8865,2538 +11877,4573 @@ snapshots: '@smithy/util-utf8': 4.0.0 tslib: 2.8.1 transitivePeerDependencies: - - aws-crt + - aws-crt + + '@aws-sdk/region-config-resolver@3.734.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/node-config-provider': 4.0.1 + '@smithy/types': 4.1.0 + '@smithy/util-config-provider': 4.0.0 + '@smithy/util-middleware': 4.0.1 + tslib: 2.8.1 + + '@aws-sdk/token-providers@3.758.0': + dependencies: + '@aws-sdk/nested-clients': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/types@3.734.0': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@aws-sdk/util-endpoints@3.743.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/types': 4.1.0 + '@smithy/util-endpoints': 3.0.1 + tslib: 2.8.1 + + '@aws-sdk/util-locate-window@3.723.0': + dependencies: + tslib: 2.8.1 + + '@aws-sdk/util-user-agent-browser@3.734.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/types': 4.1.0 + bowser: 2.11.0 + tslib: 2.8.1 + + '@aws-sdk/util-user-agent-node@3.758.0': + dependencies: + '@aws-sdk/middleware-user-agent': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/node-config-provider': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@azure-rest/core-client@1.4.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.9.0 + '@azure/core-rest-pipeline': 1.19.0 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.11.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/abort-controller@2.1.2': + dependencies: + tslib: 2.8.1 + + '@azure/core-auth@1.9.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-util': 1.11.0 + tslib: 2.8.1 + + '@azure/core-rest-pipeline@1.19.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.9.0 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.11.0 + '@azure/logger': 1.1.4 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-sse@2.1.3': + dependencies: + tslib: 2.8.1 + + '@azure/core-tracing@1.2.0': + dependencies: + tslib: 2.8.1 + + '@azure/core-util@1.11.0': + dependencies: + '@azure/abort-controller': 2.1.2 + tslib: 2.8.1 + + '@azure/logger@1.1.4': + dependencies: + tslib: 2.8.1 + + '@azure/openai@1.0.0-beta.13': + dependencies: + '@azure-rest/core-client': 1.4.0 + '@azure/core-auth': 1.9.0 + '@azure/core-rest-pipeline': 1.19.0 + '@azure/core-sse': 2.1.3 + '@azure/core-util': 1.11.0 + '@azure/logger': 1.1.4 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.8': {} + + '@babel/core@7.26.8': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.8 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.8) + '@babel/helpers': 7.26.7 + '@babel/parser': 7.26.8 + '@babel/template': 7.26.8 + '@babel/traverse': 7.26.8 + '@babel/types': 7.26.8 + '@types/gensync': 1.0.4 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.8': + dependencies: + '@babel/parser': 7.26.8 + '@babel/types': 7.26.8 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.26.5': + dependencies: + '@babel/compat-data': 7.26.8 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.26.8 + '@babel/types': 7.26.8 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.8)': + dependencies: + '@babel/core': 7.26.8 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.8 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.26.5': {} + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.26.7': + dependencies: + '@babel/template': 7.26.8 + '@babel/types': 7.26.8 + + '@babel/parser@7.26.8': + dependencies: + '@babel/types': 7.26.8 + + '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.8)': + dependencies: + '@babel/core': 7.26.8 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.8)': + dependencies: + '@babel/core': 7.26.8 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.8)': + dependencies: + '@babel/core': 7.26.8 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/runtime@7.26.7': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.26.8': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.8 + '@babel/types': 7.26.8 + + '@babel/traverse@7.26.8': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.8 + '@babel/parser': 7.26.8 + '@babel/template': 7.26.8 + '@babel/types': 7.26.8 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.8': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@bcoe/v8-coverage@1.0.2': {} + + '@browserbasehq/sdk@2.3.0(encoding@0.1.13)': + dependencies: + '@types/node': 18.19.75 + '@types/node-fetch': 2.6.12 + abort-controller: 3.0.0 + agentkeepalive: 4.6.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + '@browserbasehq/stagehand@1.13.0(@playwright/test@1.50.1)(bufferutil@4.0.9)(deepmerge@4.3.1)(dotenv@16.4.7)(encoding@0.1.13)(openai@4.87.3(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.2))(utf-8-validate@6.0.5)(zod@3.24.2)': + dependencies: + '@anthropic-ai/sdk': 0.27.3(encoding@0.1.13) + '@browserbasehq/sdk': 2.3.0(encoding@0.1.13) + '@playwright/test': 1.50.1 + deepmerge: 4.3.1 + dotenv: 16.4.7 + openai: 4.87.3(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.2) + ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) + zod: 3.24.2 + zod-to-json-schema: 3.24.1(zod@3.24.2) + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@bufbuild/protobuf@2.2.3': {} + + '@bundled-es-modules/cookie@2.0.1': + dependencies: + cookie: 0.7.2 + + '@bundled-es-modules/statuses@1.0.1': + dependencies: + statuses: 2.0.1 + + '@bundled-es-modules/tough-cookie@0.1.6': + dependencies: + '@types/tough-cookie': 4.0.5 + tough-cookie: 4.1.4 + + '@cfworker/json-schema@4.1.1': {} + + '@chakra-ui/anatomy@2.3.4': {} + + '@chakra-ui/anatomy@2.3.5': {} + + '@chakra-ui/hooks@2.4.3(react@18.3.1)': + dependencies: + '@chakra-ui/utils': 2.2.3(react@18.3.1) + '@zag-js/element-size': 0.31.1 + copy-to-clipboard: 3.3.3 + framesync: 6.1.2 + react: 18.3.1 + + '@chakra-ui/react@2.10.4(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(framer-motion@11.18.2(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/hooks': 2.4.3(react@18.3.1) + '@chakra-ui/styled-system': 2.12.1(react@18.3.1) + '@chakra-ui/theme': 3.4.7(@chakra-ui/styled-system@2.12.1(react@18.3.1))(react@18.3.1) + '@chakra-ui/utils': 2.2.3(react@18.3.1) + '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) + '@popperjs/core': 2.11.8 + '@zag-js/focus-visible': 0.31.1 + aria-hidden: 1.2.4 + framer-motion: 11.18.2(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-fast-compare: 3.2.2 + react-focus-lock: 2.13.6(@types/react@18.3.18)(react@18.3.1) + react-remove-scroll: 2.6.3(@types/react@18.3.18)(react@18.3.1) + transitivePeerDependencies: + - '@types/react' + + '@chakra-ui/styled-system@2.12.1(react@18.3.1)': + dependencies: + '@chakra-ui/utils': 2.2.3(react@18.3.1) + csstype: 3.1.3 + transitivePeerDependencies: + - react + + '@chakra-ui/theme-tools@2.2.6(@chakra-ui/styled-system@2.12.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/anatomy': 2.3.4 + '@chakra-ui/styled-system': 2.12.1(react@18.3.1) + '@chakra-ui/utils': 2.2.2(react@18.3.1) + color2k: 2.0.3 + transitivePeerDependencies: + - react + + '@chakra-ui/theme-tools@2.2.7(@chakra-ui/styled-system@2.12.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/anatomy': 2.3.5 + '@chakra-ui/styled-system': 2.12.1(react@18.3.1) + '@chakra-ui/utils': 2.2.3(react@18.3.1) + color2k: 2.0.3 + transitivePeerDependencies: + - react + + '@chakra-ui/theme@3.4.7(@chakra-ui/styled-system@2.12.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/anatomy': 2.3.5 + '@chakra-ui/styled-system': 2.12.1(react@18.3.1) + '@chakra-ui/theme-tools': 2.2.7(@chakra-ui/styled-system@2.12.1(react@18.3.1))(react@18.3.1) + '@chakra-ui/utils': 2.2.3(react@18.3.1) + transitivePeerDependencies: + - react + + '@chakra-ui/utils@2.2.2(react@18.3.1)': + dependencies: + '@types/lodash.mergewith': 4.6.9 + lodash.mergewith: 4.6.2 + react: 18.3.1 + + '@chakra-ui/utils@2.2.3(react@18.3.1)': + dependencies: + '@types/lodash.mergewith': 4.6.9 + lodash.mergewith: 4.6.2 + react: 18.3.1 + + '@changesets/apply-release-plan@7.0.8': + dependencies: + '@changesets/config': 3.0.5 + '@changesets/get-version-range-type': 0.4.0 + '@changesets/git': 3.0.2 + '@changesets/should-skip-package': 0.1.1 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + detect-indent: 6.1.0 + fs-extra: 7.0.1 + lodash.startcase: 4.4.0 + outdent: 0.5.0 + prettier: 2.8.8 + resolve-from: 5.0.0 + semver: 7.7.1 + + '@changesets/assemble-release-plan@6.0.5': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.2 + '@changesets/should-skip-package': 0.1.1 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + semver: 7.7.1 + + '@changesets/changelog-git@0.2.0': + dependencies: + '@changesets/types': 6.0.0 + + '@changesets/cli@2.27.12': + dependencies: + '@changesets/apply-release-plan': 7.0.8 + '@changesets/assemble-release-plan': 6.0.5 + '@changesets/changelog-git': 0.2.0 + '@changesets/config': 3.0.5 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.2 + '@changesets/get-release-plan': 4.0.6 + '@changesets/git': 3.0.2 + '@changesets/logger': 0.1.1 + '@changesets/pre': 2.0.1 + '@changesets/read': 0.6.2 + '@changesets/should-skip-package': 0.1.1 + '@changesets/types': 6.0.0 + '@changesets/write': 0.3.2 + '@manypkg/get-packages': 1.1.3 + ansi-colors: 4.1.3 + ci-info: 3.9.0 + enquirer: 2.4.1 + external-editor: 3.1.0 + fs-extra: 7.0.1 + mri: 1.2.0 + p-limit: 2.3.0 + package-manager-detector: 0.2.9 + picocolors: 1.1.1 + resolve-from: 5.0.0 + semver: 7.7.1 + spawndamnit: 3.0.1 + term-size: 2.2.1 + + '@changesets/config@3.0.5': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.2 + '@changesets/logger': 0.1.1 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + micromatch: 4.0.8 + + '@changesets/errors@0.2.0': + dependencies: + extendable-error: 0.1.7 + + '@changesets/get-dependents-graph@2.1.2': + dependencies: + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + picocolors: 1.1.1 + semver: 7.7.1 + + '@changesets/get-release-plan@4.0.6': + dependencies: + '@changesets/assemble-release-plan': 6.0.5 + '@changesets/config': 3.0.5 + '@changesets/pre': 2.0.1 + '@changesets/read': 0.6.2 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + + '@changesets/get-version-range-type@0.4.0': {} + + '@changesets/git@3.0.2': + dependencies: + '@changesets/errors': 0.2.0 + '@manypkg/get-packages': 1.1.3 + is-subdir: 1.2.0 + micromatch: 4.0.8 + spawndamnit: 3.0.1 + + '@changesets/logger@0.1.1': + dependencies: + picocolors: 1.1.1 + + '@changesets/parse@0.4.0': + dependencies: + '@changesets/types': 6.0.0 + js-yaml: 3.14.1 + + '@changesets/pre@2.0.1': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + + '@changesets/read@0.6.2': + dependencies: + '@changesets/git': 3.0.2 + '@changesets/logger': 0.1.1 + '@changesets/parse': 0.4.0 + '@changesets/types': 6.0.0 + fs-extra: 7.0.1 + p-filter: 2.1.0 + picocolors: 1.1.1 + + '@changesets/should-skip-package@0.1.1': + dependencies: + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + + '@changesets/types@4.1.0': {} + + '@changesets/types@6.0.0': {} + + '@changesets/write@0.3.2': + dependencies: + '@changesets/types': 6.0.0 + fs-extra: 7.0.1 + human-id: 1.0.2 + prettier: 2.8.8 + + '@clack/core@0.3.5': + dependencies: + picocolors: 1.1.1 + sisteransi: 1.0.5 + + '@clack/core@0.4.1': + dependencies: + picocolors: 1.1.1 + sisteransi: 1.0.5 + + '@clack/prompts@0.10.0': + dependencies: + '@clack/core': 0.4.1 + picocolors: 1.1.1 + sisteransi: 1.0.5 + + '@clack/prompts@0.6.3': + dependencies: + '@clack/core': 0.3.5 + picocolors: 1.1.1 + sisteransi: 1.0.5 + + '@commitlint/cli@19.7.1(@types/node@20.17.17)(typescript@5.7.3)': + dependencies: + '@commitlint/format': 19.5.0 + '@commitlint/lint': 19.7.1 + '@commitlint/load': 19.6.1(@types/node@20.17.17)(typescript@5.7.3) + '@commitlint/read': 19.5.0 + '@commitlint/types': 19.5.0 + tinyexec: 0.3.2 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/config-conventional@19.7.1': + dependencies: + '@commitlint/types': 19.5.0 + conventional-changelog-conventionalcommits: 7.0.2 + + '@commitlint/config-validator@19.5.0': + dependencies: + '@commitlint/types': 19.5.0 + ajv: 8.17.1 + + '@commitlint/ensure@19.5.0': + dependencies: + '@commitlint/types': 19.5.0 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + lodash.snakecase: 4.1.1 + lodash.startcase: 4.4.0 + lodash.upperfirst: 4.3.1 + + '@commitlint/execute-rule@19.5.0': {} + + '@commitlint/format@19.5.0': + dependencies: + '@commitlint/types': 19.5.0 + chalk: 5.4.1 + + '@commitlint/is-ignored@19.7.1': + dependencies: + '@commitlint/types': 19.5.0 + semver: 7.7.1 + + '@commitlint/lint@19.7.1': + dependencies: + '@commitlint/is-ignored': 19.7.1 + '@commitlint/parse': 19.5.0 + '@commitlint/rules': 19.6.0 + '@commitlint/types': 19.5.0 + + '@commitlint/load@19.6.1(@types/node@20.17.17)(typescript@5.7.3)': + dependencies: + '@commitlint/config-validator': 19.5.0 + '@commitlint/execute-rule': 19.5.0 + '@commitlint/resolve-extends': 19.5.0 + '@commitlint/types': 19.5.0 + chalk: 5.4.1 + cosmiconfig: 9.0.0(typescript@5.7.3) + cosmiconfig-typescript-loader: 6.1.0(@types/node@20.17.17)(cosmiconfig@9.0.0(typescript@5.7.3))(typescript@5.7.3) + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + lodash.uniq: 4.5.0 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/message@19.5.0': {} + + '@commitlint/parse@19.5.0': + dependencies: + '@commitlint/types': 19.5.0 + conventional-changelog-angular: 7.0.0 + conventional-commits-parser: 5.0.0 + + '@commitlint/read@19.5.0': + dependencies: + '@commitlint/top-level': 19.5.0 + '@commitlint/types': 19.5.0 + git-raw-commits: 4.0.0 + minimist: 1.2.8 + tinyexec: 0.3.2 + + '@commitlint/resolve-extends@19.5.0': + dependencies: + '@commitlint/config-validator': 19.5.0 + '@commitlint/types': 19.5.0 + global-directory: 4.0.1 + import-meta-resolve: 4.1.0 + lodash.mergewith: 4.6.2 + resolve-from: 5.0.0 + + '@commitlint/rules@19.6.0': + dependencies: + '@commitlint/ensure': 19.5.0 + '@commitlint/message': 19.5.0 + '@commitlint/to-lines': 19.5.0 + '@commitlint/types': 19.5.0 + + '@commitlint/to-lines@19.5.0': {} + + '@commitlint/top-level@19.5.0': + dependencies: + find-up: 7.0.0 + + '@commitlint/types@19.5.0': + dependencies: + '@types/conventional-commits-parser': 5.0.1 + chalk: 5.4.1 + + '@computer-use/default-clipboard-provider@4.2.0(@computer-use/nut-js@4.2.0(encoding@0.1.13))': + dependencies: + '@computer-use/nut-js': 4.2.0(encoding@0.1.13) + clipboardy: 2.3.0 + + '@computer-use/libnut-darwin@2.7.1': + dependencies: + bindings: 1.5.0 + optionalDependencies: + '@computer-use/node-mac-permissions': 2.2.2 + + '@computer-use/libnut-linux@2.7.1': + dependencies: + bindings: 1.5.0 + optionalDependencies: + '@computer-use/node-mac-permissions': 2.2.1 + + '@computer-use/libnut-win32@2.7.1': + dependencies: + bindings: 1.5.0 + optionalDependencies: + '@computer-use/node-mac-permissions': 2.2.1 + + '@computer-use/libnut@4.2.0(@computer-use/nut-js@4.2.0(encoding@0.1.13))': + dependencies: + '@computer-use/libnut-darwin': 2.7.1 + '@computer-use/libnut-linux': 2.7.1 + '@computer-use/libnut-win32': 2.7.1 + '@computer-use/nut-js': 4.2.0(encoding@0.1.13) + + '@computer-use/mac-screen-capture-permissions@1.0.2': + dependencies: + electron-util: 0.17.2 + execa: 5.1.1 + macos-version: 5.2.1 + + '@computer-use/node-mac-permissions@2.2.1': + dependencies: + bindings: 1.5.0 + node-addon-api: 5.0.0 + optional: true + + '@computer-use/node-mac-permissions@2.2.2': + dependencies: + bindings: 1.5.0 + node-addon-api: 5.0.0 + + '@computer-use/nut-js@4.2.0(encoding@0.1.13)': + dependencies: + '@computer-use/default-clipboard-provider': 4.2.0(@computer-use/nut-js@4.2.0(encoding@0.1.13)) + '@computer-use/libnut': 4.2.0(@computer-use/nut-js@4.2.0(encoding@0.1.13)) + '@computer-use/provider-interfaces': 4.2.0(encoding@0.1.13) + '@computer-use/shared': 4.2.0(encoding@0.1.13) + jimp: 0.22.10(encoding@0.1.13) + node-abort-controller: 3.1.1 + transitivePeerDependencies: + - debug + - encoding + + '@computer-use/provider-interfaces@4.2.0(encoding@0.1.13)': + dependencies: + '@computer-use/shared': 4.2.0(encoding@0.1.13) + transitivePeerDependencies: + - debug + - encoding + + '@computer-use/shared@4.2.0(encoding@0.1.13)': + dependencies: + jimp: 0.22.10(encoding@0.1.13) + node-abort-controller: 3.1.1 + transitivePeerDependencies: + - debug + - encoding + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@csstools/color-helpers@5.0.2': {} + + '@csstools/css-calc@2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) + '@csstools/css-tokenizer': 3.0.3 + + '@csstools/css-color-parser@3.0.8(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': + dependencies: + '@csstools/color-helpers': 5.0.2 + '@csstools/css-calc': 2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) + '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) + '@csstools/css-tokenizer': 3.0.3 + + '@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3)': + dependencies: + '@csstools/css-tokenizer': 3.0.3 + + '@csstools/css-tokenizer@3.0.3': {} + + '@dqbd/tiktoken@1.0.20': {} + + '@electron-forge/cli@7.7.0(encoding@0.1.13)': + dependencies: + '@electron-forge/core': 7.7.0(encoding@0.1.13) + '@electron-forge/core-utils': 7.7.0 + '@electron-forge/shared-types': 7.7.0 + '@electron/get': 3.1.0 + chalk: 4.1.2 + commander: 11.1.0 + debug: 4.4.0 + fs-extra: 10.1.0 + listr2: 7.0.2 + semver: 7.7.1 + transitivePeerDependencies: + - bluebird + - encoding + - supports-color + + '@electron-forge/core-utils@7.7.0': + dependencies: + '@electron-forge/shared-types': 7.7.0 + '@electron/rebuild': 3.7.1 + '@malept/cross-spawn-promise': 2.0.0 + chalk: 4.1.2 + debug: 4.4.0 + find-up: 5.0.0 + fs-extra: 10.1.0 + log-symbols: 4.1.0 + semver: 7.7.1 + transitivePeerDependencies: + - bluebird + - supports-color + + '@electron-forge/core@7.7.0(encoding@0.1.13)': + dependencies: + '@electron-forge/core-utils': 7.7.0 + '@electron-forge/maker-base': 7.7.0 + '@electron-forge/plugin-base': 7.7.0 + '@electron-forge/publisher-base': 7.7.0 + '@electron-forge/shared-types': 7.7.0 + '@electron-forge/template-base': 7.7.0 + '@electron-forge/template-vite': 7.7.0 + '@electron-forge/template-vite-typescript': 7.7.0 + '@electron-forge/template-webpack': 7.7.0 + '@electron-forge/template-webpack-typescript': 7.7.0 + '@electron-forge/tracer': 7.7.0 + '@electron/get': 3.1.0 + '@electron/packager': 18.3.6 + '@electron/rebuild': 3.7.1 + '@malept/cross-spawn-promise': 2.0.0 + chalk: 4.1.2 + debug: 4.4.0 + fast-glob: 3.3.3 + filenamify: 4.3.0 + find-up: 5.0.0 + fs-extra: 10.1.0 + global-dirs: 3.0.1 + got: 11.8.6 + interpret: 3.1.1 + listr2: 7.0.2 + lodash: 4.17.21 + log-symbols: 4.1.0 + node-fetch: 2.7.0(encoding@0.1.13) + rechoir: 0.8.0 + semver: 7.7.1 + source-map-support: 0.5.21 + sudo-prompt: 9.2.1 + username: 5.1.0 + transitivePeerDependencies: + - bluebird + - encoding + - supports-color + + '@electron-forge/maker-base@7.7.0': + dependencies: + '@electron-forge/shared-types': 7.7.0 + fs-extra: 10.1.0 + which: 2.0.2 + transitivePeerDependencies: + - bluebird + - supports-color + + '@electron-forge/maker-deb@7.7.0': + dependencies: + '@electron-forge/maker-base': 7.7.0 + '@electron-forge/shared-types': 7.7.0 + optionalDependencies: + electron-installer-debian: 3.2.0 + transitivePeerDependencies: + - bluebird + - supports-color + + '@electron-forge/maker-dmg@7.7.0': + dependencies: + '@electron-forge/maker-base': 7.7.0 + '@electron-forge/shared-types': 7.7.0 + fs-extra: 10.1.0 + optionalDependencies: + electron-installer-dmg: 5.0.1 + transitivePeerDependencies: + - bluebird + - supports-color + + '@electron-forge/maker-pkg@7.7.0': + dependencies: + '@electron-forge/maker-base': 7.7.0 + '@electron-forge/shared-types': 7.7.0 + '@electron/osx-sign': 1.3.2 + transitivePeerDependencies: + - bluebird + - supports-color + + '@electron-forge/maker-rpm@7.7.0': + dependencies: + '@electron-forge/maker-base': 7.7.0 + '@electron-forge/shared-types': 7.7.0 + optionalDependencies: + electron-installer-redhat: 3.4.0 + transitivePeerDependencies: + - bluebird + - supports-color + + '@electron-forge/maker-squirrel@7.7.0': + dependencies: + '@electron-forge/maker-base': 7.7.0 + '@electron-forge/shared-types': 7.7.0 + fs-extra: 10.1.0 + optionalDependencies: + electron-winstaller: 5.4.0 + transitivePeerDependencies: + - bluebird + - supports-color + + '@electron-forge/maker-zip@7.7.0': + dependencies: + '@electron-forge/maker-base': 7.7.0 + '@electron-forge/shared-types': 7.7.0 + cross-zip: 4.0.1 + fs-extra: 10.1.0 + got: 11.8.6 + transitivePeerDependencies: + - bluebird + - supports-color + + '@electron-forge/plugin-auto-unpack-natives@7.7.0': + dependencies: + '@electron-forge/plugin-base': 7.7.0 + '@electron-forge/shared-types': 7.7.0 + transitivePeerDependencies: + - bluebird + - supports-color + + '@electron-forge/plugin-base@7.7.0': + dependencies: + '@electron-forge/shared-types': 7.7.0 + transitivePeerDependencies: + - bluebird + - supports-color + + '@electron-forge/plugin-fuses@7.7.0(@electron/fuses@1.8.0)': + dependencies: + '@electron-forge/plugin-base': 7.7.0 + '@electron-forge/shared-types': 7.7.0 + '@electron/fuses': 1.8.0 + transitivePeerDependencies: + - bluebird + - supports-color + + '@electron-forge/plugin-vite@7.7.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': + dependencies: + '@electron-forge/core-utils': 7.7.0 + '@electron-forge/plugin-base': 7.7.0 + '@electron-forge/shared-types': 7.7.0 + '@electron-forge/web-multi-logger': 7.7.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) + chalk: 4.1.2 + debug: 4.4.0 + fs-extra: 10.1.0 + listr2: 7.0.2 + transitivePeerDependencies: + - bluebird + - bufferutil + - supports-color + - utf-8-validate + + '@electron-forge/publisher-base@7.7.0': + dependencies: + '@electron-forge/shared-types': 7.7.0 + transitivePeerDependencies: + - bluebird + - supports-color + + '@electron-forge/publisher-github@7.7.0(encoding@0.1.13)': + dependencies: + '@electron-forge/publisher-base': 7.7.0 + '@electron-forge/shared-types': 7.7.0 + '@octokit/core': 3.6.0(encoding@0.1.13) + '@octokit/plugin-retry': 3.0.9 + '@octokit/request-error': 5.1.1 + '@octokit/rest': 18.12.0(encoding@0.1.13) + '@octokit/types': 6.41.0 + chalk: 4.1.2 + debug: 4.4.0 + fs-extra: 10.1.0 + log-symbols: 4.1.0 + mime-types: 2.1.35 + transitivePeerDependencies: + - bluebird + - encoding + - supports-color + + '@electron-forge/shared-types@7.7.0': + dependencies: + '@electron-forge/tracer': 7.7.0 + '@electron/packager': 18.3.6 + '@electron/rebuild': 3.7.1 + listr2: 7.0.2 + transitivePeerDependencies: + - bluebird + - supports-color + + '@electron-forge/template-base@7.7.0': + dependencies: + '@electron-forge/core-utils': 7.7.0 + '@electron-forge/shared-types': 7.7.0 + '@malept/cross-spawn-promise': 2.0.0 + debug: 4.4.0 + fs-extra: 10.1.0 + username: 5.1.0 + transitivePeerDependencies: + - bluebird + - supports-color + + '@electron-forge/template-vite-typescript@7.7.0': + dependencies: + '@electron-forge/shared-types': 7.7.0 + '@electron-forge/template-base': 7.7.0 + fs-extra: 10.1.0 + transitivePeerDependencies: + - bluebird + - supports-color + + '@electron-forge/template-vite@7.7.0': + dependencies: + '@electron-forge/shared-types': 7.7.0 + '@electron-forge/template-base': 7.7.0 + fs-extra: 10.1.0 + transitivePeerDependencies: + - bluebird + - supports-color + + '@electron-forge/template-webpack-typescript@7.7.0': + dependencies: + '@electron-forge/shared-types': 7.7.0 + '@electron-forge/template-base': 7.7.0 + fs-extra: 10.1.0 + transitivePeerDependencies: + - bluebird + - supports-color + + '@electron-forge/template-webpack@7.7.0': + dependencies: + '@electron-forge/shared-types': 7.7.0 + '@electron-forge/template-base': 7.7.0 + fs-extra: 10.1.0 + transitivePeerDependencies: + - bluebird + - supports-color - '@aws-sdk/core@3.758.0': + '@electron-forge/tracer@7.7.0': dependencies: - '@aws-sdk/types': 3.734.0 - '@smithy/core': 3.1.5 - '@smithy/node-config-provider': 4.0.1 - '@smithy/property-provider': 4.0.1 - '@smithy/protocol-http': 5.0.1 - '@smithy/signature-v4': 5.0.1 - '@smithy/smithy-client': 4.1.6 - '@smithy/types': 4.1.0 - '@smithy/util-middleware': 4.0.1 - fast-xml-parser: 4.4.1 - tslib: 2.8.1 + chrome-trace-event: 1.0.4 - '@aws-sdk/credential-provider-env@3.758.0': + '@electron-forge/web-multi-logger@7.7.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: - '@aws-sdk/core': 3.758.0 - '@aws-sdk/types': 3.734.0 - '@smithy/property-provider': 4.0.1 - '@smithy/types': 4.1.0 - tslib: 2.8.1 + express: 4.21.2 + express-ws: 5.0.2(bufferutil@4.0.9)(express@4.21.2)(utf-8-validate@6.0.5) + xterm: 4.19.0 + xterm-addon-fit: 0.5.0(xterm@4.19.0) + xterm-addon-search: 0.8.2(xterm@4.19.0) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate - '@aws-sdk/credential-provider-http@3.758.0': + '@electron-toolkit/eslint-config-prettier@2.0.0(eslint@8.57.1)(prettier@3.5.0)': dependencies: - '@aws-sdk/core': 3.758.0 - '@aws-sdk/types': 3.734.0 - '@smithy/fetch-http-handler': 5.0.1 - '@smithy/node-http-handler': 4.0.3 - '@smithy/property-provider': 4.0.1 - '@smithy/protocol-http': 5.0.1 - '@smithy/smithy-client': 4.1.6 - '@smithy/types': 4.1.0 - '@smithy/util-stream': 4.1.2 - tslib: 2.8.1 + eslint: 8.57.1 + eslint-config-prettier: 9.1.0(eslint@8.57.1) + eslint-plugin-prettier: 5.2.3(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.5.0) + prettier: 3.5.0 + transitivePeerDependencies: + - '@types/eslint' - '@aws-sdk/credential-provider-ini@3.758.0': + '@electron-toolkit/eslint-config-ts@2.0.0(eslint@8.57.1)(typescript@5.7.3)': + dependencies: + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.7.3) + eslint: 8.57.1 + optionalDependencies: + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@electron-toolkit/preload@3.0.1(electron@34.1.1)': + dependencies: + electron: 34.1.1 + + '@electron-toolkit/tsconfig@1.0.1(@types/node@20.17.17)': + dependencies: + '@types/node': 20.17.17 + + '@electron-toolkit/tsconfig@1.0.1(@types/node@22.13.10)': + dependencies: + '@types/node': 22.13.10 + + '@electron-toolkit/utils@3.0.0(electron@34.1.1)': + dependencies: + electron: 34.1.1 + + '@electron-toolkit/utils@4.0.0(electron@34.1.1)': + dependencies: + electron: 34.1.1 + + '@electron/asar@3.3.1': + dependencies: + commander: 5.1.0 + glob: 7.2.3 + minimatch: 3.1.2 + + '@electron/fuses@1.8.0': + dependencies: + chalk: 4.1.2 + fs-extra: 9.1.0 + minimist: 1.2.8 + + '@electron/get@2.0.3': + dependencies: + debug: 4.4.0 + env-paths: 2.2.1 + fs-extra: 8.1.0 + got: 11.8.6 + progress: 2.0.3 + semver: 6.3.1 + sumchecker: 3.0.1 + optionalDependencies: + global-agent: 3.0.0 + transitivePeerDependencies: + - supports-color + + '@electron/get@3.1.0': + dependencies: + debug: 4.4.0 + env-paths: 2.2.1 + fs-extra: 8.1.0 + got: 11.8.6 + progress: 2.0.3 + semver: 6.3.1 + sumchecker: 3.0.1 + optionalDependencies: + global-agent: 3.0.0 + transitivePeerDependencies: + - supports-color + + '@electron/node-gyp@https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2': + dependencies: + env-paths: 2.2.1 + exponential-backoff: 3.1.2 + glob: 8.1.0 + graceful-fs: 4.2.11 + make-fetch-happen: 10.2.1 + nopt: 6.0.0 + proc-log: 2.0.1 + semver: 7.7.1 + tar: 6.2.1 + which: 2.0.2 + transitivePeerDependencies: + - bluebird + - supports-color + + '@electron/notarize@2.5.0': + dependencies: + debug: 4.4.0 + fs-extra: 9.1.0 + promise-retry: 2.0.1 + transitivePeerDependencies: + - supports-color + + '@electron/osx-sign@1.3.2': + dependencies: + compare-version: 0.1.2 + debug: 4.4.0 + fs-extra: 10.1.0 + isbinaryfile: 4.0.10 + minimist: 1.2.8 + plist: 3.1.0 + transitivePeerDependencies: + - supports-color + + '@electron/packager@18.3.6': + dependencies: + '@electron/asar': 3.3.1 + '@electron/get': 3.1.0 + '@electron/notarize': 2.5.0 + '@electron/osx-sign': 1.3.2 + '@electron/universal': 2.0.1 + '@electron/windows-sign': 1.2.0 + debug: 4.4.0 + extract-zip: 2.0.1 + filenamify: 4.3.0 + fs-extra: 11.3.0 + galactus: 1.0.0 + get-package-info: 1.0.0 + junk: 3.1.0 + parse-author: 2.0.0 + plist: 3.1.0 + resedit: 2.0.3 + resolve: 1.22.10 + semver: 7.7.1 + yargs-parser: 21.1.1 + transitivePeerDependencies: + - supports-color + + '@electron/rebuild@3.7.1': + dependencies: + '@electron/node-gyp': https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2 + '@malept/cross-spawn-promise': 2.0.0 + chalk: 4.1.2 + debug: 4.4.0 + detect-libc: 2.0.3 + fs-extra: 10.1.0 + got: 11.8.6 + node-abi: 3.74.0 + node-api-version: 0.2.0 + ora: 5.4.1 + read-binary-file-arch: 1.0.6 + semver: 7.7.1 + tar: 6.2.1 + yargs: 17.7.2 + transitivePeerDependencies: + - bluebird + - supports-color + + '@electron/universal@2.0.1': + dependencies: + '@electron/asar': 3.3.1 + '@malept/cross-spawn-promise': 2.0.0 + debug: 4.4.0 + dir-compare: 4.2.0 + fs-extra: 11.3.0 + minimatch: 9.0.5 + plist: 3.1.0 + transitivePeerDependencies: + - supports-color + + '@electron/windows-sign@1.2.0': + dependencies: + cross-dirname: 0.1.0 + debug: 4.4.0 + fs-extra: 11.3.0 + minimist: 1.2.8 + postject: 1.0.0-alpha.6 + transitivePeerDependencies: + - supports-color + + '@emnapi/runtime@1.3.1': dependencies: - '@aws-sdk/core': 3.758.0 - '@aws-sdk/credential-provider-env': 3.758.0 - '@aws-sdk/credential-provider-http': 3.758.0 - '@aws-sdk/credential-provider-process': 3.758.0 - '@aws-sdk/credential-provider-sso': 3.758.0 - '@aws-sdk/credential-provider-web-identity': 3.758.0 - '@aws-sdk/nested-clients': 3.758.0 - '@aws-sdk/types': 3.734.0 - '@smithy/credential-provider-imds': 4.0.1 - '@smithy/property-provider': 4.0.1 - '@smithy/shared-ini-file-loader': 4.0.1 - '@smithy/types': 4.1.0 tslib: 2.8.1 + optional: true + + '@emotion/babel-plugin@11.13.5': + dependencies: + '@babel/helper-module-imports': 7.25.9 + '@babel/runtime': 7.26.7 + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/serialize': 1.3.3 + babel-plugin-macros: 3.1.0 + convert-source-map: 1.9.0 + escape-string-regexp: 4.0.0 + find-root: 1.1.0 + source-map: 0.5.7 + stylis: 4.2.0 transitivePeerDependencies: - - aws-crt + - supports-color + + '@emotion/cache@11.14.0': + dependencies: + '@emotion/memoize': 0.9.0 + '@emotion/sheet': 1.4.0 + '@emotion/utils': 1.4.2 + '@emotion/weak-memoize': 0.4.0 + stylis: 4.2.0 - '@aws-sdk/credential-provider-node@3.758.0': + '@emotion/hash@0.9.2': {} + + '@emotion/is-prop-valid@1.2.2': dependencies: - '@aws-sdk/credential-provider-env': 3.758.0 - '@aws-sdk/credential-provider-http': 3.758.0 - '@aws-sdk/credential-provider-ini': 3.758.0 - '@aws-sdk/credential-provider-process': 3.758.0 - '@aws-sdk/credential-provider-sso': 3.758.0 - '@aws-sdk/credential-provider-web-identity': 3.758.0 - '@aws-sdk/types': 3.734.0 - '@smithy/credential-provider-imds': 4.0.1 - '@smithy/property-provider': 4.0.1 - '@smithy/shared-ini-file-loader': 4.0.1 - '@smithy/types': 4.1.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt + '@emotion/memoize': 0.8.1 - '@aws-sdk/credential-provider-process@3.758.0': + '@emotion/is-prop-valid@1.3.1': dependencies: - '@aws-sdk/core': 3.758.0 - '@aws-sdk/types': 3.734.0 - '@smithy/property-provider': 4.0.1 - '@smithy/shared-ini-file-loader': 4.0.1 - '@smithy/types': 4.1.0 - tslib: 2.8.1 + '@emotion/memoize': 0.9.0 - '@aws-sdk/credential-provider-sso@3.758.0': + '@emotion/memoize@0.8.1': {} + + '@emotion/memoize@0.9.0': {} + + '@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@aws-sdk/client-sso': 3.758.0 - '@aws-sdk/core': 3.758.0 - '@aws-sdk/token-providers': 3.758.0 - '@aws-sdk/types': 3.734.0 - '@smithy/property-provider': 4.0.1 - '@smithy/shared-ini-file-loader': 4.0.1 - '@smithy/types': 4.1.0 - tslib: 2.8.1 + '@babel/runtime': 7.26.7 + '@emotion/babel-plugin': 11.13.5 + '@emotion/cache': 11.14.0 + '@emotion/serialize': 1.3.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1) + '@emotion/utils': 1.4.2 + '@emotion/weak-memoize': 0.4.0 + hoist-non-react-statics: 3.3.2 + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 transitivePeerDependencies: - - aws-crt + - supports-color - '@aws-sdk/credential-provider-web-identity@3.758.0': + '@emotion/serialize@1.3.3': dependencies: - '@aws-sdk/core': 3.758.0 - '@aws-sdk/nested-clients': 3.758.0 - '@aws-sdk/types': 3.734.0 - '@smithy/property-provider': 4.0.1 - '@smithy/types': 4.1.0 - tslib: 2.8.1 + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/unitless': 0.10.0 + '@emotion/utils': 1.4.2 + csstype: 3.1.3 + + '@emotion/sheet@1.4.0': {} + + '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.26.7 + '@emotion/babel-plugin': 11.13.5 + '@emotion/is-prop-valid': 1.3.1 + '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) + '@emotion/serialize': 1.3.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1) + '@emotion/utils': 1.4.2 + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 transitivePeerDependencies: - - aws-crt + - supports-color - '@aws-sdk/middleware-host-header@3.734.0': + '@emotion/unitless@0.10.0': {} + + '@emotion/unitless@0.8.1': {} + + '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@18.3.1)': dependencies: - '@aws-sdk/types': 3.734.0 - '@smithy/protocol-http': 5.0.1 - '@smithy/types': 4.1.0 - tslib: 2.8.1 + react: 18.3.1 + + '@emotion/utils@1.4.2': {} + + '@emotion/weak-memoize@0.4.0': {} + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/aix-ppc64@0.23.1': + optional: true + + '@esbuild/aix-ppc64@0.24.2': + optional: true + + '@esbuild/aix-ppc64@0.25.0': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.23.1': + optional: true + + '@esbuild/android-arm64@0.24.2': + optional: true + + '@esbuild/android-arm64@0.25.0': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-arm@0.23.1': + optional: true + + '@esbuild/android-arm@0.24.2': + optional: true + + '@esbuild/android-arm@0.25.0': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/android-x64@0.23.1': + optional: true + + '@esbuild/android-x64@0.24.2': + optional: true + + '@esbuild/android-x64@0.25.0': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.23.1': + optional: true + + '@esbuild/darwin-arm64@0.24.2': + optional: true + + '@esbuild/darwin-arm64@0.25.0': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.23.1': + optional: true + + '@esbuild/darwin-x64@0.24.2': + optional: true + + '@esbuild/darwin-x64@0.25.0': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.23.1': + optional: true + + '@esbuild/freebsd-arm64@0.24.2': + optional: true + + '@esbuild/freebsd-arm64@0.25.0': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.23.1': + optional: true + + '@esbuild/freebsd-x64@0.24.2': + optional: true + + '@esbuild/freebsd-x64@0.25.0': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.23.1': + optional: true + + '@esbuild/linux-arm64@0.24.2': + optional: true + + '@esbuild/linux-arm64@0.25.0': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-arm@0.23.1': + optional: true + + '@esbuild/linux-arm@0.24.2': + optional: true + + '@esbuild/linux-arm@0.25.0': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.23.1': + optional: true + + '@esbuild/linux-ia32@0.24.2': + optional: true + + '@esbuild/linux-ia32@0.25.0': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.23.1': + optional: true + + '@esbuild/linux-loong64@0.24.2': + optional: true + + '@esbuild/linux-loong64@0.25.0': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.23.1': + optional: true + + '@esbuild/linux-mips64el@0.24.2': + optional: true + + '@esbuild/linux-mips64el@0.25.0': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.23.1': + optional: true + + '@esbuild/linux-ppc64@0.24.2': + optional: true + + '@esbuild/linux-ppc64@0.25.0': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.23.1': + optional: true - '@aws-sdk/middleware-logger@3.734.0': - dependencies: - '@aws-sdk/types': 3.734.0 - '@smithy/types': 4.1.0 - tslib: 2.8.1 + '@esbuild/linux-riscv64@0.24.2': + optional: true - '@aws-sdk/middleware-recursion-detection@3.734.0': - dependencies: - '@aws-sdk/types': 3.734.0 - '@smithy/protocol-http': 5.0.1 - '@smithy/types': 4.1.0 - tslib: 2.8.1 + '@esbuild/linux-riscv64@0.25.0': + optional: true - '@aws-sdk/middleware-user-agent@3.758.0': - dependencies: - '@aws-sdk/core': 3.758.0 - '@aws-sdk/types': 3.734.0 - '@aws-sdk/util-endpoints': 3.743.0 - '@smithy/core': 3.1.5 - '@smithy/protocol-http': 5.0.1 - '@smithy/types': 4.1.0 - tslib: 2.8.1 + '@esbuild/linux-s390x@0.21.5': + optional: true - '@aws-sdk/nested-clients@3.758.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.758.0 - '@aws-sdk/middleware-host-header': 3.734.0 - '@aws-sdk/middleware-logger': 3.734.0 - '@aws-sdk/middleware-recursion-detection': 3.734.0 - '@aws-sdk/middleware-user-agent': 3.758.0 - '@aws-sdk/region-config-resolver': 3.734.0 - '@aws-sdk/types': 3.734.0 - '@aws-sdk/util-endpoints': 3.743.0 - '@aws-sdk/util-user-agent-browser': 3.734.0 - '@aws-sdk/util-user-agent-node': 3.758.0 - '@smithy/config-resolver': 4.0.1 - '@smithy/core': 3.1.5 - '@smithy/fetch-http-handler': 5.0.1 - '@smithy/hash-node': 4.0.1 - '@smithy/invalid-dependency': 4.0.1 - '@smithy/middleware-content-length': 4.0.1 - '@smithy/middleware-endpoint': 4.0.6 - '@smithy/middleware-retry': 4.0.7 - '@smithy/middleware-serde': 4.0.2 - '@smithy/middleware-stack': 4.0.1 - '@smithy/node-config-provider': 4.0.1 - '@smithy/node-http-handler': 4.0.3 - '@smithy/protocol-http': 5.0.1 - '@smithy/smithy-client': 4.1.6 - '@smithy/types': 4.1.0 - '@smithy/url-parser': 4.0.1 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.7 - '@smithy/util-defaults-mode-node': 4.0.7 - '@smithy/util-endpoints': 3.0.1 - '@smithy/util-middleware': 4.0.1 - '@smithy/util-retry': 4.0.1 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt + '@esbuild/linux-s390x@0.23.1': + optional: true - '@aws-sdk/region-config-resolver@3.734.0': - dependencies: - '@aws-sdk/types': 3.734.0 - '@smithy/node-config-provider': 4.0.1 - '@smithy/types': 4.1.0 - '@smithy/util-config-provider': 4.0.0 - '@smithy/util-middleware': 4.0.1 - tslib: 2.8.1 + '@esbuild/linux-s390x@0.24.2': + optional: true - '@aws-sdk/token-providers@3.758.0': - dependencies: - '@aws-sdk/nested-clients': 3.758.0 - '@aws-sdk/types': 3.734.0 - '@smithy/property-provider': 4.0.1 - '@smithy/shared-ini-file-loader': 4.0.1 - '@smithy/types': 4.1.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt + '@esbuild/linux-s390x@0.25.0': + optional: true - '@aws-sdk/types@3.734.0': - dependencies: - '@smithy/types': 4.1.0 - tslib: 2.8.1 + '@esbuild/linux-x64@0.21.5': + optional: true - '@aws-sdk/util-endpoints@3.743.0': - dependencies: - '@aws-sdk/types': 3.734.0 - '@smithy/types': 4.1.0 - '@smithy/util-endpoints': 3.0.1 - tslib: 2.8.1 + '@esbuild/linux-x64@0.23.1': + optional: true - '@aws-sdk/util-locate-window@3.723.0': - dependencies: - tslib: 2.8.1 + '@esbuild/linux-x64@0.24.2': + optional: true - '@aws-sdk/util-user-agent-browser@3.734.0': - dependencies: - '@aws-sdk/types': 3.734.0 - '@smithy/types': 4.1.0 - bowser: 2.11.0 - tslib: 2.8.1 + '@esbuild/linux-x64@0.25.0': + optional: true - '@aws-sdk/util-user-agent-node@3.758.0': - dependencies: - '@aws-sdk/middleware-user-agent': 3.758.0 - '@aws-sdk/types': 3.734.0 - '@smithy/node-config-provider': 4.0.1 - '@smithy/types': 4.1.0 - tslib: 2.8.1 + '@esbuild/netbsd-arm64@0.24.2': + optional: true - '@azure-rest/core-client@1.4.0': - dependencies: - '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.9.0 - '@azure/core-rest-pipeline': 1.19.0 - '@azure/core-tracing': 1.2.0 - '@azure/core-util': 1.11.0 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color + '@esbuild/netbsd-arm64@0.25.0': + optional: true - '@azure/abort-controller@2.1.2': - dependencies: - tslib: 2.8.1 + '@esbuild/netbsd-x64@0.21.5': + optional: true - '@azure/core-auth@1.9.0': - dependencies: - '@azure/abort-controller': 2.1.2 - '@azure/core-util': 1.11.0 - tslib: 2.8.1 + '@esbuild/netbsd-x64@0.23.1': + optional: true - '@azure/core-rest-pipeline@1.19.0': - dependencies: - '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.9.0 - '@azure/core-tracing': 1.2.0 - '@azure/core-util': 1.11.0 - '@azure/logger': 1.1.4 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color + '@esbuild/netbsd-x64@0.24.2': + optional: true - '@azure/core-sse@2.1.3': - dependencies: - tslib: 2.8.1 + '@esbuild/netbsd-x64@0.25.0': + optional: true - '@azure/core-tracing@1.2.0': - dependencies: - tslib: 2.8.1 + '@esbuild/openbsd-arm64@0.23.1': + optional: true - '@azure/core-util@1.11.0': - dependencies: - '@azure/abort-controller': 2.1.2 - tslib: 2.8.1 + '@esbuild/openbsd-arm64@0.24.2': + optional: true - '@azure/logger@1.1.4': - dependencies: - tslib: 2.8.1 + '@esbuild/openbsd-arm64@0.25.0': + optional: true - '@azure/openai@1.0.0-beta.13': - dependencies: - '@azure-rest/core-client': 1.4.0 - '@azure/core-auth': 1.9.0 - '@azure/core-rest-pipeline': 1.19.0 - '@azure/core-sse': 2.1.3 - '@azure/core-util': 1.11.0 - '@azure/logger': 1.1.4 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color + '@esbuild/openbsd-x64@0.21.5': + optional: true - '@babel/code-frame@7.26.2': - dependencies: - '@babel/helper-validator-identifier': 7.25.9 - js-tokens: 4.0.0 - picocolors: 1.1.1 + '@esbuild/openbsd-x64@0.23.1': + optional: true - '@babel/compat-data@7.26.8': {} + '@esbuild/openbsd-x64@0.24.2': + optional: true - '@babel/core@7.26.8': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.8 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.8) - '@babel/helpers': 7.26.7 - '@babel/parser': 7.26.8 - '@babel/template': 7.26.8 - '@babel/traverse': 7.26.8 - '@babel/types': 7.26.8 - '@types/gensync': 1.0.4 - convert-source-map: 2.0.0 - debug: 4.4.0 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color + '@esbuild/openbsd-x64@0.25.0': + optional: true - '@babel/generator@7.26.8': - dependencies: - '@babel/parser': 7.26.8 - '@babel/types': 7.26.8 - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.1.0 + '@esbuild/sunos-x64@0.21.5': + optional: true - '@babel/helper-compilation-targets@7.26.5': - dependencies: - '@babel/compat-data': 7.26.8 - '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.4 - lru-cache: 5.1.1 - semver: 6.3.1 + '@esbuild/sunos-x64@0.23.1': + optional: true - '@babel/helper-module-imports@7.25.9': - dependencies: - '@babel/traverse': 7.26.8 - '@babel/types': 7.26.8 - transitivePeerDependencies: - - supports-color + '@esbuild/sunos-x64@0.24.2': + optional: true + + '@esbuild/sunos-x64@0.25.0': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true - '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.8)': - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.8 - transitivePeerDependencies: - - supports-color + '@esbuild/win32-arm64@0.23.1': + optional: true - '@babel/helper-plugin-utils@7.26.5': {} + '@esbuild/win32-arm64@0.24.2': + optional: true - '@babel/helper-string-parser@7.25.9': {} + '@esbuild/win32-arm64@0.25.0': + optional: true - '@babel/helper-validator-identifier@7.25.9': {} + '@esbuild/win32-ia32@0.21.5': + optional: true - '@babel/helper-validator-option@7.25.9': {} + '@esbuild/win32-ia32@0.23.1': + optional: true - '@babel/helpers@7.26.7': - dependencies: - '@babel/template': 7.26.8 - '@babel/types': 7.26.8 + '@esbuild/win32-ia32@0.24.2': + optional: true - '@babel/parser@7.26.8': - dependencies: - '@babel/types': 7.26.8 + '@esbuild/win32-ia32@0.25.0': + optional: true - '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.8)': - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 + '@esbuild/win32-x64@0.21.5': + optional: true - '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.8)': - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 + '@esbuild/win32-x64@0.23.1': + optional: true - '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.8)': - dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 + '@esbuild/win32-x64@0.24.2': + optional: true - '@babel/runtime@7.26.7': - dependencies: - regenerator-runtime: 0.14.1 + '@esbuild/win32-x64@0.25.0': + optional: true - '@babel/template@7.26.8': + '@eslint-community/eslint-utils@4.4.1(eslint@8.57.1)': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.8 - '@babel/types': 7.26.8 + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 - '@babel/traverse@7.26.8': + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/eslintrc@2.1.4': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.8 - '@babel/parser': 7.26.8 - '@babel/template': 7.26.8 - '@babel/types': 7.26.8 + ajv: 6.12.6 debug: 4.4.0 - globals: 11.12.0 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - '@babel/types@7.26.8': - dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 + '@eslint/js@8.57.1': {} - '@bcoe/v8-coverage@1.0.2': {} + '@fastify/busboy@2.1.1': {} - '@browserbasehq/sdk@2.3.0(encoding@0.1.13)': + '@formatjs/ecma402-abstract@2.3.3': dependencies: - '@types/node': 18.19.75 - '@types/node-fetch': 2.6.12 - abort-controller: 3.0.0 - agentkeepalive: 4.6.0 - form-data-encoder: 1.7.2 - formdata-node: 4.4.1 - node-fetch: 2.7.0(encoding@0.1.13) - transitivePeerDependencies: - - encoding + '@formatjs/fast-memoize': 2.2.6 + '@formatjs/intl-localematcher': 0.6.0 + decimal.js: 10.5.0 + tslib: 2.8.1 - '@browserbasehq/stagehand@1.13.0(@playwright/test@1.50.1)(deepmerge@2.2.1)(dotenv@16.4.7)(encoding@0.1.13)(openai@4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2))(zod@3.24.2)': + '@formatjs/fast-memoize@2.2.6': dependencies: - '@anthropic-ai/sdk': 0.27.3(encoding@0.1.13) - '@browserbasehq/sdk': 2.3.0(encoding@0.1.13) - '@playwright/test': 1.50.1 - deepmerge: 2.2.1 - dotenv: 16.4.7 - openai: 4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2) - ws: 8.18.0 - zod: 3.24.2 - zod-to-json-schema: 3.24.1(zod@3.24.2) - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - - '@bufbuild/protobuf@2.2.3': {} + tslib: 2.8.1 - '@bundled-es-modules/cookie@2.0.1': + '@formatjs/icu-messageformat-parser@2.11.1': dependencies: - cookie: 0.7.2 + '@formatjs/ecma402-abstract': 2.3.3 + '@formatjs/icu-skeleton-parser': 1.8.13 + tslib: 2.8.1 - '@bundled-es-modules/statuses@1.0.1': + '@formatjs/icu-skeleton-parser@1.8.13': dependencies: - statuses: 2.0.1 + '@formatjs/ecma402-abstract': 2.3.3 + tslib: 2.8.1 - '@bundled-es-modules/tough-cookie@0.1.6': + '@formatjs/intl-localematcher@0.6.0': dependencies: - '@types/tough-cookie': 4.0.5 - tough-cookie: 4.1.4 - - '@cfworker/json-schema@4.1.1': {} + tslib: 2.8.1 - '@chakra-ui/anatomy@2.3.4': {} + '@gar/promisify@1.1.3': {} - '@chakra-ui/anatomy@2.3.5': {} + '@google/generative-ai@0.11.5': {} - '@chakra-ui/hooks@2.4.3(react@18.3.1)': - dependencies: - '@chakra-ui/utils': 2.2.3(react@18.3.1) - '@zag-js/element-size': 0.31.1 - copy-to-clipboard: 3.3.3 - framesync: 6.1.2 - react: 18.3.1 + '@google/generative-ai@0.24.0': {} - '@chakra-ui/react@2.10.4(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(framer-motion@11.18.2(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@humanwhocodes/config-array@0.13.0': dependencies: - '@chakra-ui/hooks': 2.4.3(react@18.3.1) - '@chakra-ui/styled-system': 2.12.1(react@18.3.1) - '@chakra-ui/theme': 3.4.7(@chakra-ui/styled-system@2.12.1(react@18.3.1))(react@18.3.1) - '@chakra-ui/utils': 2.2.3(react@18.3.1) - '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) - '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) - '@popperjs/core': 2.11.8 - '@zag-js/focus-visible': 0.31.1 - aria-hidden: 1.2.4 - framer-motion: 11.18.2(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-fast-compare: 3.2.2 - react-focus-lock: 2.13.6(@types/react@18.3.18)(react@18.3.1) - react-remove-scroll: 2.6.3(@types/react@18.3.18)(react@18.3.1) + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.4.0 + minimatch: 3.1.2 transitivePeerDependencies: - - '@types/react' + - supports-color - '@chakra-ui/styled-system@2.12.1(react@18.3.1)': - dependencies: - '@chakra-ui/utils': 2.2.3(react@18.3.1) - csstype: 3.1.3 - transitivePeerDependencies: - - react + '@humanwhocodes/module-importer@1.0.1': {} - '@chakra-ui/theme-tools@2.2.6(@chakra-ui/styled-system@2.12.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@chakra-ui/anatomy': 2.3.4 - '@chakra-ui/styled-system': 2.12.1(react@18.3.1) - '@chakra-ui/utils': 2.2.2(react@18.3.1) - color2k: 2.0.3 - transitivePeerDependencies: - - react + '@humanwhocodes/object-schema@2.0.3': {} - '@chakra-ui/theme-tools@2.2.7(@chakra-ui/styled-system@2.12.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@chakra-ui/anatomy': 2.3.5 - '@chakra-ui/styled-system': 2.12.1(react@18.3.1) - '@chakra-ui/utils': 2.2.3(react@18.3.1) - color2k: 2.0.3 - transitivePeerDependencies: - - react + '@img/sharp-darwin-arm64@0.33.3': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.0.2 + optional: true - '@chakra-ui/theme@3.4.7(@chakra-ui/styled-system@2.12.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@chakra-ui/anatomy': 2.3.5 - '@chakra-ui/styled-system': 2.12.1(react@18.3.1) - '@chakra-ui/theme-tools': 2.2.7(@chakra-ui/styled-system@2.12.1(react@18.3.1))(react@18.3.1) - '@chakra-ui/utils': 2.2.3(react@18.3.1) - transitivePeerDependencies: - - react + '@img/sharp-darwin-x64@0.33.3': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.0.2 + optional: true - '@chakra-ui/utils@2.2.2(react@18.3.1)': - dependencies: - '@types/lodash.mergewith': 4.6.9 - lodash.mergewith: 4.6.2 - react: 18.3.1 + '@img/sharp-libvips-darwin-arm64@1.0.2': + optional: true - '@chakra-ui/utils@2.2.3(react@18.3.1)': - dependencies: - '@types/lodash.mergewith': 4.6.9 - lodash.mergewith: 4.6.2 - react: 18.3.1 + '@img/sharp-libvips-darwin-x64@1.0.2': + optional: true - '@changesets/apply-release-plan@7.0.8': - dependencies: - '@changesets/config': 3.0.5 - '@changesets/get-version-range-type': 0.4.0 - '@changesets/git': 3.0.2 - '@changesets/should-skip-package': 0.1.1 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - detect-indent: 6.1.0 - fs-extra: 7.0.1 - lodash.startcase: 4.4.0 - outdent: 0.5.0 - prettier: 2.8.8 - resolve-from: 5.0.0 - semver: 7.7.1 + '@img/sharp-libvips-linux-arm64@1.0.2': + optional: true - '@changesets/assemble-release-plan@6.0.5': - dependencies: - '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.2 - '@changesets/should-skip-package': 0.1.1 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - semver: 7.7.1 + '@img/sharp-libvips-linux-arm@1.0.2': + optional: true + + '@img/sharp-libvips-linux-s390x@1.0.2': + optional: true + + '@img/sharp-libvips-linux-x64@1.0.2': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.0.2': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.0.2': + optional: true + + '@img/sharp-linux-arm64@0.33.3': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.0.2 + optional: true + + '@img/sharp-linux-arm@0.33.3': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.0.2 + optional: true - '@changesets/changelog-git@0.2.0': - dependencies: - '@changesets/types': 6.0.0 + '@img/sharp-linux-s390x@0.33.3': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.0.2 + optional: true - '@changesets/cli@2.27.12': - dependencies: - '@changesets/apply-release-plan': 7.0.8 - '@changesets/assemble-release-plan': 6.0.5 - '@changesets/changelog-git': 0.2.0 - '@changesets/config': 3.0.5 - '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.2 - '@changesets/get-release-plan': 4.0.6 - '@changesets/git': 3.0.2 - '@changesets/logger': 0.1.1 - '@changesets/pre': 2.0.1 - '@changesets/read': 0.6.2 - '@changesets/should-skip-package': 0.1.1 - '@changesets/types': 6.0.0 - '@changesets/write': 0.3.2 - '@manypkg/get-packages': 1.1.3 - ansi-colors: 4.1.3 - ci-info: 3.9.0 - enquirer: 2.4.1 - external-editor: 3.1.0 - fs-extra: 7.0.1 - mri: 1.2.0 - p-limit: 2.3.0 - package-manager-detector: 0.2.9 - picocolors: 1.1.1 - resolve-from: 5.0.0 - semver: 7.7.1 - spawndamnit: 3.0.1 - term-size: 2.2.1 + '@img/sharp-linux-x64@0.33.3': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.0.2 + optional: true - '@changesets/config@3.0.5': - dependencies: - '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.2 - '@changesets/logger': 0.1.1 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - fs-extra: 7.0.1 - micromatch: 4.0.8 + '@img/sharp-linuxmusl-arm64@0.33.3': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.0.2 + optional: true - '@changesets/errors@0.2.0': - dependencies: - extendable-error: 0.1.7 + '@img/sharp-linuxmusl-x64@0.33.3': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.0.2 + optional: true - '@changesets/get-dependents-graph@2.1.2': + '@img/sharp-wasm32@0.33.3': dependencies: - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - picocolors: 1.1.1 - semver: 7.7.1 + '@emnapi/runtime': 1.3.1 + optional: true - '@changesets/get-release-plan@4.0.6': - dependencies: - '@changesets/assemble-release-plan': 6.0.5 - '@changesets/config': 3.0.5 - '@changesets/pre': 2.0.1 - '@changesets/read': 0.6.2 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 + '@img/sharp-win32-ia32@0.33.3': + optional: true - '@changesets/get-version-range-type@0.4.0': {} + '@img/sharp-win32-x64@0.33.3': + optional: true - '@changesets/git@3.0.2': + '@inquirer/confirm@5.1.6(@types/node@20.14.8)': dependencies: - '@changesets/errors': 0.2.0 - '@manypkg/get-packages': 1.1.3 - is-subdir: 1.2.0 - micromatch: 4.0.8 - spawndamnit: 3.0.1 + '@inquirer/core': 10.1.7(@types/node@20.14.8) + '@inquirer/type': 3.0.4(@types/node@20.14.8) + optionalDependencies: + '@types/node': 20.14.8 + optional: true - '@changesets/logger@0.1.1': + '@inquirer/confirm@5.1.6(@types/node@20.17.17)': dependencies: - picocolors: 1.1.1 + '@inquirer/core': 10.1.7(@types/node@20.17.17) + '@inquirer/type': 3.0.4(@types/node@20.17.17) + optionalDependencies: + '@types/node': 20.17.17 + optional: true - '@changesets/parse@0.4.0': + '@inquirer/confirm@5.1.6(@types/node@22.13.10)': dependencies: - '@changesets/types': 6.0.0 - js-yaml: 3.14.1 + '@inquirer/core': 10.1.7(@types/node@22.13.10) + '@inquirer/type': 3.0.4(@types/node@22.13.10) + optionalDependencies: + '@types/node': 22.13.10 - '@changesets/pre@2.0.1': + '@inquirer/core@10.1.7(@types/node@20.14.8)': dependencies: - '@changesets/errors': 0.2.0 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - fs-extra: 7.0.1 + '@inquirer/figures': 1.0.10 + '@inquirer/type': 3.0.4(@types/node@20.14.8) + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 20.14.8 + optional: true - '@changesets/read@0.6.2': + '@inquirer/core@10.1.7(@types/node@20.17.17)': dependencies: - '@changesets/git': 3.0.2 - '@changesets/logger': 0.1.1 - '@changesets/parse': 0.4.0 - '@changesets/types': 6.0.0 - fs-extra: 7.0.1 - p-filter: 2.1.0 - picocolors: 1.1.1 + '@inquirer/figures': 1.0.10 + '@inquirer/type': 3.0.4(@types/node@20.17.17) + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 20.17.17 + optional: true - '@changesets/should-skip-package@0.1.1': + '@inquirer/core@10.1.7(@types/node@22.13.10)': dependencies: - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 + '@inquirer/figures': 1.0.10 + '@inquirer/type': 3.0.4(@types/node@22.13.10) + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.10 - '@changesets/types@4.1.0': {} + '@inquirer/figures@1.0.10': {} - '@changesets/types@6.0.0': {} + '@inquirer/type@3.0.4(@types/node@20.14.8)': + optionalDependencies: + '@types/node': 20.14.8 + optional: true - '@changesets/write@0.3.2': + '@inquirer/type@3.0.4(@types/node@20.17.17)': + optionalDependencies: + '@types/node': 20.17.17 + optional: true + + '@inquirer/type@3.0.4(@types/node@22.13.10)': + optionalDependencies: + '@types/node': 22.13.10 + + '@internationalized/date@3.7.0': dependencies: - '@changesets/types': 6.0.0 - fs-extra: 7.0.1 - human-id: 1.0.2 - prettier: 2.8.8 + '@swc/helpers': 0.5.15 - '@clack/core@0.3.5': + '@internationalized/message@3.1.6': dependencies: - picocolors: 1.1.1 - sisteransi: 1.0.5 + '@swc/helpers': 0.5.15 + intl-messageformat: 10.7.15 - '@clack/core@0.4.1': + '@internationalized/number@3.6.0': dependencies: - picocolors: 1.1.1 - sisteransi: 1.0.5 + '@swc/helpers': 0.5.15 - '@clack/prompts@0.10.0': + '@internationalized/string@3.2.5': dependencies: - '@clack/core': 0.4.1 - picocolors: 1.1.1 - sisteransi: 1.0.5 + '@swc/helpers': 0.5.15 - '@clack/prompts@0.6.3': + '@isaacs/cliui@8.0.2': dependencies: - '@clack/core': 0.3.5 - picocolors: 1.1.1 - sisteransi: 1.0.5 + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 - '@commitlint/cli@19.7.1(@types/node@20.17.17)(typescript@5.7.3)': + '@istanbuljs/schema@0.1.3': {} + + '@jimp/bmp@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@commitlint/format': 19.5.0 - '@commitlint/lint': 19.7.1 - '@commitlint/load': 19.6.1(@types/node@20.17.17)(typescript@5.7.3) - '@commitlint/read': 19.5.0 - '@commitlint/types': 19.5.0 - tinyexec: 0.3.2 - yargs: 17.7.2 + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/utils': 0.22.12 + bmp-js: 0.1.0 + + '@jimp/core@0.22.12(encoding@0.1.13)': + dependencies: + '@jimp/utils': 0.22.12 + any-base: 1.1.0 + buffer: 5.7.1 + exif-parser: 0.1.12 + file-type: 16.5.4 + isomorphic-fetch: 3.0.0(encoding@0.1.13) + pixelmatch: 4.0.2 + tinycolor2: 1.6.0 transitivePeerDependencies: - - '@types/node' - - typescript + - encoding - '@commitlint/config-conventional@19.7.1': + '@jimp/core@1.6.0': dependencies: - '@commitlint/types': 19.5.0 - conventional-changelog-conventionalcommits: 7.0.2 + '@jimp/file-ops': 1.6.0 + '@jimp/types': 1.6.0 + '@jimp/utils': 1.6.0 + await-to-js: 3.0.0 + exif-parser: 0.1.12 + file-type: 16.5.4 + mime: 3.0.0 - '@commitlint/config-validator@19.5.0': + '@jimp/custom@0.22.12(encoding@0.1.13)': dependencies: - '@commitlint/types': 19.5.0 - ajv: 8.17.1 + '@jimp/core': 0.22.12(encoding@0.1.13) + transitivePeerDependencies: + - encoding - '@commitlint/ensure@19.5.0': + '@jimp/diff@1.6.0': dependencies: - '@commitlint/types': 19.5.0 - lodash.camelcase: 4.3.0 - lodash.kebabcase: 4.1.1 - lodash.snakecase: 4.1.1 - lodash.startcase: 4.4.0 - lodash.upperfirst: 4.3.1 + '@jimp/plugin-resize': 1.6.0 + '@jimp/types': 1.6.0 + '@jimp/utils': 1.6.0 + pixelmatch: 5.3.0 - '@commitlint/execute-rule@19.5.0': {} + '@jimp/file-ops@1.6.0': {} - '@commitlint/format@19.5.0': + '@jimp/gif@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@commitlint/types': 19.5.0 - chalk: 5.4.1 + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/utils': 0.22.12 + gifwrap: 0.10.1 + omggif: 1.0.10 - '@commitlint/is-ignored@19.7.1': + '@jimp/jpeg@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@commitlint/types': 19.5.0 - semver: 7.7.1 + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/utils': 0.22.12 + jpeg-js: 0.4.4 - '@commitlint/lint@19.7.1': + '@jimp/js-bmp@1.6.0': dependencies: - '@commitlint/is-ignored': 19.7.1 - '@commitlint/parse': 19.5.0 - '@commitlint/rules': 19.6.0 - '@commitlint/types': 19.5.0 + '@jimp/core': 1.6.0 + '@jimp/types': 1.6.0 + '@jimp/utils': 1.6.0 + bmp-ts: 1.0.9 - '@commitlint/load@19.6.1(@types/node@20.17.17)(typescript@5.7.3)': + '@jimp/js-gif@1.6.0': dependencies: - '@commitlint/config-validator': 19.5.0 - '@commitlint/execute-rule': 19.5.0 - '@commitlint/resolve-extends': 19.5.0 - '@commitlint/types': 19.5.0 - chalk: 5.4.1 - cosmiconfig: 9.0.0(typescript@5.7.3) - cosmiconfig-typescript-loader: 6.1.0(@types/node@20.17.17)(cosmiconfig@9.0.0(typescript@5.7.3))(typescript@5.7.3) - lodash.isplainobject: 4.0.6 - lodash.merge: 4.6.2 - lodash.uniq: 4.5.0 - transitivePeerDependencies: - - '@types/node' - - typescript - - '@commitlint/message@19.5.0': {} + '@jimp/core': 1.6.0 + '@jimp/types': 1.6.0 + gifwrap: 0.10.1 + omggif: 1.0.10 - '@commitlint/parse@19.5.0': + '@jimp/js-jpeg@1.6.0': dependencies: - '@commitlint/types': 19.5.0 - conventional-changelog-angular: 7.0.0 - conventional-commits-parser: 5.0.0 + '@jimp/core': 1.6.0 + '@jimp/types': 1.6.0 + jpeg-js: 0.4.4 - '@commitlint/read@19.5.0': + '@jimp/js-png@1.6.0': dependencies: - '@commitlint/top-level': 19.5.0 - '@commitlint/types': 19.5.0 - git-raw-commits: 4.0.0 - minimist: 1.2.8 - tinyexec: 0.3.2 + '@jimp/core': 1.6.0 + '@jimp/types': 1.6.0 + pngjs: 7.0.0 - '@commitlint/resolve-extends@19.5.0': + '@jimp/js-tiff@1.6.0': dependencies: - '@commitlint/config-validator': 19.5.0 - '@commitlint/types': 19.5.0 - global-directory: 4.0.1 - import-meta-resolve: 4.1.0 - lodash.mergewith: 4.6.2 - resolve-from: 5.0.0 + '@jimp/core': 1.6.0 + '@jimp/types': 1.6.0 + utif2: 4.1.0 - '@commitlint/rules@19.6.0': + '@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@commitlint/ensure': 19.5.0 - '@commitlint/message': 19.5.0 - '@commitlint/to-lines': 19.5.0 - '@commitlint/types': 19.5.0 - - '@commitlint/to-lines@19.5.0': {} + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/utils': 0.22.12 - '@commitlint/top-level@19.5.0': + '@jimp/plugin-blit@1.6.0': dependencies: - find-up: 7.0.0 + '@jimp/types': 1.6.0 + '@jimp/utils': 1.6.0 + zod: 3.24.2 - '@commitlint/types@19.5.0': + '@jimp/plugin-blur@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@types/conventional-commits-parser': 5.0.1 - chalk: 5.4.1 + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/utils': 0.22.12 - '@computer-use/default-clipboard-provider@4.2.0(@computer-use/nut-js@4.2.0(encoding@0.1.13))': + '@jimp/plugin-blur@1.6.0': dependencies: - '@computer-use/nut-js': 4.2.0(encoding@0.1.13) - clipboardy: 2.3.0 + '@jimp/core': 1.6.0 + '@jimp/utils': 1.6.0 - '@computer-use/libnut-darwin@2.7.1': + '@jimp/plugin-circle@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - bindings: 1.5.0 - optionalDependencies: - '@computer-use/node-mac-permissions': 2.2.2 + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/utils': 0.22.12 - '@computer-use/libnut-linux@2.7.1': + '@jimp/plugin-circle@1.6.0': dependencies: - bindings: 1.5.0 - optionalDependencies: - '@computer-use/node-mac-permissions': 2.2.1 + '@jimp/types': 1.6.0 + zod: 3.24.2 - '@computer-use/libnut-win32@2.7.1': + '@jimp/plugin-color@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - bindings: 1.5.0 - optionalDependencies: - '@computer-use/node-mac-permissions': 2.2.1 + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/utils': 0.22.12 + tinycolor2: 1.6.0 - '@computer-use/libnut@4.2.0(@computer-use/nut-js@4.2.0(encoding@0.1.13))': + '@jimp/plugin-color@1.6.0': dependencies: - '@computer-use/libnut-darwin': 2.7.1 - '@computer-use/libnut-linux': 2.7.1 - '@computer-use/libnut-win32': 2.7.1 - '@computer-use/nut-js': 4.2.0(encoding@0.1.13) + '@jimp/core': 1.6.0 + '@jimp/types': 1.6.0 + '@jimp/utils': 1.6.0 + tinycolor2: 1.6.0 + zod: 3.24.2 - '@computer-use/mac-screen-capture-permissions@1.0.2': + '@jimp/plugin-contain@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))))': dependencies: - electron-util: 0.17.2 - execa: 5.1.1 - macos-version: 5.2.1 + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/plugin-blit': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-scale': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))) + '@jimp/utils': 0.22.12 - '@computer-use/node-mac-permissions@2.2.1': + '@jimp/plugin-contain@1.6.0': dependencies: - bindings: 1.5.0 - node-addon-api: 5.0.0 - optional: true + '@jimp/core': 1.6.0 + '@jimp/plugin-blit': 1.6.0 + '@jimp/plugin-resize': 1.6.0 + '@jimp/types': 1.6.0 + '@jimp/utils': 1.6.0 + zod: 3.24.2 - '@computer-use/node-mac-permissions@2.2.2': + '@jimp/plugin-cover@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))))': dependencies: - bindings: 1.5.0 - node-addon-api: 5.0.0 + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/plugin-crop': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-scale': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))) + '@jimp/utils': 0.22.12 - '@computer-use/nut-js@4.2.0(encoding@0.1.13)': + '@jimp/plugin-cover@1.6.0': dependencies: - '@computer-use/default-clipboard-provider': 4.2.0(@computer-use/nut-js@4.2.0(encoding@0.1.13)) - '@computer-use/libnut': 4.2.0(@computer-use/nut-js@4.2.0(encoding@0.1.13)) - '@computer-use/provider-interfaces': 4.2.0(encoding@0.1.13) - '@computer-use/shared': 4.2.0(encoding@0.1.13) - jimp: 0.22.10(encoding@0.1.13) - node-abort-controller: 3.1.1 - transitivePeerDependencies: - - debug - - encoding + '@jimp/core': 1.6.0 + '@jimp/plugin-crop': 1.6.0 + '@jimp/plugin-resize': 1.6.0 + '@jimp/types': 1.6.0 + zod: 3.24.2 - '@computer-use/provider-interfaces@4.2.0(encoding@0.1.13)': + '@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@computer-use/shared': 4.2.0(encoding@0.1.13) - transitivePeerDependencies: - - debug - - encoding + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/utils': 0.22.12 - '@computer-use/shared@4.2.0(encoding@0.1.13)': + '@jimp/plugin-crop@1.6.0': dependencies: - jimp: 0.22.10(encoding@0.1.13) - node-abort-controller: 3.1.1 - transitivePeerDependencies: - - debug - - encoding + '@jimp/core': 1.6.0 + '@jimp/types': 1.6.0 + '@jimp/utils': 1.6.0 + zod: 3.24.2 - '@cspotcode/source-map-support@0.8.1': + '@jimp/plugin-displace@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@jridgewell/trace-mapping': 0.3.9 - - '@dqbd/tiktoken@1.0.20': {} + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/utils': 0.22.12 - '@electron-forge/cli@7.7.0(encoding@0.1.13)': + '@jimp/plugin-displace@1.6.0': dependencies: - '@electron-forge/core': 7.7.0(encoding@0.1.13) - '@electron-forge/core-utils': 7.7.0 - '@electron-forge/shared-types': 7.7.0 - '@electron/get': 3.1.0 - chalk: 4.1.2 - commander: 11.1.0 - debug: 4.4.0 - fs-extra: 10.1.0 - listr2: 7.0.2 - semver: 7.7.1 - transitivePeerDependencies: - - bluebird - - encoding - - supports-color + '@jimp/types': 1.6.0 + '@jimp/utils': 1.6.0 + zod: 3.24.2 - '@electron-forge/core-utils@7.7.0': + '@jimp/plugin-dither@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@electron-forge/shared-types': 7.7.0 - '@electron/rebuild': 3.7.1 - '@malept/cross-spawn-promise': 2.0.0 - chalk: 4.1.2 - debug: 4.4.0 - find-up: 5.0.0 - fs-extra: 10.1.0 - log-symbols: 4.1.0 - semver: 7.7.1 - transitivePeerDependencies: - - bluebird - - supports-color + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/utils': 0.22.12 - '@electron-forge/core@7.7.0(encoding@0.1.13)': + '@jimp/plugin-dither@1.6.0': dependencies: - '@electron-forge/core-utils': 7.7.0 - '@electron-forge/maker-base': 7.7.0 - '@electron-forge/plugin-base': 7.7.0 - '@electron-forge/publisher-base': 7.7.0 - '@electron-forge/shared-types': 7.7.0 - '@electron-forge/template-base': 7.7.0 - '@electron-forge/template-vite': 7.7.0 - '@electron-forge/template-vite-typescript': 7.7.0 - '@electron-forge/template-webpack': 7.7.0 - '@electron-forge/template-webpack-typescript': 7.7.0 - '@electron-forge/tracer': 7.7.0 - '@electron/get': 3.1.0 - '@electron/packager': 18.3.6 - '@electron/rebuild': 3.7.1 - '@malept/cross-spawn-promise': 2.0.0 - chalk: 4.1.2 - debug: 4.4.0 - fast-glob: 3.3.3 - filenamify: 4.3.0 - find-up: 5.0.0 - fs-extra: 10.1.0 - global-dirs: 3.0.1 - got: 11.8.6 - interpret: 3.1.1 - listr2: 7.0.2 - lodash: 4.17.21 - log-symbols: 4.1.0 - node-fetch: 2.7.0(encoding@0.1.13) - rechoir: 0.8.0 - semver: 7.7.1 - source-map-support: 0.5.21 - sudo-prompt: 9.2.1 - username: 5.1.0 - transitivePeerDependencies: - - bluebird - - encoding - - supports-color + '@jimp/types': 1.6.0 - '@electron-forge/maker-base@7.7.0': + '@jimp/plugin-fisheye@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@electron-forge/shared-types': 7.7.0 - fs-extra: 10.1.0 - which: 2.0.2 - transitivePeerDependencies: - - bluebird - - supports-color + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/utils': 0.22.12 - '@electron-forge/maker-dmg@7.7.0': + '@jimp/plugin-fisheye@1.6.0': dependencies: - '@electron-forge/maker-base': 7.7.0 - '@electron-forge/shared-types': 7.7.0 - fs-extra: 10.1.0 - optionalDependencies: - electron-installer-dmg: 5.0.1 - transitivePeerDependencies: - - bluebird - - supports-color + '@jimp/types': 1.6.0 + '@jimp/utils': 1.6.0 + zod: 3.24.2 - '@electron-forge/maker-pkg@7.7.0': + '@jimp/plugin-flip@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-rotate@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))))': dependencies: - '@electron-forge/maker-base': 7.7.0 - '@electron-forge/shared-types': 7.7.0 - '@electron/osx-sign': 1.3.2 - transitivePeerDependencies: - - bluebird - - supports-color + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/plugin-rotate': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))) + '@jimp/utils': 0.22.12 - '@electron-forge/maker-squirrel@7.7.0': + '@jimp/plugin-flip@1.6.0': dependencies: - '@electron-forge/maker-base': 7.7.0 - '@electron-forge/shared-types': 7.7.0 - fs-extra: 10.1.0 - optionalDependencies: - electron-winstaller: 5.4.0 - transitivePeerDependencies: - - bluebird - - supports-color + '@jimp/types': 1.6.0 + zod: 3.24.2 - '@electron-forge/maker-zip@7.7.0': + '@jimp/plugin-gaussian@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@electron-forge/maker-base': 7.7.0 - '@electron-forge/shared-types': 7.7.0 - cross-zip: 4.0.1 - fs-extra: 10.1.0 - got: 11.8.6 - transitivePeerDependencies: - - bluebird - - supports-color + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/utils': 0.22.12 - '@electron-forge/plugin-auto-unpack-natives@7.7.0': + '@jimp/plugin-hash@1.6.0': dependencies: - '@electron-forge/plugin-base': 7.7.0 - '@electron-forge/shared-types': 7.7.0 - transitivePeerDependencies: - - bluebird - - supports-color + '@jimp/core': 1.6.0 + '@jimp/js-bmp': 1.6.0 + '@jimp/js-jpeg': 1.6.0 + '@jimp/js-png': 1.6.0 + '@jimp/js-tiff': 1.6.0 + '@jimp/plugin-color': 1.6.0 + '@jimp/plugin-resize': 1.6.0 + '@jimp/types': 1.6.0 + '@jimp/utils': 1.6.0 + any-base: 1.1.0 - '@electron-forge/plugin-base@7.7.0': + '@jimp/plugin-invert@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@electron-forge/shared-types': 7.7.0 - transitivePeerDependencies: - - bluebird - - supports-color + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/utils': 0.22.12 - '@electron-forge/plugin-fuses@7.7.0(@electron/fuses@1.8.0)': + '@jimp/plugin-mask@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@electron-forge/plugin-base': 7.7.0 - '@electron-forge/shared-types': 7.7.0 - '@electron/fuses': 1.8.0 - transitivePeerDependencies: - - bluebird - - supports-color + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/utils': 0.22.12 - '@electron-forge/plugin-vite@7.7.0': + '@jimp/plugin-mask@1.6.0': dependencies: - '@electron-forge/core-utils': 7.7.0 - '@electron-forge/plugin-base': 7.7.0 - '@electron-forge/shared-types': 7.7.0 - '@electron-forge/web-multi-logger': 7.7.0 - chalk: 4.1.2 - debug: 4.4.0 - fs-extra: 10.1.0 - listr2: 7.0.2 - transitivePeerDependencies: - - bluebird - - bufferutil - - supports-color - - utf-8-validate + '@jimp/types': 1.6.0 + zod: 3.24.2 - '@electron-forge/publisher-base@7.7.0': + '@jimp/plugin-normalize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@electron-forge/shared-types': 7.7.0 - transitivePeerDependencies: - - bluebird - - supports-color + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/utils': 0.22.12 - '@electron-forge/publisher-github@7.7.0(encoding@0.1.13)': + '@jimp/plugin-print@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))': dependencies: - '@electron-forge/publisher-base': 7.7.0 - '@electron-forge/shared-types': 7.7.0 - '@octokit/core': 3.6.0(encoding@0.1.13) - '@octokit/plugin-retry': 3.0.9 - '@octokit/request-error': 5.1.1 - '@octokit/rest': 18.12.0(encoding@0.1.13) - '@octokit/types': 6.41.0 - chalk: 4.1.2 - debug: 4.4.0 - fs-extra: 10.1.0 - log-symbols: 4.1.0 - mime-types: 2.1.35 + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/plugin-blit': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/utils': 0.22.12 + load-bmfont: 1.4.2 transitivePeerDependencies: - - bluebird - - encoding - - supports-color + - debug - '@electron-forge/shared-types@7.7.0': + '@jimp/plugin-print@1.6.0': dependencies: - '@electron-forge/tracer': 7.7.0 - '@electron/packager': 18.3.6 - '@electron/rebuild': 3.7.1 - listr2: 7.0.2 - transitivePeerDependencies: - - bluebird - - supports-color + '@jimp/core': 1.6.0 + '@jimp/js-jpeg': 1.6.0 + '@jimp/js-png': 1.6.0 + '@jimp/plugin-blit': 1.6.0 + '@jimp/types': 1.6.0 + parse-bmfont-ascii: 1.0.6 + parse-bmfont-binary: 1.0.6 + parse-bmfont-xml: 1.1.6 + simple-xml-to-json: 1.2.3 + zod: 3.24.2 - '@electron-forge/template-base@7.7.0': + '@jimp/plugin-quantize@1.6.0': dependencies: - '@electron-forge/core-utils': 7.7.0 - '@electron-forge/shared-types': 7.7.0 - '@malept/cross-spawn-promise': 2.0.0 - debug: 4.4.0 - fs-extra: 10.1.0 - username: 5.1.0 - transitivePeerDependencies: - - bluebird - - supports-color + image-q: 4.0.0 + zod: 3.24.2 - '@electron-forge/template-vite-typescript@7.7.0': + '@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@electron-forge/shared-types': 7.7.0 - '@electron-forge/template-base': 7.7.0 - fs-extra: 10.1.0 - transitivePeerDependencies: - - bluebird - - supports-color + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/utils': 0.22.12 - '@electron-forge/template-vite@7.7.0': + '@jimp/plugin-resize@1.6.0': dependencies: - '@electron-forge/shared-types': 7.7.0 - '@electron-forge/template-base': 7.7.0 - fs-extra: 10.1.0 - transitivePeerDependencies: - - bluebird - - supports-color + '@jimp/core': 1.6.0 + '@jimp/types': 1.6.0 + zod: 3.24.2 - '@electron-forge/template-webpack-typescript@7.7.0': + '@jimp/plugin-rotate@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))': dependencies: - '@electron-forge/shared-types': 7.7.0 - '@electron-forge/template-base': 7.7.0 - fs-extra: 10.1.0 - transitivePeerDependencies: - - bluebird - - supports-color + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/plugin-blit': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-crop': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/utils': 0.22.12 - '@electron-forge/template-webpack@7.7.0': + '@jimp/plugin-rotate@1.6.0': dependencies: - '@electron-forge/shared-types': 7.7.0 - '@electron-forge/template-base': 7.7.0 - fs-extra: 10.1.0 - transitivePeerDependencies: - - bluebird - - supports-color + '@jimp/core': 1.6.0 + '@jimp/plugin-crop': 1.6.0 + '@jimp/plugin-resize': 1.6.0 + '@jimp/types': 1.6.0 + '@jimp/utils': 1.6.0 + zod: 3.24.2 - '@electron-forge/tracer@7.7.0': + '@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))': dependencies: - chrome-trace-event: 1.0.4 + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/utils': 0.22.12 - '@electron-forge/web-multi-logger@7.7.0': + '@jimp/plugin-shadow@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blur@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))': dependencies: - express: 4.21.2 - express-ws: 5.0.2(express@4.21.2) - xterm: 4.19.0 - xterm-addon-fit: 0.5.0(xterm@4.19.0) - xterm-addon-search: 0.8.2(xterm@4.19.0) - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/plugin-blur': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/utils': 0.22.12 - '@electron-toolkit/eslint-config-prettier@2.0.0(eslint@8.57.1)(prettier@3.5.0)': + '@jimp/plugin-threshold@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-color@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))': dependencies: - eslint: 8.57.1 - eslint-config-prettier: 9.1.0(eslint@8.57.1) - eslint-plugin-prettier: 5.2.3(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.5.0) - prettier: 3.5.0 - transitivePeerDependencies: - - '@types/eslint' + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/plugin-color': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/utils': 0.22.12 - '@electron-toolkit/eslint-config-ts@2.0.0(eslint@8.57.1)(typescript@5.7.3)': + '@jimp/plugin-threshold@1.6.0': dependencies: - '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3) - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.7.3) - eslint: 8.57.1 - optionalDependencies: - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color + '@jimp/core': 1.6.0 + '@jimp/plugin-color': 1.6.0 + '@jimp/plugin-hash': 1.6.0 + '@jimp/types': 1.6.0 + '@jimp/utils': 1.6.0 + zod: 3.24.2 - '@electron-toolkit/preload@3.0.1(electron@34.1.1)': + '@jimp/plugins@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - electron: 34.1.1 + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/plugin-blit': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-blur': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-circle': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-color': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-contain': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))) + '@jimp/plugin-cover': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))) + '@jimp/plugin-crop': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-displace': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-dither': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-fisheye': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-flip': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-rotate@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))) + '@jimp/plugin-gaussian': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-invert': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-mask': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-normalize': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-print': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))) + '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/plugin-rotate': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))) + '@jimp/plugin-scale': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))) + '@jimp/plugin-shadow': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blur@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))) + '@jimp/plugin-threshold': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-color@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))) + timm: 1.7.1 + transitivePeerDependencies: + - debug - '@electron-toolkit/tsconfig@1.0.1(@types/node@20.17.17)': + '@jimp/png@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - '@types/node': 20.17.17 + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/utils': 0.22.12 + pngjs: 6.0.0 - '@electron-toolkit/utils@3.0.0(electron@34.1.1)': + '@jimp/tiff@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - electron: 34.1.1 + '@jimp/custom': 0.22.12(encoding@0.1.13) + utif2: 4.1.0 - '@electron/asar@3.3.1': + '@jimp/types@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': dependencies: - commander: 5.1.0 - glob: 7.2.3 - minimatch: 3.1.2 + '@jimp/bmp': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/custom': 0.22.12(encoding@0.1.13) + '@jimp/gif': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/jpeg': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/png': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + '@jimp/tiff': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) + timm: 1.7.1 - '@electron/fuses@1.8.0': + '@jimp/types@1.6.0': dependencies: - chalk: 4.1.2 - fs-extra: 9.1.0 - minimist: 1.2.8 + zod: 3.24.2 - '@electron/get@2.0.3': + '@jimp/utils@0.22.12': dependencies: - debug: 4.4.0 - env-paths: 2.2.1 - fs-extra: 8.1.0 - got: 11.8.6 - progress: 2.0.3 - semver: 6.3.1 - sumchecker: 3.0.1 - optionalDependencies: - global-agent: 3.0.0 - transitivePeerDependencies: - - supports-color + regenerator-runtime: 0.13.11 - '@electron/get@3.1.0': + '@jimp/utils@1.6.0': dependencies: - debug: 4.4.0 - env-paths: 2.2.1 - fs-extra: 8.1.0 - got: 11.8.6 - progress: 2.0.3 - semver: 6.3.1 - sumchecker: 3.0.1 - optionalDependencies: - global-agent: 3.0.0 - transitivePeerDependencies: - - supports-color + '@jimp/types': 1.6.0 + tinycolor2: 1.6.0 - '@electron/node-gyp@https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2': + '@jridgewell/gen-mapping@0.3.8': dependencies: - env-paths: 2.2.1 - exponential-backoff: 3.1.2 - glob: 8.1.0 - graceful-fs: 4.2.11 - make-fetch-happen: 10.2.1 - nopt: 6.0.0 - proc-log: 2.0.1 - semver: 7.7.1 - tar: 6.2.1 - which: 2.0.2 - transitivePeerDependencies: - - bluebird - - supports-color + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 - '@electron/notarize@2.5.0': - dependencies: - debug: 4.4.0 - fs-extra: 9.1.0 - promise-retry: 2.0.1 - transitivePeerDependencies: - - supports-color + '@jridgewell/resolve-uri@3.1.2': {} - '@electron/osx-sign@1.3.2': - dependencies: - compare-version: 0.1.2 - debug: 4.4.0 - fs-extra: 10.1.0 - isbinaryfile: 4.0.10 - minimist: 1.2.8 - plist: 3.1.0 - transitivePeerDependencies: - - supports-color + '@jridgewell/set-array@1.2.1': {} - '@electron/packager@18.3.6': - dependencies: - '@electron/asar': 3.3.1 - '@electron/get': 3.1.0 - '@electron/notarize': 2.5.0 - '@electron/osx-sign': 1.3.2 - '@electron/universal': 2.0.1 - '@electron/windows-sign': 1.2.0 - debug: 4.4.0 - extract-zip: 2.0.1 - filenamify: 4.3.0 - fs-extra: 11.3.0 - galactus: 1.0.0 - get-package-info: 1.0.0 - junk: 3.1.0 - parse-author: 2.0.0 - plist: 3.1.0 - resedit: 2.0.3 - resolve: 1.22.10 - semver: 7.7.1 - yargs-parser: 21.1.1 - transitivePeerDependencies: - - supports-color + '@jridgewell/sourcemap-codec@1.5.0': {} - '@electron/rebuild@3.7.1': + '@jridgewell/trace-mapping@0.3.25': dependencies: - '@electron/node-gyp': https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2 - '@malept/cross-spawn-promise': 2.0.0 - chalk: 4.1.2 - debug: 4.4.0 - detect-libc: 2.0.3 - fs-extra: 10.1.0 - got: 11.8.6 - node-abi: 3.74.0 - node-api-version: 0.2.0 - ora: 5.4.1 - read-binary-file-arch: 1.0.6 - semver: 7.7.1 - tar: 6.2.1 - yargs: 17.7.2 - transitivePeerDependencies: - - bluebird - - supports-color + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 - '@electron/universal@2.0.1': + '@jridgewell/trace-mapping@0.3.9': dependencies: - '@electron/asar': 3.3.1 - '@malept/cross-spawn-promise': 2.0.0 - debug: 4.4.0 - dir-compare: 4.2.0 - fs-extra: 11.3.0 - minimatch: 9.0.5 - plist: 3.1.0 - transitivePeerDependencies: - - supports-color + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 - '@electron/windows-sign@1.2.0': + '@langchain/aws@0.1.6(@langchain/core@0.3.42(openai@4.87.3(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.2)))': dependencies: - cross-dirname: 0.1.0 - debug: 4.4.0 - fs-extra: 11.3.0 - minimist: 1.2.8 - postject: 1.0.0-alpha.6 + '@aws-sdk/client-bedrock-agent-runtime': 3.765.0 + '@aws-sdk/client-bedrock-runtime': 3.758.0 + '@aws-sdk/client-kendra': 3.758.0 + '@aws-sdk/credential-provider-node': 3.758.0 + '@langchain/core': 0.3.42(openai@4.87.3(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.2)) + zod: 3.24.2 + zod-to-json-schema: 3.24.1(zod@3.24.2) transitivePeerDependencies: - - supports-color + - aws-crt - '@emnapi/runtime@1.3.1': + '@langchain/core@0.3.42(openai@4.87.3(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.2))': dependencies: - tslib: 2.8.1 - optional: true + '@cfworker/json-schema': 4.1.1 + ansi-styles: 5.2.0 + camelcase: 6.3.0 + decamelize: 1.2.0 + js-tiktoken: 1.0.19 + langsmith: 0.3.14(openai@4.87.3(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.2)) + mustache: 4.2.0 + p-queue: 6.6.2 + p-retry: 4.6.2 + uuid: 10.0.0 + zod: 3.24.2 + zod-to-json-schema: 3.24.1(zod@3.24.2) + transitivePeerDependencies: + - openai - '@emotion/babel-plugin@11.13.5': + '@langchain/openai@0.4.4(@langchain/core@0.3.42(openai@4.87.3(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.2)))(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))': dependencies: - '@babel/helper-module-imports': 7.25.9 - '@babel/runtime': 7.26.7 - '@emotion/hash': 0.9.2 - '@emotion/memoize': 0.9.0 - '@emotion/serialize': 1.3.3 - babel-plugin-macros: 3.1.0 - convert-source-map: 1.9.0 - escape-string-regexp: 4.0.0 - find-root: 1.1.0 - source-map: 0.5.7 - stylis: 4.2.0 + '@langchain/core': 0.3.42(openai@4.87.3(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.2)) + js-tiktoken: 1.0.19 + openai: 4.87.3(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.2) + zod: 3.24.2 + zod-to-json-schema: 3.24.1(zod@3.24.2) transitivePeerDependencies: - - supports-color + - encoding + - ws - '@emotion/cache@11.14.0': + '@malept/cross-spawn-promise@1.1.1': dependencies: - '@emotion/memoize': 0.9.0 - '@emotion/sheet': 1.4.0 - '@emotion/utils': 1.4.2 - '@emotion/weak-memoize': 0.4.0 - stylis: 4.2.0 - - '@emotion/hash@0.9.2': {} + cross-spawn: 7.0.6 + optional: true - '@emotion/is-prop-valid@1.3.1': + '@malept/cross-spawn-promise@2.0.0': dependencies: - '@emotion/memoize': 0.9.0 + cross-spawn: 7.0.6 - '@emotion/memoize@0.9.0': {} + '@manypkg/find-root@1.1.0': + dependencies: + '@babel/runtime': 7.26.7 + '@types/node': 12.20.55 + find-up: 4.1.0 + fs-extra: 8.1.0 - '@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1)': + '@manypkg/get-packages@1.1.3': dependencies: '@babel/runtime': 7.26.7 - '@emotion/babel-plugin': 11.13.5 - '@emotion/cache': 11.14.0 - '@emotion/serialize': 1.3.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1) - '@emotion/utils': 1.4.2 - '@emotion/weak-memoize': 0.4.0 - hoist-non-react-statics: 3.3.2 - react: 18.3.1 - optionalDependencies: - '@types/react': 18.3.18 - transitivePeerDependencies: - - supports-color + '@changesets/types': 4.1.0 + '@manypkg/find-root': 1.1.0 + fs-extra: 8.1.0 + globby: 11.1.0 + read-yaml-file: 1.1.0 - '@emotion/serialize@1.3.3': + '@mistralai/mistralai@1.5.1(zod@3.24.2)': dependencies: - '@emotion/hash': 0.9.2 - '@emotion/memoize': 0.9.0 - '@emotion/unitless': 0.10.0 - '@emotion/utils': 1.4.2 - csstype: 3.1.3 + zod: 3.24.2 + zod-to-json-schema: 3.24.1(zod@3.24.2) - '@emotion/sheet@1.4.0': {} + '@mixmark-io/domino@2.2.0': {} - '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1)': + '@modelcontextprotocol/sdk@1.7.0': dependencies: - '@babel/runtime': 7.26.7 - '@emotion/babel-plugin': 11.13.5 - '@emotion/is-prop-valid': 1.3.1 - '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) - '@emotion/serialize': 1.3.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1) - '@emotion/utils': 1.4.2 - react: 18.3.1 - optionalDependencies: - '@types/react': 18.3.18 + content-type: 1.0.5 + cors: 2.8.5 + eventsource: 3.0.5 + express: 5.0.1 + express-rate-limit: 7.5.0(express@5.0.1) + pkce-challenge: 4.1.0 + raw-body: 3.0.0 + zod: 3.24.2 + zod-to-json-schema: 3.24.1(zod@3.24.2) transitivePeerDependencies: - supports-color - '@emotion/unitless@0.10.0': {} + '@module-federation/error-codes@0.8.4': {} - '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@18.3.1)': + '@module-federation/runtime-tools@0.8.4': dependencies: - react: 18.3.1 - - '@emotion/utils@1.4.2': {} + '@module-federation/runtime': 0.8.4 + '@module-federation/webpack-bundler-runtime': 0.8.4 - '@emotion/weak-memoize@0.4.0': {} + '@module-federation/runtime@0.8.4': + dependencies: + '@module-federation/error-codes': 0.8.4 + '@module-federation/sdk': 0.8.4 - '@esbuild/aix-ppc64@0.21.5': - optional: true + '@module-federation/sdk@0.8.4': + dependencies: + isomorphic-rslog: 0.0.6 - '@esbuild/aix-ppc64@0.23.1': - optional: true + '@module-federation/webpack-bundler-runtime@0.8.4': + dependencies: + '@module-federation/runtime': 0.8.4 + '@module-federation/sdk': 0.8.4 - '@esbuild/aix-ppc64@0.25.0': - optional: true + '@monaco-editor/loader@1.5.0': + dependencies: + state-local: 1.0.7 - '@esbuild/android-arm64@0.21.5': - optional: true + '@monaco-editor/react@4.7.0(monaco-editor@0.52.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@monaco-editor/loader': 1.5.0 + monaco-editor: 0.52.2 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/android-arm64@0.23.1': - optional: true + '@mozilla/readability@0.5.0': {} - '@esbuild/android-arm64@0.25.0': - optional: true + '@mswjs/interceptors@0.37.6': + dependencies: + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/logger': 0.3.0 + '@open-draft/until': 2.1.0 + is-node-process: 1.2.0 + outvariant: 1.4.3 + strict-event-emitter: 0.5.1 - '@esbuild/android-arm@0.21.5': - optional: true + '@nextui-org/accordion@2.0.40(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/aria-utils': 2.0.26(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/divider': 2.0.32(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/framer-utils': 2.0.25(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-icons': 2.0.9(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@nextui-org/use-aria-accordion': 2.0.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/button': 3.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/tree': 3.8.1(react@18.3.1) + '@react-types/accordion': 3.0.0-alpha.21(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + framer-motion: 11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/android-arm@0.23.1': - optional: true + '@nextui-org/aria-utils@2.0.26(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/react-rsc-utils': 2.0.14(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/collections': 3.10.7(react@18.3.1) + '@react-stately/overlays': 3.6.7(react@18.3.1) + '@react-types/overlays': 3.8.7(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - '@nextui-org/theme' + - framer-motion + + '@nextui-org/autocomplete@2.1.7(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(@types/react@18.3.18)(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/aria-utils': 2.0.26(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/button': 2.0.38(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/input': 2.2.5(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/listbox': 2.1.27(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/popover': 2.1.29(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(@types/react@18.3.18)(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/scroll-shadow': 2.1.20(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/shared-icons': 2.0.9(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/spinner': 2.0.34(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@nextui-org/use-aria-button': 2.0.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/use-safe-layout-effect': 2.0.6(react@18.3.1) + '@react-aria/combobox': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/i18n': 3.11.1(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-aria/visually-hidden': 3.8.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/combobox': 3.8.4(react@18.3.1) + '@react-types/combobox': 3.11.1(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + framer-motion: 11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - '@types/react' - '@esbuild/android-arm@0.25.0': - optional: true + '@nextui-org/avatar@2.0.33(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@nextui-org/use-image': 2.0.6(react@18.3.1) + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/android-x64@0.21.5': - optional: true + '@nextui-org/badge@2.0.32(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/android-x64@0.23.1': - optional: true + '@nextui-org/breadcrumbs@2.0.13(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-icons': 2.0.9(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@react-aria/breadcrumbs': 3.5.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-types/breadcrumbs': 3.7.5(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/android-x64@0.25.0': - optional: true + '@nextui-org/button@2.0.38(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/ripple': 2.0.33(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/spinner': 2.0.34(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@nextui-org/use-aria-button': 2.0.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/button': 3.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-types/button': 3.9.4(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + framer-motion: 11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/darwin-arm64@0.21.5': - optional: true + '@nextui-org/calendar@2.0.12(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@internationalized/date': 3.7.0 + '@nextui-org/button': 2.0.38(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/framer-utils': 2.0.25(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-icons': 2.0.9(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@nextui-org/use-aria-button': 2.0.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/calendar': 3.5.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/i18n': 3.11.1(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-aria/visually-hidden': 3.8.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/calendar': 3.5.1(react@18.3.1) + '@react-stately/utils': 3.10.1(react@18.3.1) + '@react-types/button': 3.9.4(react@18.3.1) + '@react-types/calendar': 3.4.6(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + '@types/lodash.debounce': 4.0.9 + lodash.debounce: 4.0.8 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + scroll-into-view-if-needed: 3.0.10 + transitivePeerDependencies: + - framer-motion + + '@nextui-org/card@2.0.34(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/ripple': 2.0.33(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@nextui-org/use-aria-button': 2.0.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/button': 3.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + framer-motion: 11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/darwin-arm64@0.23.1': - optional: true + '@nextui-org/checkbox@2.1.5(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@nextui-org/use-callback-ref': 2.0.6(react@18.3.1) + '@nextui-org/use-safe-layout-effect': 2.0.6(react@18.3.1) + '@react-aria/checkbox': 3.14.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-aria/visually-hidden': 3.8.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/checkbox': 3.6.5(react@18.3.1) + '@react-stately/toggle': 3.7.4(react@18.3.1) + '@react-types/checkbox': 3.8.1(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/darwin-arm64@0.25.0': - optional: true + '@nextui-org/chip@2.0.33(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-icons': 2.0.9(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-types/checkbox': 3.8.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/darwin-x64@0.21.5': - optional: true + '@nextui-org/code@2.0.33(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system-rsc': 2.1.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/darwin-x64@0.23.1': - optional: true + '@nextui-org/date-input@2.1.4(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@internationalized/date': 3.7.0 + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@react-aria/datepicker': 3.10.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/i18n': 3.11.1(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/datepicker': 3.9.4(react@18.3.1) + '@react-types/datepicker': 3.7.4(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/darwin-x64@0.25.0': - optional: true + '@nextui-org/date-picker@2.1.8(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(@types/react@18.3.18)(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@internationalized/date': 3.7.0 + '@nextui-org/aria-utils': 2.0.26(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/button': 2.0.38(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/calendar': 2.0.12(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/date-input': 2.1.4(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/popover': 2.1.29(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(@types/react@18.3.18)(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-icons': 2.0.9(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@react-aria/datepicker': 3.10.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/i18n': 3.11.1(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/datepicker': 3.9.4(react@18.3.1) + '@react-stately/overlays': 3.6.7(react@18.3.1) + '@react-stately/utils': 3.10.1(react@18.3.1) + '@react-types/datepicker': 3.7.4(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - '@types/react' + - framer-motion - '@esbuild/freebsd-arm64@0.21.5': - optional: true + '@nextui-org/divider@2.0.32(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/react-rsc-utils': 2.0.14(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system-rsc': 2.1.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@react-types/shared': 3.23.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/freebsd-arm64@0.23.1': - optional: true + '@nextui-org/dropdown@2.1.31(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(@types/react@18.3.18)(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/aria-utils': 2.0.26(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/menu': 2.0.30(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/popover': 2.1.29(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(@types/react@18.3.18)(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/menu': 3.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/menu': 3.7.1(react@18.3.1) + '@react-types/menu': 3.9.9(react@18.3.1) + framer-motion: 11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - '@types/react' - '@esbuild/freebsd-arm64@0.25.0': - optional: true + '@nextui-org/framer-utils@2.0.25(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/use-measure': 2.0.2(react@18.3.1) + framer-motion: 11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - '@nextui-org/theme' - '@esbuild/freebsd-x64@0.21.5': - optional: true + '@nextui-org/image@2.0.32(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@nextui-org/use-image': 2.0.6(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/freebsd-x64@0.23.1': - optional: true + '@nextui-org/input@2.2.5(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-icons': 2.0.9(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@nextui-org/use-safe-layout-effect': 2.0.6(react@18.3.1) + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/textfield': 3.14.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/utils': 3.10.1(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + '@react-types/textfield': 3.9.3(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-textarea-autosize: 8.5.8(@types/react@18.3.18)(react@18.3.1) + transitivePeerDependencies: + - '@types/react' - '@esbuild/freebsd-x64@0.25.0': - optional: true + '@nextui-org/kbd@2.0.34(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system-rsc': 2.1.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@react-aria/utils': 3.24.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/linux-arm64@0.21.5': - optional: true + '@nextui-org/link@2.0.35(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-icons': 2.0.9(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@nextui-org/use-aria-link': 2.0.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/link': 3.7.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-types/link': 3.5.5(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/linux-arm64@0.23.1': - optional: true + '@nextui-org/listbox@2.1.27(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/aria-utils': 2.0.26(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/divider': 2.0.32(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@nextui-org/use-is-mobile': 2.0.9(react@18.3.1) + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/listbox': 3.12.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/list': 3.10.5(react@18.3.1) + '@react-types/menu': 3.9.9(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - framer-motion + + '@nextui-org/menu@2.0.30(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/aria-utils': 2.0.26(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/divider': 2.0.32(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@nextui-org/use-aria-menu': 2.0.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/use-is-mobile': 2.0.9(react@18.3.1) + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/menu': 3.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/menu': 3.7.1(react@18.3.1) + '@react-stately/tree': 3.8.1(react@18.3.1) + '@react-types/menu': 3.9.9(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - framer-motion + + '@nextui-org/modal@2.0.41(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/framer-utils': 2.0.25(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-icons': 2.0.9(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@nextui-org/use-aria-button': 2.0.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/use-aria-modal-overlay': 2.0.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/use-disclosure': 2.0.10(react@18.3.1) + '@react-aria/dialog': 3.5.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/overlays': 3.22.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/overlays': 3.6.7(react@18.3.1) + '@react-types/overlays': 3.8.7(react@18.3.1) + framer-motion: 11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/linux-arm64@0.25.0': - optional: true + '@nextui-org/navbar@2.0.37(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(@types/react@18.3.18)(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/framer-utils': 2.0.25(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@nextui-org/use-aria-toggle-button': 2.0.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/use-scroll-position': 2.0.9(react@18.3.1) + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/overlays': 3.22.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/toggle': 3.7.4(react@18.3.1) + '@react-stately/utils': 3.10.1(react@18.3.1) + framer-motion: 11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.6.3(@types/react@18.3.18)(react@18.3.1) + transitivePeerDependencies: + - '@types/react' - '@esbuild/linux-arm@0.21.5': - optional: true + '@nextui-org/pagination@2.0.36(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-icons': 2.0.9(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@nextui-org/use-pagination': 2.0.10(react@18.3.1) + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/i18n': 3.11.1(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + scroll-into-view-if-needed: 3.0.10 + + '@nextui-org/popover@2.1.29(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(@types/react@18.3.18)(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/aria-utils': 2.0.26(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/button': 2.0.38(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/framer-utils': 2.0.25(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@nextui-org/use-aria-button': 2.0.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/use-safe-layout-effect': 2.0.6(react@18.3.1) + '@react-aria/dialog': 3.5.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/overlays': 3.22.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/overlays': 3.6.7(react@18.3.1) + '@react-types/button': 3.9.4(react@18.3.1) + '@react-types/overlays': 3.8.7(react@18.3.1) + framer-motion: 11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.6.3(@types/react@18.3.18)(react@18.3.1) + transitivePeerDependencies: + - '@types/react' - '@esbuild/linux-arm@0.23.1': - optional: true + '@nextui-org/progress@2.0.34(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@nextui-org/use-is-mounted': 2.0.6(react@18.3.1) + '@react-aria/i18n': 3.11.1(react@18.3.1) + '@react-aria/progress': 3.4.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-types/progress': 3.5.4(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/linux-arm@0.25.0': - optional: true + '@nextui-org/radio@2.1.5(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/radio': 3.10.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-aria/visually-hidden': 3.8.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/radio': 3.10.4(react@18.3.1) + '@react-types/radio': 3.8.1(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/linux-ia32@0.21.5': - optional: true + '@nextui-org/react-rsc-utils@2.0.14(react@18.3.1)': + dependencies: + react: 18.3.1 - '@esbuild/linux-ia32@0.23.1': - optional: true + '@nextui-org/react-utils@2.0.17(react@18.3.1)': + dependencies: + '@nextui-org/react-rsc-utils': 2.0.14(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + react: 18.3.1 - '@esbuild/linux-ia32@0.25.0': - optional: true + '@nextui-org/react@2.4.8(@types/react@18.3.18)(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3)))': + dependencies: + '@nextui-org/accordion': 2.0.40(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/autocomplete': 2.1.7(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(@types/react@18.3.18)(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/avatar': 2.0.33(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/badge': 2.0.32(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/breadcrumbs': 2.0.13(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/button': 2.0.38(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/calendar': 2.0.12(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/card': 2.0.34(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/checkbox': 2.1.5(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/chip': 2.0.33(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/code': 2.0.33(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/date-input': 2.1.4(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/date-picker': 2.1.8(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(@types/react@18.3.18)(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/divider': 2.0.32(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/dropdown': 2.1.31(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(@types/react@18.3.18)(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/framer-utils': 2.0.25(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/image': 2.0.32(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/input': 2.2.5(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/kbd': 2.0.34(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/link': 2.0.35(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/listbox': 2.1.27(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/menu': 2.0.30(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/modal': 2.0.41(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/navbar': 2.0.37(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(@types/react@18.3.18)(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/pagination': 2.0.36(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/popover': 2.1.29(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(@types/react@18.3.18)(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/progress': 2.0.34(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/radio': 2.1.5(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/ripple': 2.0.33(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/scroll-shadow': 2.1.20(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/select': 2.2.7(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(@types/react@18.3.18)(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/skeleton': 2.0.32(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/slider': 2.2.17(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/snippet': 2.0.43(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/spacer': 2.0.33(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/spinner': 2.0.34(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/switch': 2.0.34(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/table': 2.0.40(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/tabs': 2.0.37(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@nextui-org/tooltip': 2.0.41(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/user': 2.0.34(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/visually-hidden': 3.8.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + framer-motion: 11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - '@types/react' + - tailwindcss - '@esbuild/linux-loong64@0.21.5': - optional: true + '@nextui-org/ripple@2.0.33(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + framer-motion: 11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/linux-loong64@0.23.1': - optional: true + '@nextui-org/scroll-shadow@2.1.20(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@nextui-org/use-data-scroll-overflow': 2.1.7(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/linux-loong64@0.25.0': - optional: true + '@nextui-org/select@2.2.7(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(@types/react@18.3.18)(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/aria-utils': 2.0.26(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/listbox': 2.1.27(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/popover': 2.1.29(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(@types/react@18.3.18)(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/scroll-shadow': 2.1.20(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/shared-icons': 2.0.9(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/spinner': 2.0.34(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@nextui-org/use-aria-button': 2.0.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/use-aria-multiselect': 2.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/use-safe-layout-effect': 2.0.6(react@18.3.1) + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/form': 3.0.5(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-aria/visually-hidden': 3.8.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + framer-motion: 11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - '@types/react' - '@esbuild/linux-mips64el@0.21.5': - optional: true + '@nextui-org/shared-icons@2.0.9(react@18.3.1)': + dependencies: + react: 18.3.1 - '@esbuild/linux-mips64el@0.23.1': - optional: true + '@nextui-org/shared-utils@2.0.8': {} - '@esbuild/linux-mips64el@0.25.0': - optional: true + '@nextui-org/skeleton@2.0.32(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/linux-ppc64@0.21.5': - optional: true + '@nextui-org/slider@2.2.17(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@nextui-org/tooltip': 2.0.41(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/i18n': 3.11.1(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/slider': 3.7.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-aria/visually-hidden': 3.8.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/slider': 3.5.4(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - framer-motion + + '@nextui-org/snippet@2.0.43(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/button': 2.0.38(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-icons': 2.0.9(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@nextui-org/tooltip': 2.0.41(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/use-clipboard': 2.0.7(react@18.3.1) + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + framer-motion: 11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/linux-ppc64@0.23.1': - optional: true + '@nextui-org/spacer@2.0.33(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system-rsc': 2.1.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/linux-ppc64@0.25.0': - optional: true + '@nextui-org/spinner@2.0.34(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system-rsc': 2.1.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/linux-riscv64@0.21.5': - optional: true + '@nextui-org/switch@2.0.34(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@nextui-org/use-safe-layout-effect': 2.0.6(react@18.3.1) + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/switch': 3.6.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-aria/visually-hidden': 3.8.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/toggle': 3.7.4(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/linux-riscv64@0.23.1': - optional: true + '@nextui-org/system-rsc@2.1.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react@18.3.1)': + dependencies: + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@react-types/shared': 3.23.1(react@18.3.1) + clsx: 1.2.1 + react: 18.3.1 - '@esbuild/linux-riscv64@0.25.0': - optional: true + '@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@internationalized/date': 3.7.0 + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/system-rsc': 2.1.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react@18.3.1) + '@react-aria/i18n': 3.11.1(react@18.3.1) + '@react-aria/overlays': 3.22.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/utils': 3.10.1(react@18.3.1) + framer-motion: 11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - '@nextui-org/theme' + + '@nextui-org/table@2.0.40(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/checkbox': 2.1.5(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-icons': 2.0.9(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/spacer': 2.0.33(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/table': 3.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-aria/visually-hidden': 3.8.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/table': 3.11.8(react@18.3.1) + '@react-stately/virtualizer': 3.7.1(react@18.3.1) + '@react-types/grid': 3.2.6(react@18.3.1) + '@react-types/table': 3.9.5(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/linux-s390x@0.21.5': - optional: true + '@nextui-org/tabs@2.0.37(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/aria-utils': 2.0.26(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/framer-utils': 2.0.25(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@nextui-org/use-is-mounted': 2.0.6(react@18.3.1) + '@nextui-org/use-update-effect': 2.0.6(react@18.3.1) + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/tabs': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/tabs': 3.6.6(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + '@react-types/tabs': 3.3.7(react@18.3.1) + framer-motion: 11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + scroll-into-view-if-needed: 3.0.10 - '@esbuild/linux-s390x@0.23.1': - optional: true + '@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3)))': + dependencies: + clsx: 1.2.1 + color: 4.2.3 + color2k: 2.0.3 + deepmerge: 4.3.1 + flat: 5.0.2 + lodash.foreach: 4.5.0 + lodash.get: 4.4.2 + lodash.kebabcase: 4.1.1 + lodash.mapkeys: 4.6.0 + lodash.omit: 4.5.0 + tailwind-merge: 1.14.0 + tailwind-variants: 0.1.20(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + tailwindcss: 3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3)) + + '@nextui-org/tooltip@2.0.41(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/aria-utils': 2.0.26(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/framer-utils': 2.0.25(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@nextui-org/use-safe-layout-effect': 2.0.6(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/overlays': 3.22.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/tooltip': 3.7.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/tooltip': 3.4.9(react@18.3.1) + '@react-types/overlays': 3.8.7(react@18.3.1) + '@react-types/tooltip': 3.4.9(react@18.3.1) + framer-motion: 11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/linux-s390x@0.25.0': - optional: true + '@nextui-org/use-aria-accordion@2.0.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/button': 3.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/selection': 3.18.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/tree': 3.8.1(react@18.3.1) + '@react-types/accordion': 3.0.0-alpha.21(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + react: 18.3.1 + transitivePeerDependencies: + - react-dom - '@esbuild/linux-x64@0.21.5': - optional: true + '@nextui-org/use-aria-button@2.0.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-types/button': 3.9.4(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + react: 18.3.1 + transitivePeerDependencies: + - react-dom - '@esbuild/linux-x64@0.23.1': - optional: true + '@nextui-org/use-aria-link@2.0.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-types/link': 3.5.5(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + react: 18.3.1 + transitivePeerDependencies: + - react-dom + + '@nextui-org/use-aria-menu@2.0.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/i18n': 3.11.1(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/menu': 3.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/selection': 3.18.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/collections': 3.10.7(react@18.3.1) + '@react-stately/tree': 3.8.1(react@18.3.1) + '@react-types/menu': 3.9.9(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/linux-x64@0.25.0': - optional: true + '@nextui-org/use-aria-modal-overlay@2.0.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/overlays': 3.22.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/overlays': 3.6.7(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/netbsd-arm64@0.25.0': - optional: true + '@nextui-org/use-aria-multiselect@2.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/i18n': 3.11.1(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/label': 3.7.8(react@18.3.1) + '@react-aria/listbox': 3.12.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/menu': 3.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/selection': 3.18.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/form': 3.0.3(react@18.3.1) + '@react-stately/list': 3.10.5(react@18.3.1) + '@react-stately/menu': 3.7.1(react@18.3.1) + '@react-types/button': 3.9.4(react@18.3.1) + '@react-types/overlays': 3.8.7(react@18.3.1) + '@react-types/select': 3.9.4(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/netbsd-x64@0.21.5': - optional: true + '@nextui-org/use-aria-toggle-button@2.0.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/use-aria-button': 2.0.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/toggle': 3.7.4(react@18.3.1) + '@react-types/button': 3.9.4(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + react: 18.3.1 + transitivePeerDependencies: + - react-dom - '@esbuild/netbsd-x64@0.23.1': - optional: true + '@nextui-org/use-callback-ref@2.0.6(react@18.3.1)': + dependencies: + '@nextui-org/use-safe-layout-effect': 2.0.6(react@18.3.1) + react: 18.3.1 - '@esbuild/netbsd-x64@0.25.0': - optional: true + '@nextui-org/use-clipboard@2.0.7(react@18.3.1)': + dependencies: + react: 18.3.1 - '@esbuild/openbsd-arm64@0.23.1': - optional: true + '@nextui-org/use-data-scroll-overflow@2.1.7(react@18.3.1)': + dependencies: + '@nextui-org/shared-utils': 2.0.8 + react: 18.3.1 - '@esbuild/openbsd-arm64@0.25.0': - optional: true + '@nextui-org/use-disclosure@2.0.10(react@18.3.1)': + dependencies: + '@nextui-org/use-callback-ref': 2.0.6(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/utils': 3.10.1(react@18.3.1) + react: 18.3.1 - '@esbuild/openbsd-x64@0.21.5': - optional: true + '@nextui-org/use-image@2.0.6(react@18.3.1)': + dependencies: + '@nextui-org/use-safe-layout-effect': 2.0.6(react@18.3.1) + react: 18.3.1 - '@esbuild/openbsd-x64@0.23.1': - optional: true + '@nextui-org/use-is-mobile@2.0.9(react@18.3.1)': + dependencies: + '@react-aria/ssr': 3.9.4(react@18.3.1) + react: 18.3.1 - '@esbuild/openbsd-x64@0.25.0': - optional: true + '@nextui-org/use-is-mounted@2.0.6(react@18.3.1)': + dependencies: + react: 18.3.1 - '@esbuild/sunos-x64@0.21.5': - optional: true + '@nextui-org/use-measure@2.0.2(react@18.3.1)': + dependencies: + react: 18.3.1 - '@esbuild/sunos-x64@0.23.1': - optional: true + '@nextui-org/use-pagination@2.0.10(react@18.3.1)': + dependencies: + '@nextui-org/shared-utils': 2.0.8 + '@react-aria/i18n': 3.11.1(react@18.3.1) + react: 18.3.1 - '@esbuild/sunos-x64@0.25.0': - optional: true + '@nextui-org/use-safe-layout-effect@2.0.6(react@18.3.1)': + dependencies: + react: 18.3.1 - '@esbuild/win32-arm64@0.21.5': - optional: true + '@nextui-org/use-scroll-position@2.0.9(react@18.3.1)': + dependencies: + react: 18.3.1 - '@esbuild/win32-arm64@0.23.1': - optional: true + '@nextui-org/use-update-effect@2.0.6(react@18.3.1)': + dependencies: + react: 18.3.1 - '@esbuild/win32-arm64@0.25.0': - optional: true + '@nextui-org/user@2.0.34(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@nextui-org/avatar': 2.0.33(@nextui-org/system@2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/react-utils': 2.0.17(react@18.3.1) + '@nextui-org/shared-utils': 2.0.8 + '@nextui-org/system': 2.2.6(@nextui-org/theme@2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))))(framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/theme': 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@esbuild/win32-ia32@0.21.5': - optional: true + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 - '@esbuild/win32-ia32@0.23.1': - optional: true + '@nodelib/fs.stat@2.0.5': {} - '@esbuild/win32-ia32@0.25.0': - optional: true + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.0 - '@esbuild/win32-x64@0.21.5': - optional: true + '@npmcli/fs@2.1.2': + dependencies: + '@gar/promisify': 1.1.3 + semver: 7.7.1 - '@esbuild/win32-x64@0.23.1': - optional: true + '@npmcli/move-file@2.0.1': + dependencies: + mkdirp: 1.0.4 + rimraf: 3.0.2 - '@esbuild/win32-x64@0.25.0': - optional: true + '@octokit/auth-token@2.5.0': + dependencies: + '@octokit/types': 6.41.0 - '@eslint-community/eslint-utils@4.4.1(eslint@8.57.1)': + '@octokit/core@3.6.0(encoding@0.1.13)': dependencies: - eslint: 8.57.1 - eslint-visitor-keys: 3.4.3 + '@octokit/auth-token': 2.5.0 + '@octokit/graphql': 4.8.0(encoding@0.1.13) + '@octokit/request': 5.6.3(encoding@0.1.13) + '@octokit/request-error': 2.1.0 + '@octokit/types': 6.41.0 + before-after-hook: 2.2.3 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding - '@eslint-community/regexpp@4.12.1': {} + '@octokit/endpoint@6.0.12': + dependencies: + '@octokit/types': 6.41.0 + is-plain-object: 5.0.0 + universal-user-agent: 6.0.1 - '@eslint/eslintrc@2.1.4': + '@octokit/graphql@4.8.0(encoding@0.1.13)': dependencies: - ajv: 6.12.6 - debug: 4.4.0 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 + '@octokit/request': 5.6.3(encoding@0.1.13) + '@octokit/types': 6.41.0 + universal-user-agent: 6.0.1 transitivePeerDependencies: - - supports-color + - encoding - '@eslint/js@8.57.1': {} + '@octokit/openapi-types@12.11.0': {} - '@fastify/busboy@2.1.1': {} + '@octokit/openapi-types@23.0.1': {} - '@gar/promisify@1.1.3': {} + '@octokit/plugin-paginate-rest@2.21.3(@octokit/core@3.6.0(encoding@0.1.13))': + dependencies: + '@octokit/core': 3.6.0(encoding@0.1.13) + '@octokit/types': 6.41.0 - '@google/generative-ai@0.11.5': {} + '@octokit/plugin-request-log@1.0.4(@octokit/core@3.6.0(encoding@0.1.13))': + dependencies: + '@octokit/core': 3.6.0(encoding@0.1.13) - '@humanwhocodes/config-array@0.13.0': + '@octokit/plugin-rest-endpoint-methods@5.16.2(@octokit/core@3.6.0(encoding@0.1.13))': dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.4.0 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + '@octokit/core': 3.6.0(encoding@0.1.13) + '@octokit/types': 6.41.0 + deprecation: 2.3.1 - '@humanwhocodes/module-importer@1.0.1': {} + '@octokit/plugin-retry@3.0.9': + dependencies: + '@octokit/types': 6.41.0 + bottleneck: 2.19.5 - '@humanwhocodes/object-schema@2.0.3': {} + '@octokit/request-error@2.1.0': + dependencies: + '@octokit/types': 6.41.0 + deprecation: 2.3.1 + once: 1.4.0 - '@img/sharp-darwin-arm64@0.33.3': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.0.2 - optional: true + '@octokit/request-error@5.1.1': + dependencies: + '@octokit/types': 13.8.0 + deprecation: 2.3.1 + once: 1.4.0 - '@img/sharp-darwin-x64@0.33.3': - optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.0.2 - optional: true + '@octokit/request@5.6.3(encoding@0.1.13)': + dependencies: + '@octokit/endpoint': 6.0.12 + '@octokit/request-error': 2.1.0 + '@octokit/types': 6.41.0 + is-plain-object: 5.0.0 + node-fetch: 2.7.0(encoding@0.1.13) + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding - '@img/sharp-libvips-darwin-arm64@1.0.2': - optional: true + '@octokit/rest@18.12.0(encoding@0.1.13)': + dependencies: + '@octokit/core': 3.6.0(encoding@0.1.13) + '@octokit/plugin-paginate-rest': 2.21.3(@octokit/core@3.6.0(encoding@0.1.13)) + '@octokit/plugin-request-log': 1.0.4(@octokit/core@3.6.0(encoding@0.1.13)) + '@octokit/plugin-rest-endpoint-methods': 5.16.2(@octokit/core@3.6.0(encoding@0.1.13)) + transitivePeerDependencies: + - encoding - '@img/sharp-libvips-darwin-x64@1.0.2': - optional: true + '@octokit/types@13.8.0': + dependencies: + '@octokit/openapi-types': 23.0.1 - '@img/sharp-libvips-linux-arm64@1.0.2': - optional: true + '@octokit/types@6.41.0': + dependencies: + '@octokit/openapi-types': 12.11.0 - '@img/sharp-libvips-linux-arm@1.0.2': - optional: true + '@octokit/webhooks-schemas@6.11.0': {} - '@img/sharp-libvips-linux-s390x@1.0.2': - optional: true + '@octokit/webhooks-types@6.11.0': {} - '@img/sharp-libvips-linux-x64@1.0.2': - optional: true + '@open-draft/deferred-promise@2.2.0': {} - '@img/sharp-libvips-linuxmusl-arm64@1.0.2': - optional: true + '@open-draft/logger@0.3.0': + dependencies: + is-node-process: 1.2.0 + outvariant: 1.4.3 - '@img/sharp-libvips-linuxmusl-x64@1.0.2': - optional: true + '@open-draft/until@2.1.0': {} - '@img/sharp-linux-arm64@0.33.3': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.0.2 + '@parcel/watcher-android-arm64@2.5.1': optional: true - '@img/sharp-linux-arm@0.33.3': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.0.2 + '@parcel/watcher-darwin-arm64@2.5.1': optional: true - '@img/sharp-linux-s390x@0.33.3': - optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.0.2 + '@parcel/watcher-darwin-x64@2.5.1': optional: true - '@img/sharp-linux-x64@0.33.3': - optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.0.2 + '@parcel/watcher-freebsd-x64@2.5.1': optional: true - '@img/sharp-linuxmusl-arm64@0.33.3': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.0.2 + '@parcel/watcher-linux-arm-glibc@2.5.1': optional: true - '@img/sharp-linuxmusl-x64@0.33.3': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.0.2 + '@parcel/watcher-linux-arm-musl@2.5.1': optional: true - '@img/sharp-wasm32@0.33.3': - dependencies: - '@emnapi/runtime': 1.3.1 + '@parcel/watcher-linux-arm64-glibc@2.5.1': optional: true - '@img/sharp-win32-ia32@0.33.3': + '@parcel/watcher-linux-arm64-musl@2.5.1': optional: true - '@img/sharp-win32-x64@0.33.3': + '@parcel/watcher-linux-x64-glibc@2.5.1': optional: true - '@inquirer/confirm@5.1.6(@types/node@20.14.8)': - dependencies: - '@inquirer/core': 10.1.7(@types/node@20.14.8) - '@inquirer/type': 3.0.4(@types/node@20.14.8) - optionalDependencies: - '@types/node': 20.14.8 + '@parcel/watcher-linux-x64-musl@2.5.1': optional: true - '@inquirer/confirm@5.1.6(@types/node@20.17.17)': - dependencies: - '@inquirer/core': 10.1.7(@types/node@20.17.17) - '@inquirer/type': 3.0.4(@types/node@20.17.17) - optionalDependencies: - '@types/node': 20.17.17 + '@parcel/watcher-win32-arm64@2.5.1': optional: true - '@inquirer/confirm@5.1.6(@types/node@22.13.10)': - dependencies: - '@inquirer/core': 10.1.7(@types/node@22.13.10) - '@inquirer/type': 3.0.4(@types/node@22.13.10) - optionalDependencies: - '@types/node': 22.13.10 - - '@inquirer/core@10.1.7(@types/node@20.14.8)': - dependencies: - '@inquirer/figures': 1.0.10 - '@inquirer/type': 3.0.4(@types/node@20.14.8) - ansi-escapes: 4.3.2 - cli-width: 4.1.0 - mute-stream: 2.0.0 - signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.2 - optionalDependencies: - '@types/node': 20.14.8 + '@parcel/watcher-win32-ia32@2.5.1': optional: true - '@inquirer/core@10.1.7(@types/node@20.17.17)': - dependencies: - '@inquirer/figures': 1.0.10 - '@inquirer/type': 3.0.4(@types/node@20.17.17) - ansi-escapes: 4.3.2 - cli-width: 4.1.0 - mute-stream: 2.0.0 - signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.2 - optionalDependencies: - '@types/node': 20.17.17 + '@parcel/watcher-win32-x64@2.5.1': optional: true - '@inquirer/core@10.1.7(@types/node@22.13.10)': + '@parcel/watcher@2.5.1': dependencies: - '@inquirer/figures': 1.0.10 - '@inquirer/type': 3.0.4(@types/node@22.13.10) - ansi-escapes: 4.3.2 - cli-width: 4.1.0 - mute-stream: 2.0.0 - signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.2 - optionalDependencies: - '@types/node': 22.13.10 - - '@inquirer/figures@1.0.10': {} - - '@inquirer/type@3.0.4(@types/node@20.14.8)': + detect-libc: 1.0.3 + is-glob: 4.0.3 + micromatch: 4.0.8 + node-addon-api: 7.1.1 optionalDependencies: - '@types/node': 20.14.8 + '@parcel/watcher-android-arm64': 2.5.1 + '@parcel/watcher-darwin-arm64': 2.5.1 + '@parcel/watcher-darwin-x64': 2.5.1 + '@parcel/watcher-freebsd-x64': 2.5.1 + '@parcel/watcher-linux-arm-glibc': 2.5.1 + '@parcel/watcher-linux-arm-musl': 2.5.1 + '@parcel/watcher-linux-arm64-glibc': 2.5.1 + '@parcel/watcher-linux-arm64-musl': 2.5.1 + '@parcel/watcher-linux-x64-glibc': 2.5.1 + '@parcel/watcher-linux-x64-musl': 2.5.1 + '@parcel/watcher-win32-arm64': 2.5.1 + '@parcel/watcher-win32-ia32': 2.5.1 + '@parcel/watcher-win32-x64': 2.5.1 optional: true - '@inquirer/type@3.0.4(@types/node@20.17.17)': - optionalDependencies: - '@types/node': 20.17.17 + '@pkgjs/parseargs@0.11.0': optional: true - '@inquirer/type@3.0.4(@types/node@22.13.10)': - optionalDependencies: - '@types/node': 22.13.10 - - '@isaacs/cliui@8.0.2': - dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 - - '@istanbuljs/schema@0.1.3': {} + '@pkgr/core@0.1.1': {} - '@jimp/bmp@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': + '@playwright/test@1.50.1': dependencies: - '@jimp/custom': 0.22.12(encoding@0.1.13) - '@jimp/utils': 0.22.12 - bmp-js: 0.1.0 + playwright: 1.50.1 - '@jimp/core@0.22.12(encoding@0.1.13)': - dependencies: - '@jimp/utils': 0.22.12 - any-base: 1.1.0 - buffer: 5.7.1 - exif-parser: 0.1.12 - file-type: 16.5.4 - isomorphic-fetch: 3.0.0(encoding@0.1.13) - pixelmatch: 4.0.2 - tinycolor2: 1.6.0 - transitivePeerDependencies: - - encoding + '@polka/url@1.0.0-next.28': {} - '@jimp/core@1.6.0': - dependencies: - '@jimp/file-ops': 1.6.0 - '@jimp/types': 1.6.0 - '@jimp/utils': 1.6.0 - await-to-js: 3.0.0 - exif-parser: 0.1.12 - file-type: 16.5.4 - mime: 3.0.0 + '@popperjs/core@2.11.8': {} - '@jimp/custom@0.22.12(encoding@0.1.13)': + '@puppeteer/browsers@2.7.0': dependencies: - '@jimp/core': 0.22.12(encoding@0.1.13) + debug: 4.4.0 + extract-zip: 2.0.1 + progress: 2.0.3 + proxy-agent: 6.5.0 + semver: 7.7.1 + tar-fs: 3.0.8 + unbzip2-stream: 1.4.3 + yargs: 17.7.2 transitivePeerDependencies: - - encoding - - '@jimp/diff@1.6.0': - dependencies: - '@jimp/plugin-resize': 1.6.0 - '@jimp/types': 1.6.0 - '@jimp/utils': 1.6.0 - pixelmatch: 5.3.0 - - '@jimp/file-ops@1.6.0': {} - - '@jimp/gif@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': - dependencies: - '@jimp/custom': 0.22.12(encoding@0.1.13) - '@jimp/utils': 0.22.12 - gifwrap: 0.10.1 - omggif: 1.0.10 + - bare-buffer + - supports-color - '@jimp/jpeg@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': + '@react-aria/breadcrumbs@3.5.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@jimp/custom': 0.22.12(encoding@0.1.13) - '@jimp/utils': 0.22.12 - jpeg-js: 0.4.4 + '@react-aria/i18n': 3.12.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/link': 3.7.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-types/breadcrumbs': 3.7.5(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + transitivePeerDependencies: + - react-dom - '@jimp/js-bmp@1.6.0': + '@react-aria/button@3.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@jimp/core': 1.6.0 - '@jimp/types': 1.6.0 - '@jimp/utils': 1.6.0 - bmp-ts: 1.0.9 + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/toggle': 3.8.2(react@18.3.1) + '@react-types/button': 3.11.0(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + transitivePeerDependencies: + - react-dom + + '@react-aria/calendar@3.5.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@internationalized/date': 3.7.0 + '@react-aria/i18n': 3.11.1(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/live-announcer': 3.4.1 + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/calendar': 3.5.1(react@18.3.1) + '@react-types/button': 3.9.4(react@18.3.1) + '@react-types/calendar': 3.4.6(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@jimp/js-gif@1.6.0': - dependencies: - '@jimp/core': 1.6.0 - '@jimp/types': 1.6.0 - gifwrap: 0.10.1 - omggif: 1.0.10 + '@react-aria/checkbox@3.14.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/form': 3.0.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/label': 3.7.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/toggle': 3.11.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/checkbox': 3.6.5(react@18.3.1) + '@react-stately/form': 3.1.2(react@18.3.1) + '@react-stately/toggle': 3.7.4(react@18.3.1) + '@react-types/checkbox': 3.8.1(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + transitivePeerDependencies: + - react-dom + + '@react-aria/combobox@3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/i18n': 3.11.1(react@18.3.1) + '@react-aria/listbox': 3.14.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/live-announcer': 3.4.1 + '@react-aria/menu': 3.18.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/overlays': 3.26.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/selection': 3.23.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/textfield': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/collections': 3.12.2(react@18.3.1) + '@react-stately/combobox': 3.8.4(react@18.3.1) + '@react-stately/form': 3.1.2(react@18.3.1) + '@react-types/button': 3.11.0(react@18.3.1) + '@react-types/combobox': 3.11.1(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@jimp/js-jpeg@1.6.0': - dependencies: - '@jimp/core': 1.6.0 - '@jimp/types': 1.6.0 - jpeg-js: 0.4.4 + '@react-aria/datepicker@3.10.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@internationalized/date': 3.7.0 + '@internationalized/number': 3.6.0 + '@internationalized/string': 3.2.5 + '@react-aria/focus': 3.20.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/form': 3.0.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/i18n': 3.11.1(react@18.3.1) + '@react-aria/interactions': 3.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/label': 3.7.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/spinbutton': 3.6.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/datepicker': 3.9.4(react@18.3.1) + '@react-stately/form': 3.1.2(react@18.3.1) + '@react-types/button': 3.11.0(react@18.3.1) + '@react-types/calendar': 3.6.1(react@18.3.1) + '@react-types/datepicker': 3.7.4(react@18.3.1) + '@react-types/dialog': 3.5.16(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@jimp/js-png@1.6.0': + '@react-aria/dialog@3.5.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@jimp/core': 1.6.0 - '@jimp/types': 1.6.0 - pngjs: 7.0.0 + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/overlays': 3.22.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-types/dialog': 3.5.16(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@jimp/js-tiff@1.6.0': + '@react-aria/focus@3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@jimp/core': 1.6.0 - '@jimp/types': 1.6.0 - utif2: 4.1.0 + '@react-aria/interactions': 3.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + clsx: 2.1.1 + react: 18.3.1 + transitivePeerDependencies: + - react-dom - '@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': + '@react-aria/focus@3.20.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@jimp/custom': 0.22.12(encoding@0.1.13) - '@jimp/utils': 0.22.12 + '@react-aria/interactions': 3.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + clsx: 2.1.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@jimp/plugin-blit@1.6.0': + '@react-aria/form@3.0.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@jimp/types': 1.6.0 - '@jimp/utils': 1.6.0 - zod: 3.24.2 + '@react-aria/interactions': 3.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/form': 3.1.2(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@jimp/plugin-blur@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': + '@react-aria/form@3.0.5(react@18.3.1)': dependencies: - '@jimp/custom': 0.22.12(encoding@0.1.13) - '@jimp/utils': 0.22.12 + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/form': 3.1.2(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@jimp/plugin-blur@1.6.0': - dependencies: - '@jimp/core': 1.6.0 - '@jimp/utils': 1.6.0 + '@react-aria/grid@3.12.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/focus': 3.20.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/i18n': 3.12.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/live-announcer': 3.4.1 + '@react-aria/selection': 3.23.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/collections': 3.12.2(react@18.3.1) + '@react-stately/grid': 3.11.0(react@18.3.1) + '@react-stately/selection': 3.20.0(react@18.3.1) + '@react-types/checkbox': 3.9.2(react@18.3.1) + '@react-types/grid': 3.3.0(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@jimp/plugin-circle@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': + '@react-aria/i18n@3.11.1(react@18.3.1)': dependencies: - '@jimp/custom': 0.22.12(encoding@0.1.13) - '@jimp/utils': 0.22.12 + '@internationalized/date': 3.7.0 + '@internationalized/message': 3.1.6 + '@internationalized/number': 3.6.0 + '@internationalized/string': 3.2.5 + '@react-aria/ssr': 3.9.7(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@jimp/plugin-circle@1.6.0': + '@react-aria/i18n@3.12.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@jimp/types': 1.6.0 - zod: 3.24.2 + '@internationalized/date': 3.7.0 + '@internationalized/message': 3.1.6 + '@internationalized/number': 3.6.0 + '@internationalized/string': 3.2.5 + '@react-aria/ssr': 3.9.7(react@18.3.1) + '@react-aria/utils': 3.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@jimp/plugin-color@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': + '@react-aria/interactions@3.21.3(react@18.3.1)': dependencies: - '@jimp/custom': 0.22.12(encoding@0.1.13) - '@jimp/utils': 0.22.12 - tinycolor2: 1.6.0 + '@react-aria/ssr': 3.9.7(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@jimp/plugin-color@1.6.0': + '@react-aria/interactions@3.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@jimp/core': 1.6.0 - '@jimp/types': 1.6.0 - '@jimp/utils': 1.6.0 - tinycolor2: 1.6.0 - zod: 3.24.2 + '@react-aria/ssr': 3.9.7(react@18.3.1) + '@react-aria/utils': 3.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/flags': 3.1.0 + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@jimp/plugin-contain@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))))': + '@react-aria/label@3.7.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@jimp/custom': 0.22.12(encoding@0.1.13) - '@jimp/plugin-blit': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/plugin-scale': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))) - '@jimp/utils': 0.22.12 + '@react-aria/utils': 3.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@jimp/plugin-contain@1.6.0': + '@react-aria/label@3.7.8(react@18.3.1)': dependencies: - '@jimp/core': 1.6.0 - '@jimp/plugin-blit': 1.6.0 - '@jimp/plugin-resize': 1.6.0 - '@jimp/types': 1.6.0 - '@jimp/utils': 1.6.0 - zod: 3.24.2 + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@jimp/plugin-cover@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))))': + '@react-aria/link@3.7.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@jimp/custom': 0.22.12(encoding@0.1.13) - '@jimp/plugin-crop': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/plugin-scale': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))) - '@jimp/utils': 0.22.12 + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-types/link': 3.5.5(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + transitivePeerDependencies: + - react-dom - '@jimp/plugin-cover@1.6.0': + '@react-aria/link@3.7.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@jimp/core': 1.6.0 - '@jimp/plugin-crop': 1.6.0 - '@jimp/plugin-resize': 1.6.0 - '@jimp/types': 1.6.0 - zod: 3.24.2 + '@react-aria/interactions': 3.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-types/link': 3.5.11(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': + '@react-aria/listbox@3.12.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@jimp/custom': 0.22.12(encoding@0.1.13) - '@jimp/utils': 0.22.12 + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/label': 3.7.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/selection': 3.23.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/collections': 3.12.2(react@18.3.1) + '@react-stately/list': 3.10.5(react@18.3.1) + '@react-types/listbox': 3.5.5(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@jimp/plugin-crop@1.6.0': + '@react-aria/listbox@3.14.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@jimp/core': 1.6.0 - '@jimp/types': 1.6.0 - '@jimp/utils': 1.6.0 - zod: 3.24.2 + '@react-aria/interactions': 3.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/label': 3.7.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/selection': 3.23.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/collections': 3.12.2(react@18.3.1) + '@react-stately/list': 3.12.0(react@18.3.1) + '@react-types/listbox': 3.5.5(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@jimp/plugin-displace@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': + '@react-aria/live-announcer@3.4.1': dependencies: - '@jimp/custom': 0.22.12(encoding@0.1.13) - '@jimp/utils': 0.22.12 + '@swc/helpers': 0.5.15 - '@jimp/plugin-displace@1.6.0': - dependencies: - '@jimp/types': 1.6.0 - '@jimp/utils': 1.6.0 - zod: 3.24.2 + '@react-aria/menu@3.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/i18n': 3.12.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/overlays': 3.26.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/selection': 3.23.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/collections': 3.12.2(react@18.3.1) + '@react-stately/menu': 3.7.1(react@18.3.1) + '@react-stately/tree': 3.8.8(react@18.3.1) + '@react-types/button': 3.11.0(react@18.3.1) + '@react-types/menu': 3.9.9(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@jimp/plugin-dither@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': - dependencies: - '@jimp/custom': 0.22.12(encoding@0.1.13) - '@jimp/utils': 0.22.12 + '@react-aria/menu@3.18.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/focus': 3.20.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/i18n': 3.12.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/overlays': 3.26.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/selection': 3.23.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/collections': 3.12.2(react@18.3.1) + '@react-stately/menu': 3.9.2(react@18.3.1) + '@react-stately/selection': 3.20.0(react@18.3.1) + '@react-stately/tree': 3.8.8(react@18.3.1) + '@react-types/button': 3.11.0(react@18.3.1) + '@react-types/menu': 3.9.15(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@jimp/plugin-dither@1.6.0': + '@react-aria/overlays@3.22.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/focus': 3.20.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/i18n': 3.11.1(react@18.3.1) + '@react-aria/interactions': 3.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/ssr': 3.9.7(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-aria/visually-hidden': 3.8.21(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/overlays': 3.6.14(react@18.3.1) + '@react-types/button': 3.11.0(react@18.3.1) + '@react-types/overlays': 3.8.13(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@react-aria/overlays@3.26.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/focus': 3.20.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/i18n': 3.12.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/ssr': 3.9.7(react@18.3.1) + '@react-aria/utils': 3.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/visually-hidden': 3.8.21(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/overlays': 3.6.14(react@18.3.1) + '@react-types/button': 3.11.0(react@18.3.1) + '@react-types/overlays': 3.8.13(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@react-aria/progress@3.4.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@jimp/types': 1.6.0 + '@react-aria/i18n': 3.11.1(react@18.3.1) + '@react-aria/label': 3.7.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-types/progress': 3.5.4(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + transitivePeerDependencies: + - react-dom + + '@react-aria/radio@3.10.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/form': 3.0.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/i18n': 3.12.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/label': 3.7.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/radio': 3.10.4(react@18.3.1) + '@react-types/radio': 3.8.1(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + transitivePeerDependencies: + - react-dom - '@jimp/plugin-fisheye@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': + '@react-aria/selection@3.18.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@jimp/custom': 0.22.12(encoding@0.1.13) - '@jimp/utils': 0.22.12 + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/i18n': 3.11.1(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/selection': 3.20.0(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@jimp/plugin-fisheye@1.6.0': + '@react-aria/selection@3.23.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@jimp/types': 1.6.0 - '@jimp/utils': 1.6.0 - zod: 3.24.2 + '@react-aria/focus': 3.20.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/i18n': 3.12.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/selection': 3.20.0(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@jimp/plugin-flip@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-rotate@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))))': + '@react-aria/slider@3.7.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@jimp/custom': 0.22.12(encoding@0.1.13) - '@jimp/plugin-rotate': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))) - '@jimp/utils': 0.22.12 + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/i18n': 3.11.1(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/label': 3.7.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/slider': 3.5.4(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@react-types/slider': 3.7.9(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + transitivePeerDependencies: + - react-dom - '@jimp/plugin-flip@1.6.0': + '@react-aria/spinbutton@3.6.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@jimp/types': 1.6.0 - zod: 3.24.2 + '@react-aria/i18n': 3.12.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/live-announcer': 3.4.1 + '@react-aria/utils': 3.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-types/button': 3.11.0(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@jimp/plugin-gaussian@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': + '@react-aria/ssr@3.9.4(react@18.3.1)': dependencies: - '@jimp/custom': 0.22.12(encoding@0.1.13) - '@jimp/utils': 0.22.12 + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@jimp/plugin-hash@1.6.0': + '@react-aria/ssr@3.9.7(react@18.3.1)': dependencies: - '@jimp/core': 1.6.0 - '@jimp/js-bmp': 1.6.0 - '@jimp/js-jpeg': 1.6.0 - '@jimp/js-png': 1.6.0 - '@jimp/js-tiff': 1.6.0 - '@jimp/plugin-color': 1.6.0 - '@jimp/plugin-resize': 1.6.0 - '@jimp/types': 1.6.0 - '@jimp/utils': 1.6.0 - any-base: 1.1.0 + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@jimp/plugin-invert@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': + '@react-aria/switch@3.6.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@jimp/custom': 0.22.12(encoding@0.1.13) - '@jimp/utils': 0.22.12 + '@react-aria/toggle': 3.11.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/toggle': 3.7.4(react@18.3.1) + '@react-types/switch': 3.5.9(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + transitivePeerDependencies: + - react-dom + + '@react-aria/table@3.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/grid': 3.12.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/i18n': 3.12.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/live-announcer': 3.4.1 + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-aria/visually-hidden': 3.8.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/collections': 3.12.2(react@18.3.1) + '@react-stately/flags': 3.1.0 + '@react-stately/table': 3.11.8(react@18.3.1) + '@react-stately/virtualizer': 3.7.1(react@18.3.1) + '@react-types/checkbox': 3.9.2(react@18.3.1) + '@react-types/grid': 3.2.6(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@react-types/table': 3.9.5(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@jimp/plugin-mask@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': + '@react-aria/tabs@3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@jimp/custom': 0.22.12(encoding@0.1.13) - '@jimp/utils': 0.22.12 + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/i18n': 3.12.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/selection': 3.23.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/tabs': 3.6.6(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + '@react-types/tabs': 3.3.7(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@jimp/plugin-mask@1.6.0': + '@react-aria/textfield@3.14.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@jimp/types': 1.6.0 - zod: 3.24.2 + '@react-aria/focus': 3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/form': 3.0.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/label': 3.7.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/form': 3.1.2(react@18.3.1) + '@react-stately/utils': 3.10.1(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + '@react-types/textfield': 3.9.3(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + transitivePeerDependencies: + - react-dom + + '@react-aria/textfield@3.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/form': 3.0.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/label': 3.7.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/form': 3.1.2(react@18.3.1) + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@react-types/textfield': 3.12.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@jimp/plugin-normalize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': + '@react-aria/toggle@3.11.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@jimp/custom': 0.22.12(encoding@0.1.13) - '@jimp/utils': 0.22.12 + '@react-aria/interactions': 3.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/toggle': 3.8.2(react@18.3.1) + '@react-types/checkbox': 3.9.2(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@jimp/plugin-print@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))': + '@react-aria/tooltip@3.7.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@jimp/custom': 0.22.12(encoding@0.1.13) - '@jimp/plugin-blit': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/utils': 0.22.12 - load-bmfont: 1.4.2 + '@react-aria/focus': 3.20.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/tooltip': 3.4.9(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@react-types/tooltip': 3.4.9(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 transitivePeerDependencies: - - debug + - react-dom - '@jimp/plugin-print@1.6.0': + '@react-aria/utils@3.24.1(react@18.3.1)': dependencies: - '@jimp/core': 1.6.0 - '@jimp/js-jpeg': 1.6.0 - '@jimp/js-png': 1.6.0 - '@jimp/plugin-blit': 1.6.0 - '@jimp/types': 1.6.0 - parse-bmfont-ascii: 1.0.6 - parse-bmfont-binary: 1.0.6 - parse-bmfont-xml: 1.1.6 - simple-xml-to-json: 1.2.3 - zod: 3.24.2 + '@react-aria/ssr': 3.9.7(react@18.3.1) + '@react-stately/utils': 3.10.1(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + clsx: 2.1.1 + react: 18.3.1 - '@jimp/plugin-quantize@1.6.0': + '@react-aria/utils@3.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - image-q: 4.0.0 - zod: 3.24.2 + '@react-aria/ssr': 3.9.7(react@18.3.1) + '@react-stately/flags': 3.1.0 + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + clsx: 2.1.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': + '@react-aria/visually-hidden@3.8.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@jimp/custom': 0.22.12(encoding@0.1.13) - '@jimp/utils': 0.22.12 + '@react-aria/interactions': 3.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + transitivePeerDependencies: + - react-dom - '@jimp/plugin-resize@1.6.0': + '@react-aria/visually-hidden@3.8.21(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@jimp/core': 1.6.0 - '@jimp/types': 1.6.0 - zod: 3.24.2 + '@react-aria/interactions': 3.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@jimp/plugin-rotate@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))': + '@react-stately/calendar@3.5.1(react@18.3.1)': dependencies: - '@jimp/custom': 0.22.12(encoding@0.1.13) - '@jimp/plugin-blit': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/plugin-crop': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/utils': 0.22.12 + '@internationalized/date': 3.7.0 + '@react-stately/utils': 3.10.1(react@18.3.1) + '@react-types/calendar': 3.4.6(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@jimp/plugin-rotate@1.6.0': + '@react-stately/checkbox@3.6.5(react@18.3.1)': dependencies: - '@jimp/core': 1.6.0 - '@jimp/plugin-crop': 1.6.0 - '@jimp/plugin-resize': 1.6.0 - '@jimp/types': 1.6.0 - '@jimp/utils': 1.6.0 - zod: 3.24.2 + '@react-stately/form': 3.1.2(react@18.3.1) + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/checkbox': 3.8.1(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))': + '@react-stately/collections@3.10.7(react@18.3.1)': dependencies: - '@jimp/custom': 0.22.12(encoding@0.1.13) - '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/utils': 0.22.12 + '@react-types/shared': 3.23.1(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@jimp/plugin-shadow@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blur@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))': + '@react-stately/collections@3.12.2(react@18.3.1)': dependencies: - '@jimp/custom': 0.22.12(encoding@0.1.13) - '@jimp/plugin-blur': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/utils': 0.22.12 + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@jimp/plugin-threshold@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-color@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))': + '@react-stately/combobox@3.8.4(react@18.3.1)': dependencies: - '@jimp/custom': 0.22.12(encoding@0.1.13) - '@jimp/plugin-color': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/utils': 0.22.12 + '@react-stately/collections': 3.12.2(react@18.3.1) + '@react-stately/form': 3.1.2(react@18.3.1) + '@react-stately/list': 3.12.0(react@18.3.1) + '@react-stately/overlays': 3.6.14(react@18.3.1) + '@react-stately/select': 3.6.11(react@18.3.1) + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/combobox': 3.11.1(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@jimp/plugin-threshold@1.6.0': + '@react-stately/datepicker@3.9.4(react@18.3.1)': dependencies: - '@jimp/core': 1.6.0 - '@jimp/plugin-color': 1.6.0 - '@jimp/plugin-hash': 1.6.0 - '@jimp/types': 1.6.0 - '@jimp/utils': 1.6.0 - zod: 3.24.2 + '@internationalized/date': 3.7.0 + '@internationalized/string': 3.2.5 + '@react-stately/form': 3.1.2(react@18.3.1) + '@react-stately/overlays': 3.6.14(react@18.3.1) + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/datepicker': 3.7.4(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@jimp/plugins@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': + '@react-stately/flags@3.1.0': dependencies: - '@jimp/custom': 0.22.12(encoding@0.1.13) - '@jimp/plugin-blit': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/plugin-blur': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/plugin-circle': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/plugin-color': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/plugin-contain': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))) - '@jimp/plugin-cover': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))) - '@jimp/plugin-crop': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/plugin-displace': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/plugin-dither': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/plugin-fisheye': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/plugin-flip': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-rotate@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))) - '@jimp/plugin-gaussian': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/plugin-invert': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/plugin-mask': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/plugin-normalize': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/plugin-print': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))) - '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/plugin-rotate': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))) - '@jimp/plugin-scale': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))) - '@jimp/plugin-shadow': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-blur@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))) - '@jimp/plugin-threshold': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))(@jimp/plugin-color@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))) - timm: 1.7.1 - transitivePeerDependencies: - - debug + '@swc/helpers': 0.5.15 - '@jimp/png@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': + '@react-stately/form@3.0.3(react@18.3.1)': dependencies: - '@jimp/custom': 0.22.12(encoding@0.1.13) - '@jimp/utils': 0.22.12 - pngjs: 6.0.0 + '@react-types/shared': 3.23.1(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@jimp/tiff@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': + '@react-stately/form@3.1.2(react@18.3.1)': dependencies: - '@jimp/custom': 0.22.12(encoding@0.1.13) - utif2: 4.1.0 + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@jimp/types@0.22.12(@jimp/custom@0.22.12(encoding@0.1.13))': + '@react-stately/grid@3.11.0(react@18.3.1)': dependencies: - '@jimp/bmp': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/custom': 0.22.12(encoding@0.1.13) - '@jimp/gif': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/jpeg': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/png': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - '@jimp/tiff': 0.22.12(@jimp/custom@0.22.12(encoding@0.1.13)) - timm: 1.7.1 + '@react-stately/collections': 3.12.2(react@18.3.1) + '@react-stately/selection': 3.20.0(react@18.3.1) + '@react-types/grid': 3.3.0(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@jimp/types@1.6.0': + '@react-stately/list@3.10.5(react@18.3.1)': dependencies: - zod: 3.24.2 + '@react-stately/collections': 3.12.2(react@18.3.1) + '@react-stately/selection': 3.20.0(react@18.3.1) + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@jimp/utils@0.22.12': + '@react-stately/list@3.12.0(react@18.3.1)': dependencies: - regenerator-runtime: 0.13.11 + '@react-stately/collections': 3.12.2(react@18.3.1) + '@react-stately/selection': 3.20.0(react@18.3.1) + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@jimp/utils@1.6.0': + '@react-stately/menu@3.7.1(react@18.3.1)': dependencies: - '@jimp/types': 1.6.0 - tinycolor2: 1.6.0 + '@react-stately/overlays': 3.6.14(react@18.3.1) + '@react-types/menu': 3.9.9(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@jridgewell/gen-mapping@0.3.8': + '@react-stately/menu@3.9.2(react@18.3.1)': dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/sourcemap-codec@1.5.0': {} + '@react-stately/overlays': 3.6.14(react@18.3.1) + '@react-types/menu': 3.9.15(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@jridgewell/trace-mapping@0.3.25': + '@react-stately/overlays@3.6.14(react@18.3.1)': dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/overlays': 3.8.13(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@jridgewell/trace-mapping@0.3.9': + '@react-stately/overlays@3.6.7(react@18.3.1)': dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/overlays': 3.8.7(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@langchain/aws@0.1.6(@langchain/core@0.3.42(openai@4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2)))': + '@react-stately/radio@3.10.4(react@18.3.1)': dependencies: - '@aws-sdk/client-bedrock-agent-runtime': 3.765.0 - '@aws-sdk/client-bedrock-runtime': 3.758.0 - '@aws-sdk/client-kendra': 3.758.0 - '@aws-sdk/credential-provider-node': 3.758.0 - '@langchain/core': 0.3.42(openai@4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2)) - zod: 3.24.2 - zod-to-json-schema: 3.24.1(zod@3.24.2) - transitivePeerDependencies: - - aws-crt + '@react-stately/form': 3.1.2(react@18.3.1) + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/radio': 3.8.1(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@langchain/core@0.3.42(openai@4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2))': + '@react-stately/select@3.6.11(react@18.3.1)': dependencies: - '@cfworker/json-schema': 4.1.1 - ansi-styles: 5.2.0 - camelcase: 6.3.0 - decamelize: 1.2.0 - js-tiktoken: 1.0.19 - langsmith: 0.3.14(openai@4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2)) - mustache: 4.2.0 - p-queue: 6.6.2 - p-retry: 4.6.2 - uuid: 10.0.0 - zod: 3.24.2 - zod-to-json-schema: 3.24.1(zod@3.24.2) - transitivePeerDependencies: - - openai + '@react-stately/form': 3.1.2(react@18.3.1) + '@react-stately/list': 3.12.0(react@18.3.1) + '@react-stately/overlays': 3.6.14(react@18.3.1) + '@react-types/select': 3.9.10(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@langchain/openai@0.4.4(@langchain/core@0.3.42(openai@4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2)))(encoding@0.1.13)(ws@8.18.0)': + '@react-stately/selection@3.20.0(react@18.3.1)': dependencies: - '@langchain/core': 0.3.42(openai@4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2)) - js-tiktoken: 1.0.19 - openai: 4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2) - zod: 3.24.2 - zod-to-json-schema: 3.24.1(zod@3.24.2) - transitivePeerDependencies: - - encoding - - ws + '@react-stately/collections': 3.12.2(react@18.3.1) + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@malept/cross-spawn-promise@2.0.0': + '@react-stately/slider@3.5.4(react@18.3.1)': dependencies: - cross-spawn: 7.0.6 + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@react-types/slider': 3.7.9(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@manypkg/find-root@1.1.0': + '@react-stately/table@3.11.8(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.7 - '@types/node': 12.20.55 - find-up: 4.1.0 - fs-extra: 8.1.0 + '@react-stately/collections': 3.12.2(react@18.3.1) + '@react-stately/flags': 3.1.0 + '@react-stately/grid': 3.11.0(react@18.3.1) + '@react-stately/selection': 3.20.0(react@18.3.1) + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/grid': 3.2.6(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@react-types/table': 3.9.5(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@manypkg/get-packages@1.1.3': + '@react-stately/tabs@3.6.6(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.7 - '@changesets/types': 4.1.0 - '@manypkg/find-root': 1.1.0 - fs-extra: 8.1.0 - globby: 11.1.0 - read-yaml-file: 1.1.0 + '@react-stately/list': 3.12.0(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + '@react-types/tabs': 3.3.7(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@mistralai/mistralai@1.5.0(zod@3.24.2)': + '@react-stately/toggle@3.7.4(react@18.3.1)': dependencies: - zod: 3.24.2 - zod-to-json-schema: 3.24.1(zod@3.24.2) - - '@mixmark-io/domino@2.2.0': {} + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/checkbox': 3.8.1(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@modelcontextprotocol/sdk@1.7.0': + '@react-stately/toggle@3.8.2(react@18.3.1)': dependencies: - content-type: 1.0.5 - cors: 2.8.5 - eventsource: 3.0.5 - express: 5.0.1 - express-rate-limit: 7.5.0(express@5.0.1) - pkce-challenge: 4.1.0 - raw-body: 3.0.0 - zod: 3.24.2 - zod-to-json-schema: 3.24.1(zod@3.24.2) - transitivePeerDependencies: - - supports-color + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/checkbox': 3.9.2(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@module-federation/error-codes@0.8.4': {} + '@react-stately/tooltip@3.4.9(react@18.3.1)': + dependencies: + '@react-stately/overlays': 3.6.14(react@18.3.1) + '@react-types/tooltip': 3.4.9(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@module-federation/runtime-tools@0.8.4': + '@react-stately/tree@3.8.1(react@18.3.1)': dependencies: - '@module-federation/runtime': 0.8.4 - '@module-federation/webpack-bundler-runtime': 0.8.4 + '@react-stately/collections': 3.12.2(react@18.3.1) + '@react-stately/selection': 3.20.0(react@18.3.1) + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@module-federation/runtime@0.8.4': + '@react-stately/tree@3.8.8(react@18.3.1)': dependencies: - '@module-federation/error-codes': 0.8.4 - '@module-federation/sdk': 0.8.4 + '@react-stately/collections': 3.12.2(react@18.3.1) + '@react-stately/selection': 3.20.0(react@18.3.1) + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@module-federation/sdk@0.8.4': + '@react-stately/utils@3.10.1(react@18.3.1)': dependencies: - isomorphic-rslog: 0.0.6 + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@module-federation/webpack-bundler-runtime@0.8.4': + '@react-stately/utils@3.10.5(react@18.3.1)': dependencies: - '@module-federation/runtime': 0.8.4 - '@module-federation/sdk': 0.8.4 + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@mozilla/readability@0.5.0': {} + '@react-stately/virtualizer@3.7.1(react@18.3.1)': + dependencies: + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 - '@mswjs/interceptors@0.37.6': + '@react-types/accordion@3.0.0-alpha.21(react@18.3.1)': dependencies: - '@open-draft/deferred-promise': 2.2.0 - '@open-draft/logger': 0.3.0 - '@open-draft/until': 2.1.0 - is-node-process: 1.2.0 - outvariant: 1.4.3 - strict-event-emitter: 0.5.1 + '@react-types/shared': 3.23.1(react@18.3.1) + react: 18.3.1 - '@nodelib/fs.scandir@2.1.5': + '@react-types/breadcrumbs@3.7.5(react@18.3.1)': dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 + '@react-types/link': 3.5.11(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + react: 18.3.1 - '@nodelib/fs.stat@2.0.5': {} + '@react-types/button@3.11.0(react@18.3.1)': + dependencies: + '@react-types/shared': 3.28.0(react@18.3.1) + react: 18.3.1 - '@nodelib/fs.walk@1.2.8': + '@react-types/button@3.9.4(react@18.3.1)': dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.0 + '@react-types/shared': 3.28.0(react@18.3.1) + react: 18.3.1 - '@npmcli/fs@2.1.2': + '@react-types/calendar@3.4.6(react@18.3.1)': dependencies: - '@gar/promisify': 1.1.3 - semver: 7.7.1 + '@internationalized/date': 3.7.0 + '@react-types/shared': 3.23.1(react@18.3.1) + react: 18.3.1 - '@npmcli/move-file@2.0.1': + '@react-types/calendar@3.6.1(react@18.3.1)': dependencies: - mkdirp: 1.0.4 - rimraf: 3.0.2 + '@internationalized/date': 3.7.0 + '@react-types/shared': 3.28.0(react@18.3.1) + react: 18.3.1 - '@octokit/auth-token@2.5.0': + '@react-types/checkbox@3.8.1(react@18.3.1)': dependencies: - '@octokit/types': 6.41.0 + '@react-types/shared': 3.23.1(react@18.3.1) + react: 18.3.1 - '@octokit/core@3.6.0(encoding@0.1.13)': + '@react-types/checkbox@3.9.2(react@18.3.1)': dependencies: - '@octokit/auth-token': 2.5.0 - '@octokit/graphql': 4.8.0(encoding@0.1.13) - '@octokit/request': 5.6.3(encoding@0.1.13) - '@octokit/request-error': 2.1.0 - '@octokit/types': 6.41.0 - before-after-hook: 2.2.3 - universal-user-agent: 6.0.1 - transitivePeerDependencies: - - encoding + '@react-types/shared': 3.28.0(react@18.3.1) + react: 18.3.1 - '@octokit/endpoint@6.0.12': + '@react-types/combobox@3.11.1(react@18.3.1)': dependencies: - '@octokit/types': 6.41.0 - is-plain-object: 5.0.0 - universal-user-agent: 6.0.1 + '@react-types/shared': 3.23.1(react@18.3.1) + react: 18.3.1 - '@octokit/graphql@4.8.0(encoding@0.1.13)': + '@react-types/datepicker@3.7.4(react@18.3.1)': dependencies: - '@octokit/request': 5.6.3(encoding@0.1.13) - '@octokit/types': 6.41.0 - universal-user-agent: 6.0.1 - transitivePeerDependencies: - - encoding + '@internationalized/date': 3.7.0 + '@react-types/calendar': 3.6.1(react@18.3.1) + '@react-types/overlays': 3.8.13(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + react: 18.3.1 - '@octokit/openapi-types@12.11.0': {} + '@react-types/dialog@3.5.16(react@18.3.1)': + dependencies: + '@react-types/overlays': 3.8.13(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + react: 18.3.1 - '@octokit/openapi-types@23.0.1': {} + '@react-types/grid@3.2.6(react@18.3.1)': + dependencies: + '@react-types/shared': 3.28.0(react@18.3.1) + react: 18.3.1 - '@octokit/plugin-paginate-rest@2.21.3(@octokit/core@3.6.0(encoding@0.1.13))': + '@react-types/grid@3.3.0(react@18.3.1)': dependencies: - '@octokit/core': 3.6.0(encoding@0.1.13) - '@octokit/types': 6.41.0 + '@react-types/shared': 3.28.0(react@18.3.1) + react: 18.3.1 - '@octokit/plugin-request-log@1.0.4(@octokit/core@3.6.0(encoding@0.1.13))': + '@react-types/link@3.5.11(react@18.3.1)': dependencies: - '@octokit/core': 3.6.0(encoding@0.1.13) + '@react-types/shared': 3.28.0(react@18.3.1) + react: 18.3.1 - '@octokit/plugin-rest-endpoint-methods@5.16.2(@octokit/core@3.6.0(encoding@0.1.13))': + '@react-types/link@3.5.5(react@18.3.1)': dependencies: - '@octokit/core': 3.6.0(encoding@0.1.13) - '@octokit/types': 6.41.0 - deprecation: 2.3.1 + '@react-types/shared': 3.28.0(react@18.3.1) + react: 18.3.1 - '@octokit/plugin-retry@3.0.9': + '@react-types/listbox@3.5.5(react@18.3.1)': dependencies: - '@octokit/types': 6.41.0 - bottleneck: 2.19.5 + '@react-types/shared': 3.28.0(react@18.3.1) + react: 18.3.1 - '@octokit/request-error@2.1.0': + '@react-types/menu@3.9.15(react@18.3.1)': dependencies: - '@octokit/types': 6.41.0 - deprecation: 2.3.1 - once: 1.4.0 + '@react-types/overlays': 3.8.13(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + react: 18.3.1 - '@octokit/request-error@5.1.1': + '@react-types/menu@3.9.9(react@18.3.1)': dependencies: - '@octokit/types': 13.8.0 - deprecation: 2.3.1 - once: 1.4.0 + '@react-types/overlays': 3.8.13(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + react: 18.3.1 - '@octokit/request@5.6.3(encoding@0.1.13)': + '@react-types/overlays@3.8.13(react@18.3.1)': dependencies: - '@octokit/endpoint': 6.0.12 - '@octokit/request-error': 2.1.0 - '@octokit/types': 6.41.0 - is-plain-object: 5.0.0 - node-fetch: 2.7.0(encoding@0.1.13) - universal-user-agent: 6.0.1 - transitivePeerDependencies: - - encoding + '@react-types/shared': 3.28.0(react@18.3.1) + react: 18.3.1 - '@octokit/rest@18.12.0(encoding@0.1.13)': + '@react-types/overlays@3.8.7(react@18.3.1)': dependencies: - '@octokit/core': 3.6.0(encoding@0.1.13) - '@octokit/plugin-paginate-rest': 2.21.3(@octokit/core@3.6.0(encoding@0.1.13)) - '@octokit/plugin-request-log': 1.0.4(@octokit/core@3.6.0(encoding@0.1.13)) - '@octokit/plugin-rest-endpoint-methods': 5.16.2(@octokit/core@3.6.0(encoding@0.1.13)) - transitivePeerDependencies: - - encoding + '@react-types/shared': 3.28.0(react@18.3.1) + react: 18.3.1 - '@octokit/types@13.8.0': + '@react-types/progress@3.5.4(react@18.3.1)': dependencies: - '@octokit/openapi-types': 23.0.1 + '@react-types/shared': 3.28.0(react@18.3.1) + react: 18.3.1 - '@octokit/types@6.41.0': + '@react-types/radio@3.8.1(react@18.3.1)': dependencies: - '@octokit/openapi-types': 12.11.0 + '@react-types/shared': 3.23.1(react@18.3.1) + react: 18.3.1 - '@octokit/webhooks-schemas@6.11.0': {} + '@react-types/select@3.9.10(react@18.3.1)': + dependencies: + '@react-types/shared': 3.28.0(react@18.3.1) + react: 18.3.1 - '@octokit/webhooks-types@6.11.0': {} + '@react-types/select@3.9.4(react@18.3.1)': + dependencies: + '@react-types/shared': 3.23.1(react@18.3.1) + react: 18.3.1 - '@open-draft/deferred-promise@2.2.0': {} + '@react-types/shared@3.23.1(react@18.3.1)': + dependencies: + react: 18.3.1 - '@open-draft/logger@0.3.0': + '@react-types/shared@3.28.0(react@18.3.1)': dependencies: - is-node-process: 1.2.0 - outvariant: 1.4.3 + react: 18.3.1 - '@open-draft/until@2.1.0': {} + '@react-types/slider@3.7.9(react@18.3.1)': + dependencies: + '@react-types/shared': 3.28.0(react@18.3.1) + react: 18.3.1 - '@pkgjs/parseargs@0.11.0': - optional: true + '@react-types/switch@3.5.9(react@18.3.1)': + dependencies: + '@react-types/shared': 3.28.0(react@18.3.1) + react: 18.3.1 - '@pkgr/core@0.1.1': {} + '@react-types/table@3.9.5(react@18.3.1)': + dependencies: + '@react-types/grid': 3.2.6(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + react: 18.3.1 - '@playwright/test@1.50.1': + '@react-types/tabs@3.3.7(react@18.3.1)': dependencies: - playwright: 1.50.1 + '@react-types/shared': 3.23.1(react@18.3.1) + react: 18.3.1 - '@polka/url@1.0.0-next.28': {} + '@react-types/textfield@3.12.0(react@18.3.1)': + dependencies: + '@react-types/shared': 3.28.0(react@18.3.1) + react: 18.3.1 - '@popperjs/core@2.11.8': {} + '@react-types/textfield@3.9.3(react@18.3.1)': + dependencies: + '@react-types/shared': 3.23.1(react@18.3.1) + react: 18.3.1 - '@puppeteer/browsers@2.7.0': + '@react-types/tooltip@3.4.9(react@18.3.1)': dependencies: - debug: 4.4.0 - extract-zip: 2.0.1 - progress: 2.0.3 - proxy-agent: 6.5.0 - semver: 7.7.1 - tar-fs: 3.0.8 - unbzip2-stream: 1.4.3 - yargs: 17.7.2 - transitivePeerDependencies: - - bare-buffer - - supports-color + '@react-types/overlays': 3.8.7(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) + react: 18.3.1 '@rollup/rollup-android-arm-eabi@4.34.6': optional: true @@ -11854,6 +16901,10 @@ snapshots: dependencies: defer-to-connect: 2.0.1 + '@tailwindcss/aspect-ratio@0.4.2(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3)))': + dependencies: + tailwindcss: 3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3)) + '@tavily/core@0.3.1': dependencies: axios: 1.7.9 @@ -11954,14 +17005,35 @@ snapshots: '@types/debug@4.1.12': dependencies: '@types/ms': 2.1.0 - optional: true '@types/diff@5.2.3': {} + '@types/estree-jsx@1.0.5': + dependencies: + '@types/estree': 1.0.6 + '@types/estree@1.0.6': {} + '@types/fs-extra@11.0.4': + dependencies: + '@types/jsonfile': 6.1.4 + '@types/node': 20.14.8 + + '@types/fs-extra@9.0.13': + dependencies: + '@types/node': 20.14.8 + optional: true + '@types/gensync@1.0.4': {} + '@types/hast@2.3.10': + dependencies: + '@types/unist': 2.0.11 + + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + '@types/hoist-non-react-statics@3.3.6': dependencies: '@types/react': 18.3.18 @@ -11977,20 +17049,33 @@ snapshots: '@types/json5@0.0.29': {} + '@types/jsonfile@6.1.4': + dependencies: + '@types/node': 20.14.8 + + '@types/katex@0.16.7': {} + '@types/keyv@3.1.4': dependencies: '@types/node': 20.14.8 + '@types/lodash.debounce@4.0.9': + dependencies: + '@types/lodash': 4.17.15 + '@types/lodash.mergewith@4.6.9': dependencies: '@types/lodash': 4.17.15 '@types/lodash@4.17.15': {} + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + '@types/minimatch@5.1.2': {} - '@types/ms@2.1.0': - optional: true + '@types/ms@2.1.0': {} '@types/node-fetch@2.6.12': dependencies: @@ -12042,10 +17127,16 @@ snapshots: '@types/statuses@2.0.5': {} + '@types/stylis@4.2.5': {} + '@types/tough-cookie@4.0.5': {} '@types/turndown@5.0.5': {} + '@types/unist@2.0.11': {} + + '@types/unist@3.0.3': {} + '@types/uuid@10.0.0': {} '@types/uuid@9.0.8': {} @@ -12220,42 +17311,61 @@ snapshots: '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 + '@ui-tars/electron-ipc@1.2.3(electron@34.3.3)': + dependencies: + electron: 34.3.3 + '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-react@4.3.4(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4))': + '@use-it/event-listener@0.1.7(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@vitejs/plugin-react@4.3.4(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1))': + dependencies: + '@babel/core': 7.26.8 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.8) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.8) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.2 + vite: 5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1) + transitivePeerDependencies: + - supports-color + + '@vitejs/plugin-react@4.3.4(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0))': dependencies: '@babel/core': 7.26.8 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.8) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.8) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4) + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.3.4(vite@5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4))': + '@vitejs/plugin-react@4.3.4(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0))': dependencies: '@babel/core': 7.26.8 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.8) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.8) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4) + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitest/browser@3.0.5(@types/node@20.17.17)(playwright@1.50.1)(typescript@5.7.3)(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4))(vitest@3.0.5)': + '@vitest/browser@3.0.5(@types/node@20.17.17)(bufferutil@4.0.9)(playwright@1.50.1)(typescript@5.7.3)(utf-8-validate@6.0.5)(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1))(vitest@3.0.5)': dependencies: '@testing-library/dom': 10.4.0 '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0) - '@vitest/mocker': 3.0.5(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)) + '@vitest/mocker': 3.0.5(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1)) '@vitest/utils': 3.0.5 magic-string: 0.30.17 msw: 2.7.0(@types/node@20.17.17)(typescript@5.7.3) sirv: 3.0.1 tinyrainbow: 2.0.0 - vitest: 3.0.5(@types/debug@4.1.12)(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4) - ws: 8.18.0 + vitest: 3.0.5(@types/debug@4.1.12)(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) + ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) optionalDependencies: playwright: 1.50.1 transitivePeerDependencies: @@ -12266,18 +17376,39 @@ snapshots: - vite optional: true - '@vitest/browser@3.0.5(@types/node@22.13.10)(playwright@1.50.1)(typescript@5.7.3)(vite@5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4))(vitest@3.0.5)': + '@vitest/browser@3.0.5(@types/node@22.13.10)(bufferutil@4.0.9)(playwright@1.50.1)(typescript@5.7.3)(utf-8-validate@6.0.5)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0))(vitest@3.0.5)': + dependencies: + '@testing-library/dom': 10.4.0 + '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0) + '@vitest/mocker': 3.0.5(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0)) + '@vitest/utils': 3.0.5 + magic-string: 0.30.17 + msw: 2.7.0(@types/node@22.13.10)(typescript@5.7.3) + sirv: 3.0.1 + tinyrainbow: 2.0.0 + vitest: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) + ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) + optionalDependencies: + playwright: 1.50.1 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - typescript + - utf-8-validate + - vite + + '@vitest/browser@3.0.5(@types/node@22.13.10)(bufferutil@4.0.9)(playwright@1.50.1)(typescript@5.7.3)(utf-8-validate@6.0.5)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0))(vitest@3.0.5)': dependencies: '@testing-library/dom': 10.4.0 '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0) - '@vitest/mocker': 3.0.5(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(vite@5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4)) + '@vitest/mocker': 3.0.5(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)) '@vitest/utils': 3.0.5 magic-string: 0.30.17 msw: 2.7.0(@types/node@22.13.10)(typescript@5.7.3) sirv: 3.0.1 tinyrainbow: 2.0.0 - vitest: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4) - ws: 8.18.0 + vitest: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) + ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) optionalDependencies: playwright: 1.50.1 transitivePeerDependencies: @@ -12286,6 +17417,7 @@ snapshots: - typescript - utf-8-validate - vite + optional: true '@vitest/coverage-istanbul@3.0.5(vitest@3.0.5)': dependencies: @@ -12299,11 +17431,11 @@ snapshots: magicast: 0.3.5 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.0.5(@types/debug@4.1.12)(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4) + vitest: 3.0.5(@types/debug@4.1.12)(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@3.0.7(vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4))': + '@vitest/coverage-v8@3.0.7(vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 @@ -12317,11 +17449,11 @@ snapshots: std-env: 3.8.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4) + vitest: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@3.0.7(vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4))': + '@vitest/coverage-v8@3.0.7(vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 @@ -12335,7 +17467,7 @@ snapshots: std-env: 3.8.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4) + vitest: 3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) transitivePeerDependencies: - supports-color @@ -12360,60 +17492,95 @@ snapshots: dependencies: '@vitest/spy': 3.0.5 '@vitest/utils': 3.0.5 - chai: 5.1.2 + chai: 5.2.0 + tinyrainbow: 2.0.0 + + '@vitest/expect@3.0.7': + dependencies: + '@vitest/spy': 3.0.7 + '@vitest/utils': 3.0.7 + chai: 5.2.0 + tinyrainbow: 2.0.0 + + '@vitest/expect@3.0.8': + dependencies: + '@vitest/spy': 3.0.8 + '@vitest/utils': 3.0.8 + chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/expect@3.0.7': + '@vitest/mocker@3.0.5(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1))': + dependencies: + '@vitest/spy': 3.0.5 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + msw: 2.7.0(@types/node@20.17.17)(typescript@5.7.3) + vite: 5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1) + optional: true + + '@vitest/mocker@3.0.5(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(vite@6.2.2(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0))': dependencies: - '@vitest/spy': 3.0.7 - '@vitest/utils': 3.0.7 - chai: 5.2.0 - tinyrainbow: 2.0.0 + '@vitest/spy': 3.0.5 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + msw: 2.7.0(@types/node@20.17.17)(typescript@5.7.3) + vite: 6.2.2(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) - '@vitest/mocker@3.0.5(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4))': + '@vitest/mocker@3.0.5(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0))': dependencies: '@vitest/spy': 3.0.5 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - msw: 2.7.0(@types/node@20.17.17)(typescript@5.7.3) - vite: 5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4) + msw: 2.7.0(@types/node@22.13.10)(typescript@5.7.3) + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) - '@vitest/mocker@3.0.5(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(vite@5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4))': + '@vitest/mocker@3.0.5(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0))': dependencies: '@vitest/spy': 3.0.5 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: msw: 2.7.0(@types/node@22.13.10)(typescript@5.7.3) - vite: 5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4) + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) - '@vitest/mocker@3.0.7(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(vite@5.4.14(@types/node@20.14.8)(sass-embedded@1.83.4))': + '@vitest/mocker@3.0.7(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(vite@6.2.2(@types/node@20.14.8)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0))': dependencies: '@vitest/spy': 3.0.7 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: msw: 2.7.0(@types/node@20.14.8)(typescript@4.9.4) - vite: 5.4.14(@types/node@20.14.8)(sass-embedded@1.83.4) + vite: 6.2.2(@types/node@20.14.8)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) - '@vitest/mocker@3.0.7(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(vite@5.4.14(@types/node@20.14.8)(sass-embedded@1.83.4))': + '@vitest/mocker@3.0.7(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(vite@6.2.2(@types/node@20.14.8)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0))': dependencies: '@vitest/spy': 3.0.7 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: msw: 2.7.0(@types/node@20.14.8)(typescript@5.7.3) - vite: 5.4.14(@types/node@20.14.8)(sass-embedded@1.83.4) + vite: 6.2.2(@types/node@20.14.8)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) - '@vitest/mocker@3.0.7(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(vite@5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4))': + '@vitest/mocker@3.0.7(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0))': dependencies: '@vitest/spy': 3.0.7 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: msw: 2.7.0(@types/node@22.13.10)(typescript@5.7.3) - vite: 5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4) + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) + + '@vitest/mocker@3.0.8(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0))': + dependencies: + '@vitest/spy': 3.0.8 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + msw: 2.7.0(@types/node@22.13.10)(typescript@5.7.3) + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) '@vitest/pretty-format@3.0.5': dependencies: @@ -12437,6 +17604,11 @@ snapshots: '@vitest/utils': 3.0.7 pathe: 2.0.3 + '@vitest/runner@3.0.8': + dependencies: + '@vitest/utils': 3.0.8 + pathe: 2.0.3 + '@vitest/snapshot@3.0.5': dependencies: '@vitest/pretty-format': 3.0.5 @@ -12449,6 +17621,12 @@ snapshots: magic-string: 0.30.17 pathe: 2.0.3 + '@vitest/snapshot@3.0.8': + dependencies: + '@vitest/pretty-format': 3.0.8 + magic-string: 0.30.17 + pathe: 2.0.3 + '@vitest/spy@3.0.5': dependencies: tinyspy: 3.0.2 @@ -12457,6 +17635,10 @@ snapshots: dependencies: tinyspy: 3.0.2 + '@vitest/spy@3.0.8': + dependencies: + tinyspy: 3.0.2 + '@vitest/utils@3.0.5': dependencies: '@vitest/pretty-format': 3.0.5 @@ -12469,6 +17651,12 @@ snapshots: loupe: 3.1.3 tinyrainbow: 2.0.0 + '@vitest/utils@3.0.8': + dependencies: + '@vitest/pretty-format': 3.0.8 + loupe: 3.1.3 + tinyrainbow: 2.0.0 + '@vue/compiler-core@3.5.13': dependencies: '@babel/parser': 7.26.8 @@ -12493,7 +17681,7 @@ snapshots: '@vue/shared': 3.5.13 estree-walker: 2.0.2 magic-string: 0.30.17 - postcss: 8.5.2 + postcss: 8.5.3 source-map-js: 1.2.1 optional: true @@ -12608,6 +17796,13 @@ snapshots: any-base@1.1.0: {} + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + appdmg@0.6.6: dependencies: async: 1.5.2 @@ -12627,6 +17822,8 @@ snapshots: arg@4.1.3: {} + arg@5.0.2: {} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 @@ -12737,6 +17934,16 @@ snapshots: author-regex@1.0.0: {} + autoprefixer@10.4.20(postcss@8.5.3): + dependencies: + browserslist: 4.24.4 + caniuse-lite: 1.0.30001703 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.1.0 @@ -12759,6 +17966,8 @@ snapshots: cosmiconfig: 7.1.0 resolve: 1.22.10 + bail@2.0.2: {} + balanced-match@1.0.2: {} bare-events@2.5.4: @@ -12805,6 +18014,8 @@ snapshots: big.js@6.2.2: {} + binary-extensions@2.3.0: {} + bindings@1.5.0: dependencies: file-uri-to-path: 1.0.0 @@ -12902,6 +18113,10 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + bufferutil@4.0.9: + dependencies: + node-gyp-build: 4.8.4 + bytes@3.1.2: {} cac@6.7.14: {} @@ -12960,10 +18175,16 @@ snapshots: callsites@3.1.0: {} + camelcase-css@2.0.1: {} + camelcase@6.3.0: {} + camelize@1.0.1: {} + caniuse-lite@1.0.30001703: {} + ccount@2.0.1: {} + centra@2.7.0: dependencies: follow-redirects: 1.15.9 @@ -12995,10 +18216,40 @@ snapshots: chalk@5.4.1: {} + character-entities-html4@2.1.0: {} + + character-entities-legacy@1.1.4: {} + + character-entities-legacy@3.0.0: {} + + character-entities@1.2.4: {} + + character-entities@2.0.2: {} + + character-reference-invalid@1.1.4: {} + + character-reference-invalid@2.0.1: {} + chardet@0.7.0: {} check-error@2.1.1: {} + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + chownr@2.0.0: {} chrome-trace-event@1.0.4: {} @@ -13011,6 +18262,8 @@ snapshots: ci-info@3.9.0: {} + classnames@2.5.1: {} + clean-stack@2.2.0: {} cleye@1.3.4: @@ -13041,6 +18294,13 @@ snapshots: execa: 1.0.0 is-wsl: 2.2.0 + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + optional: true + cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -13053,6 +18313,8 @@ snapshots: clone@1.0.4: {} + clsx@1.2.1: {} + clsx@2.1.1: {} color-convert@0.5.3: @@ -13084,14 +18346,22 @@ snapshots: dependencies: delayed-stream: 1.0.0 + comma-separated-tokens@1.0.8: {} + + comma-separated-tokens@2.0.3: {} + commander@11.0.0: {} commander@11.1.0: {} commander@13.1.0: {} + commander@4.1.1: {} + commander@5.1.0: {} + commander@8.3.0: {} + commander@9.5.0: {} compare-func@2.0.0: @@ -13101,6 +18371,8 @@ snapshots: compare-version@0.1.2: {} + compute-scroll-into-view@3.1.1: {} + concat-map@0.0.1: {} conf@13.1.0: @@ -13221,21 +18493,41 @@ snapshots: crypto@1.0.1: {} + css-color-keywords@1.0.0: {} + css-in-js-utils@3.1.0: dependencies: hyphenate-style-name: 1.1.0 + css-to-react-native@3.2.0: + dependencies: + camelize: 1.0.1 + css-color-keywords: 1.0.0 + postcss-value-parser: 4.2.0 + css-tree@1.1.3: dependencies: mdn-data: 2.0.14 source-map: 0.6.1 + cssesc@3.0.0: {} + + cssstyle@4.3.0: + dependencies: + '@asamuzakjp/css-color': 3.1.1 + rrweb-cssom: 0.8.0 + csstype@3.1.3: {} dargs@8.1.0: {} data-uri-to-buffer@6.0.2: {} + data-urls@5.0.0: + dependencies: + whatwg-mimetype: 4.0.0 + whatwg-url: 14.2.0 + data-view-buffer@1.0.2: dependencies: call-bound: 1.0.3 @@ -13254,6 +18546,10 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.2 + date-fns@4.1.0: {} + + dayjs@1.11.13: {} + debounce-fn@6.0.0: dependencies: mimic-function: 5.0.1 @@ -13280,6 +18576,12 @@ snapshots: decamelize@1.2.0: {} + decimal.js@10.5.0: {} + + decode-named-character-reference@1.1.0: + dependencies: + character-entities: 2.0.2 + decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 @@ -13290,6 +18592,8 @@ snapshots: deepmerge@2.2.1: {} + deepmerge@4.3.1: {} + defaults@1.0.4: dependencies: clone: 1.0.4 @@ -13326,6 +18630,9 @@ snapshots: detect-indent@6.1.0: {} + detect-libc@1.0.3: + optional: true + detect-libc@2.0.3: {} detect-node-es@1.1.0: {} @@ -13333,8 +18640,14 @@ snapshots: detect-node@2.1.0: optional: true + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + devtools-protocol@0.0.1380148: {} + didyoumean@1.2.2: {} + diff@4.0.2: {} diff@5.2.0: {} @@ -13348,6 +18661,8 @@ snapshots: dependencies: path-type: 4.0.0 + dlv@1.1.3: {} + doctrine@2.1.0: dependencies: esutils: 2.0.3 @@ -13401,6 +18716,37 @@ snapshots: tslib: 2.8.1 unzip-crx-3: 0.2.0 + electron-installer-common@0.10.4: + dependencies: + '@electron/asar': 3.3.1 + '@malept/cross-spawn-promise': 1.1.1 + debug: 4.4.0 + fs-extra: 9.1.0 + glob: 7.2.3 + lodash: 4.17.21 + parse-author: 2.0.0 + semver: 7.7.1 + tmp-promise: 3.0.3 + optionalDependencies: + '@types/fs-extra': 9.0.13 + transitivePeerDependencies: + - supports-color + optional: true + + electron-installer-debian@3.2.0: + dependencies: + '@malept/cross-spawn-promise': 1.1.1 + debug: 4.4.0 + electron-installer-common: 0.10.4 + fs-extra: 9.1.0 + get-folder-size: 2.0.1 + lodash: 4.17.21 + word-wrap: 1.2.5 + yargs: 16.2.0 + transitivePeerDependencies: + - supports-color + optional: true + electron-installer-dmg@5.0.1: dependencies: '@types/appdmg': 0.5.5 @@ -13412,6 +18758,19 @@ snapshots: - supports-color optional: true + electron-installer-redhat@3.4.0: + dependencies: + '@malept/cross-spawn-promise': 1.1.1 + debug: 4.4.0 + electron-installer-common: 0.10.4 + fs-extra: 9.1.0 + lodash: 4.17.21 + word-wrap: 1.2.5 + yargs: 16.2.0 + transitivePeerDependencies: + - supports-color + optional: true + electron-is-accelerator@0.1.2: {} electron-is-dev@1.2.0: {} @@ -13431,6 +18790,10 @@ snapshots: dependencies: rimraf: 2.7.1 + electron-packager-languages@0.6.0: + dependencies: + rimraf: 2.7.1 + electron-playwright-helpers@1.7.1: dependencies: '@electron/asar': 3.3.1 @@ -13453,7 +18816,7 @@ snapshots: electron-is-dev: 1.2.0 new-github-issue-url: 0.2.1 - electron-vite@2.3.0(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)): + electron-vite@2.3.0(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1)): dependencies: '@babel/core': 7.26.8 '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.8) @@ -13461,7 +18824,19 @@ snapshots: esbuild: 0.21.5 magic-string: 0.30.17 picocolors: 1.1.1 - vite: 5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4) + vite: 5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1) + transitivePeerDependencies: + - supports-color + + electron-vite@3.0.0(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)): + dependencies: + '@babel/core': 7.26.8 + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.8) + cac: 6.7.14 + esbuild: 0.24.2 + magic-string: 0.30.17 + picocolors: 1.1.1 + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) transitivePeerDependencies: - supports-color @@ -13489,7 +18864,15 @@ snapshots: electron@34.1.1: dependencies: '@electron/get': 2.0.3 - '@types/node': 20.17.17 + '@types/node': 20.14.8 + extract-zip: 2.0.1 + transitivePeerDependencies: + - supports-color + + electron@34.3.3: + dependencies: + '@electron/get': 2.0.3 + '@types/node': 20.14.8 extract-zip: 2.0.1 transitivePeerDependencies: - supports-color @@ -13698,6 +19081,34 @@ snapshots: '@esbuild/win32-ia32': 0.23.1 '@esbuild/win32-x64': 0.23.1 + esbuild@0.24.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.24.2 + '@esbuild/android-arm': 0.24.2 + '@esbuild/android-arm64': 0.24.2 + '@esbuild/android-x64': 0.24.2 + '@esbuild/darwin-arm64': 0.24.2 + '@esbuild/darwin-x64': 0.24.2 + '@esbuild/freebsd-arm64': 0.24.2 + '@esbuild/freebsd-x64': 0.24.2 + '@esbuild/linux-arm': 0.24.2 + '@esbuild/linux-arm64': 0.24.2 + '@esbuild/linux-ia32': 0.24.2 + '@esbuild/linux-loong64': 0.24.2 + '@esbuild/linux-mips64el': 0.24.2 + '@esbuild/linux-ppc64': 0.24.2 + '@esbuild/linux-riscv64': 0.24.2 + '@esbuild/linux-s390x': 0.24.2 + '@esbuild/linux-x64': 0.24.2 + '@esbuild/netbsd-arm64': 0.24.2 + '@esbuild/netbsd-x64': 0.24.2 + '@esbuild/openbsd-arm64': 0.24.2 + '@esbuild/openbsd-x64': 0.24.2 + '@esbuild/sunos-x64': 0.24.2 + '@esbuild/win32-arm64': 0.24.2 + '@esbuild/win32-ia32': 0.24.2 + '@esbuild/win32-x64': 0.24.2 + esbuild@0.25.0: optionalDependencies: '@esbuild/aix-ppc64': 0.25.0 @@ -13734,6 +19145,8 @@ snapshots: escape-string-regexp@4.0.0: {} + escape-string-regexp@5.0.0: {} + escodegen@2.1.0: dependencies: esprima: 4.0.1 @@ -13899,6 +19312,8 @@ snapshots: estraverse@5.3.0: {} + estree-util-is-identifier-name@3.0.0: {} + estree-walker@2.0.2: optional: true @@ -13968,10 +19383,10 @@ snapshots: dependencies: express: 5.0.1 - express-ws@5.0.2(express@4.21.2): + express-ws@5.0.2(bufferutil@4.0.9)(express@4.21.2)(utf-8-validate@6.0.5): dependencies: express: 4.21.2 - ws: 7.5.10 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil - utf-8-validate @@ -14049,6 +19464,8 @@ snapshots: transitivePeerDependencies: - supports-color + extend@3.0.2: {} + extendable-error@0.1.7: {} external-editor@3.1.0: @@ -14099,6 +19516,10 @@ snapshots: dependencies: reusify: 1.0.4 + fault@1.0.4: + dependencies: + format: 0.2.2 + fd-slicer@1.1.0: dependencies: pend: 1.2.0 @@ -14182,6 +19603,8 @@ snapshots: keyv: 4.5.4 rimraf: 3.0.2 + flat@5.0.2: {} + flatted@3.3.2: {} flora-colossus@2.0.0: @@ -14219,6 +19642,8 @@ snapshots: combined-stream: 1.0.8 mime-types: 2.1.35 + format@0.2.2: {} + formdata-node@4.4.1: dependencies: node-domexception: 1.0.0 @@ -14238,6 +19663,8 @@ snapshots: forwarded@0.2.0: {} + fraction.js@4.3.7: {} + framer-motion@11.18.2(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: motion-dom: 11.18.1 @@ -14248,6 +19675,14 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + framer-motion@11.2.13(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + tslib: 2.8.1 + optionalDependencies: + '@emotion/is-prop-valid': 1.3.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + framesync@6.1.2: dependencies: tslib: 2.4.0 @@ -14328,6 +19763,9 @@ snapshots: transitivePeerDependencies: - supports-color + gar@1.0.4: + optional: true + generate-function@2.3.1: dependencies: is-property: 1.0.2 @@ -14342,6 +19780,12 @@ snapshots: get-caller-file@2.0.5: {} + get-folder-size@2.0.1: + dependencies: + gar: 1.0.4 + tiny-each-async: 2.0.3 + optional: true + get-intrinsic@1.2.7: dependencies: call-bind-apply-helpers: 1.0.1 @@ -14502,6 +19946,10 @@ snapshots: globrex@0.1.2: {} + goober@2.1.16(csstype@3.1.3): + dependencies: + csstype: 3.1.3 + gopd@1.2.0: {} got@11.8.6: @@ -14551,16 +19999,114 @@ snapshots: dependencies: function-bind: 1.1.2 + hast-util-from-dom@5.0.1: + dependencies: + '@types/hast': 3.0.4 + hastscript: 9.0.1 + web-namespaces: 2.0.1 + + hast-util-from-html-isomorphic@2.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-from-dom: 5.0.1 + hast-util-from-html: 2.0.3 + unist-util-remove-position: 5.0.0 + + hast-util-from-html@2.0.3: + dependencies: + '@types/hast': 3.0.4 + devlop: 1.1.0 + hast-util-from-parse5: 8.0.3 + parse5: 7.2.1 + vfile: 6.0.3 + vfile-message: 4.0.2 + + hast-util-from-parse5@8.0.3: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + devlop: 1.1.0 + hastscript: 9.0.1 + property-information: 7.0.0 + vfile: 6.0.3 + vfile-location: 5.0.3 + web-namespaces: 2.0.1 + + hast-util-is-element@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-parse-selector@2.2.5: {} + + hast-util-parse-selector@4.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-to-jsx-runtime@2.3.6: + dependencies: + '@types/estree': 1.0.6 + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.0.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.16 + unist-util-position: 5.0.0 + vfile-message: 4.0.2 + transitivePeerDependencies: + - supports-color + + hast-util-to-text@4.0.2: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + hast-util-is-element: 3.0.0 + unist-util-find-after: 5.0.0 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hastscript@6.0.0: + dependencies: + '@types/hast': 2.3.10 + comma-separated-tokens: 1.0.8 + hast-util-parse-selector: 2.2.5 + property-information: 5.6.0 + space-separated-tokens: 1.1.5 + + hastscript@9.0.1: + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 7.0.0 + space-separated-tokens: 2.0.2 + headers-polyfill@4.0.3: {} + highlight.js@10.7.3: {} + hoist-non-react-statics@3.3.2: dependencies: react-is: 16.13.1 hosted-git-info@2.8.9: {} + html-encoding-sniffer@4.0.0: + dependencies: + whatwg-encoding: 3.1.1 + html-escaper@2.0.2: {} + html-url-attributes@3.0.1: {} + http-cache-semantics@4.1.1: {} http-errors@2.0.0: @@ -14675,6 +20221,8 @@ snapshots: ini@4.1.1: {} + inline-style-parser@0.2.4: {} + inline-style-prefixer@7.0.1: dependencies: css-in-js-utils: 3.1.0 @@ -14704,6 +20252,13 @@ snapshots: interpret@3.1.1: {} + intl-messageformat@10.7.15: + dependencies: + '@formatjs/ecma402-abstract': 2.3.3 + '@formatjs/fast-memoize': 2.2.6 + '@formatjs/icu-messageformat-parser': 2.11.1 + tslib: 2.8.1 + ip-address@9.0.5: dependencies: jsbn: 1.1.0 @@ -14711,6 +20266,20 @@ snapshots: ipaddr.js@1.9.1: {} + is-alphabetical@1.0.4: {} + + is-alphabetical@2.0.1: {} + + is-alphanumerical@1.0.4: + dependencies: + is-alphabetical: 1.0.4 + is-decimal: 1.0.4 + + is-alphanumerical@2.0.1: + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + is-array-buffer@3.0.5: dependencies: call-bind: 1.0.8 @@ -14733,6 +20302,10 @@ snapshots: dependencies: has-bigints: 1.1.0 + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + is-boolean-object@1.2.2: dependencies: call-bound: 1.0.3 @@ -14755,6 +20328,10 @@ snapshots: call-bound: 1.0.3 has-tostringtag: 1.0.2 + is-decimal@1.0.4: {} + + is-decimal@2.0.1: {} + is-docker@2.2.1: {} is-extglob@2.1.1: {} @@ -14780,6 +20357,10 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-hexadecimal@1.0.4: {} + + is-hexadecimal@2.0.1: {} + is-interactive@1.0.0: {} is-lambda@1.0.1: {} @@ -14811,8 +20392,12 @@ snapshots: is-path-inside@3.0.3: {} + is-plain-obj@4.1.0: {} + is-plain-object@5.0.0: {} + is-potential-custom-element-name@1.0.1: {} + is-promise@4.0.0: {} is-property@1.0.2: @@ -14990,8 +20575,15 @@ snapshots: '@jimp/types': 1.6.0 '@jimp/utils': 1.6.0 + jiti@1.21.7: {} + jiti@2.4.2: {} + jotai@2.12.2(@types/react@18.3.18)(react@18.3.1): + optionalDependencies: + '@types/react': 18.3.18 + react: 18.3.1 + jpeg-js@0.4.4: {} js-cookie@2.2.1: {} @@ -15013,6 +20605,34 @@ snapshots: jsbn@1.1.0: {} + jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5): + dependencies: + cssstyle: 4.3.0 + data-urls: 5.0.0 + decimal.js: 10.5.0 + form-data: 4.0.1 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.18 + parse5: 7.2.1 + rrweb-cssom: 0.8.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 5.1.2 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.2.0 + ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + jsesc@3.1.0: {} json-buffer@3.0.1: {} @@ -15069,6 +20689,10 @@ snapshots: junk@3.1.0: {} + katex@0.16.21: + dependencies: + commander: 8.3.0 + keyboardevent-from-electron-accelerator@2.0.0: {} keyboardevents-areequal@0.2.2: {} @@ -15077,7 +20701,7 @@ snapshots: dependencies: json-buffer: 3.0.1 - langsmith@0.3.14(openai@4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2)): + langsmith@0.3.14(openai@4.87.3(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.2)): dependencies: '@types/uuid': 10.0.0 chalk: 4.1.2 @@ -15087,19 +20711,25 @@ snapshots: semver: 7.7.1 uuid: 10.0.0 optionalDependencies: - openai: 4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2) + openai: 4.87.3(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.2) levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 + lie@3.1.1: + dependencies: + immediate: 3.0.6 + lie@3.3.0: dependencies: immediate: 3.0.6 lilconfig@2.1.0: {} + lilconfig@3.1.3: {} + lines-and-columns@1.2.4: {} linkify-it@5.0.0: @@ -15162,6 +20792,10 @@ snapshots: pify: 2.3.0 strip-bom: 3.0.0 + localforage@1.10.0: + dependencies: + lie: 3.1.1 + locate-path@2.0.0: dependencies: p-locate: 2.0.0 @@ -15183,16 +20817,24 @@ snapshots: lodash.camelcase@4.3.0: {} + lodash.debounce@4.0.8: {} + + lodash.foreach@4.5.0: {} + lodash.get@4.4.2: {} lodash.isplainobject@4.0.6: {} lodash.kebabcase@4.1.1: {} + lodash.mapkeys@4.6.0: {} + lodash.merge@4.6.2: {} lodash.mergewith@4.6.2: {} + lodash.omit@4.5.0: {} + lodash.snakecase@4.1.1: {} lodash.startcase@4.4.0: {} @@ -15216,6 +20858,8 @@ snapshots: strip-ansi: 7.1.0 wrap-ansi: 8.1.0 + longest-streak@3.1.0: {} + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -15224,6 +20868,11 @@ snapshots: lowercase-keys@2.0.0: {} + lowlight@1.20.0: + dependencies: + fault: 1.0.4 + highlight.js: 10.7.3 + lru-cache@10.4.3: {} lru-cache@11.0.2: {} @@ -15234,6 +20883,10 @@ snapshots: lru-cache@7.18.3: {} + lucide-react@0.479.0(react@18.3.1): + dependencies: + react: 18.3.1 + lz-string@1.5.0: {} macos-alias@0.2.12: @@ -15296,6 +20949,8 @@ snapshots: punycode.js: 2.3.1 uc.micro: 2.1.0 + markdown-table@3.0.4: {} + matcher@3.0.0: dependencies: escape-string-regexp: 4.0.0 @@ -15303,6 +20958,171 @@ snapshots: math-intrinsics@1.1.0: {} + mdast-util-find-and-replace@3.0.2: + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + + mdast-util-from-markdown@2.0.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.1.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 + + mdast-util-gfm-footnote@2.1.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-strikethrough@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-table@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-task-list-item@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm@3.1.0: + dependencies: + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-math@3.0.0: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + longest-streak: 3.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + unist-util-remove-position: 5.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-expression@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-jsx@3.2.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdxjs-esm@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-phrasing@4.1.0: + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.0 + + mdast-util-to-hast@13.2.0: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + + mdast-util-to-markdown@2.1.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 + + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdn-data@2.0.14: {} mdurl@2.0.0: {} @@ -15331,6 +21151,207 @@ snapshots: methods@1.1.2: {} + micromark-core-commonmark@2.0.3: + dependencies: + decode-named-character-reference: 1.1.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-autolink-literal@2.1.0: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-tagfilter@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-math@3.1.0: + dependencies: + '@types/katex': 0.16.7 + devlop: 1.1.0 + katex: 0.16.21 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 + + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 + + micromark-util-encode@2.0.1: {} + + micromark-util-html-tag-name@2.0.1: {} + + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.2 + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + micromark@4.0.2: + dependencies: + '@types/debug': 4.1.12 + debug: 4.4.0 + decode-named-character-reference: 1.1.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color + micromatch@4.0.5: dependencies: braces: 3.0.3 @@ -15434,6 +21455,8 @@ snapshots: mkdirp@1.0.4: {} + monaco-editor@0.52.2: {} + motion-dom@11.18.1: dependencies: motion-utils: 11.18.1 @@ -15566,6 +21589,12 @@ snapshots: mute-stream@2.0.0: {} + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + nan@2.22.0: optional: true @@ -15608,6 +21637,9 @@ snapshots: node-addon-api@5.0.0: {} + node-addon-api@7.1.1: + optional: true + node-api-version@0.2.0: dependencies: semver: 7.7.1 @@ -15620,6 +21652,8 @@ snapshots: optionalDependencies: encoding: 0.1.13 + node-gyp-build@4.8.4: {} + node-releases@2.0.19: {} nopt@6.0.0: @@ -15633,6 +21667,10 @@ snapshots: semver: 5.7.2 validate-npm-package-license: 3.0.4 + normalize-path@3.0.0: {} + + normalize-range@0.1.2: {} + normalize-url@6.1.0: {} npm-run-path@2.0.2: @@ -15647,8 +21685,12 @@ snapshots: dependencies: path-key: 4.0.0 + nwsapi@2.2.18: {} + object-assign@4.1.1: {} + object-hash@3.0.0: {} + object-inspect@1.13.4: {} object-keys@1.1.1: {} @@ -15706,7 +21748,7 @@ snapshots: dependencies: mimic-fn: 4.0.0 - openai@4.85.1(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2): + openai@4.85.1(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.2): dependencies: '@types/node': 18.19.75 '@types/node-fetch': 2.6.12 @@ -15716,12 +21758,12 @@ snapshots: formdata-node: 4.4.1 node-fetch: 2.7.0(encoding@0.1.13) optionalDependencies: - ws: 8.18.0 + ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) zod: 3.24.2 transitivePeerDependencies: - encoding - openai@4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2): + openai@4.87.3(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.2): dependencies: '@types/node': 18.19.75 '@types/node-fetch': 2.6.12 @@ -15731,12 +21773,12 @@ snapshots: formdata-node: 4.4.1 node-fetch: 2.7.0(encoding@0.1.13) optionalDependencies: - ws: 8.18.0 + ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) zod: 3.24.2 transitivePeerDependencies: - encoding - opencommit@3.2.5(encoding@0.1.13)(ws@8.18.0): + opencommit@3.2.5(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)): dependencies: '@actions/core': 1.11.1 '@actions/exec': 1.1.1 @@ -15746,7 +21788,7 @@ snapshots: '@clack/prompts': 0.6.3 '@dqbd/tiktoken': 1.0.20 '@google/generative-ai': 0.11.5 - '@mistralai/mistralai': 1.5.0(zod@3.24.2) + '@mistralai/mistralai': 1.5.1(zod@3.24.2) '@octokit/webhooks-schemas': 6.11.0 '@octokit/webhooks-types': 6.11.0 axios: 1.7.9 @@ -15757,7 +21799,7 @@ snapshots: ignore: 5.3.2 ini: 3.0.1 inquirer: 9.3.7 - openai: 4.87.3(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2) + openai: 4.87.3(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.2) punycode: 2.3.1 zod: 3.24.2 transitivePeerDependencies: @@ -15913,6 +21955,25 @@ snapshots: color-convert: 0.5.3 optional: true + parse-entities@2.0.0: + dependencies: + character-entities: 1.2.4 + character-entities-legacy: 1.1.4 + character-reference-invalid: 1.1.4 + is-alphanumerical: 1.0.4 + is-decimal: 1.0.4 + is-hexadecimal: 1.0.4 + + parse-entities@4.0.2: + dependencies: + '@types/unist': 2.0.11 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.1.0 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + parse-headers@2.0.5: {} parse-json@2.2.0: @@ -15926,8 +21987,14 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + parse5@7.2.1: + dependencies: + entities: 4.5.0 + parseurl@1.3.3: {} + path-browserify@1.0.1: {} + path-exists@3.0.0: {} path-exists@4.0.0: {} @@ -15994,6 +22061,8 @@ snapshots: pify@4.0.1: {} + pirates@4.0.6: {} + pixelmatch@4.0.2: dependencies: pngjs: 3.4.0 @@ -16026,12 +22095,56 @@ snapshots: possible-typed-array-names@1.1.0: {} + postcss-import@15.1.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.10 + + postcss-js@4.0.1(postcss@8.5.3): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.5.3 + + postcss-load-config@4.0.2(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3)): + dependencies: + lilconfig: 3.1.3 + yaml: 2.7.0 + optionalDependencies: + postcss: 8.5.3 + ts-node: 10.9.2(@types/node@22.13.10)(typescript@5.7.3) + + postcss-nested@6.2.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-selector-parser: 6.1.2 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.4.49: + dependencies: + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 + postcss@8.5.2: dependencies: nanoid: 3.3.8 picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.3: + dependencies: + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 + postject@1.0.0-alpha.6: dependencies: commander: 9.5.0 @@ -16052,6 +22165,10 @@ snapshots: ansi-styles: 5.2.0 react-is: 17.0.2 + prismjs@1.27.0: {} + + prismjs@1.30.0: {} + proc-log@2.0.1: {} process-nextick-args@2.0.1: {} @@ -16073,6 +22190,12 @@ snapshots: object-assign: 4.1.1 react-is: 16.13.1 + property-information@5.6.0: + dependencies: + xtend: 4.0.2 + + property-information@7.0.0: {} + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 @@ -16106,14 +22229,14 @@ snapshots: punycode@2.3.1: {} - puppeteer-core@24.1.1: + puppeteer-core@24.1.1(bufferutil@4.0.9)(utf-8-validate@6.0.5): dependencies: '@puppeteer/browsers': 2.7.0 chromium-bidi: 1.1.0(devtools-protocol@0.0.1380148) debug: 4.4.0 devtools-protocol: 0.0.1380148 typed-query-selector: 2.12.0 - ws: 8.18.0 + ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bare-buffer - bufferutil @@ -16187,6 +22310,17 @@ snapshots: optionalDependencies: '@types/react': 18.3.18 + react-hot-toast@2.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + csstype: 3.1.3 + goober: 2.1.16(csstype@3.1.3) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + react-icons@5.2.1(react@18.3.1): + dependencies: + react: 18.3.1 + react-icons@5.4.0(react@18.3.1): dependencies: react: 18.3.1 @@ -16195,6 +22329,24 @@ snapshots: react-is@17.0.2: {} + react-markdown@10.1.0(@types/react@18.3.18)(react@18.3.1): + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@types/react': 18.3.18 + devlop: 1.1.0 + hast-util-to-jsx-runtime: 2.3.6 + html-url-attributes: 3.0.1 + mdast-util-to-hast: 13.2.0 + react: 18.3.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.1 + unified: 11.0.5 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + react-refresh@0.14.2: {} react-remove-scroll-bar@2.3.8(@types/react@18.3.18)(react@18.3.1): @@ -16226,6 +22378,12 @@ snapshots: optionalDependencies: react-dom: 18.3.1(react@18.3.1) + react-split@2.0.14(react@18.3.1): + dependencies: + prop-types: 15.8.1 + react: 18.3.1 + split.js: 1.6.5 + react-style-singleton@2.2.3(@types/react@18.3.18)(react@18.3.1): dependencies: get-nonce: 1.0.1 @@ -16234,6 +22392,24 @@ snapshots: optionalDependencies: '@types/react': 18.3.18 + react-syntax-highlighter@15.5.0(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.7 + highlight.js: 10.7.3 + lowlight: 1.20.0 + prismjs: 1.30.0 + react: 18.3.1 + refractor: 3.6.0 + + react-textarea-autosize@8.5.8(@types/react@18.3.18)(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.7 + react: 18.3.1 + use-composed-ref: 1.4.0(@types/react@18.3.18)(react@18.3.1) + use-latest: 1.3.0(@types/react@18.3.18)(react@18.3.1) + transitivePeerDependencies: + - '@types/react' + react-universal-interface@0.6.2(react@18.3.1)(tslib@2.8.1): dependencies: react: 18.3.1 @@ -16268,6 +22444,10 @@ snapshots: transitivePeerDependencies: - supports-color + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + read-pkg-up@2.0.0: dependencies: find-up: 2.1.0 @@ -16315,6 +22495,12 @@ snapshots: process: 0.11.10 readable-stream: 4.7.0 + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + readdirp@4.1.2: {} + rechoir@0.6.2: dependencies: resolve: 1.22.10 @@ -16334,6 +22520,12 @@ snapshots: get-proto: 1.0.1 which-builtin-type: 1.2.1 + refractor@3.6.0: + dependencies: + hastscript: 6.0.0 + parse-entities: 2.0.0 + prismjs: 1.27.0 + regenerator-runtime@0.13.11: {} regenerator-runtime@0.14.1: {} @@ -16347,6 +22539,59 @@ snapshots: gopd: 1.2.0 set-function-name: 2.0.2 + rehype-katex@7.0.1: + dependencies: + '@types/hast': 3.0.4 + '@types/katex': 0.16.7 + hast-util-from-html-isomorphic: 2.0.0 + hast-util-to-text: 4.0.2 + katex: 0.16.21 + unist-util-visit-parents: 6.0.1 + vfile: 6.0.3 + + remark-gfm@4.0.1: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-gfm: 3.1.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-math@6.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-math: 3.0.0 + micromark-extension-math: 3.1.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-parse@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + micromark-util-types: 2.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-rehype@11.1.1: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.0 + unified: 11.0.5 + vfile: 6.0.3 + + remark-stringify@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 + repeat-string@1.6.1: optional: true @@ -16465,6 +22710,8 @@ snapshots: parseurl: 1.3.3 path-to-regexp: 8.2.0 + rrweb-cssom@0.8.0: {} + rsbuild-plugin-dts@0.5.3(@rsbuild/core@1.2.17)(typescript@4.9.4): dependencies: '@ast-grep/napi': 0.35.0 @@ -16629,14 +22876,30 @@ snapshots: sass-embedded-win32-ia32: 1.83.4 sass-embedded-win32-x64: 1.83.4 + sass@1.85.1: + dependencies: + chokidar: 4.0.3 + immutable: 5.0.3 + source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.5.1 + sax@1.4.1: {} + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + scheduler@0.23.2: dependencies: loose-envify: 1.4.0 screenfull@5.2.0: {} + scroll-into-view-if-needed@3.0.10: + dependencies: + compute-scroll-into-view: 3.1.1 + semver-compare@1.0.0: optional: true @@ -16734,6 +22997,8 @@ snapshots: setprototypeof@1.2.0: {} + shallowequal@1.1.0: {} + sharp@0.33.3: dependencies: color: 4.2.3 @@ -16876,6 +23141,10 @@ snapshots: source-map@0.6.1: {} + space-separated-tokens@1.1.5: {} + + space-separated-tokens@2.0.2: {} + spawndamnit@3.0.1: dependencies: cross-spawn: 7.0.6 @@ -16895,6 +23164,8 @@ snapshots: spdx-license-ids@3.0.21: {} + split.js@1.6.5: {} + split2@4.2.0: {} sprintf-js@1.0.3: {} @@ -16924,6 +23195,8 @@ snapshots: stack-generator: 2.0.10 stacktrace-gps: 3.1.2 + state-local@1.0.7: {} + statuses@2.0.1: {} std-env@3.8.0: {} @@ -17006,6 +23279,11 @@ snapshots: dependencies: safe-buffer: 5.2.1 + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -17037,10 +23315,44 @@ snapshots: stubborn-fs@1.2.5: {} + style-to-js@1.1.16: + dependencies: + style-to-object: 1.0.8 + + style-to-object@1.0.8: + dependencies: + inline-style-parser: 0.2.4 + + styled-components@6.1.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@emotion/is-prop-valid': 1.2.2 + '@emotion/unitless': 0.8.1 + '@types/stylis': 4.2.5 + css-to-react-native: 3.2.0 + csstype: 3.1.3 + postcss: 8.4.49 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + shallowequal: 1.1.0 + stylis: 4.3.2 + tslib: 2.6.2 + stylis@4.2.0: {} + stylis@4.3.2: {} + stylis@4.3.6: {} + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + sudo-prompt@9.2.1: {} sumchecker@3.0.1: @@ -17065,6 +23377,8 @@ snapshots: react: 18.3.1 use-sync-external-store: 1.4.0(react@18.3.1) + symbol-tree@3.2.4: {} + sync-child-process@1.0.2: dependencies: sync-message-port: 1.1.3 @@ -17076,8 +23390,44 @@ snapshots: '@pkgr/core': 0.1.1 tslib: 2.8.1 + tailwind-merge@1.14.0: {} + tailwind-merge@2.5.5: {} + tailwind-merge@3.0.2: {} + + tailwind-variants@0.1.20(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))): + dependencies: + tailwind-merge: 1.14.0 + tailwindcss: 3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3)) + + tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3)): + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.3 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.7 + lilconfig: 3.1.3 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.5.3 + postcss-import: 15.1.0(postcss@8.5.3) + postcss-js: 4.0.1(postcss@8.5.3) + postcss-load-config: 4.0.2(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3)) + postcss-nested: 6.2.0(postcss@8.5.3) + postcss-selector-parser: 6.1.2 + resolve: 1.22.10 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + tar-fs@3.0.8: dependencies: pump: 3.0.2 @@ -17127,12 +23477,23 @@ snapshots: text-table@0.2.0: {} + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + throttle-debounce@3.0.1: {} through@2.3.8: {} timm@1.7.1: {} + tiny-each-async@2.0.3: + optional: true + tiny-warning@1.0.3: {} tinybench@2.9.0: {} @@ -17152,10 +23513,24 @@ snapshots: tinyspy@3.0.2: {} + tldts-core@6.1.84: {} + + tldts@6.1.84: + dependencies: + tldts-core: 6.1.84 + + tmp-promise@3.0.3: + dependencies: + tmp: 0.2.3 + optional: true + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 + tmp@0.2.3: + optional: true + tn1150@0.1.0: dependencies: unorm: 1.6.0 @@ -17186,18 +23561,32 @@ snapshots: universalify: 0.2.0 url-parse: 1.5.10 + tough-cookie@5.1.2: + dependencies: + tldts: 6.1.84 + tr46@0.0.3: {} + tr46@5.1.0: + dependencies: + punycode: 2.3.1 + + trim-lines@3.0.1: {} + trim-repeated@1.0.0: dependencies: escape-string-regexp: 1.0.5 + trough@2.2.0: {} + ts-api-utils@1.4.3(typescript@5.7.3): dependencies: typescript: 5.7.3 ts-easing@0.2.0: {} + ts-interface-checker@0.1.13: {} + ts-node@10.9.2(@types/node@20.14.8)(typescript@4.9.4): dependencies: '@cspotcode/source-map-support': 0.8.1 @@ -17234,6 +23623,24 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 22.13.10 + acorn: 8.14.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.7.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + tsconfck@3.1.5(typescript@5.7.3): optionalDependencies: typescript: 5.7.3 @@ -17255,6 +23662,8 @@ snapshots: tslib@2.4.0: {} + tslib@2.6.2: {} + tslib@2.8.1: {} tsutils@3.21.0(typescript@5.7.3): @@ -17381,6 +23790,16 @@ snapshots: unicorn-magic@0.1.0: {} + unified@11.0.5: + dependencies: + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + unique-filename@2.0.1: dependencies: unique-slug: 3.0.0 @@ -17389,6 +23808,39 @@ snapshots: dependencies: imurmurhash: 0.1.4 + unist-util-find-after@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + + unist-util-is@6.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-remove-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-visit: 5.0.0 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.1: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + + unist-util-visit@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + universal-user-agent@6.0.1: {} universalify@0.1.2: {} @@ -17435,6 +23887,36 @@ snapshots: optionalDependencies: '@types/react': 18.3.18 + use-composed-ref@1.4.0(@types/react@18.3.18)(react@18.3.1): + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 + + use-dark-mode@2.3.1(react@18.3.1): + dependencies: + '@use-it/event-listener': 0.1.7(react@18.3.1) + react: 18.3.1 + use-persisted-state: 0.3.3(react@18.3.1) + + use-isomorphic-layout-effect@1.2.0(@types/react@18.3.18)(react@18.3.1): + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 + + use-latest@1.3.0(@types/react@18.3.18)(react@18.3.1): + dependencies: + react: 18.3.1 + use-isomorphic-layout-effect: 1.2.0(@types/react@18.3.18)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + + use-persisted-state@0.3.3(react@18.3.1): + dependencies: + '@use-it/event-listener': 0.1.7(react@18.3.1) + react: 18.3.1 + use-sidecar@1.1.3(@types/react@18.3.18)(react@18.3.1): dependencies: detect-node-es: 1.1.0 @@ -17452,6 +23934,10 @@ snapshots: execa: 1.0.0 mem: 4.3.0 + utf-8-validate@6.0.5: + dependencies: + node-gyp-build: 4.8.4 + utif2@4.1.0: dependencies: pako: 1.0.11 @@ -17477,15 +23963,73 @@ snapshots: vary@1.1.2: {} - vite-node@3.0.5(@types/node@20.17.17)(sass-embedded@1.83.4): + vfile-location@5.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile: 6.0.3 + + vfile-message@4.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.2 + + vite-node@3.0.5(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0): + dependencies: + cac: 6.7.14 + debug: 4.4.0 + es-module-lexer: 1.6.0 + pathe: 2.0.3 + vite: 6.2.2(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vite-node@3.0.5(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0): + dependencies: + cac: 6.7.14 + debug: 4.4.0 + es-module-lexer: 1.6.0 + pathe: 2.0.3 + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vite-node@3.0.5(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.3 - vite: 5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4) + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' + - jiti - less - lightningcss - sass @@ -17494,16 +24038,19 @@ snapshots: - sugarss - supports-color - terser + - tsx + - yaml - vite-node@3.0.5(@types/node@22.13.10)(sass-embedded@1.83.4): + vite-node@3.0.7(@types/node@20.14.8)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.3 - vite: 5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4) + vite: 6.2.2(@types/node@20.14.8)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' + - jiti - less - lightningcss - sass @@ -17512,16 +24059,19 @@ snapshots: - sugarss - supports-color - terser + - tsx + - yaml - vite-node@3.0.7(@types/node@20.14.8)(sass-embedded@1.83.4): + vite-node@3.0.7(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.3 - vite: 5.4.14(@types/node@20.14.8)(sass-embedded@1.83.4) + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' + - jiti - less - lightningcss - sass @@ -17530,16 +24080,19 @@ snapshots: - sugarss - supports-color - terser + - tsx + - yaml - vite-node@3.0.7(@types/node@22.13.10)(sass-embedded@1.83.4): + vite-node@3.0.8(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.3 - vite: 5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4) + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' + - jiti - less - lightningcss - sass @@ -17548,62 +24101,118 @@ snapshots: - sugarss - supports-color - terser + - tsx + - yaml + + vite-plugin-singlefile@2.2.0(rollup@4.34.6)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)): + dependencies: + micromatch: 4.0.8 + rollup: 4.34.6 + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) + + vite-tsconfig-paths@5.1.4(typescript@5.7.3)(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1)): + dependencies: + debug: 4.4.0 + globrex: 0.1.2 + tsconfck: 3.1.5(typescript@5.7.3) + optionalDependencies: + vite: 5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1) + transitivePeerDependencies: + - supports-color + - typescript - vite-tsconfig-paths@5.1.4(typescript@5.7.3)(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)): + vite-tsconfig-paths@5.1.4(typescript@5.7.3)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)): dependencies: debug: 4.4.0 globrex: 0.1.2 tsconfck: 3.1.5(typescript@5.7.3) optionalDependencies: - vite: 5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4) + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) transitivePeerDependencies: - supports-color - typescript - vite@5.4.14(@types/node@20.14.8)(sass-embedded@1.83.4): + vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1): dependencies: esbuild: 0.21.5 postcss: 8.5.2 rollup: 4.34.6 + optionalDependencies: + '@types/node': 20.17.17 + fsevents: 2.3.3 + sass: 1.85.1 + sass-embedded: 1.83.4 + + vite@6.2.2(@types/node@20.14.8)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0): + dependencies: + esbuild: 0.25.0 + postcss: 8.5.3 + rollup: 4.34.6 optionalDependencies: '@types/node': 20.14.8 fsevents: 2.3.3 + jiti: 2.4.2 + sass: 1.85.1 sass-embedded: 1.83.4 + tsx: 4.19.3 + yaml: 2.7.0 - vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4): + vite@6.2.2(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0): dependencies: - esbuild: 0.21.5 - postcss: 8.5.2 + esbuild: 0.25.0 + postcss: 8.5.3 rollup: 4.34.6 optionalDependencies: '@types/node': 20.17.17 fsevents: 2.3.3 + jiti: 2.4.2 + sass: 1.85.1 sass-embedded: 1.83.4 + tsx: 4.19.2 + yaml: 2.7.0 - vite@5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4): + vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0): dependencies: - esbuild: 0.21.5 - postcss: 8.5.2 + esbuild: 0.25.0 + postcss: 8.5.3 + rollup: 4.34.6 + optionalDependencies: + '@types/node': 22.13.10 + fsevents: 2.3.3 + jiti: 2.4.2 + sass: 1.85.1 + sass-embedded: 1.83.4 + tsx: 4.19.2 + yaml: 2.7.0 + + vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0): + dependencies: + esbuild: 0.25.0 + postcss: 8.5.3 rollup: 4.34.6 optionalDependencies: '@types/node': 22.13.10 fsevents: 2.3.3 + jiti: 2.4.2 + sass: 1.85.1 sass-embedded: 1.83.4 + tsx: 4.19.3 + yaml: 2.7.0 vitest-browser-react@0.1.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(@vitest/browser@3.0.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vitest@3.0.5): dependencies: - '@vitest/browser': 3.0.5(@types/node@22.13.10)(playwright@1.50.1)(typescript@5.7.3)(vite@5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4))(vitest@3.0.5) + '@vitest/browser': 3.0.5(@types/node@22.13.10)(bufferutil@4.0.9)(playwright@1.50.1)(typescript@5.7.3)(utf-8-validate@6.0.5)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0))(vitest@3.0.5) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - vitest: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4) + vitest: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) optionalDependencies: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) - vitest@3.0.5(@types/debug@4.1.12)(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4): + vitest@3.0.5(@types/debug@4.1.12)(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0): dependencies: '@vitest/expect': 3.0.5 - '@vitest/mocker': 3.0.5(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)) + '@vitest/mocker': 3.0.5(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(vite@6.2.2(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0)) '@vitest/pretty-format': 3.0.5 '@vitest/runner': 3.0.5 '@vitest/snapshot': 3.0.5 @@ -17619,15 +24228,59 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4) - vite-node: 3.0.5(@types/node@20.17.17)(sass-embedded@1.83.4) + vite: 6.2.2(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) + vite-node: 3.0.5(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 '@types/node': 20.17.17 - '@vitest/browser': 3.0.5(@types/node@20.17.17)(playwright@1.50.1)(typescript@5.7.3)(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4))(vitest@3.0.5) + '@vitest/browser': 3.0.5(@types/node@20.17.17)(bufferutil@4.0.9)(playwright@1.50.1)(typescript@5.7.3)(utf-8-validate@6.0.5)(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1))(vitest@3.0.5) + happy-dom: 17.1.1 + jsdom: 26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0): + dependencies: + '@vitest/expect': 3.0.5 + '@vitest/mocker': 3.0.5(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0)) + '@vitest/pretty-format': 3.0.5 + '@vitest/runner': 3.0.5 + '@vitest/snapshot': 3.0.5 + '@vitest/spy': 3.0.5 + '@vitest/utils': 3.0.5 + chai: 5.1.2 + debug: 4.4.0 + expect-type: 1.1.0 + magic-string: 0.30.17 + pathe: 2.0.3 + std-env: 3.8.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinypool: 1.0.2 + tinyrainbow: 2.0.0 + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) + vite-node: 3.0.5(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/debug': 4.1.12 + '@types/node': 22.13.10 + '@vitest/browser': 3.0.5(@types/node@22.13.10)(bufferutil@4.0.9)(playwright@1.50.1)(typescript@5.7.3)(utf-8-validate@6.0.5)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0))(vitest@3.0.5) happy-dom: 17.1.1 + jsdom: 26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: + - jiti - less - lightningcss - msw @@ -17637,11 +24290,13 @@ snapshots: - sugarss - supports-color - terser + - tsx + - yaml - vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4): + vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0): dependencies: '@vitest/expect': 3.0.5 - '@vitest/mocker': 3.0.5(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(vite@5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4)) + '@vitest/mocker': 3.0.5(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)) '@vitest/pretty-format': 3.0.5 '@vitest/runner': 3.0.5 '@vitest/snapshot': 3.0.5 @@ -17657,15 +24312,17 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4) - vite-node: 3.0.5(@types/node@22.13.10)(sass-embedded@1.83.4) + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) + vite-node: 3.0.5(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 '@types/node': 22.13.10 - '@vitest/browser': 3.0.5(@types/node@22.13.10)(playwright@1.50.1)(typescript@5.7.3)(vite@5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4))(vitest@3.0.5) + '@vitest/browser': 3.0.5(@types/node@22.13.10)(bufferutil@4.0.9)(playwright@1.50.1)(typescript@5.7.3)(utf-8-validate@6.0.5)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0))(vitest@3.0.5) happy-dom: 17.1.1 + jsdom: 26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: + - jiti - less - lightningcss - msw @@ -17675,11 +24332,13 @@ snapshots: - sugarss - supports-color - terser + - tsx + - yaml - vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4): + vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0): dependencies: '@vitest/expect': 3.0.7 - '@vitest/mocker': 3.0.7(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(vite@5.4.14(@types/node@20.14.8)(sass-embedded@1.83.4)) + '@vitest/mocker': 3.0.7(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(vite@6.2.2(@types/node@20.14.8)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)) '@vitest/pretty-format': 3.0.8 '@vitest/runner': 3.0.7 '@vitest/snapshot': 3.0.7 @@ -17695,14 +24354,16 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 5.4.14(@types/node@20.14.8)(sass-embedded@1.83.4) - vite-node: 3.0.7(@types/node@20.14.8)(sass-embedded@1.83.4) + vite: 6.2.2(@types/node@20.14.8)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) + vite-node: 3.0.7(@types/node@20.14.8)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 '@types/node': 20.14.8 happy-dom: 17.1.1 + jsdom: 26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: + - jiti - less - lightningcss - msw @@ -17712,11 +24373,13 @@ snapshots: - sugarss - supports-color - terser + - tsx + - yaml - vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4): + vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0): dependencies: '@vitest/expect': 3.0.7 - '@vitest/mocker': 3.0.7(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(vite@5.4.14(@types/node@20.14.8)(sass-embedded@1.83.4)) + '@vitest/mocker': 3.0.7(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(vite@6.2.2(@types/node@20.14.8)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)) '@vitest/pretty-format': 3.0.8 '@vitest/runner': 3.0.7 '@vitest/snapshot': 3.0.7 @@ -17732,14 +24395,16 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 5.4.14(@types/node@20.14.8)(sass-embedded@1.83.4) - vite-node: 3.0.7(@types/node@20.14.8)(sass-embedded@1.83.4) + vite: 6.2.2(@types/node@20.14.8)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) + vite-node: 3.0.7(@types/node@20.14.8)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 '@types/node': 20.14.8 happy-dom: 17.1.1 + jsdom: 26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: + - jiti - less - lightningcss - msw @@ -17749,11 +24414,13 @@ snapshots: - sugarss - supports-color - terser + - tsx + - yaml - vitest@3.0.7(@types/debug@4.1.12)(@types/node@22.13.10)(happy-dom@17.1.1)(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4): + vitest@3.0.7(@types/debug@4.1.12)(@types/node@22.13.10)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0): dependencies: '@vitest/expect': 3.0.7 - '@vitest/mocker': 3.0.7(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(vite@5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4)) + '@vitest/mocker': 3.0.7(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)) '@vitest/pretty-format': 3.0.8 '@vitest/runner': 3.0.7 '@vitest/snapshot': 3.0.7 @@ -17769,14 +24436,57 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 5.4.14(@types/node@22.13.10)(sass-embedded@1.83.4) - vite-node: 3.0.7(@types/node@22.13.10)(sass-embedded@1.83.4) + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) + vite-node: 3.0.7(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/debug': 4.1.12 + '@types/node': 22.13.10 + happy-dom: 17.1.1 + jsdom: 26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vitest@3.0.8(@types/debug@4.1.12)(@types/node@22.13.10)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0): + dependencies: + '@vitest/expect': 3.0.8 + '@vitest/mocker': 3.0.8(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)) + '@vitest/pretty-format': 3.0.8 + '@vitest/runner': 3.0.8 + '@vitest/snapshot': 3.0.8 + '@vitest/spy': 3.0.8 + '@vitest/utils': 3.0.8 + chai: 5.2.0 + debug: 4.4.0 + expect-type: 1.1.0 + magic-string: 0.30.17 + pathe: 2.0.3 + std-env: 3.8.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinypool: 1.0.2 + tinyrainbow: 2.0.0 + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) + vite-node: 3.0.8(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 '@types/node': 22.13.10 happy-dom: 17.1.1 + jsdom: 26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: + - jiti - less - lightningcss - msw @@ -17786,11 +24496,19 @@ snapshots: - sugarss - supports-color - terser + - tsx + - yaml + + w3c-xmlserializer@5.0.0: + dependencies: + xml-name-validator: 5.0.0 wcwidth@1.0.1: dependencies: defaults: 1.0.4 + web-namespaces@2.0.1: {} + web-streams-polyfill@3.3.3: {} web-streams-polyfill@4.0.0-beta.3: {} @@ -17799,10 +24517,21 @@ snapshots: webidl-conversions@7.0.0: {} + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + whatwg-fetch@3.6.20: {} whatwg-mimetype@3.0.0: {} + whatwg-mimetype@4.0.0: {} + + whatwg-url@14.2.0: + dependencies: + tr46: 5.1.0 + webidl-conversions: 7.0.0 + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 @@ -17885,9 +24614,15 @@ snapshots: wrappy@1.0.2: {} - ws@7.5.10: {} + ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@6.0.5): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 6.0.5 - ws@8.18.0: {} + ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 6.0.5 xhr@2.6.0: dependencies: @@ -17896,6 +24631,8 @@ snapshots: parse-headers: 2.0.5 xtend: 4.0.2 + xml-name-validator@5.0.0: {} + xml-parse-from-string@1.0.1: {} xml2js@0.5.0: @@ -17907,18 +24644,30 @@ snapshots: xmlbuilder@15.1.1: {} + xmlchars@2.2.0: {} + xtend@4.0.2: {} xterm-addon-fit@0.5.0(xterm@4.19.0): dependencies: xterm: 4.19.0 + xterm-addon-fit@0.8.0(xterm@5.3.0): + dependencies: + xterm: 5.3.0 + xterm-addon-search@0.8.2(xterm@4.19.0): dependencies: xterm: 4.19.0 + xterm-addon-web-links@0.9.0(xterm@5.3.0): + dependencies: + xterm: 5.3.0 + xterm@4.19.0: {} + xterm@5.3.0: {} + y18n@5.0.8: {} yaku@0.16.7: {} @@ -17931,8 +24680,24 @@ snapshots: yaml@2.3.1: {} + yaml@2.7.0: {} + + yargs-parser@20.2.9: + optional: true + yargs-parser@21.1.1: {} + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + optional: true + yargs@17.7.2: dependencies: cliui: 8.0.1 @@ -17969,3 +24734,5 @@ snapshots: '@types/react': 18.3.18 react: 18.3.1 use-sync-external-store: 1.4.0(react@18.3.1) + + zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 7d3335373..0b93e036a 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,7 +1,8 @@ packages: - 'apps/*' + - 'apps/omega/src/*' - 'apps/ui-tars/src/*' - 'packages/ui-tars/**' - - 'packages/common/**' - 'packages/agent-infra/**' + - 'packages/common/*' - '!packages/ui-tars/visualizer' From f4201ca64d4f0362401e4d6f724a7493a496676c Mon Sep 17 00:00:00 2001 From: Charles Date: Mon, 17 Mar 2025 21:30:42 +0800 Subject: [PATCH 54/62] fix(ci): monorepo version error (#194) --- apps/omega/package.json | 2 +- apps/ui-tars/package.json | 8 +- pnpm-lock.yaml | 494 ++++++-------------------------------- 3 files changed, 85 insertions(+), 419 deletions(-) diff --git a/apps/omega/package.json b/apps/omega/package.json index 08109f932..6629c7ab9 100644 --- a/apps/omega/package.json +++ b/apps/omega/package.json @@ -63,7 +63,7 @@ "typescript": "^5.7.3", "vite": "^6.1.0", "vite-tsconfig-paths": "^5.1.4", - "vitest": "3.0.8", + "vitest": "^3.0.8", "vite-plugin-singlefile": "2.2.0" } } diff --git a/apps/ui-tars/package.json b/apps/ui-tars/package.json index 2b3ded091..3c33a345d 100644 --- a/apps/ui-tars/package.json +++ b/apps/ui-tars/package.json @@ -97,12 +97,12 @@ "@types/node": "^20.14.8", "@typescript-eslint/eslint-plugin": "^5.0.0", "@typescript-eslint/parser": "^5.0.0", - "@vitejs/plugin-react": "^4.3.1", + "@vitejs/plugin-react": "^4.3.4", "@vitest/coverage-istanbul": "^3.0.3", "cross-env": "^7.0.3", "electron": "34.1.1", "electron-packager-languages": "0.5.0", - "electron-vite": "^2.3.0", + "electron-vite": "^3.0.0", "eslint": "^8.57.0", "eslint-plugin-import": "^2.25.0", "eslint-plugin-react": "^7.34.3", @@ -112,9 +112,9 @@ "ts-node": "^10.9.2", "tsx": "^4.19.2", "typescript": "^5.7.2", - "vite": "^5.3.1", + "vite": "^6.1.0", "vite-tsconfig-paths": "^5.1.4", - "vitest": "^3.0.2" + "vitest": "^3.0.8" }, "engines": { "node": ">=20.x" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b15c990b6..1072997a9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,7 +37,7 @@ importers: version: 5.62.0(eslint@8.57.1)(typescript@5.7.3) '@vitest/coverage-istanbul': specifier: ^3.0.3 - version: 3.0.5(vitest@3.0.5) + version: 3.0.5(vitest@3.0.8(@types/debug@4.1.12)(@types/node@20.17.17)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0)) '@vitest/coverage-v8': specifier: ^3.0.8 version: 3.0.8 @@ -178,7 +178,7 @@ importers: specifier: ^5.1.4 version: 5.1.4(typescript@5.7.3)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)) vitest: - specifier: 3.0.8 + specifier: ^3.0.8 version: 3.0.8(@types/debug@4.1.12)(@types/node@22.13.10)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) apps/omega/src/main: @@ -475,11 +475,11 @@ importers: specifier: workspace:* version: link:../../packages/ui-tars/utio '@vitejs/plugin-react': - specifier: ^4.3.1 - version: 4.3.4(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1)) + specifier: ^4.3.4 + version: 4.3.4(vite@6.2.2(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0)) '@vitest/coverage-istanbul': specifier: ^3.0.3 - version: 3.0.5(vitest@3.0.5) + version: 3.0.5(vitest@3.0.8(@types/debug@4.1.12)(@types/node@20.17.17)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0)) cross-env: specifier: ^7.0.3 version: 7.0.3 @@ -508,8 +508,8 @@ importers: specifier: ^10.0.0 version: 10.0.1 electron-vite: - specifier: ^2.3.0 - version: 2.3.0(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1)) + specifier: ^3.0.0 + version: 3.0.0(vite@6.2.2(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0)) eslint: specifier: ^8.57.0 version: 8.57.1 @@ -547,14 +547,14 @@ importers: specifier: ^3.1.0 version: 3.1.1 vite: - specifier: ^5.3.1 - version: 5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1) + specifier: ^6.1.0 + version: 6.2.2(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.7.3)(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1)) + version: 5.1.4(typescript@5.7.3)(vite@6.2.2(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0)) vitest: - specifier: ^3.0.2 - version: 3.0.5(@types/debug@4.1.12)(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) + specifier: ^3.0.8 + version: 3.0.8(@types/debug@4.1.12)(@types/node@20.17.17)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) zustand: specifier: ^5.0.0 version: 5.0.3(@types/react@18.3.18)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) @@ -2209,12 +2209,6 @@ packages: '@emotion/weak-memoize@0.4.0': resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.23.1': resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} engines: {node: '>=18'} @@ -2233,12 +2227,6 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.23.1': resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} engines: {node: '>=18'} @@ -2257,12 +2245,6 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.23.1': resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} engines: {node: '>=18'} @@ -2281,12 +2263,6 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.23.1': resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} engines: {node: '>=18'} @@ -2305,12 +2281,6 @@ packages: cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.23.1': resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} engines: {node: '>=18'} @@ -2329,12 +2299,6 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.23.1': resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} engines: {node: '>=18'} @@ -2353,12 +2317,6 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.23.1': resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} engines: {node: '>=18'} @@ -2377,12 +2335,6 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.23.1': resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} engines: {node: '>=18'} @@ -2401,12 +2353,6 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.23.1': resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} engines: {node: '>=18'} @@ -2425,12 +2371,6 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.23.1': resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} engines: {node: '>=18'} @@ -2449,12 +2389,6 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.23.1': resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} engines: {node: '>=18'} @@ -2473,12 +2407,6 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.23.1': resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} engines: {node: '>=18'} @@ -2497,12 +2425,6 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.23.1': resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} engines: {node: '>=18'} @@ -2521,12 +2443,6 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.23.1': resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} engines: {node: '>=18'} @@ -2545,12 +2461,6 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.23.1': resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} engines: {node: '>=18'} @@ -2569,12 +2479,6 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.23.1': resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} engines: {node: '>=18'} @@ -2593,12 +2497,6 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.23.1': resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} engines: {node: '>=18'} @@ -2629,12 +2527,6 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.23.1': resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} engines: {node: '>=18'} @@ -2671,12 +2563,6 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.23.1': resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} engines: {node: '>=18'} @@ -2695,12 +2581,6 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.23.1': resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} engines: {node: '>=18'} @@ -2719,12 +2599,6 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.23.1': resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} engines: {node: '>=18'} @@ -2743,12 +2617,6 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.23.1': resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} engines: {node: '>=18'} @@ -2767,12 +2635,6 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.23.1': resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} engines: {node: '>=18'} @@ -6656,17 +6518,6 @@ packages: electron-util@0.17.2: resolution: {integrity: sha512-4Kg/aZxJ2BZklgyfH86px/D2GyROPyIcnAZar+7KiNmKI2I5l09pwQTP7V95zM3FVhgDQwV9iuJta5dyEvuWAw==} - electron-vite@2.3.0: - resolution: {integrity: sha512-lsN2FymgJlp4k6MrcsphGqZQ9fKRdJKasoaiwIrAewN1tapYI/KINLdfEL7n10LuF0pPSNf/IqjzZbB5VINctg==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@swc/core': ^1.0.0 - vite: ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - '@swc/core': - optional: true - electron-vite@3.0.0: resolution: {integrity: sha512-Uf8NpF4OB2Juo1Vq8pobkLVp9BZTO70VwkW7fKXSCkod0SRkc7Dkw7ddR6b1fbsgT7lcZ0HD29WRxsCcbkHXUw==} engines: {node: ^18.0.0 || >=20.0.0} @@ -6787,11 +6638,6 @@ packages: peerDependencies: esbuild: '>=0.12 <1' - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} - hasBin: true - esbuild@0.23.1: resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} engines: {node: '>=18'} @@ -9230,10 +9076,6 @@ packages: resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} engines: {node: ^10 || ^12 || >=14} - postcss@8.5.2: - resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} - engines: {node: ^10 || ^12 || >=14} - postcss@8.5.3: resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} @@ -10880,37 +10722,6 @@ packages: vite: optional: true - vite@5.4.14: - resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - vite@6.2.2: resolution: {integrity: sha512-yW7PeMM+LkDzc7CgJuRLMW2Jz0FxMOsVJ8Lv3gpgW9WLcb9cTW+121UEr1hvmfR7w3SegR5ItvYyzVz1vxNJgQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -13171,9 +12982,6 @@ snapshots: '@emotion/weak-memoize@0.4.0': {} - '@esbuild/aix-ppc64@0.21.5': - optional: true - '@esbuild/aix-ppc64@0.23.1': optional: true @@ -13183,9 +12991,6 @@ snapshots: '@esbuild/aix-ppc64@0.25.0': optional: true - '@esbuild/android-arm64@0.21.5': - optional: true - '@esbuild/android-arm64@0.23.1': optional: true @@ -13195,9 +13000,6 @@ snapshots: '@esbuild/android-arm64@0.25.0': optional: true - '@esbuild/android-arm@0.21.5': - optional: true - '@esbuild/android-arm@0.23.1': optional: true @@ -13207,9 +13009,6 @@ snapshots: '@esbuild/android-arm@0.25.0': optional: true - '@esbuild/android-x64@0.21.5': - optional: true - '@esbuild/android-x64@0.23.1': optional: true @@ -13219,9 +13018,6 @@ snapshots: '@esbuild/android-x64@0.25.0': optional: true - '@esbuild/darwin-arm64@0.21.5': - optional: true - '@esbuild/darwin-arm64@0.23.1': optional: true @@ -13231,9 +13027,6 @@ snapshots: '@esbuild/darwin-arm64@0.25.0': optional: true - '@esbuild/darwin-x64@0.21.5': - optional: true - '@esbuild/darwin-x64@0.23.1': optional: true @@ -13243,9 +13036,6 @@ snapshots: '@esbuild/darwin-x64@0.25.0': optional: true - '@esbuild/freebsd-arm64@0.21.5': - optional: true - '@esbuild/freebsd-arm64@0.23.1': optional: true @@ -13255,9 +13045,6 @@ snapshots: '@esbuild/freebsd-arm64@0.25.0': optional: true - '@esbuild/freebsd-x64@0.21.5': - optional: true - '@esbuild/freebsd-x64@0.23.1': optional: true @@ -13267,9 +13054,6 @@ snapshots: '@esbuild/freebsd-x64@0.25.0': optional: true - '@esbuild/linux-arm64@0.21.5': - optional: true - '@esbuild/linux-arm64@0.23.1': optional: true @@ -13279,9 +13063,6 @@ snapshots: '@esbuild/linux-arm64@0.25.0': optional: true - '@esbuild/linux-arm@0.21.5': - optional: true - '@esbuild/linux-arm@0.23.1': optional: true @@ -13291,9 +13072,6 @@ snapshots: '@esbuild/linux-arm@0.25.0': optional: true - '@esbuild/linux-ia32@0.21.5': - optional: true - '@esbuild/linux-ia32@0.23.1': optional: true @@ -13303,9 +13081,6 @@ snapshots: '@esbuild/linux-ia32@0.25.0': optional: true - '@esbuild/linux-loong64@0.21.5': - optional: true - '@esbuild/linux-loong64@0.23.1': optional: true @@ -13315,9 +13090,6 @@ snapshots: '@esbuild/linux-loong64@0.25.0': optional: true - '@esbuild/linux-mips64el@0.21.5': - optional: true - '@esbuild/linux-mips64el@0.23.1': optional: true @@ -13327,9 +13099,6 @@ snapshots: '@esbuild/linux-mips64el@0.25.0': optional: true - '@esbuild/linux-ppc64@0.21.5': - optional: true - '@esbuild/linux-ppc64@0.23.1': optional: true @@ -13339,9 +13108,6 @@ snapshots: '@esbuild/linux-ppc64@0.25.0': optional: true - '@esbuild/linux-riscv64@0.21.5': - optional: true - '@esbuild/linux-riscv64@0.23.1': optional: true @@ -13351,9 +13117,6 @@ snapshots: '@esbuild/linux-riscv64@0.25.0': optional: true - '@esbuild/linux-s390x@0.21.5': - optional: true - '@esbuild/linux-s390x@0.23.1': optional: true @@ -13363,9 +13126,6 @@ snapshots: '@esbuild/linux-s390x@0.25.0': optional: true - '@esbuild/linux-x64@0.21.5': - optional: true - '@esbuild/linux-x64@0.23.1': optional: true @@ -13381,9 +13141,6 @@ snapshots: '@esbuild/netbsd-arm64@0.25.0': optional: true - '@esbuild/netbsd-x64@0.21.5': - optional: true - '@esbuild/netbsd-x64@0.23.1': optional: true @@ -13402,9 +13159,6 @@ snapshots: '@esbuild/openbsd-arm64@0.25.0': optional: true - '@esbuild/openbsd-x64@0.21.5': - optional: true - '@esbuild/openbsd-x64@0.23.1': optional: true @@ -13414,9 +13168,6 @@ snapshots: '@esbuild/openbsd-x64@0.25.0': optional: true - '@esbuild/sunos-x64@0.21.5': - optional: true - '@esbuild/sunos-x64@0.23.1': optional: true @@ -13426,9 +13177,6 @@ snapshots: '@esbuild/sunos-x64@0.25.0': optional: true - '@esbuild/win32-arm64@0.21.5': - optional: true - '@esbuild/win32-arm64@0.23.1': optional: true @@ -13438,9 +13186,6 @@ snapshots: '@esbuild/win32-arm64@0.25.0': optional: true - '@esbuild/win32-ia32@0.21.5': - optional: true - '@esbuild/win32-ia32@0.23.1': optional: true @@ -13450,9 +13195,6 @@ snapshots: '@esbuild/win32-ia32@0.25.0': optional: true - '@esbuild/win32-x64@0.21.5': - optional: true - '@esbuild/win32-x64@0.23.1': optional: true @@ -17321,14 +17063,14 @@ snapshots: dependencies: react: 18.3.1 - '@vitejs/plugin-react@4.3.4(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1))': + '@vitejs/plugin-react@4.3.4(vite@6.2.2(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0))': dependencies: '@babel/core': 7.26.8 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.8) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.8) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1) + vite: 6.2.2(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) transitivePeerDependencies: - supports-color @@ -17354,28 +17096,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/browser@3.0.5(@types/node@20.17.17)(bufferutil@4.0.9)(playwright@1.50.1)(typescript@5.7.3)(utf-8-validate@6.0.5)(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1))(vitest@3.0.5)': - dependencies: - '@testing-library/dom': 10.4.0 - '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0) - '@vitest/mocker': 3.0.5(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1)) - '@vitest/utils': 3.0.5 - magic-string: 0.30.17 - msw: 2.7.0(@types/node@20.17.17)(typescript@5.7.3) - sirv: 3.0.1 - tinyrainbow: 2.0.0 - vitest: 3.0.5(@types/debug@4.1.12)(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) - ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) - optionalDependencies: - playwright: 1.50.1 - transitivePeerDependencies: - - '@types/node' - - bufferutil - - typescript - - utf-8-validate - - vite - optional: true - '@vitest/browser@3.0.5(@types/node@22.13.10)(bufferutil@4.0.9)(playwright@1.50.1)(typescript@5.7.3)(utf-8-validate@6.0.5)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0))(vitest@3.0.5)': dependencies: '@testing-library/dom': 10.4.0 @@ -17419,7 +17139,7 @@ snapshots: - vite optional: true - '@vitest/coverage-istanbul@3.0.5(vitest@3.0.5)': + '@vitest/coverage-istanbul@3.0.5(vitest@3.0.8(@types/debug@4.1.12)(@types/node@20.17.17)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0))': dependencies: '@istanbuljs/schema': 0.1.3 debug: 4.4.0 @@ -17431,7 +17151,7 @@ snapshots: magicast: 0.3.5 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.0.5(@types/debug@4.1.12)(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) + vitest: 3.0.8(@types/debug@4.1.12)(@types/node@20.17.17)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) transitivePeerDependencies: - supports-color @@ -17509,25 +17229,6 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.0.5(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1))': - dependencies: - '@vitest/spy': 3.0.5 - estree-walker: 3.0.3 - magic-string: 0.30.17 - optionalDependencies: - msw: 2.7.0(@types/node@20.17.17)(typescript@5.7.3) - vite: 5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1) - optional: true - - '@vitest/mocker@3.0.5(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(vite@6.2.2(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0))': - dependencies: - '@vitest/spy': 3.0.5 - estree-walker: 3.0.3 - magic-string: 0.30.17 - optionalDependencies: - msw: 2.7.0(@types/node@20.17.17)(typescript@5.7.3) - vite: 6.2.2(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) - '@vitest/mocker@3.0.5(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0))': dependencies: '@vitest/spy': 3.0.5 @@ -17573,6 +17274,15 @@ snapshots: msw: 2.7.0(@types/node@22.13.10)(typescript@5.7.3) vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) + '@vitest/mocker@3.0.8(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(vite@6.2.2(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0))': + dependencies: + '@vitest/spy': 3.0.8 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + msw: 2.7.0(@types/node@20.17.17)(typescript@5.7.3) + vite: 6.2.2(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) + '@vitest/mocker@3.0.8(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0))': dependencies: '@vitest/spy': 3.0.8 @@ -18816,15 +18526,15 @@ snapshots: electron-is-dev: 1.2.0 new-github-issue-url: 0.2.1 - electron-vite@2.3.0(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1)): + electron-vite@3.0.0(vite@6.2.2(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0)): dependencies: '@babel/core': 7.26.8 '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.8) cac: 6.7.14 - esbuild: 0.21.5 + esbuild: 0.24.2 magic-string: 0.30.17 picocolors: 1.1.1 - vite: 5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1) + vite: 6.2.2(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) transitivePeerDependencies: - supports-color @@ -19028,32 +18738,6 @@ snapshots: transitivePeerDependencies: - supports-color - esbuild@0.21.5: - optionalDependencies: - '@esbuild/aix-ppc64': 0.21.5 - '@esbuild/android-arm': 0.21.5 - '@esbuild/android-arm64': 0.21.5 - '@esbuild/android-x64': 0.21.5 - '@esbuild/darwin-arm64': 0.21.5 - '@esbuild/darwin-x64': 0.21.5 - '@esbuild/freebsd-arm64': 0.21.5 - '@esbuild/freebsd-x64': 0.21.5 - '@esbuild/linux-arm': 0.21.5 - '@esbuild/linux-arm64': 0.21.5 - '@esbuild/linux-ia32': 0.21.5 - '@esbuild/linux-loong64': 0.21.5 - '@esbuild/linux-mips64el': 0.21.5 - '@esbuild/linux-ppc64': 0.21.5 - '@esbuild/linux-riscv64': 0.21.5 - '@esbuild/linux-s390x': 0.21.5 - '@esbuild/linux-x64': 0.21.5 - '@esbuild/netbsd-x64': 0.21.5 - '@esbuild/openbsd-x64': 0.21.5 - '@esbuild/sunos-x64': 0.21.5 - '@esbuild/win32-arm64': 0.21.5 - '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 - esbuild@0.23.1: optionalDependencies: '@esbuild/aix-ppc64': 0.23.1 @@ -22133,12 +21817,6 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.2: - dependencies: - nanoid: 3.3.8 - picocolors: 1.1.1 - source-map-js: 1.2.1 - postcss@8.5.3: dependencies: nanoid: 3.3.8 @@ -23978,13 +23656,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@3.0.5(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0): + vite-node@3.0.5(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.3 - vite: 6.2.2(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -23999,13 +23677,13 @@ snapshots: - tsx - yaml - vite-node@3.0.5(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0): + vite-node@3.0.5(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.3 - vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -24020,13 +23698,13 @@ snapshots: - tsx - yaml - vite-node@3.0.5(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0): + vite-node@3.0.7(@types/node@20.14.8)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.3 - vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) + vite: 6.2.2(@types/node@20.14.8)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -24041,13 +23719,13 @@ snapshots: - tsx - yaml - vite-node@3.0.7(@types/node@20.14.8)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0): + vite-node@3.0.7(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.3 - vite: 6.2.2(@types/node@20.14.8)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -24062,13 +23740,13 @@ snapshots: - tsx - yaml - vite-node@3.0.7(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0): + vite-node@3.0.8(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.3 - vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) + vite: 6.2.2(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -24110,13 +23788,13 @@ snapshots: rollup: 4.34.6 vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) - vite-tsconfig-paths@5.1.4(typescript@5.7.3)(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1)): + vite-tsconfig-paths@5.1.4(typescript@5.7.3)(vite@6.2.2(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0)): dependencies: debug: 4.4.0 globrex: 0.1.2 tsconfck: 3.1.5(typescript@5.7.3) optionalDependencies: - vite: 5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1) + vite: 6.2.2(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) transitivePeerDependencies: - supports-color - typescript @@ -24132,17 +23810,6 @@ snapshots: - supports-color - typescript - vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1): - dependencies: - esbuild: 0.21.5 - postcss: 8.5.2 - rollup: 4.34.6 - optionalDependencies: - '@types/node': 20.17.17 - fsevents: 2.3.3 - sass: 1.85.1 - sass-embedded: 1.83.4 - vite@6.2.2(@types/node@20.14.8)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0): dependencies: esbuild: 0.25.0 @@ -24209,10 +23876,10 @@ snapshots: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) - vitest@3.0.5(@types/debug@4.1.12)(@types/node@20.17.17)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0): + vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0): dependencies: '@vitest/expect': 3.0.5 - '@vitest/mocker': 3.0.5(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(vite@6.2.2(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0)) + '@vitest/mocker': 3.0.5(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0)) '@vitest/pretty-format': 3.0.5 '@vitest/runner': 3.0.5 '@vitest/snapshot': 3.0.5 @@ -24228,13 +23895,13 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.2.2(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) - vite-node: 3.0.5(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) + vite-node: 3.0.5(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 20.17.17 - '@vitest/browser': 3.0.5(@types/node@20.17.17)(bufferutil@4.0.9)(playwright@1.50.1)(typescript@5.7.3)(utf-8-validate@6.0.5)(vite@5.4.14(@types/node@20.17.17)(sass-embedded@1.83.4)(sass@1.85.1))(vitest@3.0.5) + '@types/node': 22.13.10 + '@vitest/browser': 3.0.5(@types/node@22.13.10)(bufferutil@4.0.9)(playwright@1.50.1)(typescript@5.7.3)(utf-8-validate@6.0.5)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0))(vitest@3.0.5) happy-dom: 17.1.1 jsdom: 26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: @@ -24251,10 +23918,10 @@ snapshots: - tsx - yaml - vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0): + vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0): dependencies: '@vitest/expect': 3.0.5 - '@vitest/mocker': 3.0.5(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0)) + '@vitest/mocker': 3.0.5(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)) '@vitest/pretty-format': 3.0.5 '@vitest/runner': 3.0.5 '@vitest/snapshot': 3.0.5 @@ -24270,13 +23937,13 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) - vite-node: 3.0.5(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) + vite-node: 3.0.5(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 '@types/node': 22.13.10 - '@vitest/browser': 3.0.5(@types/node@22.13.10)(bufferutil@4.0.9)(playwright@1.50.1)(typescript@5.7.3)(utf-8-validate@6.0.5)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0))(vitest@3.0.5) + '@vitest/browser': 3.0.5(@types/node@22.13.10)(bufferutil@4.0.9)(playwright@1.50.1)(typescript@5.7.3)(utf-8-validate@6.0.5)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0))(vitest@3.0.5) happy-dom: 17.1.1 jsdom: 26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: @@ -24293,16 +23960,16 @@ snapshots: - tsx - yaml - vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(@vitest/browser@3.0.5)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0): + vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0): dependencies: - '@vitest/expect': 3.0.5 - '@vitest/mocker': 3.0.5(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)) - '@vitest/pretty-format': 3.0.5 - '@vitest/runner': 3.0.5 - '@vitest/snapshot': 3.0.5 - '@vitest/spy': 3.0.5 - '@vitest/utils': 3.0.5 - chai: 5.1.2 + '@vitest/expect': 3.0.7 + '@vitest/mocker': 3.0.7(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(vite@6.2.2(@types/node@20.14.8)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)) + '@vitest/pretty-format': 3.0.8 + '@vitest/runner': 3.0.7 + '@vitest/snapshot': 3.0.7 + '@vitest/spy': 3.0.7 + '@vitest/utils': 3.0.7 + chai: 5.2.0 debug: 4.4.0 expect-type: 1.1.0 magic-string: 0.30.17 @@ -24312,13 +23979,12 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) - vite-node: 3.0.5(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) + vite: 6.2.2(@types/node@20.14.8)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) + vite-node: 3.0.7(@types/node@20.14.8)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.13.10 - '@vitest/browser': 3.0.5(@types/node@22.13.10)(bufferutil@4.0.9)(playwright@1.50.1)(typescript@5.7.3)(utf-8-validate@6.0.5)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0))(vitest@3.0.5) + '@types/node': 20.14.8 happy-dom: 17.1.1 jsdom: 26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: @@ -24335,10 +24001,10 @@ snapshots: - tsx - yaml - vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0): + vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0): dependencies: '@vitest/expect': 3.0.7 - '@vitest/mocker': 3.0.7(msw@2.7.0(@types/node@20.14.8)(typescript@4.9.4))(vite@6.2.2(@types/node@20.14.8)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)) + '@vitest/mocker': 3.0.7(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(vite@6.2.2(@types/node@20.14.8)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)) '@vitest/pretty-format': 3.0.8 '@vitest/runner': 3.0.7 '@vitest/snapshot': 3.0.7 @@ -24376,10 +24042,10 @@ snapshots: - tsx - yaml - vitest@3.0.7(@types/debug@4.1.12)(@types/node@20.14.8)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0): + vitest@3.0.7(@types/debug@4.1.12)(@types/node@22.13.10)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0): dependencies: '@vitest/expect': 3.0.7 - '@vitest/mocker': 3.0.7(msw@2.7.0(@types/node@20.14.8)(typescript@5.7.3))(vite@6.2.2(@types/node@20.14.8)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)) + '@vitest/mocker': 3.0.7(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)) '@vitest/pretty-format': 3.0.8 '@vitest/runner': 3.0.7 '@vitest/snapshot': 3.0.7 @@ -24395,12 +24061,12 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.2.2(@types/node@20.14.8)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) - vite-node: 3.0.7(@types/node@20.14.8)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) + vite-node: 3.0.7(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 20.14.8 + '@types/node': 22.13.10 happy-dom: 17.1.1 jsdom: 26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: @@ -24417,15 +24083,15 @@ snapshots: - tsx - yaml - vitest@3.0.7(@types/debug@4.1.12)(@types/node@22.13.10)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0): + vitest@3.0.8(@types/debug@4.1.12)(@types/node@20.17.17)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0): dependencies: - '@vitest/expect': 3.0.7 - '@vitest/mocker': 3.0.7(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)) + '@vitest/expect': 3.0.8 + '@vitest/mocker': 3.0.8(msw@2.7.0(@types/node@20.17.17)(typescript@5.7.3))(vite@6.2.2(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0)) '@vitest/pretty-format': 3.0.8 - '@vitest/runner': 3.0.7 - '@vitest/snapshot': 3.0.7 - '@vitest/spy': 3.0.7 - '@vitest/utils': 3.0.7 + '@vitest/runner': 3.0.8 + '@vitest/snapshot': 3.0.8 + '@vitest/spy': 3.0.8 + '@vitest/utils': 3.0.8 chai: 5.2.0 debug: 4.4.0 expect-type: 1.1.0 @@ -24436,12 +24102,12 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) - vite-node: 3.0.7(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) + vite: 6.2.2(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) + vite-node: 3.0.8(@types/node@20.17.17)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.2)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.13.10 + '@types/node': 20.17.17 happy-dom: 17.1.1 jsdom: 26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: From f244901c03f0c0f51e738782ba16d3a1093d12c2 Mon Sep 17 00:00:00 2001 From: Charles Date: Tue, 18 Mar 2025 08:23:36 +0800 Subject: [PATCH 55/62] fix(app): electron build error (#199) --- apps/omega/electron.vite.config.ts | 16 +- apps/omega/forge.config.ts | 101 ++++++-- apps/omega/package.json | 45 +++- apps/omega/src/main/package.json | 25 -- apps/omega/src/renderer/package.json | 3 +- apps/omega/tsconfig.json | 5 +- .../mcp-servers/browser/package.json | 18 +- .../mcp-servers/browser/rslib.config.ts | 40 +++ .../mcp-servers/browser/{ => src}/index.ts | 0 .../mcp-servers/browser/{ => src}/server.ts | 0 .../mcp-servers/browser/tsconfig.json | 5 +- .../mcp-servers/commands/package.json | 16 +- .../mcp-servers/commands/rslib.config.ts | 40 +++ .../mcp-servers/commands/tsconfig.json | 3 +- .../mcp-servers/filesystem/package.json | 17 +- .../mcp-servers/filesystem/rslib.config.ts | 40 +++ .../mcp-servers/filesystem/{ => src}/index.ts | 0 .../filesystem/{ => src}/schema.ts | 0 .../filesystem/{ => src}/server.ts | 2 +- .../mcp-servers/filesystem/{ => src}/utils.ts | 2 +- .../mcp-servers/filesystem/tsconfig.json | 5 +- pnpm-lock.yaml | 229 +++++++++--------- 22 files changed, 391 insertions(+), 221 deletions(-) delete mode 100644 apps/omega/src/main/package.json create mode 100644 packages/agent-infra/mcp-servers/browser/rslib.config.ts rename packages/agent-infra/mcp-servers/browser/{ => src}/index.ts (100%) rename packages/agent-infra/mcp-servers/browser/{ => src}/server.ts (100%) create mode 100644 packages/agent-infra/mcp-servers/commands/rslib.config.ts create mode 100644 packages/agent-infra/mcp-servers/filesystem/rslib.config.ts rename packages/agent-infra/mcp-servers/filesystem/{ => src}/index.ts (100%) rename packages/agent-infra/mcp-servers/filesystem/{ => src}/schema.ts (100%) rename packages/agent-infra/mcp-servers/filesystem/{ => src}/server.ts (99%) rename packages/agent-infra/mcp-servers/filesystem/{ => src}/utils.ts (99%) diff --git a/apps/omega/electron.vite.config.ts b/apps/omega/electron.vite.config.ts index 2a4c3fe08..c999c14f1 100644 --- a/apps/omega/electron.vite.config.ts +++ b/apps/omega/electron.vite.config.ts @@ -3,32 +3,20 @@ import { defineConfig, externalizeDepsPlugin } from 'electron-vite'; import react from '@vitejs/plugin-react'; import tsconfigPaths from 'vite-tsconfig-paths'; -const workspaceDeps = ['@ui-tars/electron-ipc']; - export default defineConfig({ main: { root: 'src/main', build: { outDir: resolve(__dirname, './dist/main'), }, - plugins: [ - externalizeDepsPlugin({ - exclude: workspaceDeps, - }), - tsconfigPaths(), - ], + plugins: [externalizeDepsPlugin(), tsconfigPaths()], }, preload: { root: 'src/preload', build: { outDir: resolve(__dirname, './dist/preload'), }, - plugins: [ - externalizeDepsPlugin({ - exclude: workspaceDeps, - }), - tsconfigPaths(), - ], + plugins: [externalizeDepsPlugin(), tsconfigPaths()], }, renderer: { optimizeDeps: { diff --git a/apps/omega/forge.config.ts b/apps/omega/forge.config.ts index b9889ba93..53dc9ad82 100644 --- a/apps/omega/forge.config.ts +++ b/apps/omega/forge.config.ts @@ -1,5 +1,5 @@ -import { readdirSync } from 'node:fs'; -import { readdir } from 'node:fs/promises'; +import fs, { readdirSync } from 'node:fs'; +import { cp, readdir } from 'node:fs/promises'; import path, { resolve } from 'node:path'; import { MakerDMG } from '@electron-forge/maker-dmg'; import { MakerZIP } from '@electron-forge/maker-zip'; @@ -9,8 +9,27 @@ import type { ForgeConfig } from '@electron-forge/shared-types'; import { FuseV1Options, FuseVersion } from '@electron/fuses'; import setLanguages from 'electron-packager-languages'; import { rimraf, rimrafSync } from 'rimraf'; +import { + getModuleRoot, + getExternalPkgsDependencies, +} from '@common/electron-build'; +import pkg from './package.json'; + +const projectRoot = path.resolve(__dirname, '.'); + +const keepModules = new Set([ + ...Object.keys(pkg.dependencies), + '@mixmark-io/domino', +]); +const needSubDependencies = [...Object.values(keepModules)]; const keepLanguages = new Set(['en', 'en_GB', 'en-US', 'en_US']); +const ignorePattern = new RegExp( + `^/node_modules/(?!${[...keepModules].join('|')})`, +); + +console.log('keepModules', keepModules); +console.log('ignorePattern', ignorePattern); const enableOsxSign = process.env.APPLE_ID && @@ -48,24 +67,72 @@ async function cleanSources( } } - // Skip devDependencies node_modules in the app + // Keep only node_modules to be included in the app await Promise.all([ ...(await readdir(buildPath).then((items) => items .filter((item) => !appItems.has(item)) - .map((item) => rimraf.sync(path.join(buildPath, item))), + .map((item) => rimraf(path.join(buildPath, item))), + )), + ...(await readdir(path.join(buildPath, 'node_modules')).then((items) => + items + .filter((item) => !keepModules.has(item)) + .map((item) => rimraf(path.join(buildPath, 'node_modules', item))), )), - ...(await readdir(path.join(buildPath, 'node_modules')) - .then((items) => - items.map((item) => - rimraf.sync(path.join(buildPath, 'node_modules', item)), - ), - ) - .catch(() => { - return []; - })), ]); + await Promise.all( + Array.from(keepModules.values()).map((item) => { + // Check is exist + if (fs.existsSync(path.join(buildPath, 'node_modules', item))) { + // eslint-disable-next-line array-callback-return + return; + } + + try { + const moduleRoot = getModuleRoot(projectRoot, item); + + if (fs.existsSync(moduleRoot)) { + console.log('copy_current_node_modules', moduleRoot); + return cp(moduleRoot, path.join(buildPath, 'node_modules', item), { + recursive: true, + }); + } + } catch (error) { + console.error('copy_current_node_modules', error); + return; + } + + return; + }), + ); + + const subDependencies = await getExternalPkgsDependencies( + needSubDependencies, + projectRoot, + ); + await Promise.all( + Array.from(subDependencies.values()).map((subDependency) => { + if ( + fs.existsSync(path.join(buildPath, 'node_modules', subDependency.name)) + ) { + return; + } + + if (fs.existsSync(subDependency.path)) { + console.log('copy_current_node_modules', subDependency.path); + return cp( + subDependency.path, + path.join(buildPath, 'node_modules', subDependency.name), + { + recursive: true, + }, + ); + } + return; + }), + ); + callback(); } @@ -80,18 +147,18 @@ const noopAfterCopy = ( const config: ForgeConfig = { packagerConfig: { // appBundleId: 'com.bytedance.uitars', - name: 'Open Agent', + name: 'Agent TARS', icon: 'resources/icon', asar: true, - prune: true, - ignore: [/^\/node_modules\/$/, '.vite'], + ignore: [ignorePattern], + prune: false, afterCopy: [ cleanSources, process.platform !== 'win32' ? noopAfterCopy : setLanguages(Array.from(keepLanguages)), ], - executableName: 'Open-Agent', + executableName: 'Agent-TARS', ...(enableOsxSign ? { osxSign: { diff --git a/apps/omega/package.json b/apps/omega/package.json index 6629c7ab9..20c7931ad 100644 --- a/apps/omega/package.json +++ b/apps/omega/package.json @@ -1,5 +1,5 @@ { - "name": "open-agent-app", + "name": "agent-tars-app", "version": "1.0.0", "description": "An Electron application with React and TypeScript", "main": "./dist/main/index.js", @@ -10,10 +10,11 @@ "typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false", "typecheck:web": "tsc --noEmit -p tsconfig.web.json --composite false", "typecheck": "npm run typecheck:node && npm run typecheck:web", + "asar:analyze": "asar extract out/Agent\\ TARS-darwin-arm64/Agent\\ TARS.app/Contents/Resources/app.asar ./dist/asar", "start": "electron-vite preview", "dev": "electron-vite dev", "package": "electron-forge package", - "build": "npm run typecheck && npm run build:reporter && electron-vite build && DEBUG=1 electron-forge make", + "build": "npm run typecheck && npm run build:reporter && electron-vite build && electron-forge make", "test": "vitest run", "publish:mac": "electron-vite build && electron-forge publish --arch=universal --platform=darwin", "build:reporter": "vite build" @@ -40,18 +41,38 @@ "@agent-infra/mcp-server-browser": "workspace:*" }, "devDependencies": { - "@electron-forge/cli": "7.7.0", - "@electron-forge/maker-deb": "7.7.0", - "@electron-forge/maker-dmg": "7.7.0", - "@electron-forge/maker-rpm": "7.7.0", - "@electron-forge/maker-squirrel": "7.7.0", - "@electron-forge/maker-zip": "7.7.0", - "@electron-forge/plugin-auto-unpack-natives": "7.7.0", - "@electron-forge/plugin-fuses": "7.7.0", - "@electron-forge/plugin-vite": "7.7.0", - "@electron-forge/publisher-github": "7.7.0", + "@modelcontextprotocol/sdk": "^1.7.0", + "@electron-toolkit/preload": "^3.0.1", + "@electron-toolkit/utils": "^4.0.0", + "@electron/asar": "^3.2.18", + "update-electron-app": "^3.1.0", + "openai": "^4.86.2", + "dotenv": "16.4.7", + "@agent-infra/shared": "workspace:*", + "@agent-infra/mcp-client": "workspace:*", + "@agent-infra/search": "workspace:*", + "ws": "8.18.1", + "utf-8-validate": "6.0.5", + "bufferutil": "4.0.9", + "fs-extra": "11.3.0", + "@anthropic-ai/sdk": "0.39.0", + "@google/generative-ai": "0.24.0", + "@mistralai/mistralai": "1.5.1", + "@ui-tars/electron-ipc": "workspace:*", + "@common/electron-build": "workspace:*", + "@electron-forge/cli": "^7.7.0", + "@electron-forge/maker-deb": "^7.7.0", + "@electron-forge/maker-dmg": "^7.7.0", + "@electron-forge/maker-rpm": "^7.7.0", + "@electron-forge/maker-squirrel": "^7.7.0", + "@electron-forge/maker-zip": "^7.7.0", + "@electron-forge/plugin-auto-unpack-natives": "^7.7.0", + "@electron-forge/plugin-fuses": "^7.7.0", + "@electron-forge/plugin-vite": "^7.7.0", + "@electron-forge/publisher-github": "^7.7.0", "@electron-toolkit/tsconfig": "^1.0.1", "@types/node": "^22.13.4", + "@types/fs-extra": "11.0.4", "@vitejs/plugin-react": "^4.3.4", "autoprefixer": "10.4.20", "electron": "34.1.1", diff --git a/apps/omega/src/main/package.json b/apps/omega/src/main/package.json deleted file mode 100644 index 80ba3d13f..000000000 --- a/apps/omega/src/main/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "open-agent-main", - "dependencies": { - "@electron-toolkit/preload": "^3.0.1", - "@electron-toolkit/utils": "^4.0.0", - "update-electron-app": "^3.1.0", - "openai": "^4.86.2", - "dotenv": "16.4.7", - "@agent-infra/shared": "workspace:*", - "@agent-infra/mcp-client": "workspace:*", - "@agent-infra/search": "workspace:*", - "ws": "8.18.1", - "utf-8-validate": "6.0.5", - "bufferutil": "4.0.9", - "fs-extra": "11.3.0", - "@anthropic-ai/sdk": "0.39.0", - "@google/generative-ai": "0.24.0", - "@mistralai/mistralai": "1.5.1", - "@ui-tars/electron-ipc": "workspace:*" - }, - "devDependencies": { - "electron": "34.1.1", - "@types/fs-extra": "11.0.4" - } -} diff --git a/apps/omega/src/renderer/package.json b/apps/omega/src/renderer/package.json index 8cdec88ba..e0d6c0a9d 100644 --- a/apps/omega/src/renderer/package.json +++ b/apps/omega/src/renderer/package.json @@ -1,7 +1,7 @@ { "name": "open-agent-renderer", "dependencies": { - "@ui-tars/electron-ipc": "^1.2.3", + "@ui-tars/electron-ipc": "workspace:*", "react": "^18.3.1", "react-dom": "^18.3.1", "@nextui-org/react": "2.4.8", @@ -40,6 +40,7 @@ "path-browserify": "1.0.1" }, "devDependencies": { + "@modelcontextprotocol/sdk": "^1.7.0", "typescript": "^5.7.3", "@types/react": "^18.3.18", "@types/react-dom": "^18.3.5", diff --git a/apps/omega/tsconfig.json b/apps/omega/tsconfig.json index f2cb6f403..d5b8e7465 100644 --- a/apps/omega/tsconfig.json +++ b/apps/omega/tsconfig.json @@ -2,10 +2,11 @@ "files": [], "references": [ { "path": "./tsconfig.node.json" }, - { "path": "./tsconfig.web.json" }, + { "path": "./tsconfig.web.json" } ], "compilerOptions": { + "target": "ES2020", "resolveJsonModule": true, - "esModuleInterop": true, + "esModuleInterop": true } } diff --git a/packages/agent-infra/mcp-servers/browser/package.json b/packages/agent-infra/mcp-servers/browser/package.json index 6de1e272b..eb039ce8c 100644 --- a/packages/agent-infra/mcp-servers/browser/package.json +++ b/packages/agent-infra/mcp-servers/browser/package.json @@ -7,29 +7,31 @@ "bugs": "https://github.com/modelcontextprotocol/servers/issues", "type": "module", "bin": { - "mcp-server-browser": "dist/index.js" + "mcp-server-browser": "dist/index.cjs" }, - "main": "dist/server.js", + "main": "dist/server.cjs", "module": "dist/server.js", + "types": "dist/server.d.ts", "files": [ "dist" ], "scripts": { - "build": "rm -rf dist && tsc && shx chmod +x dist/*.js", + "build": "rm -rf dist && rslib build && shx chmod +x dist/*.{js,cjs}", "dev": "npx -y @modelcontextprotocol/inspector tsx index.ts", "prepare": "npm run build", - "watch": "tsc --watch" + "watch": "rslib build --watch" }, "dependencies": { - "@modelcontextprotocol/sdk": "^1.6.1", + "@modelcontextprotocol/sdk": "^1.6.1" + }, + "devDependencies": { + "@rslib/core": "0.5.3", "turndown": "^7.2.0", "turndown-plugin-gfm": "^1.0.2", "@agent-infra/browser": "workspace:*", "@agent-infra/browser-use": "workspace:*", "puppeteer-core": "^24.1.1", - "zod-to-json-schema": "^3.23.5" - }, - "devDependencies": { + "zod-to-json-schema": "^3.23.5", "zod": "^3.23.8", "tsx": "^4.19.3", "vitest": "^3.0.7", diff --git a/packages/agent-infra/mcp-servers/browser/rslib.config.ts b/packages/agent-infra/mcp-servers/browser/rslib.config.ts new file mode 100644 index 000000000..78521f791 --- /dev/null +++ b/packages/agent-infra/mcp-servers/browser/rslib.config.ts @@ -0,0 +1,40 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { defineConfig } from '@rslib/core'; + +const BANNER = `/** +* Copyright (c) 2025 Bytedance, Inc. and its affiliates. +* SPDX-License-Identifier: Apache-2.0 +*/`; + +export default defineConfig({ + source: { + entry: { + index: ['src/index.ts'], + server: ['src/server.ts'], + }, + }, + lib: [ + { + format: 'esm', + syntax: 'es2021', + bundle: true, + dts: true, + banner: { js: BANNER }, + }, + { + format: 'cjs', + syntax: 'es2021', + bundle: true, + dts: true, + banner: { js: BANNER }, + }, + ], + output: { + target: 'node', + cleanDistPath: true, + sourceMap: false, + }, +}); diff --git a/packages/agent-infra/mcp-servers/browser/index.ts b/packages/agent-infra/mcp-servers/browser/src/index.ts similarity index 100% rename from packages/agent-infra/mcp-servers/browser/index.ts rename to packages/agent-infra/mcp-servers/browser/src/index.ts diff --git a/packages/agent-infra/mcp-servers/browser/server.ts b/packages/agent-infra/mcp-servers/browser/src/server.ts similarity index 100% rename from packages/agent-infra/mcp-servers/browser/server.ts rename to packages/agent-infra/mcp-servers/browser/src/server.ts diff --git a/packages/agent-infra/mcp-servers/browser/tsconfig.json b/packages/agent-infra/mcp-servers/browser/tsconfig.json index 22643d8c3..364085fbf 100644 --- a/packages/agent-infra/mcp-servers/browser/tsconfig.json +++ b/packages/agent-infra/mcp-servers/browser/tsconfig.json @@ -7,11 +7,10 @@ "forceConsistentCasingInFileNames": true, "resolveJsonModule": true, "outDir": "./dist", - "rootDir": ".", "declaration": true, "moduleResolution": "NodeNext", "module": "NodeNext" }, - "include": ["./**/*.ts"], - "exclude": ["node_modules"] + "include": ["src/**/*.ts"], + "exclude": ["node_modules", "dist"] } diff --git a/packages/agent-infra/mcp-servers/commands/package.json b/packages/agent-infra/mcp-servers/commands/package.json index bb0ceb622..8fa13cdb7 100644 --- a/packages/agent-infra/mcp-servers/commands/package.json +++ b/packages/agent-infra/mcp-servers/commands/package.json @@ -3,20 +3,20 @@ "version": "0.0.1", "description": "An MCP server to run arbitrary commands", "type": "module", - "main": "./build/server.js", - "module": "./build/server.js", - "types": "./build/server.d.ts", + "main": "./dist/server.cjs", + "module": "./dist/server.js", + "types": "./dist/server.d.ts", "bin": { - "mcp-server-commands": "./build/index.js" + "mcp-server-commands": "./dist/index.cjs" }, "files": [ - "build" + "dist" ], "scripts": { "clean": "rm -rf build", - "build": "rm -rf build && tsc && node -e \"require('fs').chmodSync('build/index.js', '755')\"", + "build": "rm -rf build && rslib build && shx chmod +x dist/*.{js,cjs}", "prepare": "npm run build", - "watch": "npm run build && tsc --watch", + "watch": "npm run build && rslib build --watch", "dev": "npx -y @modelcontextprotocol/inspector tsx src/index.ts", "inspector": "npx @modelcontextprotocol/inspector build/index.js", "test": "vitest run", @@ -28,7 +28,9 @@ }, "devDependencies": { "tsx": "^4.19.3", + "@rslib/core": "0.5.3", "zod": "^3.23.8", + "shx": "^0.3.4", "vitest": "^3.0.7", "@types/node": "^20.11.24", "typescript": "^5.7.3" diff --git a/packages/agent-infra/mcp-servers/commands/rslib.config.ts b/packages/agent-infra/mcp-servers/commands/rslib.config.ts new file mode 100644 index 000000000..78521f791 --- /dev/null +++ b/packages/agent-infra/mcp-servers/commands/rslib.config.ts @@ -0,0 +1,40 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { defineConfig } from '@rslib/core'; + +const BANNER = `/** +* Copyright (c) 2025 Bytedance, Inc. and its affiliates. +* SPDX-License-Identifier: Apache-2.0 +*/`; + +export default defineConfig({ + source: { + entry: { + index: ['src/index.ts'], + server: ['src/server.ts'], + }, + }, + lib: [ + { + format: 'esm', + syntax: 'es2021', + bundle: true, + dts: true, + banner: { js: BANNER }, + }, + { + format: 'cjs', + syntax: 'es2021', + bundle: true, + dts: true, + banner: { js: BANNER }, + }, + ], + output: { + target: 'node', + cleanDistPath: true, + sourceMap: false, + }, +}); diff --git a/packages/agent-infra/mcp-servers/commands/tsconfig.json b/packages/agent-infra/mcp-servers/commands/tsconfig.json index 560d8ef30..f8fcbffa2 100644 --- a/packages/agent-infra/mcp-servers/commands/tsconfig.json +++ b/packages/agent-infra/mcp-servers/commands/tsconfig.json @@ -4,7 +4,6 @@ "module": "Node16", "moduleResolution": "Node16", "outDir": "./build", - "rootDir": "./src", "declaration": true, "strict": true, "esModuleInterop": true, @@ -12,5 +11,5 @@ "forceConsistentCasingInFileNames": true }, "include": ["src/**/*"], - "exclude": ["node_modules"] + "exclude": ["node_modules", "dist"] } diff --git a/packages/agent-infra/mcp-servers/filesystem/package.json b/packages/agent-infra/mcp-servers/filesystem/package.json index 4c2691432..0c279fe37 100644 --- a/packages/agent-infra/mcp-servers/filesystem/package.json +++ b/packages/agent-infra/mcp-servers/filesystem/package.json @@ -4,34 +4,35 @@ "description": "MCP server for filesystem access", "license": "MIT", "type": "module", - "main": "./dist/server.js", + "main": "./dist/server.cjs", "module": "./dist/server.js", "types": "./dist/server.d.ts", "bin": { - "mcp-server-filesystem": "dist/index.js" + "mcp-server-filesystem": "dist/index.cjs" }, "files": [ "dist" ], "scripts": { - "build": "rm -rf dist && tsc && shx chmod +x dist/*.js", + "build": "rm -rf dist && rslib build && shx chmod +x dist/*.js", "dev": "npx -y @modelcontextprotocol/inspector tsx index.ts", "prepare": "npm run build", - "watch": "tsc --watch" + "watch": "rslib build --watch" }, "dependencies": { - "@modelcontextprotocol/sdk": "^1.6.1", + "@modelcontextprotocol/sdk": "^1.6.1" + }, + "devDependencies": { "diff": "^5.1.0", "glob": "^10.3.10", "minimatch": "^10.0.1", - "zod-to-json-schema": "^3.23.5" - }, - "devDependencies": { + "zod-to-json-schema": "^3.23.5", "zod": "^3.23.8", "tsx": "^4.19.3", "vitest": "^3.0.7", "@types/diff": "^5.0.9", "@types/minimatch": "^5.1.2", + "@rslib/core": "0.5.3", "@types/node": "^22", "shx": "^0.3.4", "typescript": "^5.7.3" diff --git a/packages/agent-infra/mcp-servers/filesystem/rslib.config.ts b/packages/agent-infra/mcp-servers/filesystem/rslib.config.ts new file mode 100644 index 000000000..78521f791 --- /dev/null +++ b/packages/agent-infra/mcp-servers/filesystem/rslib.config.ts @@ -0,0 +1,40 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ +import { defineConfig } from '@rslib/core'; + +const BANNER = `/** +* Copyright (c) 2025 Bytedance, Inc. and its affiliates. +* SPDX-License-Identifier: Apache-2.0 +*/`; + +export default defineConfig({ + source: { + entry: { + index: ['src/index.ts'], + server: ['src/server.ts'], + }, + }, + lib: [ + { + format: 'esm', + syntax: 'es2021', + bundle: true, + dts: true, + banner: { js: BANNER }, + }, + { + format: 'cjs', + syntax: 'es2021', + bundle: true, + dts: true, + banner: { js: BANNER }, + }, + ], + output: { + target: 'node', + cleanDistPath: true, + sourceMap: false, + }, +}); diff --git a/packages/agent-infra/mcp-servers/filesystem/index.ts b/packages/agent-infra/mcp-servers/filesystem/src/index.ts similarity index 100% rename from packages/agent-infra/mcp-servers/filesystem/index.ts rename to packages/agent-infra/mcp-servers/filesystem/src/index.ts diff --git a/packages/agent-infra/mcp-servers/filesystem/schema.ts b/packages/agent-infra/mcp-servers/filesystem/src/schema.ts similarity index 100% rename from packages/agent-infra/mcp-servers/filesystem/schema.ts rename to packages/agent-infra/mcp-servers/filesystem/src/schema.ts diff --git a/packages/agent-infra/mcp-servers/filesystem/server.ts b/packages/agent-infra/mcp-servers/filesystem/src/server.ts similarity index 99% rename from packages/agent-infra/mcp-servers/filesystem/server.ts rename to packages/agent-infra/mcp-servers/filesystem/src/server.ts index 1424d7357..3962f6c8f 100644 --- a/packages/agent-infra/mcp-servers/filesystem/server.ts +++ b/packages/agent-infra/mcp-servers/filesystem/src/server.ts @@ -8,7 +8,7 @@ */ import { Client } from '@modelcontextprotocol/sdk/client/index.js'; import { z } from 'zod'; -import fs from 'fs/promises'; +import fs from 'node:fs/promises'; import fsSync from 'fs'; import path from 'path'; import { minimatch } from 'minimatch'; diff --git a/packages/agent-infra/mcp-servers/filesystem/utils.ts b/packages/agent-infra/mcp-servers/filesystem/src/utils.ts similarity index 99% rename from packages/agent-infra/mcp-servers/filesystem/utils.ts rename to packages/agent-infra/mcp-servers/filesystem/src/utils.ts index f05a92fa1..bed262e58 100644 --- a/packages/agent-infra/mcp-servers/filesystem/utils.ts +++ b/packages/agent-infra/mcp-servers/filesystem/src/utils.ts @@ -8,7 +8,7 @@ */ import path from 'path'; import os from 'os'; -import fs from 'fs/promises'; +import fs from 'node:fs/promises'; import { createTwoFilesPatch } from 'diff'; // Normalize all paths consistently diff --git a/packages/agent-infra/mcp-servers/filesystem/tsconfig.json b/packages/agent-infra/mcp-servers/filesystem/tsconfig.json index 22643d8c3..256689b63 100644 --- a/packages/agent-infra/mcp-servers/filesystem/tsconfig.json +++ b/packages/agent-infra/mcp-servers/filesystem/tsconfig.json @@ -7,11 +7,10 @@ "forceConsistentCasingInFileNames": true, "resolveJsonModule": true, "outDir": "./dist", - "rootDir": ".", "declaration": true, "moduleResolution": "NodeNext", "module": "NodeNext" }, - "include": ["./**/*.ts"], - "exclude": ["node_modules"] + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1072997a9..289554cbd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -105,48 +105,93 @@ importers: specifier: '*' version: 4.19.3 devDependencies: + '@agent-infra/mcp-client': + specifier: workspace:* + version: link:../../packages/agent-infra/mcp-client + '@agent-infra/search': + specifier: workspace:* + version: link:../../packages/agent-infra/search/search + '@agent-infra/shared': + specifier: workspace:* + version: link:../../packages/agent-infra/shared + '@anthropic-ai/sdk': + specifier: 0.39.0 + version: 0.39.0(encoding@0.1.13) + '@common/electron-build': + specifier: workspace:* + version: link:../../packages/common/electron-build '@electron-forge/cli': - specifier: 7.7.0 + specifier: ^7.7.0 version: 7.7.0(encoding@0.1.13) '@electron-forge/maker-deb': - specifier: 7.7.0 + specifier: ^7.7.0 version: 7.7.0 '@electron-forge/maker-dmg': - specifier: 7.7.0 + specifier: ^7.7.0 version: 7.7.0 '@electron-forge/maker-rpm': - specifier: 7.7.0 + specifier: ^7.7.0 version: 7.7.0 '@electron-forge/maker-squirrel': - specifier: 7.7.0 + specifier: ^7.7.0 version: 7.7.0 '@electron-forge/maker-zip': - specifier: 7.7.0 + specifier: ^7.7.0 version: 7.7.0 '@electron-forge/plugin-auto-unpack-natives': - specifier: 7.7.0 + specifier: ^7.7.0 version: 7.7.0 '@electron-forge/plugin-fuses': - specifier: 7.7.0 + specifier: ^7.7.0 version: 7.7.0(@electron/fuses@1.8.0) '@electron-forge/plugin-vite': - specifier: 7.7.0 + specifier: ^7.7.0 version: 7.7.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) '@electron-forge/publisher-github': - specifier: 7.7.0 + specifier: ^7.7.0 version: 7.7.0(encoding@0.1.13) + '@electron-toolkit/preload': + specifier: ^3.0.1 + version: 3.0.1(electron@34.1.1) '@electron-toolkit/tsconfig': specifier: ^1.0.1 version: 1.0.1(@types/node@22.13.10) + '@electron-toolkit/utils': + specifier: ^4.0.0 + version: 4.0.0(electron@34.1.1) + '@electron/asar': + specifier: ^3.2.18 + version: 3.3.1 + '@google/generative-ai': + specifier: 0.24.0 + version: 0.24.0 + '@mistralai/mistralai': + specifier: 1.5.1 + version: 1.5.1(zod@3.24.2) + '@modelcontextprotocol/sdk': + specifier: ^1.7.0 + version: 1.7.0 + '@types/fs-extra': + specifier: 11.0.4 + version: 11.0.4 '@types/node': specifier: ^22.13.4 version: 22.13.10 + '@ui-tars/electron-ipc': + specifier: workspace:* + version: link:../../packages/ui-tars/electron-ipc '@vitejs/plugin-react': specifier: ^4.3.4 version: 4.3.4(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)) autoprefixer: specifier: 10.4.20 version: 10.4.20(postcss@8.5.3) + bufferutil: + specifier: 4.0.9 + version: 4.0.9 + dotenv: + specifier: 16.4.7 + version: 16.4.7 electron: specifier: 34.1.1 version: 34.1.1 @@ -156,9 +201,15 @@ importers: electron-vite: specifier: ^3.0.0 version: 3.0.0(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0)) + fs-extra: + specifier: 11.3.0 + version: 11.3.0 jsdom: specifier: ^26.0.0 version: 26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) + openai: + specifier: ^4.86.2 + version: 4.87.3(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.2) sass: specifier: 1.85.1 version: 1.85.1 @@ -168,6 +219,12 @@ importers: typescript: specifier: ^5.7.3 version: 5.7.3 + update-electron-app: + specifier: ^3.1.0 + version: 3.1.1 + utf-8-validate: + specifier: 6.0.5 + version: 6.0.5 vite: specifier: ^6.1.0 version: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) @@ -180,64 +237,9 @@ importers: vitest: specifier: ^3.0.8 version: 3.0.8(@types/debug@4.1.12)(@types/node@22.13.10)(happy-dom@17.1.1)(jiti@2.4.2)(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.0(@types/node@22.13.10)(typescript@5.7.3))(sass-embedded@1.83.4)(sass@1.85.1)(tsx@4.19.3)(yaml@2.7.0) - - apps/omega/src/main: - dependencies: - '@agent-infra/mcp-client': - specifier: workspace:* - version: link:../../../../packages/agent-infra/mcp-client - '@agent-infra/search': - specifier: workspace:* - version: link:../../../../packages/agent-infra/search/search - '@agent-infra/shared': - specifier: workspace:* - version: link:../../../../packages/agent-infra/shared - '@anthropic-ai/sdk': - specifier: 0.39.0 - version: 0.39.0(encoding@0.1.13) - '@electron-toolkit/preload': - specifier: ^3.0.1 - version: 3.0.1(electron@34.1.1) - '@electron-toolkit/utils': - specifier: ^4.0.0 - version: 4.0.0(electron@34.1.1) - '@google/generative-ai': - specifier: 0.24.0 - version: 0.24.0 - '@mistralai/mistralai': - specifier: 1.5.1 - version: 1.5.1(zod@3.24.2) - '@ui-tars/electron-ipc': - specifier: workspace:* - version: link:../../../../packages/ui-tars/electron-ipc - bufferutil: - specifier: 4.0.9 - version: 4.0.9 - dotenv: - specifier: 16.4.7 - version: 16.4.7 - fs-extra: - specifier: 11.3.0 - version: 11.3.0 - openai: - specifier: ^4.86.2 - version: 4.87.3(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.2) - update-electron-app: - specifier: ^3.1.0 - version: 3.1.1 - utf-8-validate: - specifier: 6.0.5 - version: 6.0.5 ws: specifier: 8.18.1 version: 8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) - devDependencies: - '@types/fs-extra': - specifier: 11.0.4 - version: 11.0.4 - electron: - specifier: 34.1.1 - version: 34.1.1 apps/omega/src/renderer: dependencies: @@ -257,8 +259,8 @@ importers: specifier: 2.2.11 version: 2.2.11(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) '@ui-tars/electron-ipc': - specifier: ^1.2.3 - version: 1.2.3(electron@34.3.3) + specifier: workspace:* + version: link:../../../../packages/ui-tars/electron-ipc classnames: specifier: 2.5.1 version: 2.5.1 @@ -356,6 +358,9 @@ importers: '@agent-infra/search': specifier: workspace:* version: link:../../../../packages/agent-infra/search/search + '@modelcontextprotocol/sdk': + specifier: ^1.7.0 + version: 1.7.0 '@tailwindcss/aspect-ratio': specifier: 0.4.2 version: 0.4.2(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.13.10)(typescript@5.7.3))) @@ -766,28 +771,19 @@ importers: packages/agent-infra/mcp-servers/browser: dependencies: + '@modelcontextprotocol/sdk': + specifier: ^1.6.1 + version: 1.7.0 + devDependencies: '@agent-infra/browser': specifier: workspace:* version: link:../../browser '@agent-infra/browser-use': specifier: workspace:* version: link:../../browser-use - '@modelcontextprotocol/sdk': - specifier: ^1.6.1 - version: 1.7.0 - puppeteer-core: - specifier: ^24.1.1 - version: 24.1.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) - turndown: - specifier: ^7.2.0 - version: 7.2.0 - turndown-plugin-gfm: - specifier: ^1.0.2 - version: 1.0.2 - zod-to-json-schema: - specifier: ^3.23.5 - version: 3.24.1(zod@3.24.2) - devDependencies: + '@rslib/core': + specifier: 0.5.3 + version: 0.5.3(typescript@5.7.3) '@types/diff': specifier: ^5.0.9 version: 5.2.3 @@ -797,12 +793,21 @@ importers: '@types/node': specifier: ^22 version: 22.13.10 + puppeteer-core: + specifier: ^24.1.1 + version: 24.1.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) shx: specifier: ^0.3.4 version: 0.3.4 tsx: specifier: ^4.19.3 version: 4.19.3 + turndown: + specifier: ^7.2.0 + version: 7.2.0 + turndown-plugin-gfm: + specifier: ^1.0.2 + version: 1.0.2 typescript: specifier: ^5.7.3 version: 5.7.3 @@ -812,6 +817,9 @@ importers: zod: specifier: ^3.23.8 version: 3.24.2 + zod-to-json-schema: + specifier: ^3.23.5 + version: 3.24.1(zod@3.24.2) packages/agent-infra/mcp-servers/commands: dependencies: @@ -819,9 +827,15 @@ importers: specifier: ^1.6.1 version: 1.7.0 devDependencies: + '@rslib/core': + specifier: 0.5.3 + version: 0.5.3(typescript@5.7.3) '@types/node': specifier: ^20.11.24 version: 20.14.8 + shx: + specifier: ^0.3.4 + version: 0.3.4 tsx: specifier: ^4.19.3 version: 4.19.3 @@ -840,19 +854,10 @@ importers: '@modelcontextprotocol/sdk': specifier: ^1.6.1 version: 1.7.0 - diff: - specifier: ^5.1.0 - version: 5.2.0 - glob: - specifier: ^10.3.10 - version: 10.4.5 - minimatch: - specifier: ^10.0.1 - version: 10.0.1 - zod-to-json-schema: - specifier: ^3.23.5 - version: 3.24.1(zod@3.24.2) devDependencies: + '@rslib/core': + specifier: 0.5.3 + version: 0.5.3(typescript@5.7.3) '@types/diff': specifier: ^5.0.9 version: 5.2.3 @@ -862,6 +867,15 @@ importers: '@types/node': specifier: ^22 version: 22.13.10 + diff: + specifier: ^5.1.0 + version: 5.2.0 + glob: + specifier: ^10.3.10 + version: 10.4.5 + minimatch: + specifier: ^10.0.1 + version: 10.0.1 shx: specifier: ^0.3.4 version: 0.3.4 @@ -877,6 +891,9 @@ importers: zod: specifier: ^3.23.8 version: 3.24.2 + zod-to-json-schema: + specifier: ^3.23.5 + version: 3.24.1(zod@3.24.2) packages/agent-infra/search/bing-search: dependencies: @@ -5283,11 +5300,6 @@ packages: resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} engines: {node: ^18.18.0 || >=20.0.0} - '@ui-tars/electron-ipc@1.2.3': - resolution: {integrity: sha512-QRuCntx8TZHIwjntnpBwNoyN5NsAwdyKKyxQYGxpXZrQx2Xne2ORM+4XnbMGBG53xePCTmj1a32T5MQOShhY8g==} - peerDependencies: - electron: '>=26.0.0' - '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -6543,11 +6555,6 @@ packages: engines: {node: '>= 12.20.55'} hasBin: true - electron@34.3.3: - resolution: {integrity: sha512-7m1FiO1mwc1K/UqqnnkG7Ik/kAngDzmLfHwcl+xaWgCQ+Sts9rlEqzOh6g1GHhDqebrbs4bO/aU+NDi32fCciQ==} - engines: {node: '>= 12.20.55'} - hasBin: true - emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -17053,10 +17060,6 @@ snapshots: '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 - '@ui-tars/electron-ipc@1.2.3(electron@34.3.3)': - dependencies: - electron: 34.3.3 - '@ungap/structured-clone@1.3.0': {} '@use-it/event-listener@0.1.7(react@18.3.1)': @@ -18579,14 +18582,6 @@ snapshots: transitivePeerDependencies: - supports-color - electron@34.3.3: - dependencies: - '@electron/get': 2.0.3 - '@types/node': 20.14.8 - extract-zip: 2.0.1 - transitivePeerDependencies: - - supports-color - emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} From a84649b14fd2230f459522d08825583233f6db21 Mon Sep 17 00:00:00 2001 From: skychx Date: Tue, 18 Mar 2025 08:24:14 +0800 Subject: [PATCH 56/62] fix: clear the canvas display when deleting the history records (#197) --- .../src/components/CanvasPanel/EventPlayer/PlayerControls.tsx | 4 ++++ .../renderer/src/components/CanvasPanel/EventPlayer/index.tsx | 4 +++- apps/omega/src/renderer/src/components/ChatUI/index.tsx | 3 +++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/PlayerControls.tsx b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/PlayerControls.tsx index ad19a8698..34cd96d3b 100644 --- a/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/PlayerControls.tsx +++ b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/PlayerControls.tsx @@ -44,6 +44,10 @@ export function PlayerControls({ setHoverTime(timestamp); }; + if (startTime === 0 && endTime === 0) { + return null; + } + return (
    diff --git a/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/index.tsx b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/index.tsx index 075e484ce..c8f1b3ad9 100644 --- a/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/index.tsx +++ b/apps/omega/src/renderer/src/components/CanvasPanel/EventPlayer/index.tsx @@ -51,7 +51,9 @@ export function EventPlayer() { }, [events]); const timeRange = useMemo(() => { - if (toolEvents.length === 0) return { start: Date.now(), end: Date.now() }; + if (toolEvents.length === 0) { + return { start: 0, end: 0 }; + } return { start: toolEvents[0].timestamp, end: toolEvents[toolEvents.length - 1].timestamp, diff --git a/apps/omega/src/renderer/src/components/ChatUI/index.tsx b/apps/omega/src/renderer/src/components/ChatUI/index.tsx index 304c373be..3947a8c70 100644 --- a/apps/omega/src/renderer/src/components/ChatUI/index.tsx +++ b/apps/omega/src/renderer/src/components/ChatUI/index.tsx @@ -116,6 +116,9 @@ export function OpenAgentChatUI() { }); } }} + onClearConversationHistory={() => { + setEvents([]); + }} slots={{ beforeMessageList: , beforeInputContainer: , From ba3555087965bc15ec29d2249bb47df01f0cb736 Mon Sep 17 00:00:00 2001 From: skychx Date: Tue, 18 Mar 2025 14:27:38 +0800 Subject: [PATCH 57/62] fix: the replay page supports pause and resume (#198) --- .../ChatUI/BeforeInputContainer.tsx | 3 +- .../renderer/src/components/ChatUI/Replay.tsx | 201 ++++++++++-------- 2 files changed, 120 insertions(+), 84 deletions(-) diff --git a/apps/omega/src/renderer/src/components/ChatUI/BeforeInputContainer.tsx b/apps/omega/src/renderer/src/components/ChatUI/BeforeInputContainer.tsx index 4c79488de..9532c4c9b 100644 --- a/apps/omega/src/renderer/src/components/ChatUI/BeforeInputContainer.tsx +++ b/apps/omega/src/renderer/src/components/ChatUI/BeforeInputContainer.tsx @@ -1,6 +1,7 @@ import { useAppChat } from '@renderer/hooks/useAppChat'; import { UserInteruptArea } from './UserInteruptArea'; import { useThemeMode } from '@renderer/hooks/useThemeMode'; +import { isReportHtmlMode } from '@renderer/constants'; import { PlanTaskStatus } from './PlanTaskStatus'; import { Replay } from './Replay'; // import { PlanTaskStatus } from './PlanTaskStatus'; @@ -22,7 +23,7 @@ export function BeforeInputContainer() {
    ) : null} - {!messageSending ? : null} + {isReportHtmlMode ? : null}
    ); } diff --git a/apps/omega/src/renderer/src/components/ChatUI/Replay.tsx b/apps/omega/src/renderer/src/components/ChatUI/Replay.tsx index 748eb982d..f4173f8fd 100644 --- a/apps/omega/src/renderer/src/components/ChatUI/Replay.tsx +++ b/apps/omega/src/renderer/src/components/ChatUI/Replay.tsx @@ -3,17 +3,50 @@ import { currentEventIdAtom, eventsAtom } from '@renderer/state/chat'; import { MessageItem, MessageType } from '@renderer/type/chatMessage'; import { EventItem, EventType } from '@renderer/type/event'; import { ChatMessageUtil } from '@renderer/utils/ChatMessageUtils'; -import { useAtom } from 'jotai'; +import { atom, useAtom } from 'jotai'; import { useState, useEffect, useRef } from 'react'; -import { FiPlay, FiSquare } from 'react-icons/fi'; +import { FiRotateCw, FiPause, FiPlay } from 'react-icons/fi'; + +type ButtonState = 'replay' | 'pause' | 'continue'; + +interface ButtonConfig { + icon: React.ReactElement; + label: string; + style: string; +} + +const BUTTON_CONFIGS: Record = { + replay: { + icon: , + label: 'Replay', + style: 'bg-blue-500 hover:bg-blue-600 text-white', + }, + pause: { + icon: , + label: 'Pause', + style: 'bg-red-500 hover:bg-red-600 text-white', + }, + continue: { + icon: , + label: 'Continue', + style: 'bg-blue-500 hover:bg-blue-600 text-white', + }, +}; + +const replayAllMessages = atom([]); export function Replay() { + const [allMessages, setAllMessages] = useAtom(replayAllMessages); const [, setEvents] = useAtom(eventsAtom); const [, setEventId] = useAtom(currentEventIdAtom); const { addMessage, updateMessage, setMessages, messageEndRef, messages } = useAppChat(); - const [isPlaying, setIsPlaying] = useState(false); const timerRef = useRef(); + const [buttonState, setButtonState] = useState('replay'); + const playbackRef = useRef<{ + currentIndex: number; + eventIndex: number; + }>({ currentIndex: 0, eventIndex: 0 }); const clearPlayTimer = () => { if (timerRef.current) { @@ -26,100 +59,102 @@ export function Replay() { return () => clearPlayTimer(); }, []); - const handleTogglePlay = () => { - setIsPlaying((prev) => !prev); - if (!isPlaying) { - let totalMessages: MessageItem[] = [...messages]; - setMessages((messages) => { - totalMessages = [...messages]; - return []; - }); - console.log('totalMessages', totalMessages); - let currentIndex = 0; - let eventIndex = 0; - - timerRef.current = setInterval(async () => { - const message = totalMessages[currentIndex]; - - if (!message) { - clearPlayTimer(); - setIsPlaying(false); - return; + useEffect(() => { + if (allMessages.length === 0 && messages.length !== 0) { + setAllMessages(messages); + } + }, [messages.length]); + + const startPlayback = () => { + setButtonState('pause'); + if (buttonState === 'replay') { + setMessages([]); + playbackRef.current = { currentIndex: 0, eventIndex: 0 }; + } + + timerRef.current = setInterval(async () => { + const { currentIndex, eventIndex } = playbackRef.current; + const message = allMessages[currentIndex]; + + if (!message) { + clearPlayTimer(); + setButtonState('replay'); + playbackRef.current = { currentIndex: 0, eventIndex: 0 }; + return; + } + + if (message.type === MessageType.OmegaAgent) { + const messageContent = message.content as { events: EventItem[] }; + const events = messageContent.events; + + if (eventIndex === 0) { + await addMessage( + ChatMessageUtil.assistantOmegaMessage({ + events: [], + }), + ); } - if (message.type === MessageType.OmegaAgent) { - const messageContent = message.content as { events: EventItem[] }; - const events = messageContent.events; - if (eventIndex === 0) { - await addMessage( - ChatMessageUtil.assistantOmegaMessage({ - events: [], - }), - ); - } - - if (eventIndex >= events.length) { - currentIndex++; - eventIndex = 0; - } else { - const currentEvents = events.slice(0, eventIndex + 1); - await updateMessage( - { - ...message, - content: { events: currentEvents }, - }, - { - shouldSyncStorage: false, - }, - ); - messageEndRef.current?.scrollIntoView({ - behavior: 'smooth', - block: 'nearest', - inline: 'nearest', - }); - eventIndex++; - setEvents(currentEvents); - const currentToolUseEvent = [...currentEvents] - .reverse() - .find((e) => e.type === EventType.ToolUsed); - if (currentToolUseEvent) setEventId(currentToolUseEvent.id); - } + if (eventIndex >= events.length) { + playbackRef.current.currentIndex++; + playbackRef.current.eventIndex = 0; } else { - await addMessage(message, { - shouldSyncStorage: false, + const currentEvents = events.slice(0, eventIndex + 1); + await updateMessage( + { + ...message, + content: { events: currentEvents }, + }, + { + shouldSyncStorage: false, + }, + ); + messageEndRef.current?.scrollIntoView({ + behavior: 'smooth', + block: 'nearest', + inline: 'nearest', }); - currentIndex++; + playbackRef.current.eventIndex++; + setEvents(currentEvents); + const currentToolUseEvent = [...currentEvents] + .reverse() + .find((e) => e.type === EventType.ToolUsed); + if (currentToolUseEvent) setEventId(currentToolUseEvent.id); } - }, 100); - } else { - clearPlayTimer(); - setMessages(messages); + } else { + await addMessage(message, { + shouldSyncStorage: false, + }); + playbackRef.current.currentIndex++; + } + }, 100); + }; + + const handleTogglePlay = () => { + switch (buttonState) { + case 'replay': + case 'continue': + startPlayback(); + break; + case 'pause': + clearPlayTimer(); + setButtonState('continue'); + break; } }; + const currentConfig = BUTTON_CONFIGS[buttonState]; + return ( ); } From ddd1ebf265687247da1f874cf731b0bd7f818556 Mon Sep 17 00:00:00 2001 From: Charles Date: Tue, 18 Mar 2025 15:14:29 +0800 Subject: [PATCH 58/62] chore: release app action (#200) --- .github/workflows/release-agent-tars.yml | 101 ++++++++++++++++++ .../{release.yml => release-ui-tars.yml} | 2 +- apps/omega/forge.config.ts | 59 +++++----- apps/omega/package.json | 5 +- .../providers/AzureOpenAIProvider.ts | 6 +- apps/ui-tars/forge.config.ts | 2 + .../common/electron-build/rslib.config.ts | 2 +- packages/common/electron-build/src/findUp.ts | 85 +++++++++++++++ .../src/getPackageDependencies.ts | 53 +++++++-- pnpm-lock.yaml | 3 + 10 files changed, 277 insertions(+), 41 deletions(-) create mode 100644 .github/workflows/release-agent-tars.yml rename .github/workflows/{release.yml => release-ui-tars.yml} (99%) create mode 100644 packages/common/electron-build/src/findUp.ts diff --git a/.github/workflows/release-agent-tars.yml b/.github/workflows/release-agent-tars.yml new file mode 100644 index 000000000..a0d891ec3 --- /dev/null +++ b/.github/workflows/release-agent-tars.yml @@ -0,0 +1,101 @@ +name: Release Agent-TARS app +on: + # push: + # branches: + # - main + workflow_dispatch: + +env: + CI: true + NODE_OPTIONS: --max-old-space-size=8192 + HUSKY: 0 + +permissions: + id-token: write + contents: write + attestations: write + +jobs: + publish_on_mac: + strategy: + fail-fast: false + matrix: + os: [macos-latest] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - name: Show operating system info + run: | + echo "Operating System:" + uname -a + - name: Install pnpm + run: npm install -g pnpm@9 + - uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 + with: + node-version: 20 + cache: 'pnpm' + - name: Install Python setuptools + run: brew install python-setuptools + - name: Install appdmg + run: npm install -g appdmg + - name: Install the Apple certificate and provisioning profile + env: + BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} + P12_PASSWORD: ${{ secrets.P12_PASSWORD }} + BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }} + KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} + run: | + # create variables + CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12 + PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision + KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db + + # import certificate and provisioning profile from secrets + echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode -o $CERTIFICATE_PATH + echo -n "$BUILD_PROVISION_PROFILE_BASE64" | base64 --decode -o $PP_PATH + + # create temporary keychain + security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH + security set-keychain-settings -lut 21600 $KEYCHAIN_PATH + security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH + + # import certificate to keychain + security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH + security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH + security list-keychain -d user -s $KEYCHAIN_PATH + + # apply provisioning profile + mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles + cp $PP_PATH ~/Library/MobileDevice/Provisioning\ Profiles + - name: install dependencies + run: pnpm install + - name: publish arm64 + env: + APPLE_ID: ${{ secrets.APPLE_ID }} + APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }} + APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} + KEYCHAIN_PATH: ${{ runner.temp }}/app-signing.keychain-db + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + cd apps/omega && pnpm run publish:mac + + # publish_on_win: + # runs-on: windows-latest + # steps: + # - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + # - name: Show operating system info + # run: | + # echo "Operating System:" + # cmd /c ver + # - name: Install pnpm + # run: npm install -g pnpm@9 + # - uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 + # with: + # node-version: 20 + # cache: 'pnpm' + # - name: install dependencies + # run: pnpm install + # - name: publish + # env: + # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # run: cd apps/omega && pnpm run publish:win32 diff --git a/.github/workflows/release.yml b/.github/workflows/release-ui-tars.yml similarity index 99% rename from .github/workflows/release.yml rename to .github/workflows/release-ui-tars.yml index 18051682f..c6a0a0184 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release-ui-tars.yml @@ -1,4 +1,4 @@ -name: Release app +name: Release UI-TARS app on: # push: # branches: diff --git a/apps/omega/forge.config.ts b/apps/omega/forge.config.ts index 53dc9ad82..ff450ea9f 100644 --- a/apps/omega/forge.config.ts +++ b/apps/omega/forge.config.ts @@ -21,14 +21,16 @@ const projectRoot = path.resolve(__dirname, '.'); const keepModules = new Set([ ...Object.keys(pkg.dependencies), '@mixmark-io/domino', + '@modelcontextprotocol/sdk', ]); -const needSubDependencies = [...Object.values(keepModules)]; +const needSubDependencies = ['@modelcontextprotocol/sdk']; const keepLanguages = new Set(['en', 'en_GB', 'en-US', 'en_US']); const ignorePattern = new RegExp( `^/node_modules/(?!${[...keepModules].join('|')})`, ); console.log('keepModules', keepModules); +console.log('needSubDependencies', needSubDependencies); console.log('ignorePattern', ignorePattern); const enableOsxSign = @@ -111,23 +113,24 @@ async function cleanSources( needSubDependencies, projectRoot, ); + console.log('subDependencies', subDependencies); await Promise.all( - Array.from(subDependencies.values()).map((subDependency) => { - if ( - fs.existsSync(path.join(buildPath, 'node_modules', subDependency.name)) - ) { - return; - } - - if (fs.existsSync(subDependency.path)) { - console.log('copy_current_node_modules', subDependency.path); - return cp( - subDependency.path, - path.join(buildPath, 'node_modules', subDependency.name), - { - recursive: true, - }, - ); + subDependencies.map((subDependency) => { + console.log( + 'target_dir', + path.join(buildPath, 'node_modules', subDependency.name), + ); + const targetDir = path.join( + buildPath, + 'node_modules', + subDependency.name, + ); + const sourceDir = subDependency.path; + if (!fs.existsSync(targetDir) && fs.existsSync(sourceDir)) { + console.log('copy_current_node_modules', sourceDir); + return cp(sourceDir, targetDir, { + recursive: true, + }); } return; }), @@ -176,16 +179,18 @@ const config: ForgeConfig = { : {}), }, rebuildConfig: {}, - // publishers: [ - // { - // name: '@electron-forge/publisher-github', - // config: { - // repository: { owner: 'bytedance', name: 'ui-tars-desktop' }, - // draft: true, - // force: true, - // }, - // }, - // ], + publishers: [ + { + name: '@electron-forge/publisher-github', + config: { + repository: { owner: 'bytedance', name: 'ui-tars-desktop' }, + draft: true, + force: true, + generateReleaseNotes: true, + tagPrefix: 'Agent TARS v', + }, + }, + ], makers: [ new MakerZIP({}, ['darwin']), // https://github.com/electron/forge/issues/3712 diff --git a/apps/omega/package.json b/apps/omega/package.json index 20c7931ad..1309bea19 100644 --- a/apps/omega/package.json +++ b/apps/omega/package.json @@ -1,6 +1,6 @@ { "name": "agent-tars-app", - "version": "1.0.0", + "version": "1.0.0-beta.1", "description": "An Electron application with React and TypeScript", "main": "./dist/main/index.js", "author": "example.com", @@ -14,7 +14,7 @@ "start": "electron-vite preview", "dev": "electron-vite dev", "package": "electron-forge package", - "build": "npm run typecheck && npm run build:reporter && electron-vite build && electron-forge make", + "build": "rimraf dist out && npm run typecheck && npm run build:reporter && electron-vite build && electron-forge make", "test": "vitest run", "publish:mac": "electron-vite build && electron-forge publish --arch=universal --platform=darwin", "build:reporter": "vite build" @@ -74,6 +74,7 @@ "@types/node": "^22.13.4", "@types/fs-extra": "11.0.4", "@vitejs/plugin-react": "^4.3.4", + "rimraf": "^6.0.1", "autoprefixer": "10.4.20", "electron": "34.1.1", "electron-packager-languages": "0.6.0", diff --git a/apps/omega/src/main/llmProvider/providers/AzureOpenAIProvider.ts b/apps/omega/src/main/llmProvider/providers/AzureOpenAIProvider.ts index 3a3536d9f..2d47363fa 100644 --- a/apps/omega/src/main/llmProvider/providers/AzureOpenAIProvider.ts +++ b/apps/omega/src/main/llmProvider/providers/AzureOpenAIProvider.ts @@ -16,8 +16,10 @@ export class AzureOpenAIProvider extends BaseProvider { super(config); // Use environment variables or defaults - const apiKey = config.apiKey || process.env.AZURE_OPENAI_API_KEY; - const endpoint = config.baseURL || process.env.AZURE_OPENAI_ENDPOINT; + const apiKey = + config.apiKey || process.env.AZURE_OPENAI_API_KEY || 'your-api-key'; + const endpoint = + config.baseURL || process.env.AZURE_OPENAI_ENDPOINT || 'your-endpoint'; const apiVersion = config.apiVersion || process.env.AZURE_OPENAI_API_VERSION || diff --git a/apps/ui-tars/forge.config.ts b/apps/ui-tars/forge.config.ts index a5f5159a9..94e72618f 100644 --- a/apps/ui-tars/forge.config.ts +++ b/apps/ui-tars/forge.config.ts @@ -192,6 +192,8 @@ const config: ForgeConfig = { repository: { owner: 'bytedance', name: 'ui-tars-desktop' }, draft: true, force: true, + generateReleaseNotes: true, + tagPrefix: 'UI-TARS v', }, }, ], diff --git a/packages/common/electron-build/rslib.config.ts b/packages/common/electron-build/rslib.config.ts index ebd49c49a..423e0232f 100644 --- a/packages/common/electron-build/rslib.config.ts +++ b/packages/common/electron-build/rslib.config.ts @@ -9,6 +9,6 @@ export default defineConfig({ ...rslibConfig, output: { ...rslibConfig.output, - target: 'web', + target: 'node', }, }); diff --git a/packages/common/electron-build/src/findUp.ts b/packages/common/electron-build/src/findUp.ts new file mode 100644 index 000000000..f561c76e5 --- /dev/null +++ b/packages/common/electron-build/src/findUp.ts @@ -0,0 +1,85 @@ +/** + * The following code is modified based on + * https://github.com/sindresorhus/find-up-simple/blob/main/index.js + * + * MIT License + * Copyright (c) Sindre Sorhus (https://sindresorhus.com) + * https://github.com/sindresorhus/find-up-simple/blob/main/license + */ + +import process from 'node:process'; +import fsPromises from 'node:fs/promises'; +import { fileURLToPath } from 'node:url'; +import fs from 'node:fs'; +import path from 'node:path'; + +const toPath = (urlOrPath: string | URL) => + urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath; + +export async function findUp( + name: string, + { + cwd = process.cwd(), + type = 'file', + stopAt, + }: { + cwd?: string | URL; + type?: string; + stopAt?: string | URL; + } = {}, +) { + let directory = path.resolve(toPath(cwd) ?? ''); + const { root } = path.parse(directory); + stopAt = path.resolve(directory, toPath(stopAt ?? root)); + const isAbsoluteName = path.isAbsolute(name); + + while (directory) { + const filePath = isAbsoluteName ? name : path.join(directory, name); + try { + const stats = await fsPromises.stat(filePath); // eslint-disable-line no-await-in-loop + if ( + (type === 'file' && stats.isFile()) || + (type === 'directory' && stats.isDirectory()) + ) { + return filePath; + } + } catch {} + + if (directory === stopAt || directory === root) { + break; + } + + directory = path.dirname(directory); + } +} + +export function findUpSync( + name: string, + // @ts-ignore + { cwd = process.cwd(), type = 'file', stopAt } = {}, +) { + let directory = path.resolve(toPath(cwd) ?? ''); + const { root } = path.parse(directory); + stopAt = path.resolve(directory, toPath(stopAt) ?? root); + const isAbsoluteName = path.isAbsolute(name); + + while (directory) { + const filePath = isAbsoluteName ? name : path.join(directory, name); + + try { + const stats = fs.statSync(filePath, { throwIfNoEntry: false }); + if ( + (type === 'file' && stats?.isFile()) || + (type === 'directory' && stats?.isDirectory()) + ) { + return filePath; + } + } catch {} + + if (directory === stopAt || directory === root) { + break; + } + + directory = path.dirname(directory); + } +} diff --git a/packages/common/electron-build/src/getPackageDependencies.ts b/packages/common/electron-build/src/getPackageDependencies.ts index 946ecb713..6e247a5a6 100644 --- a/packages/common/electron-build/src/getPackageDependencies.ts +++ b/packages/common/electron-build/src/getPackageDependencies.ts @@ -8,13 +8,49 @@ */ import { Walker, DepType } from 'flora-colossus'; import { dirname } from 'path'; +import { findUpSync } from './findUp'; export const getModuleRoot = (cwd: string, pkgName: string): string => { - const moduleRoot = dirname( + const moduleEntryPath = dirname( require.resolve(`${pkgName}/package.json`, { paths: [cwd || process.cwd()], }), ); + + let pkgPath = findUpSync('package.json', { + cwd: moduleEntryPath, + }); + + if (!pkgPath) { + return ''; + } + + let currentDir = dirname(pkgPath); + let isMatched = false; + + while (pkgPath && !isMatched) { + try { + const pkg = require(pkgPath); + if (pkg.name === pkgName) { + isMatched = true; + break; + } + + currentDir = dirname(currentDir); + pkgPath = findUpSync('package.json', { + cwd: currentDir, + }); + } catch (err) { + console.warn('Failed to read package.json:', err); + break; + } + } + + if (!isMatched || !pkgPath) { + return ''; + } + + const moduleRoot = dirname(pkgPath); return moduleRoot; }; @@ -27,14 +63,15 @@ export async function getExternalPkgsDependencies( path: string; }[] > { - const dependencies = new Set<{ - name: string; - path: string; - }>(pkgNames.map((name) => ({ name, path: getModuleRoot(cwd, name) }))); + const dependenciesMap = new Map(); + pkgNames.forEach((name) => { + dependenciesMap.set(name, { name, path: getModuleRoot(cwd, name) }); + }); for (const pkgName of pkgNames) { try { const moduleRoot = getModuleRoot(cwd, pkgName); + console.log('moduleRoot', moduleRoot); const walker = new Walker(moduleRoot); // These are private so it's quite nasty! @@ -46,18 +83,18 @@ export async function getExternalPkgsDependencies( walker.modules .filter((dep: any) => dep.nativeModuleType === DepType.PROD) .forEach((dep: any) => - dependencies.add({ + dependenciesMap.set(dep.name, { name: dep.name, path: dep.path, }), ); // @ts-ignore - console.log('walker.modules', walker.modules); + // console.log('walker.modules', walker.modules); } catch (error) { console.warn('error', error); } } - return Array.from(dependencies.values()); + return Array.from(dependenciesMap.values()); } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 289554cbd..c7177db28 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -210,6 +210,9 @@ importers: openai: specifier: ^4.86.2 version: 4.87.3(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.2) + rimraf: + specifier: ^6.0.1 + version: 6.0.1 sass: specifier: 1.85.1 version: 1.85.1 From babd07af2563cca977b46ef4e7080a132c0f7213 Mon Sep 17 00:00:00 2001 From: ULIVZ Date: Tue, 18 Mar 2025 15:31:41 +0800 Subject: [PATCH 59/62] chore: refine files structure for desktop app (#201) Co-authored-by: Charles --- README.md | 157 +----------------- .../ui-tars/CONTRIBUTING.md | 2 + apps/ui-tars/README.md | 156 +++++++++++++++++ {docs => apps/ui-tars/docs}/preset.md | 0 {docs => apps/ui-tars/docs}/sdk.md | 0 {docs => apps/ui-tars/docs}/setting.md | 0 .../operator-browserbase/.env.example | 0 .../examples}/operator-browserbase/.gitignore | 0 .../examples}/operator-browserbase/README.md | 0 .../app/api/agent/route.ts | 0 .../app/api/session/route.ts | 0 .../operator-browserbase/app/atoms.ts | 0 .../app/components/AnimatedButton.tsx | 0 .../app/components/ChatBlock.tsx | 0 .../app/components/ChatFeed.tsx | 0 .../app/components/PosthogProvider.tsx | 0 .../app/components/Sidebar.tsx | 0 .../operator-browserbase/app/favicon.ico | Bin .../operator-browserbase/app/globals.css | 0 .../operator-browserbase/app/layout.tsx | 0 .../operator-browserbase/app/page.tsx | 0 .../operator-browserbase/app/utils/xstream.ts | 0 .../operator-browserbase/eslint.config.mjs | 0 .../fonts/PPNeueMontreal-Medium.otf | Bin .../fonts/PPSupplySans-Regular.otf | Bin .../operator-browserbase/next-env.d.ts | 0 .../operator-browserbase/next.config.ts | 0 .../operator-browserbase/package.json | 0 .../operator-browserbase/pnpm-lock.yaml | 0 .../operator-browserbase/postcss.config.mjs | 0 .../public/agent_loop.png | Bin .../public/agent_mess.png | Bin .../operator-browserbase/public/favicon.svg | 0 .../operator-browserbase/public/file.svg | 0 .../operator-browserbase/public/github.svg | 0 .../operator-browserbase/public/globe.svg | 0 .../operator-browserbase/public/next.svg | 0 .../operator-browserbase/public/og.png | Bin .../public/stagehand_clean.png | Bin .../operator-browserbase/public/vercel.svg | 0 .../operator-browserbase/public/window.svg | 0 .../operator-browserbase/tailwind.config.ts | 0 .../operator-browserbase/tsconfig.json | 0 .../operator-browserbase/vercel.json | 0 .../ui-tars/examples}/presets/default.yaml | 0 packages/ui-tars/sdk/scripts/sync-docs.ts | 5 +- 46 files changed, 163 insertions(+), 157 deletions(-) rename CONTRIBUTING.md => apps/ui-tars/CONTRIBUTING.md (99%) create mode 100644 apps/ui-tars/README.md rename {docs => apps/ui-tars/docs}/preset.md (100%) rename {docs => apps/ui-tars/docs}/sdk.md (100%) rename {docs => apps/ui-tars/docs}/setting.md (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/.env.example (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/.gitignore (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/README.md (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/app/api/agent/route.ts (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/app/api/session/route.ts (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/app/atoms.ts (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/app/components/AnimatedButton.tsx (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/app/components/ChatBlock.tsx (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/app/components/ChatFeed.tsx (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/app/components/PosthogProvider.tsx (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/app/components/Sidebar.tsx (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/app/favicon.ico (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/app/globals.css (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/app/layout.tsx (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/app/page.tsx (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/app/utils/xstream.ts (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/eslint.config.mjs (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/fonts/PPNeueMontreal-Medium.otf (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/fonts/PPSupplySans-Regular.otf (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/next-env.d.ts (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/next.config.ts (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/package.json (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/pnpm-lock.yaml (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/postcss.config.mjs (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/public/agent_loop.png (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/public/agent_mess.png (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/public/favicon.svg (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/public/file.svg (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/public/github.svg (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/public/globe.svg (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/public/next.svg (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/public/og.png (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/public/stagehand_clean.png (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/public/vercel.svg (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/public/window.svg (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/tailwind.config.ts (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/tsconfig.json (100%) rename {examples => apps/ui-tars/examples}/operator-browserbase/vercel.json (100%) rename {examples => apps/ui-tars/examples}/presets/default.yaml (100%) diff --git a/README.md b/README.md index 78fcc00c4..4cd1390a7 100644 --- a/README.md +++ b/README.md @@ -1,156 +1 @@ - -

    - UI-TARS -

    - -# UI-TARS Desktop - -UI-TARS Desktop is a GUI Agent application based on [UI-TARS (Vision-Language Model)](https://github.com/bytedance/UI-TARS) that allows you to control your computer using natural language. - - -

    -    📑 Paper    - | 🤗 Hugging Face Models   - |   🫨 Discord   - |   🤖 ModelScope   -
    -🖥️ Desktop Application    -|    👓 Midscene (use in browser) -

    - -### ⚠️ Important Announcement: GGUF Model Performance - -The **GGUF model** has undergone quantization, but unfortunately, its performance cannot be guaranteed. As a result, we have decided to **downgrade** it. - -💡 **Alternative Solution**: -You can use **[Cloud Deployment](#cloud-deployment)** or **[Local Deployment [vLLM]](#local-deployment-vllm)**(If you have enough GPU resources) instead. - -We appreciate your understanding and patience as we work to ensure the best possible experience. - -## Updates - -- 🚀 01.25: We updated the **[Cloud Deployment](#cloud-deployment)** section in the 中文版: [GUI模型部署教程](https://bytedance.sg.larkoffice.com/docx/TCcudYwyIox5vyxiSDLlgIsTgWf#U94rdCxzBoJMLex38NPlHL21gNb) with new information related to the ModelScope platform. You can now use the ModelScope platform for deployment. - -## Showcases - -| Instruction | Video | -| :---: | :---: | -| Get the current weather in SF using the web browser |

       📑 Paper    | 🤗 Hugging Face Models   + |   🫨 Discord   |   🤖 ModelScope  
    🖥️ Desktop Application    From 69b5bd7a65454e299d741dacafb0dc82e8967f2c Mon Sep 17 00:00:00 2001 From: Charles Date: Fri, 14 Feb 2025 06:35:42 +0800 Subject: [PATCH 07/62] docs: brew install (#103) --- README.md | 7 ++++++- forge.config.ts | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e6364f674..a6626b61d 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ UI-TARS Desktop is a GUI Agent application based on [UI-TARS (Vision-Language Mo    📑 Paper    | 🤗 Hugging Face Models   |   🫨 Discord   - |   🤖 ModelScope   + |   🤖 ModelScope  
    🖥️ Desktop Application    |    👓 Midscene (use in browser) @@ -53,6 +53,11 @@ We appreciate your understanding and patience as we work to ensure the best poss You can download the [latest release](https://github.com/bytedance/UI-TARS-desktop/releases/latest) version of UI-TARS Desktop from our releases page. +> **Note**: If you have [Homebrew](https://brew.sh/) installed, you can install UI-TARS Desktop by running the following command: +> ```bash +> brew install --cask ui-tars +> ``` + ### Install #### MacOS diff --git a/forge.config.ts b/forge.config.ts index 613992241..91d124693 100644 --- a/forge.config.ts +++ b/forge.config.ts @@ -86,6 +86,7 @@ const noopAfterCopy = ( const config: ForgeConfig = { packagerConfig: { + appBundleId: 'com.bytedance.uitars', name: 'UI TARS', icon: 'resources/icon', asar: { From 9b65d7298fbeac118216a1bf95c5925697d1bd32 Mon Sep 17 00:00:00 2001 From: ULIVZ Date: Fri, 14 Feb 2025 10:23:15 +0800 Subject: [PATCH 08/62] feat(renderer): add a strong prompt when the report needs to be uploaded (#105) * feat(renderer): add a strong prompt when the report needs to be uploaded * chore: should only display notice model when `reportStorageBaseUrl` is configured --- packages/utio/src/index.ts | 8 + .../src/components/ChatInput/index.tsx | 171 +++++++++++++----- 2 files changed, 136 insertions(+), 43 deletions(-) diff --git a/packages/utio/src/index.ts b/packages/utio/src/index.ts index 5a46b44e0..75316284f 100644 --- a/packages/utio/src/index.ts +++ b/packages/utio/src/index.ts @@ -1,7 +1,15 @@ +/** + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ import { EventPayload, EventType } from './types'; export type { EventPayload as UTIOPayload }; +/** + * UTIO (UI-TARS Insights and Observation) is a data collection mechanism + * for insights into UI-TARS Desktop, + */ export class UTIO { constructor(private readonly endpoint: string) {} diff --git a/src/renderer/src/components/ChatInput/index.tsx b/src/renderer/src/components/ChatInput/index.tsx index 884cf91fc..387cbadee 100644 --- a/src/renderer/src/components/ChatInput/index.tsx +++ b/src/renderer/src/components/ChatInput/index.tsx @@ -37,6 +37,15 @@ import { useScreenRecord } from '@renderer/hooks/useScreenRecord'; import { useSetting } from '@renderer/hooks/useSetting'; import { api } from '@renderer/api'; +import { + AlertDialog, + AlertDialogBody, + AlertDialogContent, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogOverlay, +} from '@chakra-ui/react'; + const ChatInput = forwardRef((_props, _ref) => { const { status, @@ -140,11 +149,32 @@ const ChatInput = forwardRef((_props, _ref) => { const shareTimeoutRef = React.useRef(); const SHARE_TIMEOUT = 100000; + const [isShareConfirmOpen, setIsShareConfirmOpen] = React.useState(false); + const [pendingShareType, setPendingShareType] = React.useState< + 'report' | 'video' | null + >(null); + const cancelShareRef = React.useRef(null); + const handleShare = async (type: 'report' | 'video') => { if (isSharePending.current) { return; } + if (type === 'report' && settings?.reportStorageBaseUrl) { + setPendingShareType(type); + setIsShareConfirmOpen(true); + return; + } + + await processShare(type, false); + }; + + const processShare = async ( + type: 'report' | 'video', + allowCollectShareReport: boolean, + ) => { + if (isSharePending.current) return; + try { setIsSharing(true); isSharePending.current = true; @@ -177,52 +207,59 @@ const ChatInput = forwardRef((_props, _ref) => { } as ComputerUseUserData; const htmlContent = reportHTMLContent(html, [userData]); + let uploadSuccess = false; - let reportUrl: string | undefined; - - if (settings?.reportStorageBaseUrl) { - try { - const { url } = await uploadReport( - htmlContent, - settings.reportStorageBaseUrl, - ); - reportUrl = url; - uploadSuccess = true; - await navigator.clipboard.writeText(url); - toast({ - title: 'Report link copied to clipboard!', - status: 'success', - position: 'top', - duration: 2000, - isClosable: true, - variant: 'ui-tars-success', - }); - } catch (error) { - console.error('Upload report failed:', error); - toast({ - title: 'Failed to upload report', - description: - error instanceof Error ? error.message : JSON.stringify(error), - status: 'error', - position: 'top', - duration: 3000, - isClosable: true, - }); + + if (allowCollectShareReport) { + let reportUrl: string | undefined; + + if (settings?.reportStorageBaseUrl) { + try { + const { url } = await uploadReport( + htmlContent, + settings.reportStorageBaseUrl, + ); + reportUrl = url; + uploadSuccess = true; + await navigator.clipboard.writeText(url); + toast({ + title: 'Report link copied to clipboard!', + status: 'success', + position: 'top', + duration: 2000, + isClosable: true, + variant: 'ui-tars-success', + }); + } catch (error) { + console.error('Upload report failed:', error); + toast({ + title: 'Failed to upload report', + + description: + error instanceof Error + ? error.message + : JSON.stringify(error), + status: 'error', + position: 'top', + duration: 3000, + isClosable: true, + }); + } } - } - // Send UTIO data through IPC if configured - if (settings?.utioBaseUrl) { - const lastScreenshot = messages - .filter((m) => m.screenshotBase64) - .pop()?.screenshotBase64; - - await window.electron.utio.shareReport({ - type: 'shareReport', - instruction: lastHumanMessage, - lastScreenshot, - report: reportUrl, - }); + // Only send UTIO data if user consented + if (settings?.utioBaseUrl) { + const lastScreenshot = messages + .filter((m) => m.screenshotBase64) + .pop()?.screenshotBase64; + + await window.electron.utio.shareReport({ + type: 'shareReport', + instruction: lastHumanMessage, + lastScreenshot, + report: reportUrl, + }); + } } // Only fall back to file download if upload was not configured or failed @@ -415,6 +452,54 @@ const ChatInput = forwardRef((_props, _ref) => { + setIsShareConfirmOpen(false)} + > + + + + Share Report + + + + 📢 Would you like to share your report to help us improve{' '} + UI-TARS? This includes your screen recordings and actions. +
    +
    + 💡 We encourage you to create a clean and privacy-free desktop + environment before each use. +
    + + + + + +
    +
    +
    ); }); From e37858115cab41867e31151638c0b3f1dffa156e Mon Sep 17 00:00:00 2001 From: Charles Date: Fri, 14 Feb 2025 16:28:44 +0800 Subject: [PATCH 09/62] docs: contributing.md (#106) * docs: contributing.md * chore: pnpm and node * docs: monorepo * docs: contributing --- CONTRIBUTING.md | 169 ++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 27 +------- 2 files changed, 171 insertions(+), 25 deletions(-) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..e1c5ffd83 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,169 @@ +# Contributing to UI-TARS Desktop + +First off, thanks for taking the time to contribute! ❤️ + +All types of contributions are encouraged and valued. Please make sure to read the relevant section before making your contribution. It will make it a lot easier for us maintainers and smooth out the experience for all involved. The community looks forward to your contributions. 🎉 + +> And if you like the project, but just don't have time to contribute, that's fine. There are other easy ways to support the project and show your appreciation, which we would also be very happy about: +> - Star the project +> - Tweet about it +> - Refer this project in your project's readme +> - Mention the project at local meetups and tell your friends/colleagues + + +## I Have a Question / Bug Report + +> If you want to ask a question or report a bug, we assume that you have read the available Documentation. + +Before you ask a question, it is best to search for existing [Issues](https://github.com/bytedance/ui-tars-desktop/issues) that might help you. In case you have found a suitable issue and still need clarification, you can write your question in this issue. It is also advisable to search the internet for answers first. + +If you then still feel the need to ask a question and need clarification, we recommend the following: + +- Open an [Issue](https://github.com/bytedance/ui-tars-desktop/issues/new). +- Provide as much context as you can about what you're running into. +- Provide project and platform versions (nodejs, npm, etc), depending on what seems relevant. + +We will then take care of the issue as soon as possible. + +## I Want To Contribute + +### Prerequisites + +- [Node.js](https://nodejs.org/en/download/) >= 20 +- [pnpm](https://pnpm.io/installation) >= 9 + +#### Technology Stack + +This is a [Monorepo](https://pnpm.io/workspaces) project including the following technologies: + +- Cross-platform framework: [Electron](https://www.electronjs.org/) +- Interface: + - [React](https://react.dev/) + - [Vite](https://vitejs.dev/) + - [Chakra UI V2](https://v2.chakra-ui.com/) +- State management and communication: + - [Zustand](https://zustand.docs.pmnd.rs/) + - [@ui-tars/electron-ipc](https://github.com/bytedance/ui-tars-desktop/tree/main/packages/electron-ipc) +- Automation framework/toolkit: + - [nut.js](https://nutjs.dev/) +- Test framework + - [Vitest](https://vitest.dev/) + - [Playwright](https://playwright.dev/) + +### Structure of the project + +```bash +. +├── README.md +├── package.json # Electron application dependencies +├── forge.config.ts # Electron pack and publish configuration +├── electron.vite.config.ts # Electron bundle configuration +├── src # Electron application source code +│   ├── main # Main process source code(Like backend) +│   ├── preload # Preload script source code +│   └── renderer # Renderer process source code(Like frontend) +│ +├── packages # Packages or Modules or SDK for UI-TARS Desktop +│   ├── action-parser # Action parser for parsing UI-TARS model output into actions +│   ├── electron-ipc # Electron IPC for communication between main and renderer processes +│   ├── shared # Shared code of the project(including types, utils, constants, etc.) +│   ├── utio # UTIO (UI-TARS Insights and Observation) +│   └── visualizer # Sharing HTML Visualization Reporter +├── docs # Documentation of the project +├── rfcs # RFCs (Request for Comments) for the project +├── e2e # E2E test cases for the project +├── playwright.config.ts # E2E test configuration +└── vitest.*.mts # Unit test configuration +``` + +> **Note**: The `src` directory is located in the top-level directory instead of the `apps/{main,preload,renderer}` directories because Electron Forge previously did not support Pnpm's hoisting mechanism([electron/forge#2633](https://github.com/electron/forge/issues/2633)), requiring the `src` directory to be placed in the top-level directory. + + +#### Clone the repository + +```bash +$ git clone https://github.com/bytedance/ui-tars-desktop.git +$ cd ui-tars-desktop +``` + +### Development + +#### Install dependencies + +```bash +$ pnpm install +``` + +#### Run the application + +```bash +$ pnpm run dev +``` + +After the application starts, you can see the UI-TARS interface within the application. + +> **Note**: On MacOS, you need to grant permissions to the app (e.g., iTerm2, Terminal) you are using to run commands. + +### Release + +#### Desktop Application + +The CI pipeline to execute is [.github/workflows/release.yml](.github/workflows/release.yml), only manual triggered by maintainers. If you're a maintainer, you can follow the steps below to release the application: + +1. Edit the `version` in `package.json` +2. Git commit and push to the `release/${version}` branch, create a PR targeting `main` branch, titled `release(app): ${version}` +3. Trigger the release [workflow](https://github.com/bytedance/UI-TARS-desktop/actions/workflows/release.yml) manually after the PR is merged + +Currently, the release workflow supports the following platforms: + +- MacOS x64 +- MacOS arm64 +- Windows x64 + +#### Packages + +If you want to publish the packages to the npm registry, you can run the following command: + +1. `pnpm changeset` to specify the changelogs for the packages you want to publish +2. Git commit and push to the `release-pkgs/${version}` branch, create a PR targeting `main` branch, titled `release(pkgs): ${version}` +3. `pnpm run publish:packages` to publish the packages in latest `origin/main` branch after the PR is merged + + +### Documentation + +The documents are placed in the `docs/*.md` directory, formatted in markdown. There is currently no documentation site, but the `docs/*.md` directory will be converted into a documentation site in the future. + +## Styleguides + +### Pre-commit Hooks + +We use [Husky](https://typicode.github.io/husky/#/) and [lint-staged](https://github.com/okonet/lint-staged) to enforce the pre-commit hooks. The hooks include: + +- `prettier --write` to format the code +- `npm run typecheck` to strictly check the type + +### Commit Messages + +We use [Conventional Commits](https://www.conventionalcommits.org/) to standardize the commit messages. + +### CI / Testing + +Each PR or main branch push will trigger the CI pipeline to run the unit test and E2E test. + +#### Unit test + +```bash +pnpm run test +``` + +#### E2E test + +```bash +pnpm run test:e2e +``` + +## Submitting Changes + +* Push your changes to a feature branch in your fork of the repository. +* Submit a pull request to this repository +* Accept the CLA in your PR. diff --git a/README.md b/README.md index a6626b61d..43bf9aa78 100644 --- a/README.md +++ b/README.md @@ -131,32 +131,9 @@ VLM Model Name: ui-tars > **Note**: VLM Base Url is OpenAI compatible API endpoints (see [OpenAI API protocol document](https://platform.openai.com/docs/guides/vision/uploading-base-64-encoded-images) for more details). -## Development +## Contributing -Just simple two steps to run the application: - -```bash -pnpm install -pnpm run dev -``` - -> **Note**: On MacOS, you need to grant permissions to the app (e.g., iTerm2, Terminal) you are using to run commands. - -### Testing - -```bash -# Unit test -pnpm run test -# E2E test -pnpm run test:e2e -``` - -## System Requirements - -- Node.js >= 20 -- Supported Operating Systems: - - Windows 10/11 - - macOS 10.15+ +[CONTRIBUTING.md](./CONTRIBUTING.md) ## License From fe32e710d78bc0aed7ee61c480df5c7a65632197 Mon Sep 17 00:00:00 2001 From: 5101good <5101good@163.com> Date: Tue, 18 Feb 2025 11:35:54 +0800 Subject: [PATCH 10/62] fix(operator): typing and key input fail (#112) * fix(main): resolve focus missing for typing window on Windows * fix(main): resolve key event missing on Windows * fix(main): reformat code --- src/main/agent/execute.ts | 7 ++++++- src/main/window/ScreenMarker.ts | 8 ++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/agent/execute.ts b/src/main/agent/execute.ts index bedba952e..94b2ac82c 100644 --- a/src/main/agent/execute.ts +++ b/src/main/agent/execute.ts @@ -203,6 +203,7 @@ export const execute = async (executeParams: ExecuteParams) => { case 'hotkey': { const keyStr = action_inputs?.key || action_inputs?.hotkey; if (keyStr) { + const platformCommandKey = process.platform === 'darwin' ? Key.LeftCmd : Key.LeftWin; const keyMap: Record = { return: Key.Enter, enter: Key.Enter, @@ -214,11 +215,15 @@ export const execute = async (executeParams: ExecuteParams) => { pagedown: Key.PageDown, 'page up': Key.PageUp, pageup: Key.PageUp, + meta: platformCommandKey, + win: platformCommandKey, + command: platformCommandKey, + cmd: platformCommandKey, }; const keys = keyStr .split(/[\s+]/) - .map((k) => keyMap[k.toLowerCase()] || Key[k as keyof typeof Key]); + .map((k) => keyMap[k.toLowerCase()] || Key[k.toUpperCase() as keyof typeof Key]); logger.info('[hotkey]: ', keys); await keyboard.pressKey(...keys); await keyboard.releaseKey(...keys); diff --git a/src/main/window/ScreenMarker.ts b/src/main/window/ScreenMarker.ts index 7e3ceb09a..4b7ef6b24 100644 --- a/src/main/window/ScreenMarker.ts +++ b/src/main/window/ScreenMarker.ts @@ -235,15 +235,15 @@ class ScreenMarker { }), }); - if (env.isWindows) { - this.currentOverlay.setAlwaysOnTop(true, 'screen-saver'); - } - this.currentOverlay.blur(); this.currentOverlay.setFocusable(false); this.currentOverlay.setContentProtection(true); // not show for vlm model this.currentOverlay.setIgnoreMouseEvents(true, { forward: true }); + if (env.isWindows) { + this.currentOverlay.setAlwaysOnTop(true, 'screen-saver'); + } + // 在 Windows 上设置窗口为工具窗口 // if (process.platform === 'win32') { // this.currentOverlay.setWindowButtonVisibility(false); From a6a42b139688b3d4aba5183a297679d4e73348da Mon Sep 17 00:00:00 2001 From: "duguangyu.d" Date: Tue, 18 Feb 2025 15:17:24 +0800 Subject: [PATCH 11/62] feat: enable easy copying of images to clipboard --- src/renderer/src/components/Image/index.tsx | 96 +++++++++++++++++++-- 1 file changed, 88 insertions(+), 8 deletions(-) diff --git a/src/renderer/src/components/Image/index.tsx b/src/renderer/src/components/Image/index.tsx index 33cf187b1..c2d12721b 100644 --- a/src/renderer/src/components/Image/index.tsx +++ b/src/renderer/src/components/Image/index.tsx @@ -2,35 +2,115 @@ * Copyright (c) 2025 Bytedance, Inc. and its affiliates. * SPDX-License-Identifier: Apache-2.0 */ -import { Image, ImageProps } from '@chakra-ui/react'; +import { Image as ChakraImage, ImageProps, Box } from '@chakra-ui/react'; import clsx from 'clsx'; import mediumZoom, { type Zoom } from 'medium-zoom'; -import React, { useEffect, useRef } from 'react'; +import React, { useEffect, useRef, useState } from 'react'; +import { TbCopy, TbCopyCheckFilled } from 'react-icons/tb'; const SnapshotImage: React.FC = (props) => { const { className, ...rest } = props; + const [copied, setCopied] = useState(false); const imgRef = useRef(null); + const handleCopyImage = async () => { + if (imgRef.current) { + try { + const imageUrl = imgRef.current.src; + let img: HTMLImageElement | null = new Image(); + img.src = imageUrl; + + img.onload = async () => { + // use canvas to copy image, avoid csp issue in data:url + const canvas = document.createElement('canvas'); + const ctx = canvas.getContext('2d'); + if (ctx && img) { + canvas.width = img.width; + canvas.height = img.height; + ctx.drawImage(img, 0, 0); + + // get blob from canvas + canvas.toBlob(async (blob) => { + if (blob) { + const item = new ClipboardItem({ 'image/png': blob }); + await navigator.clipboard.write([item]); + } + canvas.width = 0; + canvas.height = 0; + }); + + // clear + img.src = ''; + img.onload = null; + img = null; + + setCopied(true); + setTimeout(() => { + setCopied(false); + }, 500); + } + }; + } catch (error) { + console.error('Failed to copy image to clipboard:', error); + alert('Failed to copy image!'); + } + } + }; + useEffect(() => { let zoom: Zoom | undefined; - const timeout = setTimeout(() => { + const initZoom = () => { if (imgRef.current) { zoom = mediumZoom(imgRef.current, { - background: 'rgba(255,255,255,.7)', + background: 'rgba(0,0,0,.7)', margin: 50, }); } - }, 500); - + }; + requestAnimationFrame(initZoom); return () => { - clearTimeout(timeout); zoom?.detach(); zoom?.close(); }; }, []); return ( - + + + + {copied ? : } + + ); }; From 7c419a3b6a483e4c949e64508b5fa33c99f4f314 Mon Sep 17 00:00:00 2001 From: "duguangyu.d" Date: Tue, 18 Feb 2025 16:43:26 +0800 Subject: [PATCH 12/62] feat: copy image to clipboard error warning using useToast from chakra --- src/renderer/src/components/Image/index.tsx | 80 +++++++++++++-------- 1 file changed, 50 insertions(+), 30 deletions(-) diff --git a/src/renderer/src/components/Image/index.tsx b/src/renderer/src/components/Image/index.tsx index c2d12721b..ae3ae9505 100644 --- a/src/renderer/src/components/Image/index.tsx +++ b/src/renderer/src/components/Image/index.tsx @@ -2,57 +2,77 @@ * Copyright (c) 2025 Bytedance, Inc. and its affiliates. * SPDX-License-Identifier: Apache-2.0 */ -import { Image as ChakraImage, ImageProps, Box } from '@chakra-ui/react'; +import { + Image as ChakraImage, + ImageProps, + Box, + useToast, +} from '@chakra-ui/react'; import clsx from 'clsx'; import mediumZoom, { type Zoom } from 'medium-zoom'; import React, { useEffect, useRef, useState } from 'react'; import { TbCopy, TbCopyCheckFilled } from 'react-icons/tb'; +const showErrorToast = (error: unknown, toast: ReturnType) => { + const errorMessage = error instanceof Error ? error.message : String(error); + toast({ + title: 'Failed to copy image!', + description: errorMessage, + status: 'warning', + position: 'top', + duration: 3000, + isClosable: true, + }); +}; + const SnapshotImage: React.FC = (props) => { const { className, ...rest } = props; const [copied, setCopied] = useState(false); const imgRef = useRef(null); - + const toast = useToast(); const handleCopyImage = async () => { if (imgRef.current) { try { const imageUrl = imgRef.current.src; let img: HTMLImageElement | null = new Image(); img.src = imageUrl; - img.onload = async () => { - // use canvas to copy image, avoid csp issue in data:url - const canvas = document.createElement('canvas'); - const ctx = canvas.getContext('2d'); - if (ctx && img) { - canvas.width = img.width; - canvas.height = img.height; - ctx.drawImage(img, 0, 0); - - // get blob from canvas - canvas.toBlob(async (blob) => { - if (blob) { - const item = new ClipboardItem({ 'image/png': blob }); - await navigator.clipboard.write([item]); - } - canvas.width = 0; - canvas.height = 0; - }); + try { + // use canvas to copy image, avoid csp issue in data:url + const canvas = document.createElement('canvas'); + const ctx = canvas.getContext('2d'); + if (ctx && img) { + canvas.width = img.width; + canvas.height = img.height; + ctx.drawImage(img, 0, 0); - // clear - img.src = ''; - img.onload = null; - img = null; + // get blob from canvas + canvas.toBlob(async (blob) => { + if (blob) { + const item = new ClipboardItem({ 'image/png': blob }); + await navigator.clipboard.write([item]); + } + canvas.width = 0; + canvas.height = 0; + }); - setCopied(true); - setTimeout(() => { - setCopied(false); - }, 500); + // clear + img.src = ''; + img.onload = null; + img = null; + setCopied(true); + setTimeout(() => { + setCopied(false); + }, 500); + } + } catch (error) { + console.error('Failed to copy image:', error); + showErrorToast(error, toast); } }; } catch (error) { - console.error('Failed to copy image to clipboard:', error); - alert('Failed to copy image!'); + console.error('Failed to copy image:', error); + showErrorToast(error, toast); } } }; From 49f1d7b2369e7aa3f24315d5c0baee7cbf40e3fe Mon Sep 17 00:00:00 2001 From: "duguangyu.d" Date: Tue, 18 Feb 2025 17:16:18 +0800 Subject: [PATCH 13/62] feat: image copy to clipboard useToast common settings --- src/renderer/src/components/Image/index.tsx | 29 ++++++++++----------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/src/renderer/src/components/Image/index.tsx b/src/renderer/src/components/Image/index.tsx index ae3ae9505..312a6e9b1 100644 --- a/src/renderer/src/components/Image/index.tsx +++ b/src/renderer/src/components/Image/index.tsx @@ -13,23 +13,20 @@ import mediumZoom, { type Zoom } from 'medium-zoom'; import React, { useEffect, useRef, useState } from 'react'; import { TbCopy, TbCopyCheckFilled } from 'react-icons/tb'; -const showErrorToast = (error: unknown, toast: ReturnType) => { - const errorMessage = error instanceof Error ? error.message : String(error); - toast({ +const SnapshotImage: React.FC = (props) => { + const { className, ...rest } = props; + const [copied, setCopied] = useState(false); + const imgRef = useRef(null); + const toast = useToast({ title: 'Failed to copy image!', - description: errorMessage, status: 'warning', position: 'top', duration: 3000, isClosable: true, + onCloseComplete() { + setCopied(false); + }, }); -}; - -const SnapshotImage: React.FC = (props) => { - const { className, ...rest } = props; - const [copied, setCopied] = useState(false); - const imgRef = useRef(null); - const toast = useToast(); const handleCopyImage = async () => { if (imgRef.current) { try { @@ -66,13 +63,15 @@ const SnapshotImage: React.FC = (props) => { }, 500); } } catch (error) { - console.error('Failed to copy image:', error); - showErrorToast(error, toast); + toast({ + description: error instanceof Error ? error.message : `${error}`, + }); } }; } catch (error) { - console.error('Failed to copy image:', error); - showErrorToast(error, toast); + toast({ + description: error instanceof Error ? error.message : `${error}`, + }); } } }; From 5976be4052f12e7c820b84f42d518072912c15ae Mon Sep 17 00:00:00 2001 From: skychx Date: Wed, 19 Feb 2025 15:21:12 +0800 Subject: [PATCH 14/62] fix(bug): ensure screen capture uses primary display source (#117) * fix: ensure screen capture uses primary display source * test: add device.test.ts * test: update device.test.ts --- src/main/agent/device.test.ts | 76 +++++++++++++++++++++++++++++++++++ src/main/agent/device.ts | 6 ++- src/main/main.ts | 9 ++++- 3 files changed, 87 insertions(+), 4 deletions(-) create mode 100644 src/main/agent/device.test.ts diff --git a/src/main/agent/device.test.ts b/src/main/agent/device.test.ts new file mode 100644 index 000000000..994bdd072 --- /dev/null +++ b/src/main/agent/device.test.ts @@ -0,0 +1,76 @@ +import { describe, expect, it, vi, beforeEach, afterEach } from 'vitest'; +import { screen, desktopCapturer } from 'electron'; +import { Desktop } from './device'; + +// Mock dependencies +vi.mock('electron', () => ({ + screen: { + getPrimaryDisplay: vi.fn(), + }, + desktopCapturer: { + getSources: vi.fn(), + }, + app: { + on: vi.fn(), + off: vi.fn(), + quit: vi.fn(), + exit: vi.fn(), + relaunch: vi.fn(), + }, +})); + +vi.mock('./execute', () => ({ + execute: vi.fn(), +})); + +vi.mock('@main/env', () => ({ + isMacOS: false, +})); + +describe('Desktop', () => { + let desktop: Desktop; + + beforeEach(() => { + desktop = new Desktop(); + vi.clearAllMocks(); + }); + + afterEach(() => { + vi.resetAllMocks(); + }); + + describe('screenshot', () => { + it('should capture screenshot successfully', async () => { + const mockDisplay = { + id: '1', + size: { width: 1920, height: 1080 }, + }; + const mockSource = { + display_id: '1', + thumbnail: { + toPNG: () => Buffer.from('mock-image'), + }, + }; + + vi.mocked(screen.getPrimaryDisplay).mockReturnValue(mockDisplay as any); + vi.mocked(desktopCapturer.getSources).mockResolvedValueOnce([ + mockSource as any, + ]); + + const result = await desktop.screenshot(); + + expect(result).toEqual({ + base64: 'bW9jay1pbWFnZQ==', + width: 1920, + height: 1080, + }); + expect(desktopCapturer.getSources).toHaveBeenCalledWith({ + types: ['screen'], + thumbnailSize: { + width: 1920, + height: 1080, + }, + }); + }); + }); +}); diff --git a/src/main/agent/device.ts b/src/main/agent/device.ts index c4c0d77f8..61add424b 100644 --- a/src/main/agent/device.ts +++ b/src/main/agent/device.ts @@ -81,8 +81,10 @@ export class Desktop { height: Math.round(height), }, }); - const primarySource = sources[0]; - const screenshot = primarySource.thumbnail; + const primarySource = sources.find( + (source) => source.display_id === primaryDisplay.id.toString(), + ); + const screenshot = primarySource!.thumbnail; return { base64: screenshot.toPNG().toString('base64'), diff --git a/src/main/main.ts b/src/main/main.ts index 34649df91..841d35cf3 100644 --- a/src/main/main.ts +++ b/src/main/main.ts @@ -12,6 +12,7 @@ import { ipcMain, session, WebContentsView, + screen, } from 'electron'; import squirrelStartup from 'electron-squirrel-startup'; import ElectronStore from 'electron-store'; @@ -131,8 +132,12 @@ const initializeApp = async () => { session.defaultSession.setDisplayMediaRequestHandler( (_request, callback) => { desktopCapturer.getSources({ types: ['screen'] }).then((sources) => { - // Grant access to the first screen found. - callback({ video: sources[0], audio: 'loopback' }); + const primaryDisplay = screen.getPrimaryDisplay(); + const primarySource = sources.find( + (source) => source.display_id === primaryDisplay.id.toString(), + ); + + callback({ video: primarySource!, audio: 'loopback' }); }); }, { useSystemPicker: false }, From 95907495306a7fa75b18970065e93b4b1719c9ac Mon Sep 17 00:00:00 2001 From: heh <38528320+ZhaoHeh@users.noreply.github.com> Date: Wed, 19 Feb 2025 15:51:32 +0800 Subject: [PATCH 15/62] tweak(ux): close Settings Window after saving (#115) --- src/main/ipcRoutes/window.test.ts | 54 +++++++++++++++++++++++ src/main/ipcRoutes/window.ts | 4 ++ src/renderer/src/pages/settings/index.tsx | 4 ++ 3 files changed, 62 insertions(+) create mode 100644 src/main/ipcRoutes/window.test.ts diff --git a/src/main/ipcRoutes/window.test.ts b/src/main/ipcRoutes/window.test.ts new file mode 100644 index 000000000..ddb41148c --- /dev/null +++ b/src/main/ipcRoutes/window.test.ts @@ -0,0 +1,54 @@ +import { windowRoute } from './window'; +import { showWindow } from '@main/window'; +import { describe, expect, it, vi, beforeEach } from 'vitest'; + +// Mock window module +vi.mock('@main/window', () => ({ + showWindow: vi.fn(), +})); + +describe('windowRoute.showMainWindow', () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + it('should call showWindow function', async () => { + await windowRoute.showMainWindow.handle({ + input: undefined, + context: {} as any, + }); + + expect(showWindow).toHaveBeenCalled(); + expect(showWindow).toHaveBeenCalledTimes(1); + }); + + it('should handle showWindow being called multiple times', async () => { + await windowRoute.showMainWindow.handle({ + input: undefined, + context: {} as any, + }); + await windowRoute.showMainWindow.handle({ + input: undefined, + context: {} as any, + }); + await windowRoute.showMainWindow.handle({ + input: undefined, + context: {} as any, + }); + + expect(showWindow).toHaveBeenCalledTimes(3); + }); + + it('should handle errors from showWindow', async () => { + (showWindow as any).mockImplementationOnce(() => { + throw new Error('Failed to show window'); + }); + + await expect( + windowRoute.showMainWindow.handle({ + input: undefined, + context: {} as any, + }), + ).rejects.toThrow('Failed to show window'); + }); +}); diff --git a/src/main/ipcRoutes/window.ts b/src/main/ipcRoutes/window.ts index 2d7a1ff00..6357637cf 100644 --- a/src/main/ipcRoutes/window.ts +++ b/src/main/ipcRoutes/window.ts @@ -7,6 +7,7 @@ import { LauncherWindow, closeSettingsWindow, createSettingsWindow, + showWindow, } from '@main/window/index'; const t = initIpc.create(); @@ -25,4 +26,7 @@ export const windowRoute = t.router({ LauncherWindow.getInstance().blur(); LauncherWindow.getInstance().hide(); }), + showMainWindow: t.procedure.input().handle(async () => { + showWindow(); + }), }); diff --git a/src/renderer/src/pages/settings/index.tsx b/src/renderer/src/pages/settings/index.tsx index 71af8e3f9..2a018859b 100644 --- a/src/renderer/src/pages/settings/index.tsx +++ b/src/renderer/src/pages/settings/index.tsx @@ -60,6 +60,10 @@ export default function Settings() { isClosable: true, variant: 'ui-tars-success', }); + + // Close settings window and show main window + await api.closeSettingsWindow(); + await api.showMainWindow(); }; const handleCancel = async () => { From 448302dfb3d647588a9f5ce03c172eaec83568ca Mon Sep 17 00:00:00 2001 From: skychx Date: Wed, 19 Feb 2025 23:00:17 +0800 Subject: [PATCH 16/62] feat(visualizer): reduce html report size (close: #118) (#119) * feat(visualizer): reduce html report size * feat(visualizer): remove midscene_report_tpl element and minify css & js code * feat(visualizer): externals common lib --- packages/visualizer/README.md | 2 +- packages/visualizer/html/report.html | 47 +- packages/visualizer/modern.config.ts | 48 +- packages/visualizer/package.json | 4 +- packages/visualizer/pnpm-lock.yaml | 18090 +++++++++++--------- packages/visualizer/scripts/build-html.ts | 40 +- 6 files changed, 9921 insertions(+), 8310 deletions(-) diff --git a/packages/visualizer/README.md b/packages/visualizer/README.md index 45ec6478c..ce880f6fa 100644 --- a/packages/visualizer/README.md +++ b/packages/visualizer/README.md @@ -1,6 +1,6 @@ ## Documentation -Fork from [@midscene/visualizer](https://github.com/midscene/midscene) +Fork from [@midscene/visualizer](https://github.com/web-infra-dev/midscene/tree/main/packages/visualizer) ## License diff --git a/packages/visualizer/html/report.html b/packages/visualizer/html/report.html index e5e3d725c..ae38d4053 100644 --- a/packages/visualizer/html/report.html +++ b/packages/visualizer/html/report.html @@ -2,30 +2,33 @@ - - - - - UI TARS Visualizer - {{css}} - + + + + UI TARS Visualizer + + {{css}} - - {{dump}} - -

  • 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�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 z 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