From 45966843e6d871c8ccdda44c9371f6d0d9ba0992 Mon Sep 17 00:00:00 2001 From: Hubert Date: Tue, 18 Nov 2025 23:51:34 +0100 Subject: [PATCH 01/14] creating git repo --- package-lock.json | 155 +++++++----- .../ControlPlane/GitRepositories.tsx | 59 +++-- .../Dialogs/CreateGitRepositoryDialog.cy.tsx | 233 ++++++++++++++++++ .../CreateGitRepositoryDialog.module.css | 41 +++ .../Dialogs/CreateGitRepositoryDialog.tsx | 191 ++++++++++++++ src/hooks/useCreateGitRepository.spec.ts | 222 +++++++++++++++++ src/hooks/useCreateGitRepository.ts | 57 +++++ src/lib/api/types/flux/createGitRepository.ts | 25 ++ 8 files changed, 907 insertions(+), 76 deletions(-) create mode 100644 src/components/Dialogs/CreateGitRepositoryDialog.cy.tsx create mode 100644 src/components/Dialogs/CreateGitRepositoryDialog.module.css create mode 100644 src/components/Dialogs/CreateGitRepositoryDialog.tsx create mode 100644 src/hooks/useCreateGitRepository.spec.ts create mode 100644 src/hooks/useCreateGitRepository.ts create mode 100644 src/lib/api/types/flux/createGitRepository.ts diff --git a/package-lock.json b/package-lock.json index 923acae2..78f90ff7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "@apollo/client": "3.14.0", "@fastify/autoload": "6.3.1", "@fastify/cookie": "11.0.2", - "@fastify/cors": "^11.1.0", + "@fastify/cors": "11.1.0", "@fastify/env": "5.0.3", "@fastify/helmet": "13.0.2", "@fastify/http-proxy": "11.3.0", @@ -270,7 +270,6 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz", "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", @@ -622,7 +621,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -669,7 +667,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" } @@ -1235,6 +1232,7 @@ "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@eslint/object-schema": "^2.1.6", "debug": "^4.3.1", @@ -1250,6 +1248,7 @@ "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==", "dev": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } @@ -1260,6 +1259,7 @@ "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@types/json-schema": "^7.0.15" }, @@ -1323,6 +1323,7 @@ "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", "dev": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } @@ -1333,6 +1334,7 @@ "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@eslint/core": "^0.13.0", "levn": "^0.4.1" @@ -2672,6 +2674,7 @@ "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=18.18.0" } @@ -2682,6 +2685,7 @@ "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.3.0" @@ -2696,6 +2700,7 @@ "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", "dev": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=18.18" }, @@ -2710,6 +2715,7 @@ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=12.22" }, @@ -2724,6 +2730,7 @@ "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=18.18" }, @@ -3261,6 +3268,7 @@ "integrity": "sha512-rmOWVRUbUJD7iSvJugjUbFZshTAuJ48MXoZ80Osx1GM0K/H1w7rSEvmw8m6vdWxNASgtaHIhAgre4H/E9GJiYQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "content-type": "^1.0.5", "cors": "^2.8.5", @@ -3294,6 +3302,7 @@ "integrity": "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==", "dev": true, "license": "ISC", + "peer": true, "peerDependencies": { "zod": "^3.24.1" } @@ -3374,7 +3383,6 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", "license": "Apache-2.0", - "peer": true, "engines": { "node": ">=8.0.0" } @@ -3396,7 +3404,6 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-2.1.0.tgz", "integrity": "sha512-zOyetmZppnwTyPrt4S7jMfXiSX9yyfF0hxlA8B5oo2TtKl+/RGCy7fi4DrBfIf3lCPrkKsRBWZZD7RFojK7FDg==", "license": "Apache-2.0", - "peer": true, "engines": { "node": "^18.19.0 || >=20.6.0" }, @@ -3409,7 +3416,6 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.1.0.tgz", "integrity": "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, @@ -4479,7 +4485,6 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.1.0.tgz", "integrity": "sha512-1CJjf3LCvoefUOgegxi8h6r4B/wLSzInyhGP2UmIBYNlo4Qk5CZ73e1eEyWmfXvFtm1ybkmfb2DqWvspsYLrWw==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@opentelemetry/core": "2.1.0", "@opentelemetry/semantic-conventions": "^1.29.0" @@ -4496,7 +4501,6 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.1.0.tgz", "integrity": "sha512-uTX9FBlVQm4S2gVQO1sb5qyBLq/FPjbp+tmGoxu4tIgtYGmBYB44+KX/725RFDe30yBSaA9Ml9fqphe1hbUyLQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@opentelemetry/core": "2.1.0", "@opentelemetry/resources": "2.1.0", @@ -4514,7 +4518,6 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.37.0.tgz", "integrity": "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA==", "license": "Apache-2.0", - "peer": true, "engines": { "node": ">=14" } @@ -5508,6 +5511,7 @@ "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "dequal": "^2.0.3" } @@ -5556,7 +5560,8 @@ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/babel__core": { "version": "7.20.5", @@ -5760,7 +5765,8 @@ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/json5": { "version": "0.0.29", @@ -5843,7 +5849,6 @@ "integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.0.2" } @@ -5854,7 +5859,6 @@ "integrity": "sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==", "devOptional": true, "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -5966,7 +5970,6 @@ "integrity": "sha512-6m1I5RmHBGTnUGS113G04DMu3CpSdxCAU/UvtjNWL4Nuf3MW9tQhiJqRlHzChIkhy6kZSAQmc+I1bcGjE3yNKg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.46.3", "@typescript-eslint/types": "8.46.3", @@ -6210,7 +6213,6 @@ "resolved": "https://registry.npmjs.org/@ui5/webcomponents/-/webcomponents-2.15.1.tgz", "integrity": "sha512-8dJd9o0PEMwBBkG2K86XnyZYVQmtMz/9PNUJWeqPJLU/JST2ty7M7lE+JRdwvac58/OcboNWZidHpAbJs/pmPw==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@ui5/webcomponents-base": "2.15.1", "@ui5/webcomponents-icons": "2.15.1", @@ -6256,7 +6258,6 @@ "resolved": "https://registry.npmjs.org/@ui5/webcomponents-fiori/-/webcomponents-fiori-2.15.1.tgz", "integrity": "sha512-Sptnb0vcpO1xRgCZly3NKKBiisJZXAMSIyEMnCs+wsra1eyoL4CZBNvc4MJvSqu0BU4xazJhE8X3pNwpadbJNw==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@ui5/webcomponents": "2.15.1", "@ui5/webcomponents-base": "2.15.1", @@ -6346,7 +6347,6 @@ "resolved": "https://registry.npmjs.org/@ui5/webcomponents-react-base/-/webcomponents-react-base-2.15.3.tgz", "integrity": "sha512-anD0B4k9DfZr4kEqISfBSCBytE+aUnubXCZE3Y/xcutKbJwZnzbIBtsqk0X1NXSRo4vNdxFWEjiH5I4aq2bcWw==", "license": "Apache-2.0", - "peer": true, "peerDependencies": { "@types/react": "*", "@ui5/webcomponents-base": "~2.15.0", @@ -6967,6 +6967,7 @@ "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" @@ -6981,6 +6982,7 @@ "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.6" } @@ -6991,6 +6993,7 @@ "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "mime-db": "^1.54.0" }, @@ -7003,7 +7006,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -7060,7 +7062,6 @@ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -7635,7 +7636,6 @@ "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.1.6.tgz", "integrity": "sha512-FgjDeR+/yDH34By4I0qB5NxAoWv7dOTYcOXwn73kr+c93HyC2lU6tnjifqUe33LKMJcDyCYPQjEAqgOQiXkE2Q==", "license": "Apache-2.0", - "peer": true, "dependencies": { "bare-path": "^3.0.0" } @@ -7713,6 +7713,7 @@ "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", @@ -7734,6 +7735,7 @@ "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.8" } @@ -7744,6 +7746,7 @@ "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.6" } @@ -7754,6 +7757,7 @@ "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "mime-db": "^1.54.0" }, @@ -7767,6 +7771,7 @@ "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "content-type": "^1.0.5", "media-typer": "^1.1.0", @@ -7818,7 +7823,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001716", "electron-to-chromium": "^1.5.149", @@ -7883,6 +7887,7 @@ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.8" } @@ -8605,6 +8610,7 @@ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.6" } @@ -8630,6 +8636,7 @@ "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=6.6.0" } @@ -8647,6 +8654,7 @@ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "object-assign": "^4", "vary": "^1" @@ -8759,7 +8767,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { "@cypress/request": "^3.0.9", "@cypress/xvfb": "^1.2.4", @@ -9006,7 +9013,6 @@ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "license": "ISC", - "peer": true, "engines": { "node": ">=12" } @@ -9332,7 +9338,8 @@ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/define-data-property": { "version": "1.1.4", @@ -9457,7 +9464,8 @@ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/dom-helpers": { "version": "5.2.1", @@ -9553,7 +9561,8 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/electron-to-chromium": { "version": "1.5.155", @@ -9573,6 +9582,7 @@ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.8" } @@ -9592,7 +9602,6 @@ "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ansi-colors": "^4.1.1", "strip-ansi": "^6.0.1" @@ -9946,6 +9955,7 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -10023,7 +10033,6 @@ "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", - "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -10184,7 +10193,6 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -10379,6 +10387,7 @@ "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -10409,6 +10418,7 @@ "integrity": "sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } @@ -10419,6 +10429,7 @@ "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -10432,6 +10443,7 @@ "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "dev": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -10473,6 +10485,7 @@ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "license": "BSD-3-Clause", + "peer": true, "dependencies": { "estraverse": "^5.1.0" }, @@ -10486,6 +10499,7 @@ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "estraverse": "^5.2.0" }, @@ -10529,6 +10543,7 @@ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.6" } @@ -10552,6 +10567,7 @@ "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "eventsource-parser": "^3.0.1" }, @@ -10565,6 +10581,7 @@ "integrity": "sha512-6RxOBZ/cYgd8usLwsEl+EC09Au/9BcmCKYF2/xbml6DNczf7nv0MQb+7BA2F+li6//I+28VNlQR37XfQtcAJuA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=18.0.0" } @@ -10622,6 +10639,7 @@ "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.0", @@ -10665,6 +10683,7 @@ "integrity": "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 16" }, @@ -10681,6 +10700,7 @@ "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "safe-buffer": "5.2.1" }, @@ -10694,6 +10714,7 @@ "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.6" } @@ -10704,6 +10725,7 @@ "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.8" } @@ -10714,6 +10736,7 @@ "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.6" } @@ -10724,6 +10747,7 @@ "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "mime-db": "^1.54.0" }, @@ -10737,6 +10761,7 @@ "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "content-type": "^1.0.5", "media-typer": "^1.1.0", @@ -10914,7 +10939,8 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/fast-querystring": { "version": "1.1.2", @@ -10956,7 +10982,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "@fastify/ajv-compiler": "^4.0.0", "@fastify/error": "^4.0.0", @@ -11130,6 +11155,7 @@ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "flat-cache": "^4.0.0" }, @@ -11155,6 +11181,7 @@ "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "debug": "^4.4.0", "encodeurl": "^2.0.0", @@ -11231,6 +11258,7 @@ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" @@ -11244,7 +11272,8 @@ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "dev": true, - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/for-each": { "version": "0.3.5", @@ -11350,6 +11379,7 @@ "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.8" } @@ -11584,6 +11614,7 @@ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "license": "ISC", + "peer": true, "dependencies": { "is-glob": "^4.0.3" }, @@ -11721,7 +11752,6 @@ "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.12.0.tgz", "integrity": "sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==", "license": "MIT", - "peer": true, "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } @@ -11801,7 +11831,6 @@ "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-6.0.5.tgz", "integrity": "sha512-HzYw057ch0hx2gZjkbgk1pur4kAtgljlWRP+Gccudqm3BRrTpExjWCQ9OHdIsq47Y6lHL++1lTvuQHhgRRcevw==", "license": "MIT", - "peer": true, "engines": { "node": ">=20" }, @@ -12135,7 +12164,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.27.6" }, @@ -12257,6 +12285,7 @@ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.8.19" } @@ -12708,7 +12737,8 @@ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/is-regex": { "version": "1.2.1", @@ -13001,7 +13031,6 @@ "resolved": "https://registry.npmjs.org/javascript-time-ago/-/javascript-time-ago-2.5.12.tgz", "integrity": "sha512-s8PPq2HQ3HIbSU0SjhNvTitf5VoXbQWof9q6k3gIX7F2il0ptjD5lONTDccpuKt/2U7RjbCp/TCHPK7eDwO7zQ==", "license": "MIT", - "peer": true, "dependencies": { "relative-time-format": "^1.1.7" } @@ -13167,7 +13196,8 @@ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", @@ -13213,7 +13243,8 @@ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/json-stringify-safe": { "version": "5.0.1", @@ -13304,6 +13335,7 @@ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "json-buffer": "3.0.1" } @@ -13353,6 +13385,7 @@ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -13733,7 +13766,8 @@ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/lodash.once": { "version": "4.1.1", @@ -13856,6 +13890,7 @@ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, "license": "MIT", + "peer": true, "bin": { "lz-string": "bin/bin.js" } @@ -13993,6 +14028,7 @@ "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -14180,7 +14216,6 @@ "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.54.0.tgz", "integrity": "sha512-hx45SEUoLatgWxHKCmlLJH81xBo0uXP4sRkESUpmDQevfi+e7K1VuiSprK6UpQ8u4zOcKNiH0pMvHvlMWA/4cw==", "license": "MIT", - "peer": true, "dependencies": { "dompurify": "3.1.7", "marked": "14.0.0" @@ -14311,6 +14346,7 @@ "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.6" } @@ -14636,6 +14672,7 @@ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ee-first": "1.1.1" }, @@ -14686,6 +14723,7 @@ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -14874,6 +14912,7 @@ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.8" } @@ -15118,6 +15157,7 @@ "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=16.20.0" } @@ -15264,7 +15304,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -15319,6 +15358,7 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.8.0" } @@ -15328,7 +15368,6 @@ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -15371,6 +15410,7 @@ "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -15386,6 +15426,7 @@ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -15398,7 +15439,8 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/process": { "version": "0.11.10", @@ -15462,6 +15504,7 @@ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -15476,6 +15519,7 @@ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.10" } @@ -15575,6 +15619,7 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.6" } @@ -15585,6 +15630,7 @@ "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -15600,7 +15646,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -15622,7 +15667,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -15647,7 +15691,6 @@ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.66.0.tgz", "integrity": "sha512-xXBqsWGKrY46ZqaHDo+ZUYiMUgi8suYu5kdrS20EG8KiL7VRQitEbNjm+UcrDYrNi1YLyfpmAeGjCZYXLT9YBw==", "license": "MIT", - "peer": true, "engines": { "node": ">=18.0.0" }, @@ -16298,6 +16341,7 @@ "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "debug": "^4.4.0", "depd": "^2.0.0", @@ -16502,6 +16546,7 @@ "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "debug": "^4.3.5", "encodeurl": "^2.0.0", @@ -16525,6 +16570,7 @@ "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.6" } @@ -16535,6 +16581,7 @@ "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "mime-db": "^1.54.0" }, @@ -16560,6 +16607,7 @@ "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "encodeurl": "^2.0.0", "escape-html": "^1.0.3", @@ -17440,7 +17488,6 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -17646,7 +17693,6 @@ "integrity": "sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "~0.25.0", "get-tsconfig": "^4.7.5" @@ -17687,6 +17733,7 @@ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "prelude-ls": "^1.2.1" }, @@ -17804,7 +17851,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "devOptional": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -17935,6 +17981,7 @@ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.8" } @@ -17958,7 +18005,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { "napi-postinstall": "^0.2.2" }, @@ -18152,7 +18198,6 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.2.tgz", "integrity": "sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==", "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -18276,7 +18321,6 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -18290,7 +18334,6 @@ "integrity": "sha512-urzu3NCEV0Qa0Y2PwvBtRgmNtxhj5t5ULw7cuKhIHh3OrkKTLlut0lnBOv9qe5OvbkMH2g38G7KPDCTpIytBVg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/expect": "4.0.8", "@vitest/mocker": "4.0.8", @@ -18630,6 +18673,7 @@ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -18678,7 +18722,6 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "license": "MIT", - "peer": true, "engines": { "node": ">=10.0.0" }, diff --git a/src/components/ControlPlane/GitRepositories.tsx b/src/components/ControlPlane/GitRepositories.tsx index 5398fd7f..34e65e38 100644 --- a/src/components/ControlPlane/GitRepositories.tsx +++ b/src/components/ControlPlane/GitRepositories.tsx @@ -1,14 +1,21 @@ import ConfiguredAnalyticstable from '../Shared/ConfiguredAnalyticsTable.tsx'; -import { AnalyticalTableColumnDefinition, Panel, Title, Toolbar, ToolbarSpacer } from '@ui5/webcomponents-react'; -import IllustratedError from '../Shared/IllustratedError.tsx'; import { useApiResource } from '../../lib/api/useApiResource'; import { FluxRequest } from '../../lib/api/types/flux/listGitRepo'; import { useTranslation } from 'react-i18next'; import { formatDateAsTimeAgo } from '../../utils/i18n/timeAgo.ts'; import { YamlViewButton } from '../Yaml/YamlViewButton.tsx'; -import { Fragment, useCallback, useMemo, useRef } from 'react'; -import StatusFilter from '../Shared/StatusFilter/StatusFilter.tsx'; +import { Fragment, useCallback, useMemo, useRef, useState } from 'react'; +import { + AnalyticalTableColumnDefinition, + Panel, + Title, + Toolbar, + ToolbarSpacer, + Button, +} from '@ui5/webcomponents-react'; +import '@ui5/webcomponents-icons/dist/add'; +import IllustratedError from '../Shared/IllustratedError.tsx'; import { ResourceStatusCell } from '../Shared/ResourceStatusCell.tsx'; import { Resource } from '../../utils/removeManagedFieldsAndFilterData.ts'; import { useSplitter } from '../Splitter/SplitterContext.tsx'; @@ -17,6 +24,8 @@ import { useHandleResourcePatch } from '../../hooks/useHandleResourcePatch.ts'; import { ErrorDialog, ErrorDialogHandle } from '../Shared/ErrorMessageBox.tsx'; import type { GitReposResponse } from '../../lib/api/types/flux/listGitRepo'; import { ActionsMenu, type ActionItem } from './ActionsMenu'; +import StatusFilter from '../Shared/StatusFilter/StatusFilter.tsx'; +import { CreateGitRepositoryDialog } from '../Dialogs/CreateGitRepositoryDialog.tsx'; export type GitRepoItem = GitReposResponse['items'][0] & { apiVersion?: string; @@ -29,6 +38,7 @@ export function GitRepositories() { const { openInAside } = useSplitter(); const errorDialogRef = useRef(null); const handlePatch = useHandleResourcePatch(errorDialogRef); + const [isCreateDialogOpen, setIsCreateDialogOpen] = useState(false); type FluxRow = { name: string; @@ -152,21 +162,31 @@ export function GitRepositories() { }) ?? []; return ( - - {t('common.resourcesCount', { count: rows.length })} - - - - } - > - <> - - - - + <> + + {t('common.resourcesCount', { count: rows.length })} + + + + } + > + <> + + + + + + setIsCreateDialogOpen(false)} + /> + ); } @@ -177,7 +197,6 @@ function shortenCommitHash(commitHash: string): string { if (match && match[2]) { return `${match[1]}@${match[2].slice(0, 7)}`; } - //example output : master@b3396ad return commitHash; } diff --git a/src/components/Dialogs/CreateGitRepositoryDialog.cy.tsx b/src/components/Dialogs/CreateGitRepositoryDialog.cy.tsx new file mode 100644 index 00000000..6251d249 --- /dev/null +++ b/src/components/Dialogs/CreateGitRepositoryDialog.cy.tsx @@ -0,0 +1,233 @@ +import { CreateGitRepositoryDialog } from './CreateGitRepositoryDialog'; +import { CreateGitRepositoryParams } from '../../hooks/useCreateGitRepository'; + +describe('CreateGitRepositoryDialog', () => { + let capturedData: CreateGitRepositoryParams | null = null; + + const fakeUseCreateGitRepository = () => ({ + createGitRepository: async (data: CreateGitRepositoryParams): Promise => { + capturedData = data; + }, + isLoading: false, + }); + + beforeEach(() => { + capturedData = null; + }); + + it('creates a git repository with valid data', () => { + const onClose = cy.stub(); + const onSuccess = cy.stub(); + + cy.mount( + , + ); + + const expectedPayload = { + name: 'test-repo', + interval: '5m0s', + url: 'https://github.com/test/repo', + branch: 'develop', + secretRef: '', + }; + + // Fill in the form + cy.get('#name').find('input').type('test-repo'); + cy.get('#interval').find('input').clear().type('5m0s'); + cy.get('#url').find('input').type('https://github.com/test/repo'); + cy.get('#branch').find('input').clear().type('develop'); + + // Submit the form + cy.get('ui5-button').contains('Create').click(); + + // Verify the hook was called with correct data + cy.then(() => cy.wrap(capturedData).deepEqualJson(expectedPayload)); + + // Dialog should close on success + cy.wrap(onClose).should('have.been.called'); + cy.wrap(onSuccess).should('have.been.called'); + }); + + it('includes secretRef when provided', () => { + const onClose = cy.stub(); + const onSuccess = cy.stub(); + + cy.mount( + , + ); + + const expectedPayload = { + name: 'test-repo', + interval: '1m0s', + url: 'https://github.com/test/repo', + branch: 'main', + secretRef: 'my-git-secret', + }; + + // Fill in the form + cy.get('#name').find('input').type('test-repo'); + cy.get('#url').find('input').type('https://github.com/test/repo'); + cy.get('#secretRef').find('input').type('my-git-secret'); + + // Submit the form + cy.get('ui5-button').contains('Create').click(); + + // Verify the hook was called with correct data + cy.then(() => cy.wrap(capturedData).deepEqualJson(expectedPayload)); + + // Dialog should close on success + cy.wrap(onClose).should('have.been.called'); + cy.wrap(onSuccess).should('have.been.called'); + }); + + it('validates required fields', () => { + const onClose = cy.stub(); + const onSuccess = cy.stub(); + + cy.mount( + , + ); + + // Try to submit without filling required fields + cy.get('ui5-button').contains('Create').click(); + + // Should show validation errors + cy.get('#name').should('have.attr', 'value-state', 'Negative'); + cy.contains('This field is required').should('exist'); + + // Dialog should not close + cy.wrap(onClose).should('not.have.been.called'); + cy.wrap(onSuccess).should('not.have.been.called'); + }); + + it('validates URL format', () => { + const onClose = cy.stub(); + const onSuccess = cy.stub(); + + cy.mount( + , + ); + + cy.get('#name').find('input').type('test-repo'); + cy.get('#interval').find('input').clear().type('1m0s'); + cy.get('#url').find('input').type('not-a-valid-url'); + cy.get('#branch').find('input').clear().type('main'); + + // Submit the form + cy.get('ui5-button').contains('Create').click(); + + // Should show validation error + cy.get('#url').should('have.attr', 'value-state', 'Negative'); + cy.contains('Must be a valid HTTPS URL').should('exist'); + + // Dialog should not close + cy.wrap(onClose).should('not.have.been.called'); + cy.wrap(onSuccess).should('not.have.been.called'); + }); + + it('closes dialog when cancel is clicked', () => { + const onClose = cy.stub(); + const onSuccess = cy.stub(); + + cy.mount( + , + ); + + // Fill in some data + cy.get('#name').find('input').type('test-repo'); + + // Click cancel + cy.get('ui5-button').contains('Cancel').click(); + + // Dialog should close without calling onSuccess + cy.wrap(onClose).should('have.been.called'); + cy.wrap(onSuccess).should('not.have.been.called'); + }); + + it('uses default values for interval and branch', () => { + const onClose = cy.stub(); + const onSuccess = cy.stub(); + + cy.mount( + , + ); + + // Check default values + cy.get('#interval').find('input').should('have.value', '1m0s'); + cy.get('#branch').find('input').should('have.value', 'main'); + }); + + it('should not close dialog when creation fails', () => { + const failingUseCreateGitRepository = () => ({ + createGitRepository: async (): Promise => { + throw new Error('Creation failed'); + }, + isLoading: false, + }); + + const onClose = cy.stub(); + const onSuccess = cy.stub(); + + cy.mount( + , + ); + + // Fill in the form + cy.get('#name').find('input').type('test-repo'); + cy.get('#interval').find('input').clear().type('1m0s'); + cy.get('#url').find('input').type('https://github.com/test/repo'); + cy.get('#branch').find('input').clear().type('main'); + + // Submit the form + cy.get('ui5-button').contains('Create').click(); + + // Dialog should NOT close on failure + cy.wrap(onClose).should('not.have.been.called'); + cy.wrap(onSuccess).should('not.have.been.called'); + + // Dialog should still be visible + cy.contains('Create Git Repository').should('be.visible'); + }); +}); diff --git a/src/components/Dialogs/CreateGitRepositoryDialog.module.css b/src/components/Dialogs/CreateGitRepositoryDialog.module.css new file mode 100644 index 00000000..e30747d5 --- /dev/null +++ b/src/components/Dialogs/CreateGitRepositoryDialog.module.css @@ -0,0 +1,41 @@ +.grid { + display: grid; + grid-template-columns: auto 1fr; + gap: 1rem; + padding: 1rem; + align-items: center; +} + +.gridColumnLabel { + justify-self: end; +} + +.inputField { + width: 25rem; +} + +.sectionHeader { + grid-column: 1 / -1; + font-weight: bold; + font-size: var(--sapFontHeader6Size); + padding-top: 0.5rem; + padding-bottom: 0.5rem; + border-bottom: 1px solid var(--sapGroup_Title_BorderColor); + margin-bottom: 0.5rem; +} + +.sectionHeader:first-child { + padding-top: 0; +} + +.form { + width: 30rem; +} + +.formField { + margin-bottom: 1.25rem; +} + +.input { + width: 100%; +} diff --git a/src/components/Dialogs/CreateGitRepositoryDialog.tsx b/src/components/Dialogs/CreateGitRepositoryDialog.tsx new file mode 100644 index 00000000..07a8cca2 --- /dev/null +++ b/src/components/Dialogs/CreateGitRepositoryDialog.tsx @@ -0,0 +1,191 @@ +import { Dialog, Bar, Label, Input, Button, Form, FormGroup } from '@ui5/webcomponents-react'; +import { useForm, Controller } from 'react-hook-form'; +import { useTranslation } from 'react-i18next'; +import { + useCreateGitRepository as defaultUseCreateGitRepository, + CreateGitRepositoryParams, +} from '../../hooks/useCreateGitRepository'; +import { useEffect } from 'react'; +import styles from './CreateGitRepositoryDialog.module.css'; + +interface CreateGitRepositoryDialogProps { + isOpen: boolean; + onClose: () => void; + namespace?: string; + onSuccess?: () => void; + useCreateGitRepository?: typeof defaultUseCreateGitRepository; +} + +export function CreateGitRepositoryDialog({ + isOpen, + onClose, + namespace = 'default', + onSuccess, + useCreateGitRepository = defaultUseCreateGitRepository, +}: CreateGitRepositoryDialogProps) { + const { t } = useTranslation(); + const { createGitRepository, isLoading } = useCreateGitRepository(namespace); + + const { + control, + handleSubmit, + reset, + formState: { errors }, + } = useForm({ + defaultValues: { + name: '', + interval: '1m0s', + url: '', + branch: 'main', + secretRef: '', + }, + }); + + useEffect(() => { + if (!isOpen) { + reset(); + } + }, [isOpen, reset]); + + const handleClose = () => { + reset(); + onClose(); + }; + + return ( + + + + + } + /> + } + onClose={handleClose} + > +
+ +
+ + ( + {errors.name?.message}} + className={styles.input} + /> + )} + /> +
+
+ + +
+ + ( + {errors.interval?.message}} + placeholder="1m0s" + className={styles.input} + /> + )} + /> +
+ +
+ + ( + {errors.url?.message}} + placeholder="https://github.com/owner/repo" + className={styles.input} + /> + )} + /> +
+ +
+ + ( + {errors.branch?.message}} + placeholder="main" + className={styles.input} + /> + )} + /> +
+ +
+ + ( + + )} + /> +
+
+
+
+ ); +} diff --git a/src/hooks/useCreateGitRepository.spec.ts b/src/hooks/useCreateGitRepository.spec.ts new file mode 100644 index 00000000..e92b8eb6 --- /dev/null +++ b/src/hooks/useCreateGitRepository.spec.ts @@ -0,0 +1,222 @@ +import { act, renderHook } from '@testing-library/react'; +import { describe, it, expect, vi, beforeEach, afterEach, Mock } from 'vitest'; +import { useCreateGitRepository } from './useCreateGitRepository'; +import { fetchApiServerJson } from '../lib/api/fetch'; +import { assertNonNullish } from '../utils/test/vitest-utils'; + +vi.mock('../lib/api/fetch'); + +vi.mock('react-i18next', () => ({ + useTranslation: () => ({ + t: (key: string, fallback?: string) => fallback || key, + }), +})); + +vi.mock('../context/ToastContext', () => ({ + useToast: () => ({ + show: vi.fn(), + }), +})); + +vi.mock('../components/Shared/k8s/index', () => ({ + ApiConfigContext: { + Provider: ({ children }: { children: React.ReactNode }) => children, + }, +})); + +describe('useCreateGitRepository', () => { + let fetchMock: Mock; + + beforeEach(() => { + fetchMock = vi.mocked(fetchApiServerJson); + }); + + afterEach(() => { + vi.clearAllMocks(); + }); + + it('should successfully create a git repository', async () => { + // ARRANGE + fetchMock.mockResolvedValue(undefined); + + const testData = { + name: 'test-repo', + interval: '1m0s', + url: 'https://github.com/test/repo', + branch: 'main', + }; + + // ACT + const renderHookResult = renderHook(() => useCreateGitRepository('default')); + const { createGitRepository } = renderHookResult.result.current; + + await act(async () => { + await createGitRepository(testData); + }); + + // ASSERT + expect(fetchMock).toHaveBeenCalledTimes(1); + + const call = fetchMock.mock.calls[0]; + assertNonNullish(call); + const [url, _config, _excludeMcpConfig, method, body] = call; + + expect(url).toBe('/apis/source.toolkit.fluxcd.io/v1/namespaces/default/gitrepositories'); + expect(method).toBe('POST'); + + const payload = JSON.parse(body as string); + expect(payload).toEqual({ + apiVersion: 'source.toolkit.fluxcd.io/v1', + kind: 'GitRepository', + metadata: { + name: 'test-repo', + namespace: 'default', + }, + spec: { + interval: '1m0s', + url: 'https://github.com/test/repo', + ref: { + branch: 'main', + }, + }, + }); + }); + + it('should include secretRef when provided', async () => { + // ARRANGE + fetchMock.mockResolvedValue(undefined); + + const testData = { + name: 'test-repo', + interval: '1m0s', + url: 'https://github.com/test/repo', + branch: 'main', + secretRef: 'my-secret', + }; + + // ACT + const renderHookResult = renderHook(() => useCreateGitRepository('default')); + const { createGitRepository } = renderHookResult.result.current; + + await act(async () => { + await createGitRepository(testData); + }); + + // ASSERT + expect(fetchMock).toHaveBeenCalledTimes(1); + + const call = fetchMock.mock.calls[0]; + assertNonNullish(call); + const [, , , , body] = call; + + const payload = JSON.parse(body as string); + expect(payload.spec.secretRef).toEqual({ name: 'my-secret' }); + }); + + it('should use custom namespace when provided', async () => { + // ARRANGE + fetchMock.mockResolvedValue(undefined); + + const testData = { + name: 'test-repo', + interval: '1m0s', + url: 'https://github.com/test/repo', + branch: 'main', + }; + + // ACT + const renderHookResult = renderHook(() => useCreateGitRepository('custom-namespace')); + const { createGitRepository } = renderHookResult.result.current; + + await act(async () => { + await createGitRepository(testData); + }); + + // ASSERT + expect(fetchMock).toHaveBeenCalledTimes(1); + + const call = fetchMock.mock.calls[0]; + assertNonNullish(call); + const [url, , , , body] = call; + + expect(url).toBe('/apis/source.toolkit.fluxcd.io/v1/namespaces/custom-namespace/gitrepositories'); + + const payload = JSON.parse(body as string); + expect(payload.metadata.namespace).toBe('custom-namespace'); + }); + + it('should handle creation failure', async () => { + // ARRANGE + fetchMock.mockRejectedValue(new Error('Network error')); + + const testData = { + name: 'test-repo', + interval: '1m0s', + url: 'https://github.com/test/repo', + branch: 'main', + }; + + // ACT + const renderHookResult = renderHook(() => useCreateGitRepository('default')); + const { createGitRepository } = renderHookResult.result.current; + + let errorThrown = false; + await act(async () => { + try { + await createGitRepository(testData); + } catch { + errorThrown = true; + } + }); + + // ASSERT + expect(errorThrown).toBe(true); + expect(fetchMock).toHaveBeenCalledTimes(1); + }); + + it('should build correct payload with all fields', async () => { + // ARRANGE + fetchMock.mockResolvedValue(undefined); + + const testData = { + name: 'my-app-repo', + interval: '5m0s', + url: 'https://github.com/org/app', + branch: 'develop', + secretRef: 'git-credentials', + }; + + // ACT + const renderHookResult = renderHook(() => useCreateGitRepository('flux-system')); + const { createGitRepository } = renderHookResult.result.current; + + await act(async () => { + await createGitRepository(testData); + }); + + // ASSERT + const call = fetchMock.mock.calls[0]; + assertNonNullish(call); + const [, , , , body] = call; + + const payload = JSON.parse(body as string); + expect(payload).toEqual({ + apiVersion: 'source.toolkit.fluxcd.io/v1', + kind: 'GitRepository', + metadata: { + name: 'my-app-repo', + namespace: 'flux-system', + }, + spec: { + interval: '5m0s', + url: 'https://github.com/org/app', + ref: { + branch: 'develop', + }, + secretRef: { + name: 'git-credentials', + }, + }, + }); + }); +}); diff --git a/src/hooks/useCreateGitRepository.ts b/src/hooks/useCreateGitRepository.ts new file mode 100644 index 00000000..91dc8eff --- /dev/null +++ b/src/hooks/useCreateGitRepository.ts @@ -0,0 +1,57 @@ +import { useState, useContext } from 'react'; +import { useTranslation } from 'react-i18next'; +import { useToast } from '../context/ToastContext'; +import { fetchApiServerJson } from '../lib/api/fetch'; +import { ApiConfigContext } from '../components/Shared/k8s/index'; + +export interface CreateGitRepositoryParams { + name: string; + interval: string; + url: string; + branch: string; + secretRef?: string; +} + +export const useCreateGitRepository = (namespace: string = 'default') => { + const [isLoading, setIsLoading] = useState(false); + const { t } = useTranslation(); + const toast = useToast(); + const apiConfig = useContext(ApiConfigContext); + + const createGitRepository = async (data: CreateGitRepositoryParams) => { + setIsLoading(true); + try { + const payload = { + apiVersion: 'source.toolkit.fluxcd.io/v1', + kind: 'GitRepository', + metadata: { + name: data.name, + namespace, + }, + spec: { + interval: data.interval, + url: data.url, + ref: { branch: data.branch }, + ...(data.secretRef ? { secretRef: { name: data.secretRef } } : {}), + }, + }; + + const path = `/apis/source.toolkit.fluxcd.io/v1/namespaces/${namespace}/gitrepositories`; + + await fetchApiServerJson(path, apiConfig, undefined, 'POST', JSON.stringify(payload)); + + toast.show(t('flux.gitRepositoryCreated', 'Git Repository created successfully')); + } catch (error) { + toast.show( + t('flux.gitRepositoryCreationFailed', 'Failed to create Git Repository: {{error}}', { + error: error instanceof Error ? error.message : 'Unknown error', + }), + ); + throw error; + } finally { + setIsLoading(false); + } + }; + + return { createGitRepository, isLoading }; +}; diff --git a/src/lib/api/types/flux/createGitRepository.ts b/src/lib/api/types/flux/createGitRepository.ts new file mode 100644 index 00000000..d9c5d87f --- /dev/null +++ b/src/lib/api/types/flux/createGitRepository.ts @@ -0,0 +1,25 @@ +import { Resource } from '../resource'; + +export interface CreateGitRepositoryType { + apiVersion: 'source.toolkit.fluxcd.io/v1'; + kind: 'GitRepository'; + metadata: { + name: string; + namespace: string; + }; + spec: { + interval: string; + url: string; + ref: { + branch: string; + }; + secretRef?: { + name: string; + }; + }; +} + +export const CreateGitRepositoryResource = (namespace: string, name: string): Resource => ({ + path: `/apis/source.toolkit.fluxcd.io/v1/namespaces/${namespace}/gitrepositories/${name}`, + method: 'POST', +}); From 735a85cc4b29a7727784a46d80ec8c799e54e1d2 Mon Sep 17 00:00:00 2001 From: Hubert Date: Wed, 19 Nov 2025 09:13:47 +0100 Subject: [PATCH 02/14] moving texts to proper file --- public/locales/en.json | 14 +++++++++- .../ControlPlane/GitRepositories.tsx | 2 +- .../Dialogs/CreateGitRepositoryDialog.tsx | 28 +++++++++---------- 3 files changed, 28 insertions(+), 16 deletions(-) diff --git a/public/locales/en.json b/public/locales/en.json index f6fd2513..6afcb347 100644 --- a/public/locales/en.json +++ b/public/locales/en.json @@ -364,7 +364,8 @@ "maxChars": "Max length is {{maxLength}} characters.", "userExists": "User with this name already exists!", "atLeastOneUser": "You need to have at least one member assigned.", - "notValidChargingTargetFormat": "Use lowercase letters a-f, numbers 0-9, and hyphens (-) in the format: aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + "notValidChargingTargetFormat": "Use lowercase letters a-f, numbers 0-9, and hyphens (-) in the format: aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", + "urlFormat": "Must be a valid HTTPS URL" }, "common": { "all": "All", @@ -507,5 +508,16 @@ "addMembersButton0": "Add members", "addMembersButton1": "Add member", "addMembersButtonN": "Add {{count}} members" + }, + "CreateGitRepositoryDialog": { + "dialogTitle": "Create Git Repository'", + "metadataTitle": "Metadata", + "urlTitle": "URL", + "secretRefOptionalTitle": "SecretRef (Optional)", + "secretRefTitle": "SecretRef", + "nameTitle": "Name", + "intervalTitle": "Interval", + "specTitle": "Spec", + "branchTitle": "Branch" } } diff --git a/src/components/ControlPlane/GitRepositories.tsx b/src/components/ControlPlane/GitRepositories.tsx index 34e65e38..f883a902 100644 --- a/src/components/ControlPlane/GitRepositories.tsx +++ b/src/components/ControlPlane/GitRepositories.tsx @@ -170,7 +170,7 @@ export function GitRepositories() { {t('common.resourcesCount', { count: rows.length })} } diff --git a/src/components/Dialogs/CreateGitRepositoryDialog.tsx b/src/components/Dialogs/CreateGitRepositoryDialog.tsx index 07a8cca2..36213774 100644 --- a/src/components/Dialogs/CreateGitRepositoryDialog.tsx +++ b/src/components/Dialogs/CreateGitRepositoryDialog.tsx @@ -55,7 +55,7 @@ export function CreateGitRepositoryDialog({ return (
- +
- + ( - +
- + (
- + (
- + (
- + )} From 2cf0e87559fa5618ed35caf420db254246129ddc Mon Sep 17 00:00:00 2001 From: Hubert Date: Wed, 19 Nov 2025 09:22:22 +0100 Subject: [PATCH 03/14] fixing type and moving texts --- public/locales/en.json | 4 +++- src/hooks/useCreateGitRepository.ts | 4 ++-- src/lib/api/types/flux/createGitRepository.ts | 4 ++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/public/locales/en.json b/public/locales/en.json index 6afcb347..03ddf4fe 100644 --- a/public/locales/en.json +++ b/public/locales/en.json @@ -518,6 +518,8 @@ "nameTitle": "Name", "intervalTitle": "Interval", "specTitle": "Spec", - "branchTitle": "Branch" + "branchTitle": "Branch", + "gitRepositoryCreated": "Git Repository created successfully", + "gitRepositoryCreationFailed": "Failed to create Git Repository: {{error}}" } } diff --git a/src/hooks/useCreateGitRepository.ts b/src/hooks/useCreateGitRepository.ts index 91dc8eff..d62842d9 100644 --- a/src/hooks/useCreateGitRepository.ts +++ b/src/hooks/useCreateGitRepository.ts @@ -40,10 +40,10 @@ export const useCreateGitRepository = (namespace: string = 'default') => { await fetchApiServerJson(path, apiConfig, undefined, 'POST', JSON.stringify(payload)); - toast.show(t('flux.gitRepositoryCreated', 'Git Repository created successfully')); + toast.show(t('CreateGitRepositoryDialog.gitRepositoryCreated')); } catch (error) { toast.show( - t('flux.gitRepositoryCreationFailed', 'Failed to create Git Repository: {{error}}', { + t('CreateGitRepositoryDialog.gitRepositoryCreationFailed', { error: error instanceof Error ? error.message : 'Unknown error', }), ); diff --git a/src/lib/api/types/flux/createGitRepository.ts b/src/lib/api/types/flux/createGitRepository.ts index d9c5d87f..ea2f3d4b 100644 --- a/src/lib/api/types/flux/createGitRepository.ts +++ b/src/lib/api/types/flux/createGitRepository.ts @@ -1,6 +1,6 @@ import { Resource } from '../resource'; -export interface CreateGitRepositoryType { +export type CreateGitRepositoryType = { apiVersion: 'source.toolkit.fluxcd.io/v1'; kind: 'GitRepository'; metadata: { @@ -17,7 +17,7 @@ export interface CreateGitRepositoryType { name: string; }; }; -} +}; export const CreateGitRepositoryResource = (namespace: string, name: string): Resource => ({ path: `/apis/source.toolkit.fluxcd.io/v1/namespaces/${namespace}/gitrepositories/${name}`, From 13117fb4ed2a7454f8e440820d8746479940fef2 Mon Sep 17 00:00:00 2001 From: Hubert Date: Mon, 24 Nov 2025 20:53:15 +0100 Subject: [PATCH 04/14] PR changes --- public/locales/en.json | 2 +- .../ControlPlane/GitRepositories.tsx | 1 + .../Dialogs/CreateGitRepositoryDialog.cy.tsx | 40 +++++-------- .../Dialogs/CreateGitRepositoryDialog.tsx | 60 ++++++++++++++++--- src/hooks/useCreateGitRepository.ts | 12 +++- src/lib/api/types/flux/createGitRepository.ts | 4 +- 6 files changed, 80 insertions(+), 39 deletions(-) diff --git a/public/locales/en.json b/public/locales/en.json index 03ddf4fe..23f643f2 100644 --- a/public/locales/en.json +++ b/public/locales/en.json @@ -510,7 +510,7 @@ "addMembersButtonN": "Add {{count}} members" }, "CreateGitRepositoryDialog": { - "dialogTitle": "Create Git Repository'", + "dialogTitle": "Create Git Repository", "metadataTitle": "Metadata", "urlTitle": "URL", "secretRefOptionalTitle": "SecretRef (Optional)", diff --git a/src/components/ControlPlane/GitRepositories.tsx b/src/components/ControlPlane/GitRepositories.tsx index f883a902..10a4435a 100644 --- a/src/components/ControlPlane/GitRepositories.tsx +++ b/src/components/ControlPlane/GitRepositories.tsx @@ -169,6 +169,7 @@ export function GitRepositories() { {t('common.resourcesCount', { count: rows.length })} + diff --git a/src/components/Dialogs/CreateGitRepositoryDialog.cy.tsx b/src/components/Dialogs/CreateGitRepositoryDialog.cy.tsx index 6251d249..43b745bf 100644 --- a/src/components/Dialogs/CreateGitRepositoryDialog.cy.tsx +++ b/src/components/Dialogs/CreateGitRepositoryDialog.cy.tsx @@ -17,7 +17,6 @@ describe('CreateGitRepositoryDialog', () => { it('creates a git repository with valid data', () => { const onClose = cy.stub(); - const onSuccess = cy.stub(); cy.mount( { namespace="default" useCreateGitRepository={fakeUseCreateGitRepository} onClose={onClose} - onSuccess={onSuccess} />, ); const expectedPayload = { + namespace: 'default', name: 'test-repo', interval: '5m0s', url: 'https://github.com/test/repo', @@ -51,12 +50,10 @@ describe('CreateGitRepositoryDialog', () => { // Dialog should close on success cy.wrap(onClose).should('have.been.called'); - cy.wrap(onSuccess).should('have.been.called'); }); it('includes secretRef when provided', () => { const onClose = cy.stub(); - const onSuccess = cy.stub(); cy.mount( { namespace="default" useCreateGitRepository={fakeUseCreateGitRepository} onClose={onClose} - onSuccess={onSuccess} />, ); const expectedPayload = { + namespace: 'default', name: 'test-repo', interval: '1m0s', url: 'https://github.com/test/repo', @@ -89,12 +86,10 @@ describe('CreateGitRepositoryDialog', () => { // Dialog should close on success cy.wrap(onClose).should('have.been.called'); - cy.wrap(onSuccess).should('have.been.called'); }); it('validates required fields', () => { const onClose = cy.stub(); - const onSuccess = cy.stub(); cy.mount( { namespace="default" useCreateGitRepository={fakeUseCreateGitRepository} onClose={onClose} - onSuccess={onSuccess} />, ); @@ -115,12 +109,10 @@ describe('CreateGitRepositoryDialog', () => { // Dialog should not close cy.wrap(onClose).should('not.have.been.called'); - cy.wrap(onSuccess).should('not.have.been.called'); }); it('validates URL format', () => { const onClose = cy.stub(); - const onSuccess = cy.stub(); cy.mount( { namespace="default" useCreateGitRepository={fakeUseCreateGitRepository} onClose={onClose} - onSuccess={onSuccess} />, ); cy.get('#name').find('input').type('test-repo'); cy.get('#interval').find('input').clear().type('1m0s'); - cy.get('#url').find('input').type('not-a-valid-url'); cy.get('#branch').find('input').clear().type('main'); - // Submit the form + // Test 1: Invalid string + cy.get('#url').find('input').clear().type('not-a-valid-url'); cy.get('ui5-button').contains('Create').click(); + cy.get('#url').should('have.attr', 'value-state', 'Negative'); + cy.contains('Must be a valid HTTPS URL').should('exist'); - // Should show validation error + // Test 2: HTTP protocol (should fail if we require HTTPS) + cy.get('#url').find('input').clear().type('http://github.com/test/repo'); + cy.get('ui5-button').contains('Create').click(); cy.get('#url').should('have.attr', 'value-state', 'Negative'); cy.contains('Must be a valid HTTPS URL').should('exist'); - // Dialog should not close - cy.wrap(onClose).should('not.have.been.called'); - cy.wrap(onSuccess).should('not.have.been.called'); + // Test 3: Valid HTTPS URL (should pass) + cy.get('#url').find('input').clear().type('https://github.com/test/repo'); + cy.get('ui5-button').contains('Create').click(); + + // Dialog should close on success + cy.wrap(onClose).should('have.been.called'); }); it('closes dialog when cancel is clicked', () => { const onClose = cy.stub(); - const onSuccess = cy.stub(); cy.mount( { namespace="default" useCreateGitRepository={fakeUseCreateGitRepository} onClose={onClose} - onSuccess={onSuccess} />, ); @@ -171,12 +167,10 @@ describe('CreateGitRepositoryDialog', () => { // Dialog should close without calling onSuccess cy.wrap(onClose).should('have.been.called'); - cy.wrap(onSuccess).should('not.have.been.called'); }); it('uses default values for interval and branch', () => { const onClose = cy.stub(); - const onSuccess = cy.stub(); cy.mount( { namespace="default" useCreateGitRepository={fakeUseCreateGitRepository} onClose={onClose} - onSuccess={onSuccess} />, ); @@ -202,7 +195,6 @@ describe('CreateGitRepositoryDialog', () => { }); const onClose = cy.stub(); - const onSuccess = cy.stub(); cy.mount( { namespace="default" useCreateGitRepository={failingUseCreateGitRepository} onClose={onClose} - onSuccess={onSuccess} />, ); @@ -225,7 +216,6 @@ describe('CreateGitRepositoryDialog', () => { // Dialog should NOT close on failure cy.wrap(onClose).should('not.have.been.called'); - cy.wrap(onSuccess).should('not.have.been.called'); // Dialog should still be visible cy.contains('Create Git Repository').should('be.visible'); diff --git a/src/components/Dialogs/CreateGitRepositoryDialog.tsx b/src/components/Dialogs/CreateGitRepositoryDialog.tsx index 36213774..048696cd 100644 --- a/src/components/Dialogs/CreateGitRepositoryDialog.tsx +++ b/src/components/Dialogs/CreateGitRepositoryDialog.tsx @@ -12,7 +12,6 @@ interface CreateGitRepositoryDialogProps { isOpen: boolean; onClose: () => void; namespace?: string; - onSuccess?: () => void; useCreateGitRepository?: typeof defaultUseCreateGitRepository; } @@ -20,7 +19,6 @@ export function CreateGitRepositoryDialog({ isOpen, onClose, namespace = 'default', - onSuccess, useCreateGitRepository = defaultUseCreateGitRepository, }: CreateGitRepositoryDialogProps) { const { t } = useTranslation(); @@ -33,6 +31,7 @@ export function CreateGitRepositoryDialog({ formState: { errors }, } = useForm({ defaultValues: { + namespace, name: '', interval: '1m0s', url: '', @@ -43,12 +42,26 @@ export function CreateGitRepositoryDialog({ useEffect(() => { if (!isOpen) { - reset(); + reset({ + namespace, + name: '', + interval: '1m0s', + url: '', + branch: 'main', + secretRef: '', + }); } - }, [isOpen, reset]); + }, [isOpen, namespace, reset]); const handleClose = () => { - reset(); + reset({ + namespace, + name: '', + interval: '1m0s', + url: '', + branch: 'main', + secretRef: '', + }); onClose(); }; @@ -70,9 +83,15 @@ export function CreateGitRepositoryDialog({ void handleSubmit(async (data) => { try { await createGitRepository(data); - reset(); + reset({ + namespace, + name: '', + interval: '1m0s', + url: '', + branch: 'main', + secretRef: '', + }); onClose(); - onSuccess?.(); } catch { // Error handled by hook } @@ -89,6 +108,24 @@ export function CreateGitRepositoryDialog({ > +
+ + ( + {errors.namespace?.message}} + className={styles.input} + /> + )} + /> +
+
{ + try { + const url = new URL(value); + return url.protocol === 'https:' || t('validationErrors.urlFormat'); + } catch { + return t('validationErrors.urlFormat'); + } + }, }} render={({ field }) => ( { +export const useCreateGitRepository = (defaultNamespace: string = 'default') => { const [isLoading, setIsLoading] = useState(false); const { t } = useTranslation(); const toast = useToast(); const apiConfig = useContext(ApiConfigContext); + const revalidate = useRevalidateApiResource(FluxRequest); const createGitRepository = async (data: CreateGitRepositoryParams) => { setIsLoading(true); try { + const targetNamespace = data.namespace || defaultNamespace; const payload = { apiVersion: 'source.toolkit.fluxcd.io/v1', kind: 'GitRepository', metadata: { name: data.name, - namespace, + namespace: targetNamespace, }, spec: { interval: data.interval, @@ -36,9 +41,10 @@ export const useCreateGitRepository = (namespace: string = 'default') => { }, }; - const path = `/apis/source.toolkit.fluxcd.io/v1/namespaces/${namespace}/gitrepositories`; + const path = `/apis/source.toolkit.fluxcd.io/v1/namespaces/${targetNamespace}/gitrepositories`; await fetchApiServerJson(path, apiConfig, undefined, 'POST', JSON.stringify(payload)); + await revalidate(); toast.show(t('CreateGitRepositoryDialog.gitRepositoryCreated')); } catch (error) { diff --git a/src/lib/api/types/flux/createGitRepository.ts b/src/lib/api/types/flux/createGitRepository.ts index ea2f3d4b..d9aab7a5 100644 --- a/src/lib/api/types/flux/createGitRepository.ts +++ b/src/lib/api/types/flux/createGitRepository.ts @@ -19,7 +19,7 @@ export type CreateGitRepositoryType = { }; }; -export const CreateGitRepositoryResource = (namespace: string, name: string): Resource => ({ - path: `/apis/source.toolkit.fluxcd.io/v1/namespaces/${namespace}/gitrepositories/${name}`, +export const CreateGitRepositoryResource = (namespace: string): Resource => ({ + path: `/apis/source.toolkit.fluxcd.io/v1/namespaces/${namespace}/gitrepositories`, method: 'POST', }); From 5242fb22df963215eb916a59316921d60e1accb2 Mon Sep 17 00:00:00 2001 From: Hubert Date: Mon, 24 Nov 2025 21:00:04 +0100 Subject: [PATCH 05/14] fix --- src/components/ControlPlane/GitRepositories.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ControlPlane/GitRepositories.tsx b/src/components/ControlPlane/GitRepositories.tsx index 10a4435a..2995e9fb 100644 --- a/src/components/ControlPlane/GitRepositories.tsx +++ b/src/components/ControlPlane/GitRepositories.tsx @@ -168,8 +168,8 @@ export function GitRepositories() { header={ {t('common.resourcesCount', { count: rows.length })} - + From aeb5908e637553328254d6dbd1861d54237d1184 Mon Sep 17 00:00:00 2001 From: Hubert Date: Thu, 27 Nov 2025 10:18:12 +0100 Subject: [PATCH 06/14] PR changes --- .../ControlPlane/GitRepositories.tsx | 12 +- .../Dialogs/CreateGitRepositoryDialog.cy.tsx | 60 +++------ .../Dialogs/CreateGitRepositoryDialog.tsx | 116 +++++++----------- src/hooks/useCreateGitRepository.spec.ts | 21 ++-- src/hooks/useCreateGitRepository.ts | 76 ++++++------ src/lib/api/types/flux/createGitRepository.ts | 7 -- 6 files changed, 116 insertions(+), 176 deletions(-) diff --git a/src/components/ControlPlane/GitRepositories.tsx b/src/components/ControlPlane/GitRepositories.tsx index 2995e9fb..3a9d8f73 100644 --- a/src/components/ControlPlane/GitRepositories.tsx +++ b/src/components/ControlPlane/GitRepositories.tsx @@ -12,7 +12,7 @@ import { Title, Toolbar, ToolbarSpacer, - Button, + ToolbarButton, } from '@ui5/webcomponents-react'; import '@ui5/webcomponents-icons/dist/add'; import IllustratedError from '../Shared/IllustratedError.tsx'; @@ -170,9 +170,9 @@ export function GitRepositories() { {t('common.resourcesCount', { count: rows.length })} - + } > @@ -182,11 +182,7 @@ export function GitRepositories() { - setIsCreateDialogOpen(false)} - /> + setIsCreateDialogOpen(false)} /> ); } diff --git a/src/components/Dialogs/CreateGitRepositoryDialog.cy.tsx b/src/components/Dialogs/CreateGitRepositoryDialog.cy.tsx index 43b745bf..736945c4 100644 --- a/src/components/Dialogs/CreateGitRepositoryDialog.cy.tsx +++ b/src/components/Dialogs/CreateGitRepositoryDialog.cy.tsx @@ -19,12 +19,7 @@ describe('CreateGitRepositoryDialog', () => { const onClose = cy.stub(); cy.mount( - , + , ); const expectedPayload = { @@ -37,9 +32,10 @@ describe('CreateGitRepositoryDialog', () => { }; // Fill in the form - cy.get('#name').find('input').type('test-repo'); + cy.get('#name').typeIntoUi5Input('test-repo'); cy.get('#interval').find('input').clear().type('5m0s'); - cy.get('#url').find('input').type('https://github.com/test/repo'); + + cy.get('#url').typeIntoUi5Input('https://github.com/test/repo'); cy.get('#branch').find('input').clear().type('develop'); // Submit the form @@ -56,12 +52,7 @@ describe('CreateGitRepositoryDialog', () => { const onClose = cy.stub(); cy.mount( - , + , ); const expectedPayload = { @@ -74,9 +65,9 @@ describe('CreateGitRepositoryDialog', () => { }; // Fill in the form - cy.get('#name').find('input').type('test-repo'); - cy.get('#url').find('input').type('https://github.com/test/repo'); - cy.get('#secretRef').find('input').type('my-git-secret'); + cy.get('#name').typeIntoUi5Input('test-repo'); + cy.get('#url').typeIntoUi5Input('https://github.com/test/repo'); + cy.get('#secretRef').typeIntoUi5Input('my-git-secret'); // Submit the form cy.get('ui5-button').contains('Create').click(); @@ -92,12 +83,7 @@ describe('CreateGitRepositoryDialog', () => { const onClose = cy.stub(); cy.mount( - , + , ); // Try to submit without filling required fields @@ -115,15 +101,10 @@ describe('CreateGitRepositoryDialog', () => { const onClose = cy.stub(); cy.mount( - , + , ); - cy.get('#name').find('input').type('test-repo'); + cy.get('#name').typeIntoUi5Input('test-repo'); cy.get('#interval').find('input').clear().type('1m0s'); cy.get('#branch').find('input').clear().type('main'); @@ -151,16 +132,11 @@ describe('CreateGitRepositoryDialog', () => { const onClose = cy.stub(); cy.mount( - , + , ); // Fill in some data - cy.get('#name').find('input').type('test-repo'); + cy.get('#name').typeIntoUi5Input('test-repo'); // Click cancel cy.get('ui5-button').contains('Cancel').click(); @@ -173,12 +149,7 @@ describe('CreateGitRepositoryDialog', () => { const onClose = cy.stub(); cy.mount( - , + , ); // Check default values @@ -199,14 +170,13 @@ describe('CreateGitRepositoryDialog', () => { cy.mount( , ); // Fill in the form - cy.get('#name').find('input').type('test-repo'); + cy.get('#name').typeIntoUi5Input('test-repo'); cy.get('#interval').find('input').clear().type('1m0s'); cy.get('#url').find('input').type('https://github.com/test/repo'); cy.get('#branch').find('input').clear().type('main'); diff --git a/src/components/Dialogs/CreateGitRepositoryDialog.tsx b/src/components/Dialogs/CreateGitRepositoryDialog.tsx index 048696cd..57d25344 100644 --- a/src/components/Dialogs/CreateGitRepositoryDialog.tsx +++ b/src/components/Dialogs/CreateGitRepositoryDialog.tsx @@ -1,70 +1,76 @@ import { Dialog, Bar, Label, Input, Button, Form, FormGroup } from '@ui5/webcomponents-react'; import { useForm, Controller } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; -import { - useCreateGitRepository as defaultUseCreateGitRepository, - CreateGitRepositoryParams, -} from '../../hooks/useCreateGitRepository'; -import { useEffect } from 'react'; +import { useId } from 'react'; +import { z } from 'zod'; +import { zodResolver } from '@hookform/resolvers/zod'; +import { useCreateGitRepository as _useCreateGitRepository } from '../../hooks/useCreateGitRepository'; import styles from './CreateGitRepositoryDialog.module.css'; interface CreateGitRepositoryDialogProps { isOpen: boolean; onClose: () => void; - namespace?: string; - useCreateGitRepository?: typeof defaultUseCreateGitRepository; + useCreateGitRepository?: typeof _useCreateGitRepository; } export function CreateGitRepositoryDialog({ isOpen, onClose, - namespace = 'default', - useCreateGitRepository = defaultUseCreateGitRepository, + useCreateGitRepository = _useCreateGitRepository, }: CreateGitRepositoryDialogProps) { const { t } = useTranslation(); - const { createGitRepository, isLoading } = useCreateGitRepository(namespace); + const { createGitRepository, isLoading } = useCreateGitRepository(); + const namespaceId = useId(); + + const validationSchema = z.object({ + namespace: z.string().min(1, { message: t('validationErrors.required') }), + name: z.string().min(1, { message: t('validationErrors.required') }), + interval: z.string().min(1, { message: t('validationErrors.required') }), + url: z + .string() + .min(1, { message: t('validationErrors.required') }) + .url({ message: t('validationErrors.urlFormat') }) + .startsWith('https://', { message: t('validationErrors.urlFormat') }), + branch: z.string().min(1, { message: t('validationErrors.required') }), + secretRef: z.string().optional(), + }); + + type FormSchema = z.infer; const { control, handleSubmit, reset, formState: { errors }, - } = useForm({ + } = useForm({ defaultValues: { - namespace, + namespace: 'default', name: '', interval: '1m0s', url: '', branch: 'main', secretRef: '', }, + resolver: zodResolver(validationSchema), }); - useEffect(() => { - if (!isOpen) { - reset({ - namespace, - name: '', - interval: '1m0s', - url: '', - branch: 'main', - secretRef: '', - }); - } - }, [isOpen, namespace, reset]); - const handleClose = () => { - reset({ - namespace, - name: '', - interval: '1m0s', - url: '', - branch: 'main', - secretRef: '', - }); + reset(); onClose(); }; + const handleCreate = () => { + void handleSubmit(async (data) => { + try { + await createGitRepository(data); + reset(); + onClose(); + } catch { + // Error handled by hook + } + })(); + }; + return ( {t('buttons.cancel', 'Cancel')} - @@ -109,15 +94,16 @@ export function CreateGitRepositoryDialog({
- + ( {errors.namespace?.message}} className={styles.input} @@ -131,7 +117,6 @@ export function CreateGitRepositoryDialog({ ( ( { - try { - const url = new URL(value); - return url.protocol === 'https:' || t('validationErrors.urlFormat'); - } catch { - return t('validationErrors.urlFormat'); - } - }, - }} render={({ field }) => ( ( { const testData = { name: 'test-repo', + namespace: 'default', interval: '1m0s', url: 'https://github.com/test/repo', branch: 'main', }; // ACT - const renderHookResult = renderHook(() => useCreateGitRepository('default')); + const renderHookResult = renderHook(() => useCreateGitRepository()); const { createGitRepository } = renderHookResult.result.current; await act(async () => { @@ -88,6 +89,7 @@ describe('useCreateGitRepository', () => { const testData = { name: 'test-repo', + namespace: 'default', interval: '1m0s', url: 'https://github.com/test/repo', branch: 'main', @@ -95,7 +97,7 @@ describe('useCreateGitRepository', () => { }; // ACT - const renderHookResult = renderHook(() => useCreateGitRepository('default')); + const renderHookResult = renderHook(() => useCreateGitRepository()); const { createGitRepository } = renderHookResult.result.current; await act(async () => { @@ -119,13 +121,14 @@ describe('useCreateGitRepository', () => { const testData = { name: 'test-repo', + namespace: 'default', interval: '1m0s', url: 'https://github.com/test/repo', branch: 'main', }; // ACT - const renderHookResult = renderHook(() => useCreateGitRepository('custom-namespace')); + const renderHookResult = renderHook(() => useCreateGitRepository()); const { createGitRepository } = renderHookResult.result.current; await act(async () => { @@ -139,10 +142,10 @@ describe('useCreateGitRepository', () => { assertNonNullish(call); const [url, , , , body] = call; - expect(url).toBe('/apis/source.toolkit.fluxcd.io/v1/namespaces/custom-namespace/gitrepositories'); + expect(url).toBe('/apis/source.toolkit.fluxcd.io/v1/namespaces/default/gitrepositories'); const payload = JSON.parse(body as string); - expect(payload.metadata.namespace).toBe('custom-namespace'); + expect(payload.metadata.namespace).toBe('default'); }); it('should handle creation failure', async () => { @@ -151,13 +154,14 @@ describe('useCreateGitRepository', () => { const testData = { name: 'test-repo', + namespace: 'default', interval: '1m0s', url: 'https://github.com/test/repo', branch: 'main', }; // ACT - const renderHookResult = renderHook(() => useCreateGitRepository('default')); + const renderHookResult = renderHook(() => useCreateGitRepository()); const { createGitRepository } = renderHookResult.result.current; let errorThrown = false; @@ -180,6 +184,7 @@ describe('useCreateGitRepository', () => { const testData = { name: 'my-app-repo', + namespace: 'default', interval: '5m0s', url: 'https://github.com/org/app', branch: 'develop', @@ -187,7 +192,7 @@ describe('useCreateGitRepository', () => { }; // ACT - const renderHookResult = renderHook(() => useCreateGitRepository('flux-system')); + const renderHookResult = renderHook(() => useCreateGitRepository()); const { createGitRepository } = renderHookResult.result.current; await act(async () => { @@ -205,7 +210,7 @@ describe('useCreateGitRepository', () => { kind: 'GitRepository', metadata: { name: 'my-app-repo', - namespace: 'flux-system', + namespace: 'default', }, spec: { interval: '5m0s', diff --git a/src/hooks/useCreateGitRepository.ts b/src/hooks/useCreateGitRepository.ts index b41e2348..e81590d9 100644 --- a/src/hooks/useCreateGitRepository.ts +++ b/src/hooks/useCreateGitRepository.ts @@ -1,13 +1,14 @@ -import { useState, useContext } from 'react'; +import { useState, useContext, useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { useToast } from '../context/ToastContext'; import { fetchApiServerJson } from '../lib/api/fetch'; import { ApiConfigContext } from '../components/Shared/k8s/index'; import { useRevalidateApiResource } from '../lib/api/useApiResource'; import { FluxRequest } from '../lib/api/types/flux/listGitRepo'; +import { CreateGitRepositoryType } from '../lib/api/types/flux/createGitRepository'; export interface CreateGitRepositoryParams { - namespace?: string; + namespace: string; name: string; interval: string; url: string; @@ -15,49 +16,52 @@ export interface CreateGitRepositoryParams { secretRef?: string; } -export const useCreateGitRepository = (defaultNamespace: string = 'default') => { +export const useCreateGitRepository = () => { const [isLoading, setIsLoading] = useState(false); const { t } = useTranslation(); const toast = useToast(); const apiConfig = useContext(ApiConfigContext); const revalidate = useRevalidateApiResource(FluxRequest); - const createGitRepository = async (data: CreateGitRepositoryParams) => { - setIsLoading(true); - try { - const targetNamespace = data.namespace || defaultNamespace; - const payload = { - apiVersion: 'source.toolkit.fluxcd.io/v1', - kind: 'GitRepository', - metadata: { - name: data.name, - namespace: targetNamespace, - }, - spec: { - interval: data.interval, - url: data.url, - ref: { branch: data.branch }, - ...(data.secretRef ? { secretRef: { name: data.secretRef } } : {}), - }, - }; + const createGitRepository = useCallback( + async (data: CreateGitRepositoryParams) => { + setIsLoading(true); + try { + const targetNamespace = data.namespace; + const payload: CreateGitRepositoryType = { + apiVersion: 'source.toolkit.fluxcd.io/v1', + kind: 'GitRepository', + metadata: { + name: data.name, + namespace: targetNamespace, + }, + spec: { + interval: data.interval, + url: data.url, + ref: { branch: data.branch }, + ...(data.secretRef ? { secretRef: { name: data.secretRef } } : {}), + }, + }; - const path = `/apis/source.toolkit.fluxcd.io/v1/namespaces/${targetNamespace}/gitrepositories`; + const path = `/apis/source.toolkit.fluxcd.io/v1/namespaces/${targetNamespace}/gitrepositories`; - await fetchApiServerJson(path, apiConfig, undefined, 'POST', JSON.stringify(payload)); - await revalidate(); + await fetchApiServerJson(path, apiConfig, undefined, 'POST', JSON.stringify(payload)); + await revalidate(); - toast.show(t('CreateGitRepositoryDialog.gitRepositoryCreated')); - } catch (error) { - toast.show( - t('CreateGitRepositoryDialog.gitRepositoryCreationFailed', { - error: error instanceof Error ? error.message : 'Unknown error', - }), - ); - throw error; - } finally { - setIsLoading(false); - } - }; + toast.show(t('CreateGitRepositoryDialog.gitRepositoryCreated')); + } catch (error) { + toast.show( + t('CreateGitRepositoryDialog.gitRepositoryCreationFailed', { + error: error instanceof Error ? error.message : 'Unknown error', + }), + ); + throw error; + } finally { + setIsLoading(false); + } + }, + [apiConfig, revalidate, t, toast], + ); return { createGitRepository, isLoading }; }; diff --git a/src/lib/api/types/flux/createGitRepository.ts b/src/lib/api/types/flux/createGitRepository.ts index d9aab7a5..a4ef2b46 100644 --- a/src/lib/api/types/flux/createGitRepository.ts +++ b/src/lib/api/types/flux/createGitRepository.ts @@ -1,5 +1,3 @@ -import { Resource } from '../resource'; - export type CreateGitRepositoryType = { apiVersion: 'source.toolkit.fluxcd.io/v1'; kind: 'GitRepository'; @@ -18,8 +16,3 @@ export type CreateGitRepositoryType = { }; }; }; - -export const CreateGitRepositoryResource = (namespace: string): Resource => ({ - path: `/apis/source.toolkit.fluxcd.io/v1/namespaces/${namespace}/gitrepositories`, - method: 'POST', -}); From 8bb25e40c4e8c08e45c9464a6a965629ed81d6a2 Mon Sep 17 00:00:00 2001 From: Hubert Date: Thu, 27 Nov 2025 11:08:28 +0100 Subject: [PATCH 07/14] lint --- src/components/Dialogs/CreateGitRepositoryDialog.cy.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Dialogs/CreateGitRepositoryDialog.cy.tsx b/src/components/Dialogs/CreateGitRepositoryDialog.cy.tsx index 736945c4..0ceb5f66 100644 --- a/src/components/Dialogs/CreateGitRepositoryDialog.cy.tsx +++ b/src/components/Dialogs/CreateGitRepositoryDialog.cy.tsx @@ -34,7 +34,7 @@ describe('CreateGitRepositoryDialog', () => { // Fill in the form cy.get('#name').typeIntoUi5Input('test-repo'); cy.get('#interval').find('input').clear().type('5m0s'); - + cy.get('#url').typeIntoUi5Input('https://github.com/test/repo'); cy.get('#branch').find('input').clear().type('develop'); From 7baafee0d10f1e1c13b31382ccc87414dc1c11e6 Mon Sep 17 00:00:00 2001 From: Hubert Date: Thu, 27 Nov 2025 11:30:14 +0100 Subject: [PATCH 08/14] removing placeholder --- src/components/Dialogs/CreateGitRepositoryDialog.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/Dialogs/CreateGitRepositoryDialog.tsx b/src/components/Dialogs/CreateGitRepositoryDialog.tsx index 57d25344..d9dc00c7 100644 --- a/src/components/Dialogs/CreateGitRepositoryDialog.tsx +++ b/src/components/Dialogs/CreateGitRepositoryDialog.tsx @@ -194,7 +194,6 @@ export function CreateGitRepositoryDialog({ )} From a1476835b20d41f3eba6e1ff9465d558642bfffa Mon Sep 17 00:00:00 2001 From: Hubert Date: Thu, 27 Nov 2025 11:34:23 +0100 Subject: [PATCH 09/14] lint --- src/components/Dialogs/CreateGitRepositoryDialog.tsx | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/components/Dialogs/CreateGitRepositoryDialog.tsx b/src/components/Dialogs/CreateGitRepositoryDialog.tsx index d9dc00c7..c707d64b 100644 --- a/src/components/Dialogs/CreateGitRepositoryDialog.tsx +++ b/src/components/Dialogs/CreateGitRepositoryDialog.tsx @@ -190,13 +190,7 @@ export function CreateGitRepositoryDialog({ ( - - )} + render={({ field }) => } />
From 16f498d9c6636258f3b3a94645416f09a324d8ce Mon Sep 17 00:00:00 2001 From: Hubert Date: Thu, 27 Nov 2025 14:23:24 +0100 Subject: [PATCH 10/14] button --- src/components/ControlPlane/GitRepositories.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/ControlPlane/GitRepositories.tsx b/src/components/ControlPlane/GitRepositories.tsx index 3a9d8f73..b3897879 100644 --- a/src/components/ControlPlane/GitRepositories.tsx +++ b/src/components/ControlPlane/GitRepositories.tsx @@ -12,7 +12,7 @@ import { Title, Toolbar, ToolbarSpacer, - ToolbarButton, + Button, } from '@ui5/webcomponents-react'; import '@ui5/webcomponents-icons/dist/add'; import IllustratedError from '../Shared/IllustratedError.tsx'; @@ -170,9 +170,9 @@ export function GitRepositories() { {t('common.resourcesCount', { count: rows.length })} - setIsCreateDialogOpen(true)}> + } > From 8815560b2eba8050a0846074443a2b01fd42dd86 Mon Sep 17 00:00:00 2001 From: Hubert Date: Thu, 27 Nov 2025 16:15:41 +0100 Subject: [PATCH 11/14] PR changes + merge to main --- package-lock.json | 735 +++--------------- public/locales/en.json | 1 - .../Dialogs/CreateGitRepositoryDialog.cy.tsx | 46 +- .../Dialogs/CreateGitRepositoryDialog.tsx | 46 +- 4 files changed, 171 insertions(+), 657 deletions(-) diff --git a/package-lock.json b/package-lock.json index 15a81e22..73dd7865 100644 --- a/package-lock.json +++ b/package-lock.json @@ -272,7 +272,6 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -624,7 +623,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -633,9 +631,9 @@ } }, "node_modules/@csstools/css-syntax-patches-for-csstree": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.17.tgz", - "integrity": "sha512-LCC++2h8pLUSPY+EsZmrrJ1EOUu+5iClpEiDhhdw3zRJpPbABML/N5lmRuBHjxtKm9VnRcsUzioyD0sekFMF0A==", + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.19.tgz", + "integrity": "sha512-QW5/SM2ARltEhoKcmRI1LoLf3/C7dHGswwCnfLcoMgqurBT4f8GvwXMgAbK/FwcxthmJRK5MGTtddj0yQn0J9g==", "dev": true, "funding": [ { @@ -668,7 +666,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" } @@ -806,6 +803,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -822,6 +820,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -838,6 +837,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -854,6 +854,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -870,6 +871,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -886,6 +888,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -902,6 +905,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -918,6 +922,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -934,6 +939,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -950,6 +956,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -966,6 +973,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -982,6 +990,7 @@ "cpu": [ "loong64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -998,6 +1007,7 @@ "cpu": [ "mips64el" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1014,6 +1024,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1030,6 +1041,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1046,6 +1058,7 @@ "cpu": [ "s390x" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1062,6 +1075,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1078,6 +1092,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1094,6 +1109,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1110,6 +1126,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1126,6 +1143,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1142,6 +1160,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1158,6 +1177,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1174,6 +1194,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1190,6 +1211,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1206,6 +1228,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1244,47 +1267,6 @@ "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@eslint/config-array": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", - "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^2.1.7", - "debug": "^4.3.1", - "minimatch": "^3.1.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", - "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.17.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/core": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", - "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, "node_modules/@eslint/eslintrc": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", @@ -1335,30 +1317,6 @@ "url": "https://eslint.org/donate" } }, - "node_modules/@eslint/object-schema": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", - "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", - "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.17.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, "node_modules/@fastify/accept-negotiator": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@fastify/accept-negotiator/-/accept-negotiator-2.0.1.tgz", @@ -2718,58 +2676,6 @@ "react-hook-form": "^7.55.0" } }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, "node_modules/@inquirer/ansi": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.2.tgz", @@ -3403,7 +3309,6 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", "license": "Apache-2.0", - "peer": true, "engines": { "node": ">=8.0.0" } @@ -3425,7 +3330,6 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-2.2.0.tgz", "integrity": "sha512-qRkLWiUEZNAmYapZ7KGS5C4OmBLcP/H2foXeOEaowYCR0wi89fHejrfYfbuLVCMLp/dWZXKvQusdbUEZjERfwQ==", "license": "Apache-2.0", - "peer": true, "engines": { "node": "^18.19.0 || >=20.6.0" }, @@ -3438,7 +3342,6 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.2.0.tgz", "integrity": "sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, @@ -3454,7 +3357,6 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.208.0.tgz", "integrity": "sha512-Eju0L4qWcQS+oXxi6pgh7zvE2byogAkcsVv0OjHF/97iOz1N/aKE6etSGowYkie+YA1uo6DNwdSxaaNnLvcRlA==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@opentelemetry/api-logs": "0.208.0", "import-in-the-middle": "^2.0.0", @@ -3842,7 +3744,6 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.2.0.tgz", "integrity": "sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@opentelemetry/core": "2.2.0", "@opentelemetry/semantic-conventions": "^1.29.0" @@ -3859,7 +3760,6 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.2.0.tgz", "integrity": "sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@opentelemetry/core": "2.2.0", "@opentelemetry/resources": "2.2.0", @@ -3877,7 +3777,6 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.38.0.tgz", "integrity": "sha512-kocjix+/sSggfJhwXqClZ3i9Y/MI0fp7b+g7kCRm6psy2dsf8uApTRclwG18h8Avm7C9+fnt+O36PspJ/OzoWg==", "license": "Apache-2.0", - "peer": true, "engines": { "node": ">=14" } @@ -3948,6 +3847,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3961,6 +3861,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3974,6 +3875,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3987,6 +3889,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4000,6 +3903,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4013,6 +3917,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4026,6 +3931,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4039,6 +3945,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4052,6 +3959,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4065,6 +3973,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4078,6 +3987,7 @@ "cpu": [ "loong64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4091,6 +4001,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4104,6 +4015,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4117,6 +4029,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4130,6 +4043,7 @@ "cpu": [ "s390x" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4143,6 +4057,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4156,6 +4071,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4169,6 +4085,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4182,6 +4099,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4195,6 +4113,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4208,6 +4127,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4221,6 +4141,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4839,27 +4760,6 @@ "url": "https://github.com/sponsors/tannerlinsley" } }, - "node_modules/@testing-library/dom": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", - "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "5.3.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.5.0", - "picocolors": "1.1.1", - "pretty-format": "^27.0.2" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/@testing-library/react": { "version": "16.3.0", "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.0.tgz", @@ -4917,13 +4817,6 @@ "tslib": "^2.4.0" } }, - "node_modules/@types/aria-query": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", - "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -5104,6 +4997,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, "license": "MIT" }, "node_modules/@types/jquery": { @@ -5213,9 +5107,8 @@ "version": "19.2.2", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.2.tgz", "integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==", - "devOptional": true, + "dev": true, "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.0.2" } @@ -5224,9 +5117,8 @@ "version": "19.2.2", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.2.tgz", "integrity": "sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==", - "devOptional": true, + "dev": true, "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -5526,7 +5418,6 @@ "integrity": "sha512-6m1I5RmHBGTnUGS113G04DMu3CpSdxCAU/UvtjNWL4Nuf3MW9tQhiJqRlHzChIkhy6kZSAQmc+I1bcGjE3yNKg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.46.3", "@typescript-eslint/types": "8.46.3", @@ -6133,7 +6024,6 @@ "resolved": "https://registry.npmjs.org/@ui5/webcomponents/-/webcomponents-2.15.1.tgz", "integrity": "sha512-8dJd9o0PEMwBBkG2K86XnyZYVQmtMz/9PNUJWeqPJLU/JST2ty7M7lE+JRdwvac58/OcboNWZidHpAbJs/pmPw==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@ui5/webcomponents-base": "2.15.1", "@ui5/webcomponents-icons": "2.15.1", @@ -6179,7 +6069,6 @@ "resolved": "https://registry.npmjs.org/@ui5/webcomponents-fiori/-/webcomponents-fiori-2.15.1.tgz", "integrity": "sha512-Sptnb0vcpO1xRgCZly3NKKBiisJZXAMSIyEMnCs+wsra1eyoL4CZBNvc4MJvSqu0BU4xazJhE8X3pNwpadbJNw==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@ui5/webcomponents": "2.15.1", "@ui5/webcomponents-base": "2.15.1", @@ -6269,7 +6158,6 @@ "resolved": "https://registry.npmjs.org/@ui5/webcomponents-react-base/-/webcomponents-react-base-2.15.3.tgz", "integrity": "sha512-anD0B4k9DfZr4kEqISfBSCBytE+aUnubXCZE3Y/xcutKbJwZnzbIBtsqk0X1NXSRo4vNdxFWEjiH5I4aq2bcWw==", "license": "Apache-2.0", - "peer": true, "peerDependencies": { "@types/react": "*", "@ui5/webcomponents-base": "~2.15.0", @@ -6300,19 +6188,6 @@ "react": "^18 || ^19" } }, - "node_modules/@ui5/webcomponents-react/node_modules/react-table": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/react-table/-/react-table-7.8.0.tgz", - "integrity": "sha512-hNaz4ygkZO4bESeFfnfOft73iBUj8K5oKi1EcSHPAibEydfsX2MyU6Z8KCr3mv3C9Kqqh71U+DhZkFvibbnPbA==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - }, - "peerDependencies": { - "react": "^16.8.3 || ^17.0.0-0 || ^18.0.0" - } - }, "node_modules/@ui5/webcomponents-theming": { "version": "2.15.1", "resolved": "https://registry.npmjs.org/@ui5/webcomponents-theming/-/webcomponents-theming-2.15.1.tgz", @@ -6937,7 +6812,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -6996,7 +6870,6 @@ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -7148,13 +7021,13 @@ "license": "Python-2.0" }, "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", "dev": true, "license": "Apache-2.0", - "dependencies": { - "dequal": "^2.0.3" + "engines": { + "node": ">= 0.4" } }, "node_modules/array-buffer-byte-length": { @@ -7667,7 +7540,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.25", "caniuse-lite": "^1.0.30001754", @@ -8478,12 +8350,16 @@ "license": "MIT" }, "node_modules/cookie": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", - "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", "license": "MIT", "engines": { "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/core-util-is": { @@ -8598,7 +8474,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { "@cypress/request": "^3.0.9", "@cypress/xvfb": "^1.2.4", @@ -8976,7 +8851,6 @@ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "license": "ISC", - "peer": true, "engines": { "node": ">=12" } @@ -9260,13 +9134,6 @@ "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", "license": "MIT" }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -9385,13 +9252,6 @@ "node": ">=0.10.0" } }, - "node_modules/dom-accessibility-api": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", - "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", - "dev": true, - "license": "MIT" - }, "node_modules/dom-helpers": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", @@ -9482,9 +9342,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.260", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.260.tgz", - "integrity": "sha512-ov8rBoOBhVawpzdre+Cmz4FB+y66Eqrk6Gwqd8NGxuhv99GQ8XqMAr351KEkOt7gukXWDg6gJWEMKgL2RLMPtA==", + "version": "1.5.262", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.262.tgz", + "integrity": "sha512-NlAsMteRHek05jRUxUR0a5jpjYq9ykk6+kO0yRaMi5moe7u0fVIOeQ3Y30A8dIiWFBNUoQGi1ljb1i5VtS9WQQ==", "license": "ISC" }, "node_modules/emoji-regex": { @@ -9508,7 +9368,6 @@ "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ansi-colors": "^4.1.1", "strip-ansi": "^6.0.1" @@ -9793,6 +9652,7 @@ "version": "0.25.12", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, "hasInstallScript": true, "license": "MIT", "bin": { @@ -9846,77 +9706,13 @@ "license": "MIT" }, "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "9.39.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", - "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.1", - "@eslint/config-helpers": "^0.4.2", - "@eslint/core": "^0.17.0", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.39.1", - "@eslint/plugin-kit": "^0.4.1", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } + "node": ">=0.8.0" } }, "node_modules/eslint-config-prettier": { @@ -9925,7 +9721,6 @@ "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", - "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -10066,7 +9861,6 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -10170,16 +9964,6 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/eslint-plugin-prettier": { "version": "5.5.4", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz", @@ -10282,23 +10066,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", @@ -10312,32 +10079,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/espree": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", @@ -10369,32 +10110,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", @@ -10644,13 +10359,6 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, "node_modules/fast-querystring": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz", @@ -10691,7 +10399,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "@fastify/ajv-compiler": "^4.0.0", "@fastify/error": "^4.0.0", @@ -10810,6 +10517,24 @@ "pend": "~1.2.0" } }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/fetch-blob": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", @@ -10849,29 +10574,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -10942,27 +10644,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true, - "license": "ISC" - }, "node_modules/for-each": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", @@ -11242,7 +10923,7 @@ "version": "4.13.0", "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -11429,7 +11110,6 @@ "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.12.0.tgz", "integrity": "sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==", "license": "MIT", - "peer": true, "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } @@ -11535,7 +11215,6 @@ "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-6.0.6.tgz", "integrity": "sha512-zgfER9s+ftkGKUZgc0xbx8T7/HMO4AV5/YuYiFc+AtgcO5T0v8AxYYNQ+ltzuzDZgNkYJaFspm5MMYLjQzrkmw==", "license": "MIT", - "peer": true, "engines": { "node": ">=20" }, @@ -11890,7 +11569,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.27.6" }, @@ -12010,16 +11688,6 @@ "module-details-from-path": "^1.0.3" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, "node_modules/indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", @@ -12762,7 +12430,6 @@ "resolved": "https://registry.npmjs.org/javascript-time-ago/-/javascript-time-ago-2.5.12.tgz", "integrity": "sha512-s8PPq2HQ3HIbSU0SjhNvTitf5VoXbQWof9q6k3gIX7F2il0ptjD5lONTDccpuKt/2U7RjbCp/TCHPK7eDwO7zQ==", "license": "MIT", - "peer": true, "dependencies": { "relative-time-format": "^1.1.7" } @@ -12910,13 +12577,6 @@ "node": ">=6" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -12956,13 +12616,6 @@ "dev": true, "license": "MIT" }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -13046,16 +12699,6 @@ "node": ">=4.0" } }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -13095,20 +12738,6 @@ "node": ">=0.10" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/light-my-request": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-6.6.0.tgz", @@ -13291,13 +12920,6 @@ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "license": "MIT" }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, "node_modules/lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", @@ -13528,16 +13150,6 @@ "yallist": "^3.0.2" } }, - "node_modules/lz-string": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", - "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", - "dev": true, - "license": "MIT", - "bin": { - "lz-string": "bin/bin.js" - } - }, "node_modules/magic-string": { "version": "0.30.8", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", @@ -13837,7 +13449,6 @@ "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.54.0.tgz", "integrity": "sha512-hx45SEUoLatgWxHKCmlLJH81xBo0uXP4sRkESUpmDQevfi+e7K1VuiSprK6UpQ8u4zOcKNiH0pMvHvlMWA/4cw==", "license": "MIT", - "peer": true, "dependencies": { "dompurify": "3.1.7", "marked": "14.0.0" @@ -13935,6 +13546,7 @@ "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, "funding": [ { "type": "github", @@ -14434,24 +14046,6 @@ "tslib": "^2.3.0" } }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/ospath": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", @@ -14982,6 +14576,7 @@ "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, "funding": [ { "type": "opencollective", @@ -15045,22 +14640,11 @@ "node": ">=0.10.0" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/prettier": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -15097,41 +14681,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/pretty-format/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true, - "license": "MIT" - }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -15281,7 +14830,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -15303,7 +14851,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -15328,7 +14875,6 @@ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.66.0.tgz", "integrity": "sha512-xXBqsWGKrY46ZqaHDo+ZUYiMUgi8suYu5kdrS20EG8KiL7VRQitEbNjm+UcrDYrNi1YLyfpmAeGjCZYXLT9YBw==", "license": "MIT", - "peer": true, "engines": { "node": ">=18.0.0" }, @@ -15436,6 +14982,19 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, + "node_modules/react-table": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/react-table/-/react-table-7.8.0.tgz", + "integrity": "sha512-hNaz4ygkZO4bESeFfnfOft73iBUj8K5oKi1EcSHPAibEydfsX2MyU6Z8KCr3mv3C9Kqqh71U+DhZkFvibbnPbA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.3 || ^17.0.0-0 || ^18.0.0" + } + }, "node_modules/react-time-ago": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/react-time-ago/-/react-time-ago-7.3.5.tgz", @@ -15883,7 +15442,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "devOptional": true, + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" @@ -15939,6 +15498,7 @@ "version": "4.53.3", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.3.tgz", "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==", + "dev": true, "license": "MIT", "dependencies": { "@types/estree": "1.0.8" @@ -16457,6 +16017,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -17054,6 +16615,7 @@ "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, "license": "MIT", "dependencies": { "fdir": "^6.5.0", @@ -17066,29 +16628,12 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, "node_modules/tinyglobby/node_modules/picomatch": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -17299,9 +16844,8 @@ "version": "4.20.6", "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.6.tgz", "integrity": "sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==", - "devOptional": true, + "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "~0.25.0", "get-tsconfig": "^4.7.5" @@ -17336,19 +16880,6 @@ "dev": true, "license": "Unlicense" }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", @@ -17454,9 +16985,8 @@ "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "devOptional": true, + "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -17806,7 +17336,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { "napi-postinstall": "^0.3.0" }, @@ -18000,8 +17529,8 @@ "version": "7.2.2", "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.2.tgz", "integrity": "sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==", + "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -18090,29 +17619,12 @@ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, - "node_modules/vite/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, "node_modules/vite/node_modules/picomatch": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -18126,7 +17638,6 @@ "integrity": "sha512-urzu3NCEV0Qa0Y2PwvBtRgmNtxhj5t5ULw7cuKhIHh3OrkKTLlut0lnBOv9qe5OvbkMH2g38G7KPDCTpIytBVg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/expect": "4.0.8", "@vitest/mocker": "4.0.8", @@ -18491,16 +18002,6 @@ "node": ">=8" } }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -18545,7 +18046,6 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "license": "MIT", - "peer": true, "engines": { "node": ">=10.0.0" }, @@ -18708,7 +18208,6 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz", "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/public/locales/en.json b/public/locales/en.json index 31884d60..0e145c5c 100644 --- a/public/locales/en.json +++ b/public/locales/en.json @@ -516,7 +516,6 @@ "dialogTitle": "Create Git Repository", "metadataTitle": "Metadata", "urlTitle": "URL", - "secretRefOptionalTitle": "SecretRef (Optional)", "secretRefTitle": "SecretRef", "nameTitle": "Name", "intervalTitle": "Interval", diff --git a/src/components/Dialogs/CreateGitRepositoryDialog.cy.tsx b/src/components/Dialogs/CreateGitRepositoryDialog.cy.tsx index 0ceb5f66..9629633f 100644 --- a/src/components/Dialogs/CreateGitRepositoryDialog.cy.tsx +++ b/src/components/Dialogs/CreateGitRepositoryDialog.cy.tsx @@ -32,11 +32,11 @@ describe('CreateGitRepositoryDialog', () => { }; // Fill in the form - cy.get('#name').typeIntoUi5Input('test-repo'); - cy.get('#interval').find('input').clear().type('5m0s'); + cy.get('[name="name"]').typeIntoUi5Input('test-repo'); + cy.get('[name="interval"]').find('input').clear().type('5m0s'); - cy.get('#url').typeIntoUi5Input('https://github.com/test/repo'); - cy.get('#branch').find('input').clear().type('develop'); + cy.get('[name="url"]').typeIntoUi5Input('https://github.com/test/repo'); + cy.get('[name="branch"]').find('input').clear().type('develop'); // Submit the form cy.get('ui5-button').contains('Create').click(); @@ -65,9 +65,9 @@ describe('CreateGitRepositoryDialog', () => { }; // Fill in the form - cy.get('#name').typeIntoUi5Input('test-repo'); - cy.get('#url').typeIntoUi5Input('https://github.com/test/repo'); - cy.get('#secretRef').typeIntoUi5Input('my-git-secret'); + cy.get('[name="name"]').typeIntoUi5Input('test-repo'); + cy.get('[name="url"]').typeIntoUi5Input('https://github.com/test/repo'); + cy.get('[name="secretRef"]').typeIntoUi5Input('my-git-secret'); // Submit the form cy.get('ui5-button').contains('Create').click(); @@ -90,7 +90,7 @@ describe('CreateGitRepositoryDialog', () => { cy.get('ui5-button').contains('Create').click(); // Should show validation errors - cy.get('#name').should('have.attr', 'value-state', 'Negative'); + cy.get('[name="name"]').should('have.attr', 'value-state', 'Negative'); cy.contains('This field is required').should('exist'); // Dialog should not close @@ -104,24 +104,24 @@ describe('CreateGitRepositoryDialog', () => { , ); - cy.get('#name').typeIntoUi5Input('test-repo'); - cy.get('#interval').find('input').clear().type('1m0s'); - cy.get('#branch').find('input').clear().type('main'); + cy.get('[name="name"]').typeIntoUi5Input('test-repo'); + cy.get('[name="interval"]').find('input').clear().type('1m0s'); + cy.get('[name="branch"]').find('input').clear().type('main'); // Test 1: Invalid string - cy.get('#url').find('input').clear().type('not-a-valid-url'); + cy.get('[name="url"]').find('input').clear().type('not-a-valid-url'); cy.get('ui5-button').contains('Create').click(); - cy.get('#url').should('have.attr', 'value-state', 'Negative'); + cy.get('[name="url"]').should('have.attr', 'value-state', 'Negative'); cy.contains('Must be a valid HTTPS URL').should('exist'); // Test 2: HTTP protocol (should fail if we require HTTPS) - cy.get('#url').find('input').clear().type('http://github.com/test/repo'); + cy.get('[name="url"]').find('input').clear().type('http://github.com/test/repo'); cy.get('ui5-button').contains('Create').click(); - cy.get('#url').should('have.attr', 'value-state', 'Negative'); + cy.get('[name="url"]').should('have.attr', 'value-state', 'Negative'); cy.contains('Must be a valid HTTPS URL').should('exist'); // Test 3: Valid HTTPS URL (should pass) - cy.get('#url').find('input').clear().type('https://github.com/test/repo'); + cy.get('[name="url"]').find('input').clear().type('https://github.com/test/repo'); cy.get('ui5-button').contains('Create').click(); // Dialog should close on success @@ -136,7 +136,7 @@ describe('CreateGitRepositoryDialog', () => { ); // Fill in some data - cy.get('#name').typeIntoUi5Input('test-repo'); + cy.get('[name="name"]').typeIntoUi5Input('test-repo'); // Click cancel cy.get('ui5-button').contains('Cancel').click(); @@ -153,8 +153,8 @@ describe('CreateGitRepositoryDialog', () => { ); // Check default values - cy.get('#interval').find('input').should('have.value', '1m0s'); - cy.get('#branch').find('input').should('have.value', 'main'); + cy.get('[name="interval"]').find('input').should('have.value', '1m0s'); + cy.get('[name="branch"]').find('input').should('have.value', 'main'); }); it('should not close dialog when creation fails', () => { @@ -176,10 +176,10 @@ describe('CreateGitRepositoryDialog', () => { ); // Fill in the form - cy.get('#name').typeIntoUi5Input('test-repo'); - cy.get('#interval').find('input').clear().type('1m0s'); - cy.get('#url').find('input').type('https://github.com/test/repo'); - cy.get('#branch').find('input').clear().type('main'); + cy.get('[name="name"]').typeIntoUi5Input('test-repo'); + cy.get('[name="interval"]').find('input').clear().type('1m0s'); + cy.get('[name="url"]').find('input').type('https://github.com/test/repo'); + cy.get('[name="branch"]').find('input').clear().type('main'); // Submit the form cy.get('ui5-button').contains('Create').click(); diff --git a/src/components/Dialogs/CreateGitRepositoryDialog.tsx b/src/components/Dialogs/CreateGitRepositoryDialog.tsx index c707d64b..9339d6f2 100644 --- a/src/components/Dialogs/CreateGitRepositoryDialog.tsx +++ b/src/components/Dialogs/CreateGitRepositoryDialog.tsx @@ -21,16 +21,17 @@ export function CreateGitRepositoryDialog({ const { t } = useTranslation(); const { createGitRepository, isLoading } = useCreateGitRepository(); const namespaceId = useId(); + const nameId = useId(); + const intervalId = useId(); + const urlId = useId(); + const branchId = useId(); + const secretRefId = useId(); const validationSchema = z.object({ namespace: z.string().min(1, { message: t('validationErrors.required') }), name: z.string().min(1, { message: t('validationErrors.required') }), interval: z.string().min(1, { message: t('validationErrors.required') }), - url: z - .string() - .min(1, { message: t('validationErrors.required') }) - .url({ message: t('validationErrors.urlFormat') }) - .startsWith('https://', { message: t('validationErrors.urlFormat') }), + url: z.url({ protocol: /^https$/, message: t('validationErrors.urlFormat') }), branch: z.string().min(1, { message: t('validationErrors.required') }), secretRef: z.string().optional(), }); @@ -113,14 +114,16 @@ export function CreateGitRepositoryDialog({
- + ( {errors.name?.message}} className={styles.input} @@ -132,14 +135,16 @@ export function CreateGitRepositoryDialog({
- + ( {errors.interval?.message}} placeholder="1m0s" @@ -150,14 +155,16 @@ export function CreateGitRepositoryDialog({
- + ( {errors.url?.message}} placeholder="https://github.com/owner/repo" @@ -168,14 +175,16 @@ export function CreateGitRepositoryDialog({
- + ( {errors.branch?.message}} placeholder="main" @@ -186,11 +195,18 @@ export function CreateGitRepositoryDialog({
- + } + render={({ field }) => ( + + )} />
From 3937a3a0b9fee1f3c0dce5681d36e0959670c15c Mon Sep 17 00:00:00 2001 From: Hubert Date: Thu, 27 Nov 2025 16:19:07 +0100 Subject: [PATCH 12/14] restoring package-lock.json --- package-lock.json | 735 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 618 insertions(+), 117 deletions(-) diff --git a/package-lock.json b/package-lock.json index 73dd7865..15a81e22 100644 --- a/package-lock.json +++ b/package-lock.json @@ -272,6 +272,7 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -623,6 +624,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -631,9 +633,9 @@ } }, "node_modules/@csstools/css-syntax-patches-for-csstree": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.19.tgz", - "integrity": "sha512-QW5/SM2ARltEhoKcmRI1LoLf3/C7dHGswwCnfLcoMgqurBT4f8GvwXMgAbK/FwcxthmJRK5MGTtddj0yQn0J9g==", + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.17.tgz", + "integrity": "sha512-LCC++2h8pLUSPY+EsZmrrJ1EOUu+5iClpEiDhhdw3zRJpPbABML/N5lmRuBHjxtKm9VnRcsUzioyD0sekFMF0A==", "dev": true, "funding": [ { @@ -666,6 +668,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" } @@ -803,7 +806,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -820,7 +822,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -837,7 +838,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -854,7 +854,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -871,7 +870,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -888,7 +886,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -905,7 +902,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -922,7 +918,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -939,7 +934,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -956,7 +950,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -973,7 +966,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -990,7 +982,6 @@ "cpu": [ "loong64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1007,7 +998,6 @@ "cpu": [ "mips64el" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1024,7 +1014,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1041,7 +1030,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1058,7 +1046,6 @@ "cpu": [ "s390x" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1075,7 +1062,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1092,7 +1078,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1109,7 +1094,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1126,7 +1110,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1143,7 +1126,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1160,7 +1142,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1177,7 +1158,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1194,7 +1174,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1211,7 +1190,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1228,7 +1206,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1267,6 +1244,47 @@ "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", @@ -1317,6 +1335,30 @@ "url": "https://eslint.org/donate" } }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@fastify/accept-negotiator": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@fastify/accept-negotiator/-/accept-negotiator-2.0.1.tgz", @@ -2676,6 +2718,58 @@ "react-hook-form": "^7.55.0" } }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@inquirer/ansi": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.2.tgz", @@ -3309,6 +3403,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=8.0.0" } @@ -3330,6 +3425,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-2.2.0.tgz", "integrity": "sha512-qRkLWiUEZNAmYapZ7KGS5C4OmBLcP/H2foXeOEaowYCR0wi89fHejrfYfbuLVCMLp/dWZXKvQusdbUEZjERfwQ==", "license": "Apache-2.0", + "peer": true, "engines": { "node": "^18.19.0 || >=20.6.0" }, @@ -3342,6 +3438,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.2.0.tgz", "integrity": "sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, @@ -3357,6 +3454,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.208.0.tgz", "integrity": "sha512-Eju0L4qWcQS+oXxi6pgh7zvE2byogAkcsVv0OjHF/97iOz1N/aKE6etSGowYkie+YA1uo6DNwdSxaaNnLvcRlA==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@opentelemetry/api-logs": "0.208.0", "import-in-the-middle": "^2.0.0", @@ -3744,6 +3842,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.2.0.tgz", "integrity": "sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@opentelemetry/core": "2.2.0", "@opentelemetry/semantic-conventions": "^1.29.0" @@ -3760,6 +3859,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.2.0.tgz", "integrity": "sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@opentelemetry/core": "2.2.0", "@opentelemetry/resources": "2.2.0", @@ -3777,6 +3877,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.38.0.tgz", "integrity": "sha512-kocjix+/sSggfJhwXqClZ3i9Y/MI0fp7b+g7kCRm6psy2dsf8uApTRclwG18h8Avm7C9+fnt+O36PspJ/OzoWg==", "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=14" } @@ -3847,7 +3948,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3861,7 +3961,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3875,7 +3974,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3889,7 +3987,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3903,7 +4000,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3917,7 +4013,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3931,7 +4026,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3945,7 +4039,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3959,7 +4052,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3973,7 +4065,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3987,7 +4078,6 @@ "cpu": [ "loong64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4001,7 +4091,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4015,7 +4104,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4029,7 +4117,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4043,7 +4130,6 @@ "cpu": [ "s390x" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4057,7 +4143,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4071,7 +4156,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4085,7 +4169,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4099,7 +4182,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4113,7 +4195,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4127,7 +4208,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4141,7 +4221,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4760,6 +4839,27 @@ "url": "https://github.com/sponsors/tannerlinsley" } }, + "node_modules/@testing-library/dom": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", + "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "picocolors": "1.1.1", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@testing-library/react": { "version": "16.3.0", "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.0.tgz", @@ -4817,6 +4917,13 @@ "tslib": "^2.4.0" } }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -4997,7 +5104,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, "license": "MIT" }, "node_modules/@types/jquery": { @@ -5107,8 +5213,9 @@ "version": "19.2.2", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.2.tgz", "integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==", - "dev": true, + "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.0.2" } @@ -5117,8 +5224,9 @@ "version": "19.2.2", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.2.tgz", "integrity": "sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==", - "dev": true, + "devOptional": true, "license": "MIT", + "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -5418,6 +5526,7 @@ "integrity": "sha512-6m1I5RmHBGTnUGS113G04DMu3CpSdxCAU/UvtjNWL4Nuf3MW9tQhiJqRlHzChIkhy6kZSAQmc+I1bcGjE3yNKg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.46.3", "@typescript-eslint/types": "8.46.3", @@ -6024,6 +6133,7 @@ "resolved": "https://registry.npmjs.org/@ui5/webcomponents/-/webcomponents-2.15.1.tgz", "integrity": "sha512-8dJd9o0PEMwBBkG2K86XnyZYVQmtMz/9PNUJWeqPJLU/JST2ty7M7lE+JRdwvac58/OcboNWZidHpAbJs/pmPw==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@ui5/webcomponents-base": "2.15.1", "@ui5/webcomponents-icons": "2.15.1", @@ -6069,6 +6179,7 @@ "resolved": "https://registry.npmjs.org/@ui5/webcomponents-fiori/-/webcomponents-fiori-2.15.1.tgz", "integrity": "sha512-Sptnb0vcpO1xRgCZly3NKKBiisJZXAMSIyEMnCs+wsra1eyoL4CZBNvc4MJvSqu0BU4xazJhE8X3pNwpadbJNw==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@ui5/webcomponents": "2.15.1", "@ui5/webcomponents-base": "2.15.1", @@ -6158,6 +6269,7 @@ "resolved": "https://registry.npmjs.org/@ui5/webcomponents-react-base/-/webcomponents-react-base-2.15.3.tgz", "integrity": "sha512-anD0B4k9DfZr4kEqISfBSCBytE+aUnubXCZE3Y/xcutKbJwZnzbIBtsqk0X1NXSRo4vNdxFWEjiH5I4aq2bcWw==", "license": "Apache-2.0", + "peer": true, "peerDependencies": { "@types/react": "*", "@ui5/webcomponents-base": "~2.15.0", @@ -6188,6 +6300,19 @@ "react": "^18 || ^19" } }, + "node_modules/@ui5/webcomponents-react/node_modules/react-table": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/react-table/-/react-table-7.8.0.tgz", + "integrity": "sha512-hNaz4ygkZO4bESeFfnfOft73iBUj8K5oKi1EcSHPAibEydfsX2MyU6Z8KCr3mv3C9Kqqh71U+DhZkFvibbnPbA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.3 || ^17.0.0-0 || ^18.0.0" + } + }, "node_modules/@ui5/webcomponents-theming": { "version": "2.15.1", "resolved": "https://registry.npmjs.org/@ui5/webcomponents-theming/-/webcomponents-theming-2.15.1.tgz", @@ -6812,6 +6937,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -6870,6 +6996,7 @@ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -7021,13 +7148,13 @@ "license": "Python-2.0" }, "node_modules/aria-query": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "dev": true, "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" + "dependencies": { + "dequal": "^2.0.3" } }, "node_modules/array-buffer-byte-length": { @@ -7540,6 +7667,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.25", "caniuse-lite": "^1.0.30001754", @@ -8350,16 +8478,12 @@ "license": "MIT" }, "node_modules/cookie": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", - "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", "license": "MIT", "engines": { "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" } }, "node_modules/core-util-is": { @@ -8474,6 +8598,7 @@ "dev": true, "hasInstallScript": true, "license": "MIT", + "peer": true, "dependencies": { "@cypress/request": "^3.0.9", "@cypress/xvfb": "^1.2.4", @@ -8851,6 +8976,7 @@ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "license": "ISC", + "peer": true, "engines": { "node": ">=12" } @@ -9134,6 +9260,13 @@ "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", "license": "MIT" }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -9252,6 +9385,13 @@ "node": ">=0.10.0" } }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "license": "MIT" + }, "node_modules/dom-helpers": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", @@ -9342,9 +9482,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.262", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.262.tgz", - "integrity": "sha512-NlAsMteRHek05jRUxUR0a5jpjYq9ykk6+kO0yRaMi5moe7u0fVIOeQ3Y30A8dIiWFBNUoQGi1ljb1i5VtS9WQQ==", + "version": "1.5.260", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.260.tgz", + "integrity": "sha512-ov8rBoOBhVawpzdre+Cmz4FB+y66Eqrk6Gwqd8NGxuhv99GQ8XqMAr351KEkOt7gukXWDg6gJWEMKgL2RLMPtA==", "license": "ISC" }, "node_modules/emoji-regex": { @@ -9368,6 +9508,7 @@ "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-colors": "^4.1.1", "strip-ansi": "^6.0.1" @@ -9652,7 +9793,6 @@ "version": "0.25.12", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", - "dev": true, "hasInstallScript": true, "license": "MIT", "bin": { @@ -9706,13 +9846,77 @@ "license": "MIT" }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.39.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", + "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.1", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-config-prettier": { @@ -9721,6 +9925,7 @@ "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", + "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -9861,6 +10066,7 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -9964,6 +10170,16 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/eslint-plugin-prettier": { "version": "5.5.4", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz", @@ -10066,6 +10282,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", @@ -10079,6 +10312,32 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/espree": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", @@ -10110,6 +10369,32 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", @@ -10359,6 +10644,13 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, "node_modules/fast-querystring": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz", @@ -10399,6 +10691,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "@fastify/ajv-compiler": "^4.0.0", "@fastify/error": "^4.0.0", @@ -10517,24 +10810,6 @@ "pend": "~1.2.0" } }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, "node_modules/fetch-blob": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", @@ -10574,6 +10849,29 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -10644,6 +10942,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, "node_modules/for-each": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", @@ -10923,7 +11242,7 @@ "version": "4.13.0", "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -11110,6 +11429,7 @@ "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.12.0.tgz", "integrity": "sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==", "license": "MIT", + "peer": true, "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } @@ -11215,6 +11535,7 @@ "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-6.0.6.tgz", "integrity": "sha512-zgfER9s+ftkGKUZgc0xbx8T7/HMO4AV5/YuYiFc+AtgcO5T0v8AxYYNQ+ltzuzDZgNkYJaFspm5MMYLjQzrkmw==", "license": "MIT", + "peer": true, "engines": { "node": ">=20" }, @@ -11569,6 +11890,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.27.6" }, @@ -11688,6 +12010,16 @@ "module-details-from-path": "^1.0.3" } }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, "node_modules/indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", @@ -12430,6 +12762,7 @@ "resolved": "https://registry.npmjs.org/javascript-time-ago/-/javascript-time-ago-2.5.12.tgz", "integrity": "sha512-s8PPq2HQ3HIbSU0SjhNvTitf5VoXbQWof9q6k3gIX7F2il0ptjD5lONTDccpuKt/2U7RjbCp/TCHPK7eDwO7zQ==", "license": "MIT", + "peer": true, "dependencies": { "relative-time-format": "^1.1.7" } @@ -12577,6 +12910,13 @@ "node": ">=6" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -12616,6 +12956,13 @@ "dev": true, "license": "MIT" }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -12699,6 +13046,16 @@ "node": ">=4.0" } }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -12738,6 +13095,20 @@ "node": ">=0.10" } }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/light-my-request": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-6.6.0.tgz", @@ -12920,6 +13291,13 @@ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "license": "MIT" }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", @@ -13150,6 +13528,16 @@ "yallist": "^3.0.2" } }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "license": "MIT", + "bin": { + "lz-string": "bin/bin.js" + } + }, "node_modules/magic-string": { "version": "0.30.8", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", @@ -13449,6 +13837,7 @@ "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.54.0.tgz", "integrity": "sha512-hx45SEUoLatgWxHKCmlLJH81xBo0uXP4sRkESUpmDQevfi+e7K1VuiSprK6UpQ8u4zOcKNiH0pMvHvlMWA/4cw==", "license": "MIT", + "peer": true, "dependencies": { "dompurify": "3.1.7", "marked": "14.0.0" @@ -13546,7 +13935,6 @@ "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, "funding": [ { "type": "github", @@ -14046,6 +14434,24 @@ "tslib": "^2.3.0" } }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/ospath": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", @@ -14576,7 +14982,6 @@ "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "dev": true, "funding": [ { "type": "opencollective", @@ -14640,11 +15045,22 @@ "node": ">=0.10.0" } }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/prettier": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -14681,6 +15097,41 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "license": "MIT" + }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -14830,6 +15281,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -14851,6 +15303,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", "license": "MIT", + "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -14875,6 +15328,7 @@ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.66.0.tgz", "integrity": "sha512-xXBqsWGKrY46ZqaHDo+ZUYiMUgi8suYu5kdrS20EG8KiL7VRQitEbNjm+UcrDYrNi1YLyfpmAeGjCZYXLT9YBw==", "license": "MIT", + "peer": true, "engines": { "node": ">=18.0.0" }, @@ -14982,19 +15436,6 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/react-table": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/react-table/-/react-table-7.8.0.tgz", - "integrity": "sha512-hNaz4ygkZO4bESeFfnfOft73iBUj8K5oKi1EcSHPAibEydfsX2MyU6Z8KCr3mv3C9Kqqh71U+DhZkFvibbnPbA==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - }, - "peerDependencies": { - "react": "^16.8.3 || ^17.0.0-0 || ^18.0.0" - } - }, "node_modules/react-time-ago": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/react-time-ago/-/react-time-ago-7.3.5.tgz", @@ -15442,7 +15883,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, + "devOptional": true, "license": "MIT", "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" @@ -15498,7 +15939,6 @@ "version": "4.53.3", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.3.tgz", "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree": "1.0.8" @@ -16017,7 +16457,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -16615,7 +17054,6 @@ "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, "license": "MIT", "dependencies": { "fdir": "^6.5.0", @@ -16628,12 +17066,29 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/tinyglobby/node_modules/picomatch": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -16844,8 +17299,9 @@ "version": "4.20.6", "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.6.tgz", "integrity": "sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==", - "dev": true, + "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "~0.25.0", "get-tsconfig": "^4.7.5" @@ -16880,6 +17336,19 @@ "dev": true, "license": "Unlicense" }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", @@ -16985,8 +17454,9 @@ "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -17336,6 +17806,7 @@ "dev": true, "hasInstallScript": true, "license": "MIT", + "peer": true, "dependencies": { "napi-postinstall": "^0.3.0" }, @@ -17529,8 +18000,8 @@ "version": "7.2.2", "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.2.tgz", "integrity": "sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==", - "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -17619,12 +18090,29 @@ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, + "node_modules/vite/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/vite/node_modules/picomatch": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -17638,6 +18126,7 @@ "integrity": "sha512-urzu3NCEV0Qa0Y2PwvBtRgmNtxhj5t5ULw7cuKhIHh3OrkKTLlut0lnBOv9qe5OvbkMH2g38G7KPDCTpIytBVg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@vitest/expect": "4.0.8", "@vitest/mocker": "4.0.8", @@ -18002,6 +18491,16 @@ "node": ">=8" } }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -18046,6 +18545,7 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "license": "MIT", + "peer": true, "engines": { "node": ">=10.0.0" }, @@ -18208,6 +18708,7 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz", "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==", "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } From cfe29653d7b2d3a55186e1d27a367cdec64dff27 Mon Sep 17 00:00:00 2001 From: Hubert Date: Thu, 27 Nov 2025 17:20:53 +0100 Subject: [PATCH 13/14] removing placeholder --- src/components/Dialogs/CreateGitRepositoryDialog.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/Dialogs/CreateGitRepositoryDialog.tsx b/src/components/Dialogs/CreateGitRepositoryDialog.tsx index 9339d6f2..d22701b8 100644 --- a/src/components/Dialogs/CreateGitRepositoryDialog.tsx +++ b/src/components/Dialogs/CreateGitRepositoryDialog.tsx @@ -204,7 +204,6 @@ export function CreateGitRepositoryDialog({ {...field} id={secretRefId} className={styles.input} - placeholder={t('CreateGitRepositoryDialog.secretRefOptionalTitle')} /> )} /> From 826dc23b10f861d0a86e8d76d4f7e077be3e65e4 Mon Sep 17 00:00:00 2001 From: Hubert Date: Thu, 27 Nov 2025 19:36:45 +0100 Subject: [PATCH 14/14] lint fix --- src/components/Dialogs/CreateGitRepositoryDialog.tsx | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/components/Dialogs/CreateGitRepositoryDialog.tsx b/src/components/Dialogs/CreateGitRepositoryDialog.tsx index d22701b8..36ac08e0 100644 --- a/src/components/Dialogs/CreateGitRepositoryDialog.tsx +++ b/src/components/Dialogs/CreateGitRepositoryDialog.tsx @@ -199,13 +199,7 @@ export function CreateGitRepositoryDialog({ ( - - )} + render={({ field }) => } />