From 535cbfc54e493650b15425358531c0d57d6c9dae Mon Sep 17 00:00:00 2001 From: ScarletFlash Date: Wed, 12 Mar 2025 18:13:11 +0100 Subject: [PATCH 1/4] build: bump dependencies --- .github/workflows/check.yaml | 10 +- .github/workflows/publish.yaml | 1 - assets/icon-128.png | Bin 0 -> 4491 bytes configs/prettier/ignore | 3 + examples/package.json | 1 + examples/src/index.css | 4 +- examples/start.script.ts | 10 +- extension/build.script.ts | 4 +- extension/package.json | 1 + extension/src/dialog/index.css | 4 +- package.json | 6 +- pnpm-lock.yaml | 1656 ++++++++++++++------------------ pnpm-workspace.yaml | 29 +- 13 files changed, 745 insertions(+), 984 deletions(-) create mode 100644 assets/icon-128.png diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml index f5a23de..3253436 100644 --- a/.github/workflows/check.yaml +++ b/.github/workflows/check.yaml @@ -4,12 +4,12 @@ on: workflow_dispatch: push: branches: - - "main" + - 'main' pull_request: branches: - - "main" + - 'main' schedule: - - cron: "0 4 * * *" + - cron: '0 4 * * *' concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.sha }}-${{ github.event_name }} @@ -25,7 +25,7 @@ jobs: runs-on: ubuntu-latest name: Run health checks steps: - - name: "Fetch current Git commit history" + - name: 'Fetch current Git commit history' uses: actions/checkout@v4 with: fetch-depth: 2 @@ -40,7 +40,6 @@ jobs: restore-keys: | ${{ runner.os }}-turbo-${{ github.workflow }}- ${{ runner.os }}-turbo- - save-always: true - name: Setup tooling caches uses: actions/cache@v4 @@ -53,7 +52,6 @@ jobs: restore-keys: | ${{ runner.os }}-tooling-${{ github.workflow }}- ${{ runner.os }}-tooling- - save-always: true - name: Setup PNPM uses: pnpm/action-setup@v4 diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 9dbb6f2..b9bdf59 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -38,7 +38,6 @@ jobs: restore-keys: | ${{ runner.os }}-turbo-${{ github.workflow }}- ${{ runner.os }}-turbo- - save-always: true - name: Setup PNPM uses: pnpm/action-setup@v4 diff --git a/assets/icon-128.png b/assets/icon-128.png new file mode 100644 index 0000000000000000000000000000000000000000..0d5f2aea7df964f59221b4b2059ed3bdd1ddfab5 GIT binary patch literal 4491 zcmZu#2T)U8w>_aZC4$r-geV{i1_)h{08vo{lqMaO7Cu^lAfX5W5kwJGq)AahdJocD zz!H!uy%!Or7XfJz{y5*vn|bg3bI-kd?mn|-pE; z1CIVaZ|k#TX&z?$HNDHs3v_fm$4(}8mE-{cb-9MoG$xF!q?)@5UG=9N+4}5^2_5&i zbtd9H&#iQ+rS*3oHxLzr>=YQRiAhtKG<=M=wGDx$`yq-Z*3C*AXbOA5VG^3p8J+^0 z;<63ljge$Cl53mAWl~}9OPvj_R)OO&)%$r!&W?B3LMiiQ)14?QjXUrTY@dnsWMjkr zVsg zs7pcb;Zlt!kOT|cw}ptu(EtY-0*l}r$OHd?f{sDaU$04qxpzE0Wfw>PjHz|gwfx+K zg%5{;Zpa-d`7BY5=mu0hdv{0tN1=cT4pFX>4CNx4gWH3)W$jk(uRga!wLXM75#Wrt zAHU)TiQ3jHb&P|$H;=jH*^F>bjV|JyPjBRJP&zl3NEiVO1&jQEQS!6(6DqA)lqOI z07BLv!-Ro+j6^rp77-X85uwyI$wj#mNrA29(5w<%^K=OQHU$^y0p#?a&hMB?e!f#2<2D6xb!=E9n3hw z_Yuo>LR$P*WjQ@`q;fjbUCiBa!{Wt5*H1wiyB!)wzJxT!FI=>&&~5{SoqKnO43$<#t>`z`>5=- znZzUWga(6(yTkFyJDmwGwa0D0V@4PwL^|iObDpmlmL4r&es=^548;HBhKth2>?JyX zq-WP7K{>cM5a{cO1+Mq!6&tiqS}{IWR`jlx_S>j;-6nf8mcVNGx<6i6_ts{}OW3Zc zJd`f(GH}#HRE0Y+kw5vj$GN5YWV^imj^{K@u_|tDRgBn9wAZ{*A%^kk@7CR9t(S=# z;LDb?s6H9-3Lzs}RS{2}UuhUAIxQBR9m=fzOYW?P;bmDe{K{xH*OhK;TjmYdUYc$JO+UQB588}Ha2Kv5c%v>Z)# zoRq&0EzhRdr06NDYy02`cg;6h(KRh~2NsPD%BiehcYjxWiz|0(^z8T=lOQ@<4?E;5 zl7w*OsBQE!RvmYUZj`%TG$SFQnO-LpqnGO9?Z2sjBN#Q$aS^+fgBI)qzJEV>5F!sj z4L`KYjQbgU^rRPM%y~c1fymlVu{D$7&F+cxUURK=LXuy?12JqQl7dy}=CUnb8o6j1El zE}Y8ir@ToqXgnBcNo`=}l0vEU3JN0ozr^qsP}4{W;N{7RX_$NjcnlwSa%FM3tD>p= zku9Xey(&)IHkA~#U9+iR{&G&=sgaedE;CU3G3El0%eVMWjdY*1(?Hp)It~0*F9V{= z@;i;yRO5l%m4GZ3M`X^^DN1U9m<5F8nO$!}&lf6YAh_X8tKftYsq)!?meOH|>X>@w zm_6nIb4>TTm49Pw`|IhQt2~Na`ffWf5Mcw?yI8L1J<}!^=aWvz%ZiKC2Zn~rBf~;gqdOT3LQgLa zw0x9aCwOn3cn0dK8{NmMUT^TH#4@ zzr7mFj!|Uz|#*q_lGqJu}H)V0;rcs zJu}K???8%ODs07^dugJ;NjJ@ozCQms$ymln@gA*pvAv@s7jo5rmeQ~a5`W7R`vLsI z7Dq1VW}apvve=s{+_H(z1tlsh!}L&$n;y4gd8v5@r!nAXxEla?<4jIJo;3zjd7xYA z9R;MDsmZ1*~3RCjAA``z`mG0M5e_jv;{P`Zuj>akPlhaImwy@dlF6V0hI#3 z-32)j(?`5ebg_e8tXyhY+`*2)Jl!49Azwi=mN~-LW3{WCh!X_xaZLycZz?#bkEVMJ zKk?~`RVZB|Q_hA4RBH#wrQ!eZj1E;6mk&%SoS&wE)+qXEUv3u3mZGb*MK4%5n^iw` zqe9&C#vS!`6oO)xUgi|;jU{{JKPq0crN#!gQ#AJcE~+SMV#o5d4XfHd(rRPnILtGl zV1FQ(%Q4|Y|2?(78jn}fl0J(P4{}i&r*5QOZ0Hzi@XkD3H)5ZQrq7ofo^xGR8$pEC zX@J-p4yTfIM$<`L6jSf!_V>sRF>TwYNcm{%i=**XcoH96JU@$4oVpOLm%4`Yj~M)C z<|<#ibwvEQYh`)qHB2mb1GCP1>)`?OtDfRB5+ZN;oQ%?KzS*m-gp)ohp2(@la+-MH zcC*ja4py54m937JaYX)%f(?>7la$VHmrAg0s~hm97D2c%(`%+)$QAyeNZAGa@4 zZ?4WRJ+=POuXWC6|CuqZr`MYX8RS;%=(5wSpB<${T=V1L(N?9F^b2tB%J-fFYx@I# z#pf8ej*=@PlC8$I-jiwUP{F^IOY)#@9(OBzMIGA~`xSm{v~R1~*z)_=h0dX^M^VYn zO5@QD*l3p8@s&q5>Goc#6-n+z#fxoNOhKWPxRD4IH~L`onJ(7#hP94UF!k5*Lisln zJ%)-1B15csubmN}YI(V#RClidb>iOcWjW;+_Y0d!O^zaDWncc(-^%PfG`Ritnm`x! zv90QG+QIbXN*{Z#TgdV~MfnEW$&Rf~3TIz&sj1)oq0DR}+D??B^9tkcBu z?@PaYaP)BbEdR@GLctD}2Qdw(Ea~x@H_n>vM;!vuM~Uf7&N$FYE)BFnjGXO(F)i8|oQ$eIuQHj0LWq~;WgGlCEAnQy zr0mjfLerQhZg^qL<|n~$LeZo)NFSQSqi6g2DW&L*i*BG-jjnAXmc}2HqN6t-2kYX}9H~JWM`hsvNoBA2;*ATO)0h()wP%@ow#kx`NW+ zZSOK`pQILLp{Kg{n1-{&^YX*ZET1^Hv0rm5e|~cN$+w|ijS~1Xfs_`rS&7E`G^%0I zF>nx~!$`(?*E`ah{39As=?$^=wbn^DRm8YSJC0S21dY;*XejVWxMP+=CNjFK{MW0K z_B$!JUw_+0|FHZl*Z*7H8dt;gb%Hew(j$}e^Q*_3>I}W?Fs5LSoV7rFY2a=qtb?li zj_8Ybl}9?#Xhg?iMwechySxd0ncb1Zd_R65ZEv4}Vstz)!)2zn4iAC_JnfpsHuz_Q z)|DE?P1z0TrGw?F?u;wj9`<+y4Xy~9J#{6+rey9nXX8D+Rf${6QV375=XFO^h+!It!7(;`CW8KHY9TD)?d2J7+<035krN zQR_%607~lWqO2}3BSP=;#~OY$0W;tw*8KzvPymzk>joemLVRq|yo-)y0l?JM^m*GX zJQGuDR`>dPraR!L?+%~ihBToL&k)zZE)wtp9m(X0l}Z28dY{+V*XJr{Km+5QuKfc? zXeiTLjwv@#3=*BG+WA}imL6HTSVE`|8_;h;QQ>u>qHHWSmgXSn_>=?C040bpfU11I z0aF@y^<#7IOFO_|+UxkpPk}Jw^Kd2Is!3tZg34P0WC}QhrGdp~$oZP+^S6sI<5reg z&Ws??f???sSY}+8B0iw$OH{Hz7(ceRjR8kbK5A-((resolve: () => void, reject: (error: Error) => void) => { exec( - `tailwindcss --input ${globalStylesInput} --output ${globalStylesOutput} --minify --no-autoprefixer --content ${contentPaths.join(',')}` + `${TAILWIND_BIN_PATH} --input ${globalStylesInput} --output ${globalStylesOutput} --minify --no-autoprefixer --content ${contentPaths.join(',')}` ).on('close', (code: number) => { code === 0 ? resolve() : reject(new Error(`Tailwind CSS process exited with code ${code}`)); }); @@ -111,7 +113,9 @@ async function generateCss({ contentPaths, globalStylesOutput, globalStylesInput entryNames: '[dir]/[name]' }); - const { host, port }: ServeResult = await buildContext.serve({ servedir: SERVE_PATH }); + const { hosts, port }: ServeResult = await buildContext.serve({ servedir: SERVE_PATH }); - console.log(`Serving at http://${host}:${port}/`); + hosts.forEach((host: string) => { + console.log(`Serving at http://${host}:${port}/`); + }); })(); diff --git a/extension/build.script.ts b/extension/build.script.ts index 16659af..3f72a33 100644 --- a/extension/build.script.ts +++ b/extension/build.script.ts @@ -6,6 +6,8 @@ import { basename, join, resolve } from 'path'; const DEFAULT_CHARSET: 'utf8' = 'utf8'; +const TAILWIND_BIN_PATH: string = resolve(__dirname, 'node_modules', '.bin', 'tailwindcss'); + const RESULT_BUNDLE_PATH: string = resolve(__dirname, 'unpacked-extension'); const DIALOG_FILE_NAME: string = 'index'; @@ -75,7 +77,7 @@ interface GenerateCssParams { async function generateCss({ contentPaths, globalStylesOutput, globalStylesInput }: GenerateCssParams) { return new Promise((resolve: () => void, reject: (error: Error) => void) => { exec( - `tailwindcss --input ${globalStylesInput} --output ${globalStylesOutput} --minify --no-autoprefixer --content ${contentPaths.join(',')}` + `${TAILWIND_BIN_PATH} --input ${globalStylesInput} --output ${globalStylesOutput} --minify --no-autoprefixer --content ${contentPaths.join(',')}` ).on('close', (code: number) => { code === 0 ? resolve() : reject(new Error(`Tailwind CSS process exited with code ${code}`)); }); diff --git a/extension/package.json b/extension/package.json index 09bd71d..1068e9f 100644 --- a/extension/package.json +++ b/extension/package.json @@ -22,6 +22,7 @@ "react-dom": "catalog:codebase" }, "devDependencies": { + "@tailwindcss/cli": "catalog:build-tools", "@types/react": "catalog:codebase", "@types/react-dom": "catalog:codebase", "tailwindcss": "catalog:build-tools", diff --git a/extension/src/dialog/index.css b/extension/src/dialog/index.css index b5c61c9..d4b5078 100644 --- a/extension/src/dialog/index.css +++ b/extension/src/dialog/index.css @@ -1,3 +1 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; +@import 'tailwindcss'; diff --git a/package.json b/package.json index f6637e1..2f13934 100644 --- a/package.json +++ b/package.json @@ -20,8 +20,8 @@ "prettier": "catalog:codebase" }, "engines": { - "pnpm": "9.15.2", - "node": "22.12.0" + "pnpm": "10.6.2", + "node": "22.14.0" }, - "packageManager": "pnpm@9.15.2" + "packageManager": "pnpm@10.6.2" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b52fe7..25da282 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,20 +7,23 @@ settings: catalogs: build-tools: '@microsoft/api-extractor': - specifier: ^7.0.0 - version: 7.47.9 + specifier: ^7.52.1 + version: 7.52.1 '@npm/types': specifier: ^2.0.0 version: 2.0.0 + '@tailwindcss/cli': + specifier: ^4.0.13 + version: 4.0.13 '@types/node': - specifier: ^22.0.0 - version: 22.5.5 + specifier: ^22.13.10 + version: 22.13.10 esbuild: - specifier: ~0.24.0 - version: 0.24.0 + specifier: ^0.25.1 + version: 0.25.1 tailwindcss: - specifier: ^3.0.0 - version: 3.4.13 + specifier: ^4.0.13 + version: 4.0.13 ts-node: specifier: ^10.0.0 version: 10.9.2 @@ -29,20 +32,20 @@ catalogs: specifier: ^2.0.0 version: 2.2.0 '@types/react': - specifier: ^19.0.0 - version: 19.0.3 + specifier: ^19.0.10 + version: 19.0.10 '@types/react-dom': - specifier: ^19.0.0 - version: 19.0.2 + specifier: ^19.0.4 + version: 19.0.4 chrome-types: - specifier: ^0.1.0 - version: 0.1.307 + specifier: ^0.1.345 + version: 0.1.345 prettier: - specifier: ^3.4.0 - version: 3.4.2 + specifier: ^3.5.3 + version: 3.5.3 prettier-plugin-sort-json: - specifier: ^4.0.0 - version: 4.0.0 + specifier: ^4.1.1 + version: 4.1.1 react: specifier: ^19.0.0 version: 19.0.0 @@ -50,11 +53,11 @@ catalogs: specifier: ^19.0.0 version: 19.0.0 turbo: - specifier: ~2.3.0 - version: 2.3.3 + specifier: ^2.4.4 + version: 2.4.4 typescript: - specifier: ^5.7.0 - version: 5.7.2 + specifier: ^5.8.2 + version: 5.8.2 importers: @@ -65,10 +68,10 @@ importers: version: link:configs prettier: specifier: catalog:codebase - version: 3.4.2 + version: 3.5.3 turbo: specifier: catalog:codebase - version: 2.3.3 + version: 2.4.4 assets: devDependencies: @@ -77,20 +80,20 @@ importers: version: link:../configs prettier: specifier: catalog:codebase - version: 3.4.2 + version: 3.5.3 configs: dependencies: prettier-plugin-sort-json: specifier: catalog:codebase - version: 4.0.0(prettier@3.4.2) + version: 4.1.1(prettier@3.5.3) devDependencies: prettier: specifier: catalog:codebase - version: 3.4.2 + version: 3.5.3 typescript: specifier: catalog:codebase - version: 5.7.2 + version: 5.8.2 core: dependencies: @@ -106,13 +109,13 @@ importers: version: link:../configs '@microsoft/api-extractor': specifier: catalog:build-tools - version: 7.47.9(@types/node@22.5.5) + version: 7.52.1(@types/node@22.13.10) prettier: specifier: catalog:codebase - version: 3.4.2 + version: 3.5.3 typescript: specifier: catalog:codebase - version: 5.7.2 + version: 5.8.2 declarations: devDependencies: @@ -121,13 +124,13 @@ importers: version: link:../configs '@microsoft/api-extractor': specifier: catalog:build-tools - version: 7.47.9(@types/node@22.5.5) + version: 7.52.1(@types/node@22.13.10) prettier: specifier: catalog:codebase - version: 3.4.2 + version: 3.5.3 typescript: specifier: catalog:codebase - version: 5.7.2 + version: 5.8.2 dist: dependencies: @@ -143,25 +146,25 @@ importers: version: link:../configs '@microsoft/api-extractor': specifier: catalog:build-tools - version: 7.47.9(@types/node@22.5.5) + version: 7.52.1(@types/node@22.13.10) '@npm/types': specifier: catalog:build-tools version: 2.0.0 '@types/node': specifier: catalog:build-tools - version: 22.5.5 + version: 22.13.10 esbuild: specifier: catalog:build-tools - version: 0.24.0 + version: 0.25.1 prettier: specifier: catalog:codebase - version: 3.4.2 + version: 3.5.3 ts-node: specifier: catalog:build-tools - version: 10.9.2(@types/node@22.5.5)(typescript@5.7.2) + version: 10.9.2(@types/node@22.13.10)(typescript@5.8.2) typescript: specifier: catalog:codebase - version: 5.7.2 + version: 5.8.2 examples: dependencies: @@ -172,24 +175,27 @@ importers: '@consy/configs': specifier: workspace:* version: link:../configs + '@tailwindcss/cli': + specifier: catalog:build-tools + version: 4.0.13 '@types/node': specifier: catalog:build-tools - version: 22.5.5 + version: 22.13.10 esbuild: specifier: catalog:build-tools - version: 0.24.0 + version: 0.25.1 prettier: specifier: catalog:codebase - version: 3.4.2 + version: 3.5.3 tailwindcss: specifier: catalog:build-tools - version: 3.4.13(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.7.2)) + version: 4.0.13 ts-node: specifier: catalog:build-tools - version: 10.9.2(@types/node@22.5.5)(typescript@5.7.2) + version: 10.9.2(@types/node@22.13.10)(typescript@5.8.2) typescript: specifier: catalog:codebase - version: 5.7.2 + version: 5.8.2 extension: dependencies: @@ -218,33 +224,36 @@ importers: '@npm/types': specifier: catalog:build-tools version: 2.0.0 + '@tailwindcss/cli': + specifier: catalog:build-tools + version: 4.0.13 '@types/node': specifier: catalog:build-tools - version: 22.5.5 + version: 22.13.10 '@types/react': specifier: catalog:codebase - version: 19.0.3 + version: 19.0.10 '@types/react-dom': specifier: catalog:codebase - version: 19.0.2(@types/react@19.0.3) + version: 19.0.4(@types/react@19.0.10) chrome-types: specifier: catalog:codebase - version: 0.1.307 + version: 0.1.345 esbuild: specifier: catalog:build-tools - version: 0.24.0 + version: 0.25.1 prettier: specifier: catalog:codebase - version: 3.4.2 + version: 3.5.3 tailwindcss: specifier: catalog:build-tools - version: 3.4.13(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.7.2)) + version: 4.0.13 ts-node: specifier: catalog:build-tools - version: 10.9.2(@types/node@22.5.5)(typescript@5.7.2) + version: 10.9.2(@types/node@22.13.10)(typescript@5.8.2) typescript: specifier: catalog:codebase - version: 5.7.2 + version: 5.8.2 utilities: devDependencies: @@ -256,164 +265,166 @@ importers: version: link:../declarations '@microsoft/api-extractor': specifier: catalog:build-tools - version: 7.47.9(@types/node@22.5.5) + version: 7.52.1(@types/node@22.13.10) prettier: specifier: catalog:codebase - version: 3.4.2 + version: 3.5.3 typescript: specifier: catalog:codebase - version: 5.7.2 + version: 5.8.2 packages: - '@alloc/quick-lru@5.2.0': - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} - '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - '@esbuild/aix-ppc64@0.24.0': - resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} + '@esbuild/aix-ppc64@0.25.1': + resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.24.0': - resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} + '@esbuild/android-arm64@0.25.1': + resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.24.0': - resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} + '@esbuild/android-arm@0.25.1': + resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.24.0': - resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} + '@esbuild/android-x64@0.25.1': + resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.24.0': - resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} + '@esbuild/darwin-arm64@0.25.1': + resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.24.0': - resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} + '@esbuild/darwin-x64@0.25.1': + resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.24.0': - resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} + '@esbuild/freebsd-arm64@0.25.1': + resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.24.0': - resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} + '@esbuild/freebsd-x64@0.25.1': + resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.24.0': - resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} + '@esbuild/linux-arm64@0.25.1': + resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.24.0': - resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} + '@esbuild/linux-arm@0.25.1': + resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.24.0': - resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} + '@esbuild/linux-ia32@0.25.1': + resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.24.0': - resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} + '@esbuild/linux-loong64@0.25.1': + resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.24.0': - resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} + '@esbuild/linux-mips64el@0.25.1': + resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.24.0': - resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} + '@esbuild/linux-ppc64@0.25.1': + resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.24.0': - resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} + '@esbuild/linux-riscv64@0.25.1': + resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.24.0': - resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} + '@esbuild/linux-s390x@0.25.1': + resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.24.0': - resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} + '@esbuild/linux-x64@0.25.1': + resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-x64@0.24.0': - resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} + '@esbuild/netbsd-arm64@0.25.1': + resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.1': + resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.24.0': - resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} + '@esbuild/openbsd-arm64@0.25.1': + resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.24.0': - resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} + '@esbuild/openbsd-x64@0.25.1': + resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.24.0': - resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} + '@esbuild/sunos-x64@0.25.1': + resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.24.0': - resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} + '@esbuild/win32-arm64@0.25.1': + resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.24.0': - resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} + '@esbuild/win32-ia32@0.25.1': + resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.24.0': - resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} + '@esbuild/win32-x64@0.25.1': + resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -446,63 +457,114 @@ packages: react: ^18 || ^19 || ^19.0.0-rc react-dom: ^18 || ^19 || ^19.0.0-rc - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - - '@jridgewell/gen-mapping@0.3.5': - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} - 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==} - '@microsoft/api-extractor-model@7.29.8': - resolution: {integrity: sha512-t3Z/xcO6TRbMcnKGVMs4uMzv/gd5j0NhMiJIGjD4cJMeFJ1Hf8wnLSx37vxlRlL0GWlGJhnFgxvnaL6JlS+73g==} + '@microsoft/api-extractor-model@7.30.4': + resolution: {integrity: sha512-RobC0gyVYsd2Fao9MTKOfTdBm41P/bCMUmzS5mQ7/MoAKEqy0FOBph3JOYdq4X4BsEnMEiSHc+0NUNmdzxCpjA==} - '@microsoft/api-extractor@7.47.9': - resolution: {integrity: sha512-TTq30M1rikVsO5wZVToQT/dGyJY7UXJmjiRtkHPLb74Prx3Etw8+bX7Bv7iLuby6ysb7fuu1NFWqma+csym8Jw==} + '@microsoft/api-extractor@7.52.1': + resolution: {integrity: sha512-m3I5uAwE05orsu3D1AGyisX5KxsgVXB+U4bWOOaX/Z7Ftp/2Cy41qsNhO6LPvSxHBaapyser5dVorF1t5M6tig==} hasBin: true - '@microsoft/tsdoc-config@0.17.0': - resolution: {integrity: sha512-v/EYRXnCAIHxOHW+Plb6OWuUoMotxTN0GLatnpOb1xq0KuTNw/WI3pamJx/UbsoJP5k9MCw1QxvvhPcF9pH3Zg==} - - '@microsoft/tsdoc@0.15.0': - resolution: {integrity: sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA==} - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + '@microsoft/tsdoc-config@0.17.1': + resolution: {integrity: sha512-UtjIFe0C6oYgTnad4q1QP4qXwLhe6tIpNTRStJ2RZEPIkqQPREAwE5spzVxsdn9UaEMUqhh0AqSx3X4nWAKXWw==} - '@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'} + '@microsoft/tsdoc@0.15.1': + resolution: {integrity: sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==} '@npm/types@2.0.0': resolution: {integrity: sha512-4WqrAc16VKuD8ea+tT8QC/WO+hkn32Z9qMFrG1u3dIAEv3pn0DuIUc7uBpplDJLFIyV7gq1qtm3Yv6kAxJh8KA==} engines: {node: '>=18.6.0'} - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} + '@parcel/watcher-android-arm64@2.5.1': + resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.1': + resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.1': + resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.1': + resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.1': + resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@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] + + '@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] + + '@parcel/watcher-linux-arm64-musl@2.5.1': + resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-x64-glibc@2.5.1': + resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-linux-x64-musl@2.5.1': + resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-win32-arm64@2.5.1': + resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.5.1': + resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.1': + resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.5.1': + resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} + engines: {node: '>= 10.0.0'} '@react-aria/focus@3.19.0': resolution: {integrity: sha512-hPF9EXoUQeQl1Y21/rbV2H4FdUR2v+4/I0/vB+8U3bT1CJ+1AFj1hc/rqx2DqEwDlEwOHN+E4+mRahQmlybq0A==} @@ -535,8 +597,8 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@rushstack/node-core-library@5.9.0': - resolution: {integrity: sha512-MMsshEWkTbXqxqFxD4gcIUWQOCeBChlGczdZbHfqmNZQFLHB3yWxDFSMHFUdu2/OB9NUk7Awn5qRL+rws4HQNg==} + '@rushstack/node-core-library@5.12.0': + resolution: {integrity: sha512-QSwwzgzWoil1SCQse+yCHwlhRxNv2dX9siPnAb9zR/UmMhac4mjMrlMZpk64BlCeOFi1kJKgXRkihSwRMbboAQ==} peerDependencies: '@types/node': '*' peerDependenciesMeta: @@ -546,20 +608,97 @@ packages: '@rushstack/rig-package@0.5.3': resolution: {integrity: sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow==} - '@rushstack/terminal@0.14.2': - resolution: {integrity: sha512-2fC1wqu1VCExKC0/L+0noVcFQEXEnoBOtCIex1TOjBzEDWcw8KzJjjj7aTP6mLxepG0XIyn9OufeFb6SFsa+sg==} + '@rushstack/terminal@0.15.1': + resolution: {integrity: sha512-3vgJYwumcjoDOXU3IxZfd616lqOdmr8Ezj4OWgJZfhmiBK4Nh7eWcv8sU8N/HdzXcuHDXCRGn/6O2Q75QvaZMA==} peerDependencies: '@types/node': '*' peerDependenciesMeta: '@types/node': optional: true - '@rushstack/ts-command-line@4.22.8': - resolution: {integrity: sha512-XbFjOoV7qZHJnSuFUHv0pKaFA4ixyCuki+xMjsMfDwfvQjs5MYG0IK5COal3tRnG7KCDe2l/G+9LrzYE/RJhgg==} + '@rushstack/ts-command-line@4.23.6': + resolution: {integrity: sha512-7WepygaF3YPEoToh4MAL/mmHkiIImQq3/uAkQX46kVoKTNOOlCtFGyNnze6OYuWw2o9rxsyrHVfIBKxq/am2RA==} '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@tailwindcss/cli@4.0.13': + resolution: {integrity: sha512-HakblDajmZu3aUsWbBDbJnB5D0PiwICH4fudsLsG55YbmZlVkSbfZ/yKa8r79N9dDhae4vNAj+21gm2WLpPLGA==} + hasBin: true + + '@tailwindcss/node@4.0.13': + resolution: {integrity: sha512-P9TmtE9Vew0vv5FwyD4bsg/dHHsIsAuUXkenuGUc5gm8fYgaxpdoxIKngCyEMEQxyCKR8PQY5V5VrrKNOx7exg==} + + '@tailwindcss/oxide-android-arm64@4.0.13': + resolution: {integrity: sha512-+9zmwaPQ8A9ycDcdb+hRkMn6NzsmZ4YJBsW5Xqq5EdOu9xlIgmuMuJauVzDPB5BSbIWfhPdZ+le8NeRZpl1coA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.0.13': + resolution: {integrity: sha512-Bj1QGlEJSjs/205CIRfb5/jeveOqzJ4pFMdRxu0gyiYWxBRyxsExXqaD+7162wnLP/EDKh6S1MC9E/1GwEhLtA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.0.13': + resolution: {integrity: sha512-lRTkxjTpMGXhLLM5GjZ0MtjPczMuhAo9j7PeSsaU6Imkm7W7RbrXfT8aP934kS7cBBV+HKN5U19Z0WWaORfb8Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.0.13': + resolution: {integrity: sha512-p/YLyKhs+xFibVeAPlpMGDVMKgjChgzs12VnDFaaqRSJoOz+uJgRSKiir2tn50e7Nm4YYw35q/DRBwpDBNo1MQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.13': + resolution: {integrity: sha512-Ua/5ydE/QOTX8jHuc7M9ICWnaLi6K2MV/r+Ws2OppsOjy8tdlPbqYainJJ6Kl7ofm524K+4Fk9CQITPzeIESPw==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.0.13': + resolution: {integrity: sha512-/W1+Q6tBAVgZWh/bhfOHo4n7Ryh6E7zYj4bJd9SRbkPyLtRioyK3bi6RLuDj57sa7Amk/DeomSV9iycS0xqIPA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-musl@4.0.13': + resolution: {integrity: sha512-GQj6TWevNxwsYw20FdT2r2d1f7uiRsF07iFvNYxPIvIyPEV74eZ0zgFEsAH1daK1OxPy+LXdZ4grV17P5tVzhQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-gnu@4.0.13': + resolution: {integrity: sha512-sQRH09faifF9w9WS6TKDWr1oLi4hoPx0EIWXZHQK/jcjarDpXGQ2DbF0KnALJCwWBxOIP/1nrmU01fZwwMzY3g==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-musl@4.0.13': + resolution: {integrity: sha512-Or1N8DIF3tP+LsloJp+UXLTIMMHMUcWXFhJLCsM4T7MzFzxkeReewRWXfk5mk137cdqVeUEH/R50xAhY1mOkTQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-win32-arm64-msvc@4.0.13': + resolution: {integrity: sha512-u2mQyqCFrr9vVTP6sfDRfGE6bhOX3/7rInehzxNhHX1HYRIx09H3sDdXzTxnZWKOjIg3qjFTCrYFUZckva5PIg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.0.13': + resolution: {integrity: sha512-sOEc4iCanp1Yqyeu9suQcEzfaUcHnqjBUgDg0ZXpjUMUwdSi37S1lu1RGoV1BYInvvGu3y3HHTmvsSfDhx2L8w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.0.13': + resolution: {integrity: sha512-pTH3Ex5zAWC9LbS+WsYAFmkXQW3NRjmvxkKJY3NP1x0KHBWjz0Q2uGtdGMJzsa0EwoZ7wq9RTbMH1UNPceCpWw==} + engines: {node: '>= 10'} + '@tanstack/react-virtual@3.11.2': resolution: {integrity: sha512-OuFzMXPF4+xZgx8UzJha0AieuMihhhaWG0tCqpp6tDzlFwOmNBPYMuLOtMJ1Tr4pXLHmgjcWhG6RlknY2oNTdQ==} peerDependencies: @@ -584,16 +723,16 @@ packages: '@types/argparse@1.0.38': resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} - '@types/node@22.5.5': - resolution: {integrity: sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==} + '@types/node@22.13.10': + resolution: {integrity: sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==} - '@types/react-dom@19.0.2': - resolution: {integrity: sha512-c1s+7TKFaDRRxr1TxccIX2u7sfCnc3RxkVyBIUA2lCpyqCF+QoAwQ/CBg7bsMdVwP120HEH143VQezKtef5nCg==} + '@types/react-dom@19.0.4': + resolution: {integrity: sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==} peerDependencies: '@types/react': ^19.0.0 - '@types/react@19.0.3': - resolution: {integrity: sha512-UavfHguIjnnuq9O67uXfgy/h3SRJbidAYvNjLceB+2RIKVRBzVsh0QO+Pw6BCSQqFS9xwzKfwstXx0m6AbAREA==} + '@types/react@19.0.10': + resolution: {integrity: sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g==} acorn-walk@8.3.4: resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} @@ -626,165 +765,74 @@ packages: ajv@8.13.0: resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} - 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-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@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - 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'} - camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - - chrome-types@0.1.307: - resolution: {integrity: sha512-IbwiExo5HCD41m1cJ1veai3rhz26K/Ig+L3dsw59GpJkOHwtzPxvq1FJprt6xk6ZH0MCrbcZSA5g0wLPpOXsYQ==} + chrome-types@0.1.345: + resolution: {integrity: sha512-yvrWj6lKVTIrWxinIZxIiT/dM/KeDZJANO2JQ4wWHwB8xNt5I0M4nDVEXX4+fNmGAuXqqZQRZH2ZJPEwmA3F1Q==} clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} - 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==} - - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} - dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + enhanced-resolve@5.18.1: + resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} + engines: {node: '>=10.13.0'} - esbuild@0.24.0: - resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} + esbuild@0.25.1: + resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==} engines: {node: '>=18'} hasBin: true fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} - - fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} - fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - foreground-child@3.3.0: - resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} - engines: {node: '>=14'} - - fs-extra@7.0.1: - resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} - engines: {node: '>=6 <7 || >=8'} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] + fs-extra@11.3.0: + resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} + engines: {node: '>=14.14'} function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - 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 - graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -800,10 +848,6 @@ packages: resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} engines: {node: '>=8'} - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - is-core-module@2.15.1: resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} engines: {node: '>= 0.4'} @@ -812,10 +856,6 @@ packages: 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-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -824,14 +864,8 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - - jiti@1.21.6: - resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true jju@1.4.0: @@ -840,26 +874,76 @@ packages: json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} + lightningcss-darwin-arm64@1.29.2: + resolution: {integrity: sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] - lilconfig@3.1.2: - resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} - engines: {node: '>=14'} + lightningcss-darwin-x64@1.29.2: + resolution: {integrity: sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.29.2: + resolution: {integrity: sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + lightningcss-linux-arm-gnueabihf@1.29.2: + resolution: {integrity: sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.29.2: + resolution: {integrity: sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.29.2: + resolution: {integrity: sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.29.2: + resolution: {integrity: sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.29.2: + resolution: {integrity: sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.29.2: + resolution: {integrity: sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.29.2: + resolution: {integrity: sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.29.2: + resolution: {integrity: sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==} + engines: {node: '>= 12.0.0'} lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -867,10 +951,6 @@ packages: make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -878,112 +958,31 @@ packages: minimatch@3.0.8: resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} - - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - - nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - 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'} - - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} 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'} - - picocolors@1.1.0: - resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} + 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'} - - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - - postcss-import@15.1.0: - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.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@4.0.2: - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - - postcss-nested@6.2.0: - resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - - postcss-selector-parser@6.1.2: - resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} - engines: {node: '>=4'} - - postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - - postcss@8.4.47: - resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} - engines: {node: ^10 || ^12 || >=14} - - prettier-plugin-sort-json@4.0.0: - resolution: {integrity: sha512-zV5g+bWFD2zAqyQ8gCkwUTC49o9FxslaUdirwivt5GZHcf57hCocavykuyYqbExoEsuBOg8IU36OY7zmVEMOWA==} + prettier-plugin-sort-json@4.1.1: + resolution: {integrity: sha512-uJ49wCzwJ/foKKV4tIPxqi4jFFvwUzw4oACMRG2dcmDhBKrxBv0L2wSKkAqHCmxKCvj0xcCZS4jO2kSJO/tRJw==} engines: {node: '>=18.0.0'} peerDependencies: prettier: ^3.0.0 - prettier@3.4.2: - resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} + prettier@3.5.3: + resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} engines: {node: '>=14'} hasBin: true @@ -991,9 +990,6 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - react-dom@19.0.0: resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==} peerDependencies: @@ -1003,13 +999,6 @@ packages: resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} engines: {node: '>=0.10.0'} - read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} @@ -1018,13 +1007,6 @@ packages: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - scheduler@0.25.0: resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} @@ -1033,22 +1015,6 @@ packages: engines: {node: '>=10'} hasBin: true - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -1060,31 +1026,10 @@ packages: 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'} - - 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-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} @@ -1096,25 +1041,17 @@ packages: tabbable@6.2.0: resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} - tailwindcss@3.4.13: - resolution: {integrity: sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==} - engines: {node: '>=14.0.0'} - hasBin: true - - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} + tailwindcss@4.0.13: + resolution: {integrity: sha512-gbvFrB0fOsTv/OugXWi2PtflJ4S6/ctu6Mmn3bCftmLY/6xRsQVEJPgIIpABwpZ52DpONkCA3bEj5b54MHxF2Q==} - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - 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 @@ -1132,169 +1069,144 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - turbo-darwin-64@2.3.3: - resolution: {integrity: sha512-bxX82xe6du/3rPmm4aCC5RdEilIN99VUld4HkFQuw+mvFg6darNBuQxyWSHZTtc25XgYjQrjsV05888w1grpaA==} + turbo-darwin-64@2.4.4: + resolution: {integrity: sha512-5kPvRkLAfmWI0MH96D+/THnDMGXlFNmjeqNRj5grLKiry+M9pKj3pRuScddAXPdlxjO5Ptz06UNaOQrrYGTx1g==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@2.3.3: - resolution: {integrity: sha512-DYbQwa3NsAuWkCUYVzfOUBbSUBVQzH5HWUFy2Kgi3fGjIWVZOFk86ss+xsWu//rlEAfYwEmopigsPYSmW4X15A==} + turbo-darwin-arm64@2.4.4: + resolution: {integrity: sha512-/gtHPqbGQXDFhrmy+Q/MFW2HUTUlThJ97WLLSe4bxkDrKHecDYhAjbZ4rN3MM93RV9STQb3Tqy4pZBtsd4DfCw==} cpu: [arm64] os: [darwin] - turbo-linux-64@2.3.3: - resolution: {integrity: sha512-eHj9OIB0dFaP6BxB88jSuaCLsOQSYWBgmhy2ErCu6D2GG6xW3b6e2UWHl/1Ho9FsTg4uVgo4DB9wGsKa5erjUA==} + turbo-linux-64@2.4.4: + resolution: {integrity: sha512-SR0gri4k0bda56hw5u9VgDXLKb1Q+jrw4lM7WAhnNdXvVoep4d6LmnzgMHQQR12Wxl3KyWPbkz9d1whL6NTm2Q==} cpu: [x64] os: [linux] - turbo-linux-arm64@2.3.3: - resolution: {integrity: sha512-NmDE/NjZoDj1UWBhMtOPmqFLEBKhzGS61KObfrDEbXvU3lekwHeoPvAMfcovzswzch+kN2DrtbNIlz+/rp8OCg==} + turbo-linux-arm64@2.4.4: + resolution: {integrity: sha512-COXXwzRd3vslQIfJhXUklgEqlwq35uFUZ7hnN+AUyXx7hUOLIiD5NblL+ETrHnhY4TzWszrbwUMfe2BYWtaPQg==} cpu: [arm64] os: [linux] - turbo-windows-64@2.3.3: - resolution: {integrity: sha512-O2+BS4QqjK3dOERscXqv7N2GXNcqHr9hXumkMxDj/oGx9oCatIwnnwx34UmzodloSnJpgSqjl8iRWiY65SmYoQ==} + turbo-windows-64@2.4.4: + resolution: {integrity: sha512-PV9rYNouGz4Ff3fd6sIfQy5L7HT9a4fcZoEv8PKRavU9O75G7PoDtm8scpHU10QnK0QQNLbE9qNxOAeRvF0fJg==} cpu: [x64] os: [win32] - turbo-windows-arm64@2.3.3: - resolution: {integrity: sha512-dW4ZK1r6XLPNYLIKjC4o87HxYidtRRcBeo/hZ9Wng2XM/MqqYkAyzJXJGgRMsc0MMEN9z4+ZIfnSNBrA0b08ag==} + turbo-windows-arm64@2.4.4: + resolution: {integrity: sha512-403sqp9t5sx6YGEC32IfZTVWkRAixOQomGYB8kEc6ZD+//LirSxzeCHCnM8EmSXw7l57U1G+Fb0kxgTcKPU/Lg==} cpu: [arm64] os: [win32] - turbo@2.3.3: - resolution: {integrity: sha512-DUHWQAcC8BTiUZDRzAYGvpSpGLiaOQPfYXlCieQbwUvmml/LRGIe3raKdrOPOoiX0DYlzxs2nH6BoWJoZrj8hA==} - hasBin: true - - typescript@5.4.2: - resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==} - engines: {node: '>=14.17'} + turbo@2.4.4: + resolution: {integrity: sha512-N9FDOVaY3yz0YCOhYIgOGYad7+m2ptvinXygw27WPLQvcZDl3+0Sa77KGVlLSiuPDChOUEnTKE9VJwLSi9BPGQ==} hasBin: true - typescript@5.7.2: - resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} + typescript@5.8.2: + resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} engines: {node: '>=14.17'} hasBin: true - undici-types@6.19.8: - resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} - 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'} uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - 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'} - yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@2.5.1: - resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} - engines: {node: '>= 14'} - hasBin: true - yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} snapshots: - '@alloc/quick-lru@5.2.0': {} - '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 - '@esbuild/aix-ppc64@0.24.0': + '@esbuild/aix-ppc64@0.25.1': + optional: true + + '@esbuild/android-arm64@0.25.1': optional: true - '@esbuild/android-arm64@0.24.0': + '@esbuild/android-arm@0.25.1': optional: true - '@esbuild/android-arm@0.24.0': + '@esbuild/android-x64@0.25.1': optional: true - '@esbuild/android-x64@0.24.0': + '@esbuild/darwin-arm64@0.25.1': optional: true - '@esbuild/darwin-arm64@0.24.0': + '@esbuild/darwin-x64@0.25.1': optional: true - '@esbuild/darwin-x64@0.24.0': + '@esbuild/freebsd-arm64@0.25.1': optional: true - '@esbuild/freebsd-arm64@0.24.0': + '@esbuild/freebsd-x64@0.25.1': optional: true - '@esbuild/freebsd-x64@0.24.0': + '@esbuild/linux-arm64@0.25.1': optional: true - '@esbuild/linux-arm64@0.24.0': + '@esbuild/linux-arm@0.25.1': optional: true - '@esbuild/linux-arm@0.24.0': + '@esbuild/linux-ia32@0.25.1': optional: true - '@esbuild/linux-ia32@0.24.0': + '@esbuild/linux-loong64@0.25.1': optional: true - '@esbuild/linux-loong64@0.24.0': + '@esbuild/linux-mips64el@0.25.1': optional: true - '@esbuild/linux-mips64el@0.24.0': + '@esbuild/linux-ppc64@0.25.1': optional: true - '@esbuild/linux-ppc64@0.24.0': + '@esbuild/linux-riscv64@0.25.1': optional: true - '@esbuild/linux-riscv64@0.24.0': + '@esbuild/linux-s390x@0.25.1': optional: true - '@esbuild/linux-s390x@0.24.0': + '@esbuild/linux-x64@0.25.1': optional: true - '@esbuild/linux-x64@0.24.0': + '@esbuild/netbsd-arm64@0.25.1': optional: true - '@esbuild/netbsd-x64@0.24.0': + '@esbuild/netbsd-x64@0.25.1': optional: true - '@esbuild/openbsd-arm64@0.24.0': + '@esbuild/openbsd-arm64@0.25.1': optional: true - '@esbuild/openbsd-x64@0.24.0': + '@esbuild/openbsd-x64@0.25.1': optional: true - '@esbuild/sunos-x64@0.24.0': + '@esbuild/sunos-x64@0.25.1': optional: true - '@esbuild/win32-arm64@0.24.0': + '@esbuild/win32-arm64@0.25.1': optional: true - '@esbuild/win32-ia32@0.24.0': + '@esbuild/win32-ia32@0.25.1': optional: true - '@esbuild/win32-x64@0.24.0': + '@esbuild/win32-x64@0.25.1': optional: true '@floating-ui/core@1.6.9': @@ -1331,89 +1243,112 @@ snapshots: react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - '@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 - - '@jridgewell/gen-mapping@0.3.5': - 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': {} - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@microsoft/api-extractor-model@7.29.8(@types/node@22.5.5)': + '@microsoft/api-extractor-model@7.30.4(@types/node@22.13.10)': dependencies: - '@microsoft/tsdoc': 0.15.0 - '@microsoft/tsdoc-config': 0.17.0 - '@rushstack/node-core-library': 5.9.0(@types/node@22.5.5) + '@microsoft/tsdoc': 0.15.1 + '@microsoft/tsdoc-config': 0.17.1 + '@rushstack/node-core-library': 5.12.0(@types/node@22.13.10) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.47.9(@types/node@22.5.5)': + '@microsoft/api-extractor@7.52.1(@types/node@22.13.10)': dependencies: - '@microsoft/api-extractor-model': 7.29.8(@types/node@22.5.5) - '@microsoft/tsdoc': 0.15.0 - '@microsoft/tsdoc-config': 0.17.0 - '@rushstack/node-core-library': 5.9.0(@types/node@22.5.5) + '@microsoft/api-extractor-model': 7.30.4(@types/node@22.13.10) + '@microsoft/tsdoc': 0.15.1 + '@microsoft/tsdoc-config': 0.17.1 + '@rushstack/node-core-library': 5.12.0(@types/node@22.13.10) '@rushstack/rig-package': 0.5.3 - '@rushstack/terminal': 0.14.2(@types/node@22.5.5) - '@rushstack/ts-command-line': 4.22.8(@types/node@22.5.5) + '@rushstack/terminal': 0.15.1(@types/node@22.13.10) + '@rushstack/ts-command-line': 4.23.6(@types/node@22.13.10) lodash: 4.17.21 minimatch: 3.0.8 resolve: 1.22.8 semver: 7.5.4 source-map: 0.6.1 - typescript: 5.4.2 + typescript: 5.8.2 transitivePeerDependencies: - '@types/node' - '@microsoft/tsdoc-config@0.17.0': + '@microsoft/tsdoc-config@0.17.1': dependencies: - '@microsoft/tsdoc': 0.15.0 + '@microsoft/tsdoc': 0.15.1 ajv: 8.12.0 jju: 1.4.0 resolve: 1.22.8 - '@microsoft/tsdoc@0.15.0': {} + '@microsoft/tsdoc@0.15.1': {} - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 + '@npm/types@2.0.0': {} - '@nodelib/fs.stat@2.0.5': {} + '@parcel/watcher-android-arm64@2.5.1': + optional: true - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 + '@parcel/watcher-darwin-arm64@2.5.1': + optional: true - '@npm/types@2.0.0': {} + '@parcel/watcher-darwin-x64@2.5.1': + optional: true + + '@parcel/watcher-freebsd-x64@2.5.1': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.1': + optional: true - '@pkgjs/parseargs@0.11.0': + '@parcel/watcher-linux-arm64-glibc@2.5.1': optional: true + '@parcel/watcher-linux-arm64-musl@2.5.1': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.1': + optional: true + + '@parcel/watcher-win32-arm64@2.5.1': + optional: true + + '@parcel/watcher-win32-ia32@2.5.1': + optional: true + + '@parcel/watcher-win32-x64@2.5.1': + optional: true + + '@parcel/watcher@2.5.1': + dependencies: + detect-libc: 1.0.3 + is-glob: 4.0.3 + micromatch: 4.0.8 + node-addon-api: 7.1.1 + optionalDependencies: + '@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 + '@react-aria/focus@3.19.0(react@19.0.0)': dependencies: '@react-aria/interactions': 3.22.5(react@19.0.0) @@ -1454,34 +1389,34 @@ snapshots: dependencies: react: 19.0.0 - '@rushstack/node-core-library@5.9.0(@types/node@22.5.5)': + '@rushstack/node-core-library@5.12.0(@types/node@22.13.10)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) ajv-formats: 3.0.1(ajv@8.13.0) - fs-extra: 7.0.1 + fs-extra: 11.3.0 import-lazy: 4.0.0 jju: 1.4.0 resolve: 1.22.8 semver: 7.5.4 optionalDependencies: - '@types/node': 22.5.5 + '@types/node': 22.13.10 '@rushstack/rig-package@0.5.3': dependencies: resolve: 1.22.8 strip-json-comments: 3.1.1 - '@rushstack/terminal@0.14.2(@types/node@22.5.5)': + '@rushstack/terminal@0.15.1(@types/node@22.13.10)': dependencies: - '@rushstack/node-core-library': 5.9.0(@types/node@22.5.5) + '@rushstack/node-core-library': 5.12.0(@types/node@22.13.10) supports-color: 8.1.1 optionalDependencies: - '@types/node': 22.5.5 + '@types/node': 22.13.10 - '@rushstack/ts-command-line@4.22.8(@types/node@22.5.5)': + '@rushstack/ts-command-line@4.23.6(@types/node@22.13.10)': dependencies: - '@rushstack/terminal': 0.14.2(@types/node@22.5.5) + '@rushstack/terminal': 0.15.1(@types/node@22.13.10) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -1492,6 +1427,70 @@ snapshots: dependencies: tslib: 2.8.1 + '@tailwindcss/cli@4.0.13': + dependencies: + '@parcel/watcher': 2.5.1 + '@tailwindcss/node': 4.0.13 + '@tailwindcss/oxide': 4.0.13 + enhanced-resolve: 5.18.1 + lightningcss: 1.29.2 + mri: 1.2.0 + picocolors: 1.1.1 + tailwindcss: 4.0.13 + + '@tailwindcss/node@4.0.13': + dependencies: + enhanced-resolve: 5.18.1 + jiti: 2.4.2 + tailwindcss: 4.0.13 + + '@tailwindcss/oxide-android-arm64@4.0.13': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.0.13': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.0.13': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.0.13': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.13': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.0.13': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.0.13': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.0.13': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.0.13': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.0.13': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.0.13': + optional: true + + '@tailwindcss/oxide@4.0.13': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.0.13 + '@tailwindcss/oxide-darwin-arm64': 4.0.13 + '@tailwindcss/oxide-darwin-x64': 4.0.13 + '@tailwindcss/oxide-freebsd-x64': 4.0.13 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.0.13 + '@tailwindcss/oxide-linux-arm64-gnu': 4.0.13 + '@tailwindcss/oxide-linux-arm64-musl': 4.0.13 + '@tailwindcss/oxide-linux-x64-gnu': 4.0.13 + '@tailwindcss/oxide-linux-x64-musl': 4.0.13 + '@tailwindcss/oxide-win32-arm64-msvc': 4.0.13 + '@tailwindcss/oxide-win32-x64-msvc': 4.0.13 + '@tanstack/react-virtual@3.11.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@tanstack/virtual-core': 3.11.2 @@ -1510,15 +1509,15 @@ snapshots: '@types/argparse@1.0.38': {} - '@types/node@22.5.5': + '@types/node@22.13.10': dependencies: - undici-types: 6.19.8 + undici-types: 6.20.0 - '@types/react-dom@19.0.2(@types/react@19.0.3)': + '@types/react-dom@19.0.4(@types/react@19.0.10)': dependencies: - '@types/react': 19.0.3 + '@types/react': 19.0.10 - '@types/react@19.0.3': + '@types/react@19.0.10': dependencies: csstype: 3.1.3 @@ -1550,178 +1549,86 @@ snapshots: require-from-string: 2.0.2 uri-js: 4.4.1 - ansi-regex@5.0.1: {} - - ansi-regex@6.1.0: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - ansi-styles@6.2.1: {} - - any-promise@1.3.0: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - arg@4.1.3: {} - arg@5.0.2: {} - argparse@1.0.10: dependencies: sprintf-js: 1.0.3 balanced-match@1.0.2: {} - binary-extensions@2.3.0: {} - brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.1: - dependencies: - balanced-match: 1.0.2 - braces@3.0.3: dependencies: fill-range: 7.1.1 - camelcase-css@2.0.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 - - chrome-types@0.1.307: {} + chrome-types@0.1.345: {} clsx@2.1.1: {} - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - commander@4.1.1: {} - concat-map@0.0.1: {} create-require@1.1.1: {} - cross-spawn@7.0.3: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - cssesc@3.0.0: {} - csstype@3.1.3: {} - didyoumean@1.2.2: {} + detect-libc@1.0.3: {} - diff@4.0.2: {} - - dlv@1.1.3: {} + detect-libc@2.0.3: {} - eastasianwidth@0.2.0: {} - - emoji-regex@8.0.0: {} + diff@4.0.2: {} - emoji-regex@9.2.2: {} + enhanced-resolve@5.18.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 - esbuild@0.24.0: + esbuild@0.25.1: optionalDependencies: - '@esbuild/aix-ppc64': 0.24.0 - '@esbuild/android-arm': 0.24.0 - '@esbuild/android-arm64': 0.24.0 - '@esbuild/android-x64': 0.24.0 - '@esbuild/darwin-arm64': 0.24.0 - '@esbuild/darwin-x64': 0.24.0 - '@esbuild/freebsd-arm64': 0.24.0 - '@esbuild/freebsd-x64': 0.24.0 - '@esbuild/linux-arm': 0.24.0 - '@esbuild/linux-arm64': 0.24.0 - '@esbuild/linux-ia32': 0.24.0 - '@esbuild/linux-loong64': 0.24.0 - '@esbuild/linux-mips64el': 0.24.0 - '@esbuild/linux-ppc64': 0.24.0 - '@esbuild/linux-riscv64': 0.24.0 - '@esbuild/linux-s390x': 0.24.0 - '@esbuild/linux-x64': 0.24.0 - '@esbuild/netbsd-x64': 0.24.0 - '@esbuild/openbsd-arm64': 0.24.0 - '@esbuild/openbsd-x64': 0.24.0 - '@esbuild/sunos-x64': 0.24.0 - '@esbuild/win32-arm64': 0.24.0 - '@esbuild/win32-ia32': 0.24.0 - '@esbuild/win32-x64': 0.24.0 + '@esbuild/aix-ppc64': 0.25.1 + '@esbuild/android-arm': 0.25.1 + '@esbuild/android-arm64': 0.25.1 + '@esbuild/android-x64': 0.25.1 + '@esbuild/darwin-arm64': 0.25.1 + '@esbuild/darwin-x64': 0.25.1 + '@esbuild/freebsd-arm64': 0.25.1 + '@esbuild/freebsd-x64': 0.25.1 + '@esbuild/linux-arm': 0.25.1 + '@esbuild/linux-arm64': 0.25.1 + '@esbuild/linux-ia32': 0.25.1 + '@esbuild/linux-loong64': 0.25.1 + '@esbuild/linux-mips64el': 0.25.1 + '@esbuild/linux-ppc64': 0.25.1 + '@esbuild/linux-riscv64': 0.25.1 + '@esbuild/linux-s390x': 0.25.1 + '@esbuild/linux-x64': 0.25.1 + '@esbuild/netbsd-arm64': 0.25.1 + '@esbuild/netbsd-x64': 0.25.1 + '@esbuild/openbsd-arm64': 0.25.1 + '@esbuild/openbsd-x64': 0.25.1 + '@esbuild/sunos-x64': 0.25.1 + '@esbuild/win32-arm64': 0.25.1 + '@esbuild/win32-ia32': 0.25.1 + '@esbuild/win32-x64': 0.25.1 fast-deep-equal@3.1.3: {} - fast-glob@3.3.2: - 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 - - fastq@1.17.1: - dependencies: - reusify: 1.0.4 - fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 - foreground-child@3.3.0: - dependencies: - cross-spawn: 7.0.3 - signal-exit: 4.1.0 - - fs-extra@7.0.1: + fs-extra@11.3.0: dependencies: graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - - fsevents@2.3.3: - optional: true + jsonfile: 6.1.0 + universalify: 2.0.1 function-bind@1.1.2: {} - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - glob@10.4.5: - dependencies: - foreground-child: 3.3.0 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 - graceful-fs@4.2.11: {} has-flag@4.0.0: {} @@ -1732,51 +1639,76 @@ snapshots: import-lazy@4.0.0: {} - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.3.0 - is-core-module@2.15.1: dependencies: hasown: 2.0.2 is-extglob@2.1.1: {} - is-fullwidth-code-point@3.0.0: {} - is-glob@4.0.3: dependencies: is-extglob: 2.1.1 is-number@7.0.0: {} - isexe@2.0.0: {} - - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - jiti@1.21.6: {} + jiti@2.4.2: {} jju@1.4.0: {} json-schema-traverse@1.0.0: {} - jsonfile@4.0.0: + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 - lilconfig@2.1.0: {} + lightningcss-darwin-arm64@1.29.2: + optional: true - lilconfig@3.1.2: {} + lightningcss-darwin-x64@1.29.2: + optional: true - lines-and-columns@1.2.4: {} + lightningcss-freebsd-x64@1.29.2: + optional: true - lodash@4.17.21: {} + lightningcss-linux-arm-gnueabihf@1.29.2: + optional: true - lru-cache@10.4.3: {} + lightningcss-linux-arm64-gnu@1.29.2: + optional: true + + lightningcss-linux-arm64-musl@1.29.2: + optional: true + + lightningcss-linux-x64-gnu@1.29.2: + optional: true + + lightningcss-linux-x64-musl@1.29.2: + optional: true + + lightningcss-win32-arm64-msvc@1.29.2: + optional: true + + lightningcss-win32-x64-msvc@1.29.2: + optional: true + + lightningcss@1.29.2: + dependencies: + detect-libc: 2.0.3 + optionalDependencies: + lightningcss-darwin-arm64: 1.29.2 + lightningcss-darwin-x64: 1.29.2 + lightningcss-freebsd-x64: 1.29.2 + lightningcss-linux-arm-gnueabihf: 1.29.2 + lightningcss-linux-arm64-gnu: 1.29.2 + lightningcss-linux-arm64-musl: 1.29.2 + lightningcss-linux-x64-gnu: 1.29.2 + lightningcss-linux-x64-musl: 1.29.2 + lightningcss-win32-arm64-msvc: 1.29.2 + lightningcss-win32-x64-msvc: 1.29.2 + + lodash@4.17.21: {} lru-cache@6.0.0: dependencies: @@ -1784,8 +1716,6 @@ snapshots: make-error@1.3.6: {} - merge2@1.4.1: {} - micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -1795,93 +1725,24 @@ snapshots: dependencies: brace-expansion: 1.1.11 - minimatch@9.0.5: - dependencies: - brace-expansion: 2.0.1 - - minipass@7.1.2: {} - - mz@2.7.0: - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - - nanoid@3.3.7: {} + mri@1.2.0: {} - normalize-path@3.0.0: {} - - object-assign@4.1.1: {} - - object-hash@3.0.0: {} - - package-json-from-dist@1.0.1: {} - - path-key@3.1.1: {} + node-addon-api@7.1.1: {} path-parse@1.0.7: {} - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 - - picocolors@1.1.0: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} - pify@2.3.0: {} - - pirates@4.0.6: {} - - postcss-import@15.1.0(postcss@8.4.47): - dependencies: - postcss: 8.4.47 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.8 - - postcss-js@4.0.1(postcss@8.4.47): + prettier-plugin-sort-json@4.1.1(prettier@3.5.3): dependencies: - camelcase-css: 2.0.1 - postcss: 8.4.47 + prettier: 3.5.3 - postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.7.2)): - dependencies: - lilconfig: 3.1.2 - yaml: 2.5.1 - optionalDependencies: - postcss: 8.4.47 - ts-node: 10.9.2(@types/node@22.5.5)(typescript@5.7.2) - - postcss-nested@6.2.0(postcss@8.4.47): - dependencies: - postcss: 8.4.47 - 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.47: - dependencies: - nanoid: 3.3.7 - picocolors: 1.1.0 - source-map-js: 1.2.1 - - prettier-plugin-sort-json@4.0.0(prettier@3.4.2): - dependencies: - prettier: 3.4.2 - - prettier@3.4.2: {} + prettier@3.5.3: {} punycode@2.3.1: {} - queue-microtask@1.2.3: {} - react-dom@19.0.0(react@19.0.0): dependencies: react: 19.0.0 @@ -1889,14 +1750,6 @@ snapshots: react@19.0.0: {} - read-cache@1.0.0: - dependencies: - pify: 2.3.0 - - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 - require-from-string@2.0.2: {} resolve@1.22.8: @@ -1905,66 +1758,20 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - reusify@1.0.4: {} - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - scheduler@0.25.0: {} semver@7.5.4: dependencies: lru-cache: 6.0.0 - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - signal-exit@4.1.0: {} - - source-map-js@1.2.1: {} - source-map@0.6.1: {} sprintf-js@1.0.3: {} string-argv@0.3.2: {} - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.0 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-ansi@7.1.0: - dependencies: - ansi-regex: 6.1.0 - strip-json-comments@3.1.1: {} - sucrase@3.35.0: - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - 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 - supports-color@8.1.1: dependencies: has-flag: 4.0.0 @@ -1973,128 +1780,73 @@ snapshots: tabbable@6.2.0: {} - tailwindcss@3.4.13(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.7.2)): - 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.2 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.21.6 - lilconfig: 2.1.0 - micromatch: 4.0.8 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.1.0 - postcss: 8.4.47 - postcss-import: 15.1.0(postcss@8.4.47) - postcss-js: 4.0.1(postcss@8.4.47) - postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.7.2)) - postcss-nested: 6.2.0(postcss@8.4.47) - postcss-selector-parser: 6.1.2 - resolve: 1.22.8 - sucrase: 3.35.0 - transitivePeerDependencies: - - ts-node - - thenify-all@1.6.0: - dependencies: - thenify: 3.3.1 + tailwindcss@4.0.13: {} - thenify@3.3.1: - dependencies: - any-promise: 1.3.0 + tapable@2.2.1: {} to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - ts-interface-checker@0.1.13: {} - - ts-node@10.9.2(@types/node@22.5.5)(typescript@5.7.2): + ts-node@10.9.2(@types/node@22.13.10)(typescript@5.8.2): 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.5.5 + '@types/node': 22.13.10 acorn: 8.12.1 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.2 + typescript: 5.8.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 tslib@2.8.1: {} - turbo-darwin-64@2.3.3: + turbo-darwin-64@2.4.4: optional: true - turbo-darwin-arm64@2.3.3: + turbo-darwin-arm64@2.4.4: optional: true - turbo-linux-64@2.3.3: + turbo-linux-64@2.4.4: optional: true - turbo-linux-arm64@2.3.3: + turbo-linux-arm64@2.4.4: optional: true - turbo-windows-64@2.3.3: + turbo-windows-64@2.4.4: optional: true - turbo-windows-arm64@2.3.3: + turbo-windows-arm64@2.4.4: optional: true - turbo@2.3.3: + turbo@2.4.4: optionalDependencies: - turbo-darwin-64: 2.3.3 - turbo-darwin-arm64: 2.3.3 - turbo-linux-64: 2.3.3 - turbo-linux-arm64: 2.3.3 - turbo-windows-64: 2.3.3 - turbo-windows-arm64: 2.3.3 - - typescript@5.4.2: {} + turbo-darwin-64: 2.4.4 + turbo-darwin-arm64: 2.4.4 + turbo-linux-64: 2.4.4 + turbo-linux-arm64: 2.4.4 + turbo-windows-64: 2.4.4 + turbo-windows-arm64: 2.4.4 - typescript@5.7.2: {} + typescript@5.8.2: {} - undici-types@6.19.8: {} + undici-types@6.20.0: {} - universalify@0.1.2: {} + universalify@2.0.1: {} uri-js@4.4.1: dependencies: punycode: 2.3.1 - util-deprecate@1.0.2: {} - v8-compile-cache-lib@3.0.1: {} - which@2.0.2: - dependencies: - isexe: 2.0.0 - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.1 - string-width: 5.1.2 - strip-ansi: 7.1.0 - yallist@4.0.0: {} - yaml@2.5.1: {} - yn@3.1.1: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index fd6a475..00d3553 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,23 +1,28 @@ +onlyBuiltDependencies: + - '@parcel/watcher' + - esbuild + packages: - - './*/' + - ./*/ catalogs: build-tools: '@npm/types': ^2.0.0 - '@types/node': ^22.0.0 + '@types/node': ^22.13.10 ts-node: ^10.0.0 - esbuild: ~0.24.0 - '@microsoft/api-extractor': ^7.0.0 - tailwindcss: ^3.0.0 + esbuild: ^0.25.1 + '@microsoft/api-extractor': ^7.52.1 + tailwindcss: ^4.0.13 + '@tailwindcss/cli': ^4.0.13 codebase: - turbo: ~2.3.0 - typescript: ^5.7.0 - prettier: ^3.4.0 - prettier-plugin-sort-json: ^4.0.0 - chrome-types: ^0.1.0 - '@types/react': ^19.0.0 - '@types/react-dom': ^19.0.0 + turbo: ^2.4.4 + typescript: ^5.8.2 + prettier: ^3.5.3 + prettier-plugin-sort-json: ^4.1.1 + chrome-types: ^0.1.345 + '@types/react': ^19.0.10 + '@types/react-dom': ^19.0.4 react: ^19.0.0 react-dom: ^19.0.0 '@headlessui/react': ^2.0.0 From f88d15be2411e31b27339d064b9cb03930aebf5f Mon Sep 17 00:00:00 2001 From: ScarletFlash Date: Wed, 12 Mar 2025 20:39:40 +0100 Subject: [PATCH 2/4] fix: Consy is not mounted error --- pnpm-lock.yaml | 2 +- pnpm-workspace.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 25da282..854e555 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,7 +29,7 @@ catalogs: version: 10.9.2 codebase: '@headlessui/react': - specifier: ^2.0.0 + specifier: ^2.2.0 version: 2.2.0 '@types/react': specifier: ^19.0.10 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 00d3553..2513033 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -25,4 +25,4 @@ catalogs: '@types/react-dom': ^19.0.4 react: ^19.0.0 react-dom: ^19.0.0 - '@headlessui/react': ^2.0.0 + '@headlessui/react': ^2.2.0 From 120d6c96dd97abcae8c603a00bebdbca9d032b05 Mon Sep 17 00:00:00 2001 From: ScarletFlash Date: Wed, 12 Mar 2025 23:32:53 +0100 Subject: [PATCH 3/4] refactor: extension logic --- extension/src/dialog/RootContent.tsx | 33 +++-- extension/src/dialog/index.html | 2 +- extension/src/injectable-content-script.ts | 136 +++++++++++++++----- extension/src/injected-content.ts | 112 ++++++++++++++--- extension/src/service-worker.ts | 139 +++++++++++++++------ 5 files changed, 320 insertions(+), 102 deletions(-) diff --git a/extension/src/dialog/RootContent.tsx b/extension/src/dialog/RootContent.tsx index 9234f47..392c38e 100644 --- a/extension/src/dialog/RootContent.tsx +++ b/extension/src/dialog/RootContent.tsx @@ -20,24 +20,33 @@ export function RootContent(): ReactNode { const isMounted: boolean = useMemo(() => state.mountedInstances.length !== 0, [state.mountedInstances]); useEffect(() => { - cumulativeHandler.current.provide( - MountedInstancesMessage.type, - (mountedInstances: MountedInstance[]) => { - setState((previousState: RootContentState) => ({ - ...previousState, - mountedInstances - })); - } - ); + const cumulativeHandlerInstance: CumulativeMessageHandler = + cumulativeHandler.current.provide( + MountedInstancesMessage.type, + (mountedInstances: MountedInstance[]) => { + setState((currentState: RootContentState) => { + return { + ...currentState, + mountedInstances + }; + }); + } + ); - chrome.runtime.onMessage.addListener((data: unknown): undefined => { + const messageListener: (data: unknown) => undefined = (data: unknown): undefined => { if (!MessageBase.isMessageData(data)) { return; } - cumulativeHandler.current.handle(data); - }); + + cumulativeHandlerInstance.handle(data); + }; + chrome.runtime.onMessage.addListener(messageListener); chrome.runtime.sendMessage(new UpdateRequiredMessage()); + + return () => { + chrome.runtime.onMessage.removeListener(messageListener); + }; }, []); if (!isMounted) { diff --git a/extension/src/dialog/index.html b/extension/src/dialog/index.html index 76bcf18..f52fd34 100644 --- a/extension/src/dialog/index.html +++ b/extension/src/dialog/index.html @@ -6,7 +6,7 @@ /> - + diff --git a/extension/src/injectable-content-script.ts b/extension/src/injectable-content-script.ts index 1014fec..3f0068d 100644 --- a/extension/src/injectable-content-script.ts +++ b/extension/src/injectable-content-script.ts @@ -4,50 +4,122 @@ import { CumulativeMessageHandler } from './communication/cumulative-message-han import { MessageBase } from './communication/message-base'; import { MountedInstance, MountedInstancesMessage } from './communication/messages/mounted-instances.message'; import { RequestedCommand, RequestedCommandMessage } from './communication/messages/requested-command.message'; +import { UpdateRequiredMessage } from './communication/messages/update-required.message'; -const windowAccessor: Acessor = new Acessor(window); +class InjectableContentScript { + private static readonly noInstancesCheckString: '' = ''; + private static readonly debounceTimeMs: number = 100; -(() => { - if (!windowAccessor.isMounted(EXPOSED_INFO_PROPERTY_NAME)) { - window.postMessage(new MountedInstancesMessage([]), '*'); - return; - } + private debounceTimeoutId: number | null = null; + + private lastInstancesCheckString: string = InjectableContentScript.noInstancesCheckString; + + private readonly windowAccessor: Acessor = new Acessor(window); + + private readonly mutationObserver: MutationObserver; - const exposedInfo: unknown = windowAccessor.getValue(EXPOSED_INFO_PROPERTY_NAME); - if (!isExposedInfo(exposedInfo)) { - throw new Error('Consy ExposedInfo is not mounted correctly'); + constructor() { + this.mutationObserver = new MutationObserver(() => { + this.debouncedSendMountedInstances(); + }); + + this.mutationObserver.observe(document.body, { + childList: true, + subtree: true, + attributes: false, + characterData: false + }); } - const mountedInstances: MountedInstance[] = Object.entries(exposedInfo).map(([key, commands]) => ({ key, commands })); - window.postMessage(new MountedInstancesMessage(mountedInstances), '*'); + public initialize(): void { + this.publishMountedInstances(); - const cumulativeHandler: CumulativeMessageHandler = new CumulativeMessageHandler().provide( - RequestedCommandMessage.type, - ({ instanceKey, name, params }: RequestedCommand) => { - const instance: unknown = windowAccessor.getValue(instanceKey); - if (typeof instance !== 'object' || instance === null || isEmptyObject(instance)) { - throw new Error(`Instance with the key == ${instanceKey} is unaccessible.`); - } + const cumulativeHandler: CumulativeMessageHandler = new CumulativeMessageHandler() + .provide( + RequestedCommandMessage.type, + ({ instanceKey, name, params }: RequestedCommand) => { + const instance: unknown = this.windowAccessor.getValue(instanceKey); + if (typeof instance !== 'object' || instance === null || isEmptyObject(instance)) { + throw new Error(`Instance with the key == ${instanceKey} is unaccessible.`); + } - if (!isKeyInObject(name, instance)) { - throw new Error(`Command with the name == ${name} is unaccessible.`); - } + if (!isKeyInObject(name, instance)) { + throw new Error(`Command with the name == ${name} is unaccessible.`); + } - const targetCommandCallback: unknown = instance[name]; - if (typeof targetCommandCallback !== 'function') { - throw new Error(`Command with the name == ${name} is not a function.`); + const targetCommandCallback: unknown = instance[name]; + if (typeof targetCommandCallback !== 'function') { + throw new Error(`Command with the name == ${name} is not a function.`); + } + + targetCommandCallback(params); + this.debouncedSendMountedInstances(); + } + ) + .provide(UpdateRequiredMessage.type, () => { + this.publishMountedInstances(); + }); + + window.addEventListener('message', ({ data }: MessageEvent) => { + if (!MessageBase.isMessageData(data)) { + return; } - targetCommandCallback(params); + cumulativeHandler.handle(data); + }); + + new Set(['load', 'popstate', 'hashchange']).forEach((eventName: keyof WindowEventMap) => { + window.addEventListener(eventName, () => this.debouncedSendMountedInstances()); + }); + } + + private publishMountedInstances(): void { + if (this.debounceTimeoutId !== null) { + window.clearTimeout(this.debounceTimeoutId); + this.debounceTimeoutId = null; } - ); - window.addEventListener('message', ({ data }: MessageEvent) => { - if (!MessageBase.isMessageData(data)) { + if ( + !this.windowAccessor.isMounted(EXPOSED_INFO_PROPERTY_NAME) && + this.lastInstancesCheckString !== InjectableContentScript.noInstancesCheckString + ) { + this.lastInstancesCheckString = InjectableContentScript.noInstancesCheckString; + window.postMessage(new MountedInstancesMessage([]), '*'); return; } - console.log({ data }); - cumulativeHandler.handle(data); - }); -})(); + const exposedInfo: unknown = this.windowAccessor.getValue(EXPOSED_INFO_PROPERTY_NAME); + if (!isExposedInfo(exposedInfo)) { + throw new Error('Consy ExposedInfo is not mounted correctly'); + } + + const mountedInstances = Object.entries(exposedInfo).map(([key, commands]) => ({ key, commands })); + const instancesCheckString = InjectableContentScript.getInstancesCheckString(mountedInstances); + + if (instancesCheckString === this.lastInstancesCheckString) { + return; + } + this.lastInstancesCheckString = instancesCheckString; + window.postMessage(new MountedInstancesMessage(mountedInstances), '*'); + } + + private debouncedSendMountedInstances(): void { + if (this.debounceTimeoutId !== null) { + window.clearTimeout(this.debounceTimeoutId); + } + + this.debounceTimeoutId = window.setTimeout(() => { + this.publishMountedInstances(); + this.debounceTimeoutId = null; + }, InjectableContentScript.debounceTimeMs); + } + + private static getInstancesCheckString(instances: MountedInstance[]): string { + return instances + .map(({ key }: MountedInstance) => key) + .sort() + .join(','); + } +} + +new InjectableContentScript().initialize(); diff --git a/extension/src/injected-content.ts b/extension/src/injected-content.ts index 642fcb9..0845cd3 100644 --- a/extension/src/injected-content.ts +++ b/extension/src/injected-content.ts @@ -1,29 +1,107 @@ import { CumulativeMessageHandler } from './communication/cumulative-message-handler'; import { MessageBase } from './communication/message-base'; import { MountedInstance, MountedInstancesMessage } from './communication/messages/mounted-instances.message'; +import { UpdateRequiredMessage } from './communication/messages/update-required.message'; -const cumulativeHandler: CumulativeMessageHandler = new CumulativeMessageHandler().provide( - MountedInstancesMessage.type, - (instances: MountedInstance[]) => { +class InjectedContent { + private latestInstancesState: 'mounted' | 'not-mounted' = 'not-mounted'; + + private isInjectedScriptInitialized: boolean = false; + private isScriptInjectionAttempted: boolean = false; + + private readonly cumulativeHandler: CumulativeMessageHandler = new CumulativeMessageHandler() + .provide(MountedInstancesMessage.type, (instances: MountedInstance[]) => { + this.publishInstances(instances); + }) + .provide(UpdateRequiredMessage.type, () => { + if (this.isInjectedScriptInitialized) { + window.postMessage(new UpdateRequiredMessage(), '*'); + return; + } + + if (this.isScriptInjectionAttempted) { + this.publishInstances([]); + return; + } + + this.injectScript(); + }); + + constructor() {} + + public initialize(): void { + window.addEventListener('load', () => { + if (this.isInjectedScriptInitialized) { + window.postMessage(new UpdateRequiredMessage(), '*'); + return; + } + + this.publishInstances([]); + }); + + chrome.runtime.onMessage.addListener((data: unknown) => this.handleRuntimeMessage(data)); + + window.addEventListener('message', ({ data }: MessageEvent) => { + if (!MessageBase.isMessageData(data)) { + return; + } + this.cumulativeHandler.handle(data); + }); + + this.injectScript(); + } + + private publishInstances(instances: MountedInstance[]): void { + const currentInstancesState = instances.length !== 0 ? 'mounted' : 'not-mounted'; + + if (this.latestInstancesState === currentInstancesState) { + return; + } + + this.latestInstancesState = currentInstancesState; chrome.runtime.sendMessage(new MountedInstancesMessage(instances)); } -); -chrome.runtime.onMessage.addListener((data: unknown): undefined => { - if (!MessageBase.isMessageData(data)) { - return; + private handleRuntimeMessage(data: unknown): undefined { + if (!MessageBase.isMessageData(data)) { + return; + } + + if (this.isInjectedScriptInitialized) { + window.postMessage(data, '*'); + } + + if (!this.isInjectedScriptInitialized && !this.isScriptInjectionAttempted) { + this.injectScript(); + } + + if (UpdateRequiredMessage.isMessageData(data)) { + this.publishInstances([]); + } } - window.postMessage(data, '*'); -}); + private injectScript(): void { + if (this.isScriptInjectionAttempted || this.isInjectedScriptInitialized) { + return; + } + + this.isScriptInjectionAttempted = true; + + const script = document.createElement('script'); + script.src = chrome.runtime.getURL('injectable-content-script.js'); + + script.onload = () => { + this.isInjectedScriptInitialized = true; + window.postMessage(new UpdateRequiredMessage(), '*'); + }; + + script.onerror = (event: unknown) => { + console.error('Failed to load injectable script:', event); + this.publishInstances([]); + }; -window.addEventListener('message', ({ data }: MessageEvent) => { - if (!MessageBase.isMessageData(data)) { - return; + (document.head ?? document.documentElement).appendChild(script); } - cumulativeHandler.handle(data); -}); +} -const script = document.createElement('script'); -script.src = chrome.runtime.getURL('injectable-content-script.js'); -(document.head ?? document.documentElement).appendChild(script); +new InjectedContent().initialize(); diff --git a/extension/src/service-worker.ts b/extension/src/service-worker.ts index 6a0dadb..c5c8249 100644 --- a/extension/src/service-worker.ts +++ b/extension/src/service-worker.ts @@ -9,56 +9,115 @@ const enum MessageSource { ContentScript = 'content-script' } -async function getActiveTabId(): Promise { - return new Promise((resolve: (value: number | undefined) => void) => { - chrome.tabs.query({ active: true, currentWindow: true }, ([currentTab]: chrome.tabs.Tab[]) => { - resolve(currentTab?.id); - }); - }); -} +class ServiceWorker { + private isInitialized: boolean = false; -chrome.runtime.onMessage.addListener((data: unknown, sender: chrome.runtime.MessageSender): undefined => { - if (!MessageBase.isMessageData(data)) { - return; + private get activeTabId(): Promise { + try { + return new Promise((resolve: (value: number | undefined) => void) => { + chrome.tabs.query({ active: true, currentWindow: true }, ([currentTab]: chrome.tabs.Tab[]) => { + resolve(currentTab?.id); + }); + }); + } catch (error: unknown) { + console.error('Failed to get the ID of the active tab ― considering it as undefined', error); + return Promise.resolve(undefined); + } } - const messageSource: MessageSource = sender.tab === undefined ? MessageSource.Extension : MessageSource.ContentScript; - - (async () => { - const activeTabId: number | undefined = await getActiveTabId(); - - if (activeTabId === undefined) { + public initialize(): void { + if (this.isInitialized) { return; } + this.setupListeners(); - if (messageSource === MessageSource.Extension) { - chrome.tabs.sendMessage(activeTabId, data); - } + this.isInitialized = true; + } - if (UpdateRequiredMessage.isMessageData(data)) { - chrome.runtime.sendMessage(new MountedInstancesMessage(mountedInstancesByTabId.get(activeTabId) ?? [])); - return; - } + private setupListeners(): void { + chrome.tabs.onActivated.addListener(async (activeInfo) => { + try { + const { tabId } = activeInfo; + + try { + const instances = mountedInstancesByTabId.get(tabId) || []; + await chrome.runtime.sendMessage(new MountedInstancesMessage(instances)); + } catch (error) {} + + await this.requestUpdatedTabInfo(tabId); + } catch (error) { + console.error('Error handling tab activation:', error); + } + }); - if (MountedInstancesMessage.isMessageData(data) && messageSource === MessageSource.ContentScript) { - mountedInstancesByTabId.set(activeTabId, data.payload); - chrome.runtime.sendMessage(new MountedInstancesMessage(data.payload)); + chrome.tabs.onUpdated.addListener((tabId: number, changeInfo) => { + if (changeInfo.status !== 'complete') { + return; + } + this.requestUpdatedTabInfo(tabId); + }); + + chrome.tabs.onRemoved.addListener((tabId: number) => { + mountedInstancesByTabId.delete(tabId); + }); + + chrome.runtime.onMessage.addListener((data: unknown, sender: chrome.runtime.MessageSender) => { + if (!MessageBase.isMessageData(data)) { + return; + } + + const messageSource: MessageSource = + sender.tab === undefined ? MessageSource.Extension : MessageSource.ContentScript; + const senderTabId: number | undefined = sender.tab?.id; + + (async () => { + try { + const activeTabId: number | undefined = await this.activeTabId; + if (activeTabId === undefined) { + return; + } + + if (messageSource === MessageSource.Extension && UpdateRequiredMessage.isMessageData(data)) { + const instances: MountedInstance[] = mountedInstancesByTabId.get(activeTabId) ?? []; + await chrome.runtime.sendMessage(new MountedInstancesMessage(instances)); + await this.requestUpdatedTabInfo(activeTabId); + } + + if ( + messageSource === MessageSource.ContentScript && + senderTabId !== undefined && + MountedInstancesMessage.isMessageData(data) + ) { + mountedInstancesByTabId.set(senderTabId, data.payload); + + if (senderTabId === activeTabId) { + await chrome.runtime.sendMessage(new MountedInstancesMessage(data.payload)); + } + } + } catch (error) { + console.error('Error handling runtime message:', error); + } + })(); + + return true; + }); + } + + private async requestUpdatedTabInfo(tabId: number): Promise { + const tabs: chrome.tabs.Tab[] = await chrome.tabs.query({}); + + const isExistingTab: boolean = tabs.some((tab: chrome.tabs.Tab) => tab.id === tabId); + if (!isExistingTab) { + mountedInstancesByTabId.delete(tabId); return; } - })(); -}); -chrome.tabs.onActivated.addListener(async ({ tabId }) => { - await chrome.tabs.sendMessage(tabId, new UpdateRequiredMessage()); -}); - -chrome.tabs.onUpdated.addListener((tabId, changeInfo) => { - if (changeInfo.status !== 'complete') { - return; + try { + await chrome.tabs.sendMessage(tabId, new UpdateRequiredMessage()); + } catch (error) { + console.error('Error sending update required message:', error); + } } - chrome.tabs.sendMessage(tabId, new UpdateRequiredMessage()); -}); +} -chrome.tabs.onRemoved.addListener((tabId: number) => { - mountedInstancesByTabId.delete(tabId); -}); +new ServiceWorker().initialize(); From f9f2f59391a5c3bb7ed05f758c4000edffbb4b47 Mon Sep 17 00:00:00 2001 From: ScarletFlash Date: Sat, 5 Apr 2025 23:23:53 +0200 Subject: [PATCH 4/4] feat: unified MessageBus with custom providers for each environment --- declarations/src/constants/null-uuid.const.ts | 3 + declarations/src/index.ts | 3 + declarations/src/types/null-uuid.type.ts | 1 + declarations/src/types/uuid.type.ts | 5 + extension/src/communication/message-bus.ts | 102 ++++++++++++------ ...message-provider-listener-callback.type.ts | 1 + .../communication/messaging-provider-base.ts | 6 ++ .../browser-extension.provider.ts | 11 ++ .../injected-script.provider.ts | 11 ++ .../service-worker.provider.ts | 11 ++ extension/src/popup.ts | 69 ++++++++++++ pnpm-lock.yaml | 29 +++-- pnpm-workspace.yaml | 3 +- utilities/package.json | 5 +- utilities/src/get-uuid.ts | 13 +++ utilities/src/index.ts | 2 + utilities/src/is-uuid.ts | 6 ++ 17 files changed, 238 insertions(+), 43 deletions(-) create mode 100644 declarations/src/constants/null-uuid.const.ts create mode 100644 declarations/src/types/null-uuid.type.ts create mode 100644 declarations/src/types/uuid.type.ts create mode 100644 extension/src/communication/message-provider-listener-callback.type.ts create mode 100644 extension/src/communication/messaging-provider-base.ts create mode 100644 extension/src/communication/messaging-providers/browser-extension.provider.ts create mode 100644 extension/src/communication/messaging-providers/injected-script.provider.ts create mode 100644 extension/src/communication/messaging-providers/service-worker.provider.ts create mode 100644 extension/src/popup.ts create mode 100644 utilities/src/get-uuid.ts create mode 100644 utilities/src/is-uuid.ts diff --git a/declarations/src/constants/null-uuid.const.ts b/declarations/src/constants/null-uuid.const.ts new file mode 100644 index 0000000..1195e35 --- /dev/null +++ b/declarations/src/constants/null-uuid.const.ts @@ -0,0 +1,3 @@ +import { NullUuid } from '../types/null-uuid.type'; + +export const NULL_UUID: NullUuid = '00000000-0000-0000-0000-000000000000'; diff --git a/declarations/src/index.ts b/declarations/src/index.ts index e718a55..8d5291b 100644 --- a/declarations/src/index.ts +++ b/declarations/src/index.ts @@ -14,3 +14,6 @@ export * from './types/non-parameterizable-command.type'; export * from './types/parameterizable-command.type'; export * from './types/promise-rejector.type'; export * from './types/promise-resolver.type'; +export * from './types/uuid.type'; +export * from './constants/null-uuid.const'; +export * from './types/null-uuid.type'; diff --git a/declarations/src/types/null-uuid.type.ts b/declarations/src/types/null-uuid.type.ts new file mode 100644 index 0000000..2429423 --- /dev/null +++ b/declarations/src/types/null-uuid.type.ts @@ -0,0 +1 @@ +export type NullUuid = '00000000-0000-0000-0000-000000000000'; diff --git a/declarations/src/types/uuid.type.ts b/declarations/src/types/uuid.type.ts new file mode 100644 index 0000000..46460d0 --- /dev/null +++ b/declarations/src/types/uuid.type.ts @@ -0,0 +1,5 @@ +import { NullUuid } from './null-uuid.type'; + +export type Uuid = + | `${string}-${string}-${1 | 2 | 3 | 4 | 5}${string}-${8 | 9 | 'a' | 'b'}${string}-${string}` + | NullUuid; diff --git a/extension/src/communication/message-bus.ts b/extension/src/communication/message-bus.ts index ebae8c8..cfd08ff 100644 --- a/extension/src/communication/message-bus.ts +++ b/extension/src/communication/message-bus.ts @@ -1,56 +1,92 @@ +import { NULL_UUID, Uuid } from '@consy/declarations'; +import { getUuid, isUuid } from '@consy/utilities'; import { Message } from './message'; import { MessageBase } from './message-base'; +import { MessageProviderListenerCallback } from './message-provider-listener-callback.type'; +import { MessagingProviderBase } from './messaging-provider-base'; -type SubscriptionCallback = (payload: T) => void; -type MessageEventListener = (event: MessageEvent) => void; +type MessagingProviderConstructor = new () => MessagingProviderBase; + +type SubscriptionCallback = (payload: Message) => void; + +const MESSAGE_SOURCE_MARK: 'consy' = 'consy'; +type SerializedMessagePrefix = `${typeof MESSAGE_SOURCE_MARK}/${Uuid}/`; +const SERIALIZED_MESSAGE_PREFIX_LENGTH: number = ( + `${MESSAGE_SOURCE_MARK}/${NULL_UUID}/` satisfies SerializedMessagePrefix +).length; +type SerializedMessage = `${SerializedMessagePrefix}${string}`; export class MessageBus { - #channel: BroadcastChannel = new BroadcastChannel('__consy-message-bus'); + readonly #instanceId: Uuid = getUuid(); + readonly #serializedMessagePrefix: SerializedMessagePrefix = `${MESSAGE_SOURCE_MARK}/${this.#instanceId}/`; - #eventListenerBySubscriptionCallback: Map, MessageEventListener> = new Map< - SubscriptionCallback, - MessageEventListener - >(); + #eventListenerBySubscriptionCallback: Set = new Set(); + readonly #provider: MessagingProviderBase; + + readonly #messageProviderListenerCallback: MessageProviderListenerCallback = (rawData: unknown) => { + if (!MessageBus.#isSerializedMessage(rawData) || this.#isSerializedMessageFromThisInstance(rawData)) { + return; + } + + const deserializedMessage: Message = this.#getDeserialized(rawData); + + this.#eventListenerBySubscriptionCallback.forEach((subscriptionCallback: SubscriptionCallback) => + subscriptionCallback(deserializedMessage) + ); + }; + + constructor(providerConstructor: MessagingProviderConstructor) { + this.#provider = new providerConstructor(); + this.#provider.listen(this.#messageProviderListenerCallback); + } public publish(message: Message): void { - this.#channel.postMessage(message); + const serializedMessage: SerializedMessage = this.#getSerialized(message); + this.#provider.dispatch(serializedMessage); } - public subscribe(callback: SubscriptionCallback): void { + public subscribe(callback: SubscriptionCallback): void { if (this.#eventListenerBySubscriptionCallback.has(callback)) { return; } - const messageEventListener: MessageEventListener = (event: MessageEvent) => { - const messageData: unknown = event.data; - if (MessageBase.isMessageData(messageData)) { - callback(messageData); - return; - } - throw new Error('Invalid message data'); - }; - this.#channel.addEventListener('message', messageEventListener); - this.#eventListenerBySubscriptionCallback.set(callback, messageEventListener); + this.#eventListenerBySubscriptionCallback.add(callback); } - public unsubscribe(callback: SubscriptionCallback): void { - const messageEventListener: MessageEventListener | undefined = - this.#eventListenerBySubscriptionCallback.get(callback); - if (messageEventListener === undefined) { - return; + public unsubscribe(callback: SubscriptionCallback): void { + this.#eventListenerBySubscriptionCallback.delete(callback); + } + + static #isSerializedMessagePrefix(prefix: string): prefix is SerializedMessagePrefix { + if (prefix.length !== SERIALIZED_MESSAGE_PREFIX_LENGTH) { + return false; + } + const [sourceMark, instanceId]: string[] = prefix.split('/'); + return sourceMark === MESSAGE_SOURCE_MARK && isUuid(instanceId); + } + + static #isSerializedMessage(message: unknown): message is SerializedMessage { + if (typeof message !== 'string') { + return false; } - this.#channel.removeEventListener('message', messageEventListener); - this.#eventListenerBySubscriptionCallback.delete(callback); + const messagePrefix: string = message.substring(0, SERIALIZED_MESSAGE_PREFIX_LENGTH); + return MessageBus.#isSerializedMessagePrefix(messagePrefix) && message.length > SERIALIZED_MESSAGE_PREFIX_LENGTH; } - public close(): void { - this.#eventListenerBySubscriptionCallback.forEach( - (_listener: MessageEventListener, callback: SubscriptionCallback) => { - this.unsubscribe(callback); - } - ); + #isSerializedMessageFromThisInstance(message: SerializedMessage): boolean { + return message.startsWith(this.#serializedMessagePrefix); + } + + #getDeserialized(serializedMessage: SerializedMessage): Message { + const messageData: unknown = JSON.parse(serializedMessage.slice(this.#serializedMessagePrefix.length)); + if (!MessageBase.isMessageData(messageData)) { + throw new Error('Invalid message data'); + } + return messageData; + } - this.#channel.close(); + #getSerialized(message: Message): SerializedMessage { + return `${MESSAGE_SOURCE_MARK}/${this.#instanceId}/${JSON.stringify(message)}`; } } diff --git a/extension/src/communication/message-provider-listener-callback.type.ts b/extension/src/communication/message-provider-listener-callback.type.ts new file mode 100644 index 0000000..e2d58e6 --- /dev/null +++ b/extension/src/communication/message-provider-listener-callback.type.ts @@ -0,0 +1 @@ +export type MessageProviderListenerCallback = (data: unknown) => void; diff --git a/extension/src/communication/messaging-provider-base.ts b/extension/src/communication/messaging-provider-base.ts new file mode 100644 index 0000000..b96aa1e --- /dev/null +++ b/extension/src/communication/messaging-provider-base.ts @@ -0,0 +1,6 @@ +import { MessageProviderListenerCallback } from './message-provider-listener-callback.type'; + +export abstract class MessagingProviderBase { + public abstract dispatch(data: string): void; + public abstract listen(callback: MessageProviderListenerCallback): void; +} diff --git a/extension/src/communication/messaging-providers/browser-extension.provider.ts b/extension/src/communication/messaging-providers/browser-extension.provider.ts new file mode 100644 index 0000000..f032a45 --- /dev/null +++ b/extension/src/communication/messaging-providers/browser-extension.provider.ts @@ -0,0 +1,11 @@ +import { MessageProviderListenerCallback } from '../message-provider-listener-callback.type'; +import { MessagingProviderBase } from '../messaging-provider-base'; + +export class BrowserExtensionWorkerMessagingProvider extends MessagingProviderBase { + public dispatch(data: string): void { + throw new Error('Method not implemented.'); + } + public listen(callback: MessageProviderListenerCallback): void { + throw new Error('Method not implemented.'); + } +} diff --git a/extension/src/communication/messaging-providers/injected-script.provider.ts b/extension/src/communication/messaging-providers/injected-script.provider.ts new file mode 100644 index 0000000..2b3939c --- /dev/null +++ b/extension/src/communication/messaging-providers/injected-script.provider.ts @@ -0,0 +1,11 @@ +import { MessageProviderListenerCallback } from '../message-provider-listener-callback.type'; +import { MessagingProviderBase } from '../messaging-provider-base'; + +export class InjectedScriptWorkerMessagingProvider extends MessagingProviderBase { + public dispatch(data: string): void { + throw new Error('Method not implemented.'); + } + public listen(callback: MessageProviderListenerCallback): void { + throw new Error('Method not implemented.'); + } +} diff --git a/extension/src/communication/messaging-providers/service-worker.provider.ts b/extension/src/communication/messaging-providers/service-worker.provider.ts new file mode 100644 index 0000000..9957a96 --- /dev/null +++ b/extension/src/communication/messaging-providers/service-worker.provider.ts @@ -0,0 +1,11 @@ +import { MessageProviderListenerCallback } from '../message-provider-listener-callback.type'; +import { MessagingProviderBase } from '../messaging-provider-base'; + +export class ServiceWorkerMessagingProvider extends MessagingProviderBase { + public dispatch(data: string): void { + throw new Error('Method not implemented.'); + } + public listen(callback: MessageProviderListenerCallback): void { + throw new Error('Method not implemented.'); + } +} diff --git a/extension/src/popup.ts b/extension/src/popup.ts new file mode 100644 index 0000000..3624475 --- /dev/null +++ b/extension/src/popup.ts @@ -0,0 +1,69 @@ +import { CommandParamDefinition } from '@consy/declarations'; +import { CumulativeMessageHandler } from './communication/cumulative-message-handler'; +import { MessageBase } from './communication/message-base'; +import { MountedInstance, MountedInstancesMessage } from './communication/messages/mounted-instances.message'; +import { RequestedCommandMessage } from './communication/messages/requested-command.message'; +import { UpdateRequiredMessage } from './communication/messages/update-required.message'; + +const cumulativeHandler: CumulativeMessageHandler = new CumulativeMessageHandler().provide( + MountedInstancesMessage.type, + (mountedInstances: MountedInstance[]) => { + mountedInstances.length === 0 ? showNotMountedPlaceholder() : showMountedInstancesInteractiveForm(mountedInstances); + } +); + +chrome.runtime.onMessage.addListener((data: unknown): undefined => { + if (!MessageBase.isMessageData(data)) { + return; + } + cumulativeHandler.handle(data); +}); + +chrome.runtime.sendMessage(new UpdateRequiredMessage()); + +function getContainer(): HTMLElement { + const container: HTMLElement | null = document.querySelector('body > main'); + if (container === null) { + throw new Error('No container found'); + } + return container; +} + +function showNotMountedPlaceholder(): void { + const container: HTMLElement = getContainer(); + + const placeholder: HTMLElement = document.createElement('section'); + placeholder.className = 'flex items-center justify-center h-full text-red-500'; + placeholder.innerText = 'Consy is not mounted'; + + container.replaceChildren(placeholder); +} + +function showMountedInstancesInteractiveForm(mountedInstances: MountedInstance[]): void { + const container: HTMLElement = getContainer(); + + container.replaceChildren( + ...mountedInstances.map(({ commands, key: instanceKey }: MountedInstance) => { + const controls: HTMLElement = document.createElement('section'); + controls.className = 'flex flex-col items-center justify-center'; + + Object.entries(commands).forEach(([commandName, _commandDefinition]: [string, {} | CommandParamDefinition]) => { + const executeCommandButton: HTMLButtonElement = document.createElement('button'); + executeCommandButton.className = 'p-2 m-2 border border-gray-300 rounded-md'; + executeCommandButton.innerText = commandName; + executeCommandButton.onclick = () => { + chrome.runtime.sendMessage( + new RequestedCommandMessage({ + instanceKey, + name: commandName, + params: {} + }) + ); + }; + controls.appendChild(executeCommandButton); + }); + + return controls; + }) + ); +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 854e555..f7fb612 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,7 +30,7 @@ catalogs: codebase: '@headlessui/react': specifier: ^2.2.0 - version: 2.2.0 + version: 2.2.1 '@types/react': specifier: ^19.0.10 version: 19.0.10 @@ -58,6 +58,9 @@ catalogs: typescript: specifier: ^5.8.2 version: 5.8.2 + uuid: + specifier: ^11.0.0 + version: 11.1.0 importers: @@ -207,7 +210,7 @@ importers: version: link:../utilities '@headlessui/react': specifier: catalog:codebase - version: 2.2.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 2.2.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: specifier: catalog:codebase version: 19.0.0 @@ -256,13 +259,17 @@ importers: version: 5.8.2 utilities: + dependencies: + '@consy/declarations': + specifier: workspace:* + version: link:../declarations + uuid: + specifier: catalog:codebase + version: 11.1.0 devDependencies: '@consy/configs': specifier: workspace:* version: link:../configs - '@consy/declarations': - specifier: workspace:* - version: link:../declarations '@microsoft/api-extractor': specifier: catalog:build-tools version: 7.52.1(@types/node@22.13.10) @@ -450,8 +457,8 @@ packages: '@floating-ui/utils@0.2.9': resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} - '@headlessui/react@2.2.0': - resolution: {integrity: sha512-RzCEg+LXsuI7mHiSomsu/gBJSjpupm6A1qIZ5sWjd7JhARNlMiSA4kKfJpCKwU9tE+zMRterhhrP74PvfJrpXQ==} + '@headlessui/react@2.2.1': + resolution: {integrity: sha512-daiUqVLae8CKVjEVT19P/izW0aGK0GNhMSAeMlrDebKmoVZHcRRwbxzgtnEadUVDXyBsWo9/UH4KHeniO+0tMg==} engines: {node: '>=10'} peerDependencies: react: ^18 || ^19 || ^19.0.0-rc @@ -1118,6 +1125,10 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uuid@11.1.0: + resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} + hasBin: true + v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} @@ -1234,7 +1245,7 @@ snapshots: '@floating-ui/utils@0.2.9': {} - '@headlessui/react@2.2.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@headlessui/react@2.2.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@floating-ui/react': 0.26.28(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@react-aria/focus': 3.19.0(react@19.0.0) @@ -1845,6 +1856,8 @@ snapshots: dependencies: punycode: 2.3.1 + uuid@11.1.0: {} + v8-compile-cache-lib@3.0.1: {} yallist@4.0.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 2513033..a230d48 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -25,4 +25,5 @@ catalogs: '@types/react-dom': ^19.0.4 react: ^19.0.0 react-dom: ^19.0.0 - '@headlessui/react': ^2.2.0 + '@headlessui/react': '^2.2.0' + uuid: ^11.0.0 diff --git a/utilities/package.json b/utilities/package.json index c0b83d9..3af132a 100644 --- a/utilities/package.json +++ b/utilities/package.json @@ -10,9 +10,12 @@ "formatter__fix": "prettier --config node_modules/@consy/configs/prettier/config.json --ignore-path node_modules/@consy/configs/prettier/ignore --cache --cache-location .prettiercache --cache-strategy content --write .", "extract-api": "api-extractor run --local --typescript-compiler-folder node_modules/typescript" }, + "dependencies": { + "@consy/declarations": "workspace:*", + "uuid": "catalog:codebase" + }, "devDependencies": { "@consy/configs": "workspace:*", - "@consy/declarations": "workspace:*", "prettier": "catalog:codebase", "typescript": "catalog:codebase", "@microsoft/api-extractor": "catalog:build-tools" diff --git a/utilities/src/get-uuid.ts b/utilities/src/get-uuid.ts new file mode 100644 index 0000000..a274f11 --- /dev/null +++ b/utilities/src/get-uuid.ts @@ -0,0 +1,13 @@ +import { Uuid } from '@consy/declarations'; +import { v4 as getUuidV4 } from 'uuid'; +import { isUuid } from './is-uuid'; + +export function getUuid(): Uuid { + const uuidString: string = getUuidV4(); + + if (!isUuid(uuidString)) { + throw new Error(`Unexpected invalid UUID: ${uuidString}`); + } + + return uuidString; +} diff --git a/utilities/src/index.ts b/utilities/src/index.ts index bb750e9..b22379f 100644 --- a/utilities/src/index.ts +++ b/utilities/src/index.ts @@ -5,3 +5,5 @@ export * from './is-exposed-info'; export * from './is-key-in-object'; export * from './is-parameterizable-command'; export * from './validate-parameterizable-command-call'; +export * from './get-uuid'; +export * from './is-uuid'; diff --git a/utilities/src/is-uuid.ts b/utilities/src/is-uuid.ts new file mode 100644 index 0000000..d084191 --- /dev/null +++ b/utilities/src/is-uuid.ts @@ -0,0 +1,6 @@ +import { Uuid } from '@consy/declarations'; +import { validate as isValidUuid } from 'uuid'; + +export function isUuid(input: unknown): input is Uuid { + return isValidUuid(input); +}