diff --git a/docker/devenv/files/start-tmux.sh b/docker/devenv/files/start-tmux.sh
index 69e0423f22..ab4e045996 100755
--- a/docker/devenv/files/start-tmux.sh
+++ b/docker/devenv/files/start-tmux.sh
@@ -30,13 +30,18 @@ tmux select-window -t penpot:1
tmux send-keys -t penpot 'cd penpot/frontend' enter C-l
tmux send-keys -t penpot 'yarn run watch:app' enter
-tmux new-window -t penpot:2 -n 'frontend storybook'
+tmux new-window -t penpot:2 -n 'frontend ts'
tmux select-window -t penpot:2
tmux send-keys -t penpot 'cd penpot/frontend' enter C-l
+tmux send-keys -t penpot 'yarn watch:ts' enter
+
+tmux new-window -t penpot:3 -n 'frontend storybook'
+tmux select-window -t penpot:3
+tmux send-keys -t penpot 'cd penpot/frontend' enter C-l
tmux send-keys -t penpot 'yarn run watch:storybook' enter
-tmux new-window -t penpot:3 -n 'exporter'
-tmux select-window -t penpot:3
+tmux new-window -t penpot:4 -n 'exporter'
+tmux select-window -t penpot:4
tmux send-keys -t penpot 'cd penpot/exporter' enter C-l
tmux send-keys -t penpot 'rm -f target/app.js*' enter C-l
tmux send-keys -t penpot 'yarn run watch' enter
@@ -45,8 +50,8 @@ tmux split-window -v
tmux send-keys -t penpot 'cd penpot/exporter' enter C-l
tmux send-keys -t penpot './scripts/wait-and-start.sh' enter
-tmux new-window -t penpot:4 -n 'backend'
-tmux select-window -t penpot:4
+tmux new-window -t penpot:5 -n 'backend'
+tmux select-window -t penpot:5
tmux send-keys -t penpot 'cd penpot/backend' enter C-l
tmux send-keys -t penpot './scripts/start-dev' enter
diff --git a/frontend/.gitignore b/frontend/.gitignore
index e3da84e51a..e436969c26 100644
--- a/frontend/.gitignore
+++ b/frontend/.gitignore
@@ -11,4 +11,4 @@ node_modules/
/blob-report/
/playwright/.cache/
/playwright/**/visual-specs/**/*.png
-
+/ts/dist/
diff --git a/frontend/.storybook/main.js b/frontend/.storybook/main.js
index dcb52cc553..644547c3e9 100644
--- a/frontend/.storybook/main.js
+++ b/frontend/.storybook/main.js
@@ -1,6 +1,6 @@
/** @type { import('@storybook/react-vite').StorybookConfig } */
const config = {
- stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"],
+ stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)", "../ts/src/components/**/*.stories.@(js|jsx|mjs|ts|tsx)"],
staticDirs: ["../resources/public"],
addons: [
"@storybook/addon-themes",
diff --git a/frontend/eslint.config.js b/frontend/eslint.config.js
new file mode 100644
index 0000000000..798ad8daaf
--- /dev/null
+++ b/frontend/eslint.config.js
@@ -0,0 +1,23 @@
+import js from '@eslint/js'
+import globals from 'globals'
+import reactHooks from 'eslint-plugin-react-hooks'
+import reactRefresh from 'eslint-plugin-react-refresh'
+import tseslint from 'typescript-eslint'
+import { defineConfig, globalIgnores } from 'eslint/config'
+
+export default defineConfig([
+ globalIgnores(['ts/dist']),
+ {
+ files: ['ts/src/**/*.{ts,tsx}'],
+ extends: [
+ js.configs.recommended,
+ tseslint.configs.recommended,
+ reactHooks.configs['recommended-latest'],
+ reactRefresh.configs.vite,
+ ],
+ languageOptions: {
+ ecmaVersion: 2020,
+ globals: globals.browser,
+ },
+ },
+])
diff --git a/frontend/package.json b/frontend/package.json
index e50b10d403..67bd2ae18a 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -17,7 +17,8 @@
"@zip.js/zip.js@npm:^2.7.44": "patch:@zip.js/zip.js@npm%3A2.7.60#~/.yarn/patches/@zip.js-zip.js-npm-2.7.60-b6b814410b.patch",
"@vitejs/plugin-react": "^4.2.0",
"playwright": "1.52.0",
- "playwright-core": "1.52.0"
+ "playwright-core": "1.52.0",
+ "globals": "^16.5.0"
},
"scripts": {
"build:app:assets": "node ./scripts/build-app-assets.js",
@@ -32,8 +33,9 @@
"e2e:server": "node ./scripts/e2e-server.js",
"fmt:clj": "cljfmt fix --parallel=true src/ test/",
"fmt:clj:check": "cljfmt check --parallel=false src/ test/",
- "fmt:js": "yarn run prettier -c src/**/*.stories.jsx -c playwright/**/*.js -c scripts/**/*.js -w",
- "fmt:js:check": "yarn run prettier -c src/**/*.stories.jsx -c playwright/**/*.js -c scripts/**/*.js",
+ "fmt:js": "yarn run prettier -c src/**/*.stories.jsx -c playwright/**/*.js -c scripts/**/*.js -c ts/src/**/*.ts -w",
+ "fmt:js:check": "yarn run prettier -c src/**/*.stories.jsx -c playwright/**/*.js -c scripts/**/*.js -c ts/src/**/*.ts -c --check",
+ "lint:ts": "eslint ts/",
"lint:clj": "clj-kondo --parallel --lint src/",
"lint:scss": "yarn run prettier -c resources/styles -c src/**/*.scss",
"lint:scss:fix": "yarn run prettier -c resources/styles -c src/**/*.scss -w",
@@ -50,6 +52,7 @@
"watch:app": "yarn run clear:shadow-cache && concurrently \"yarn run watch:app:main\" \"yarn run watch:app:libs\"",
"watch": "yarn run watch:app:assets",
"watch:storybook": "yarn run build:storybook:assets && concurrently \"storybook dev -p 6006 --no-open\" \"yarn run watch:storybook:assets\"",
+ "watch:ts": "vite build --watch",
"watch:storybook:assets": "node ./scripts/watch-storybook.js"
},
"devDependencies": {
@@ -59,11 +62,16 @@
"@storybook/addon-vitest": "10.0.4",
"@storybook/react-vite": "10.0.4",
"@types/node": "^22.15.21",
+ "@types/react": "^19.1.16",
+ "@types/react-dom": "^19.1.9",
"@vitest/browser": "3.2.4",
"@vitest/coverage-v8": "3.2.4",
"autoprefixer": "^10.4.21",
"concurrently": "^9.2.1",
"esbuild": "^0.25.9",
+ "eslint": "^9.36.0",
+ "eslint-plugin-react-hooks": "^5.2.0",
+ "eslint-plugin-react-refresh": "^0.4.22",
"express": "^5.1.0",
"fancy-log": "^2.0.0",
"getopts": "^2.3.0",
@@ -95,6 +103,7 @@
"storybook": "10.0.4",
"svg-sprite": "^2.0.4",
"typescript": "^5.9.2",
+ "typescript-eslint": "^8.45.0",
"vite": "^6.3.5",
"vitest": "^3.2.0",
"wasm-pack": "^0.13.1",
@@ -108,7 +117,9 @@
"@penpot/plugins-runtime": "1.3.2",
"@penpot/svgo": "penpot/svgo#v3.1",
"@penpot/text-editor": "portal:./text-editor",
+ "@penpot/ts": "portal:./ts",
"@tokens-studio/sd-transforms": "1.2.11",
+ "@vitejs/plugin-react": "4.2.0",
"@zip.js/zip.js": "patch:@zip.js/zip.js@npm%3A2.7.60#~/.yarn/patches/@zip.js-zip.js-npm-2.7.60-b6b814410b.patch",
"compression": "^1.8.1",
"date-fns": "^4.1.0",
diff --git a/frontend/resources/templates/index.mustache b/frontend/resources/templates/index.mustache
index 0aec1f1920..07c88b9ced 100644
--- a/frontend/resources/templates/index.mustache
+++ b/frontend/resources/templates/index.mustache
@@ -18,6 +18,7 @@
+
{{#isDebug}}
{{/isDebug}}
diff --git a/frontend/src/app/main.cljs b/frontend/src/app/main.cljs
index f40e8b3b18..5d9d0e58af 100644
--- a/frontend/src/app/main.cljs
+++ b/frontend/src/app/main.cljs
@@ -6,6 +6,7 @@
(ns app.main
(:require
+ ["@penpot/ts" :refer [setTranslation]]
[app.common.data.macros :as dm]
[app.common.logging :as log]
[app.common.types.objects-map]
@@ -38,6 +39,8 @@
(log/setup! {:app :info})
(log/set-level! :debug)
+(setTranslation i18n/tr)
+
(when (= :browser cf/target)
(log/inf :version (:full cf/version)
:asserts *assert*
diff --git a/frontend/src/app/main/ui/dashboard/projects.cljs b/frontend/src/app/main/ui/dashboard/projects.cljs
index 472ed76ff8..df7687562b 100644
--- a/frontend/src/app/main/ui/dashboard/projects.cljs
+++ b/frontend/src/app/main/ui/dashboard/projects.cljs
@@ -7,6 +7,7 @@
(ns app.main.ui.dashboard.projects
(:require-macros [app.main.style :as stl])
(:require
+ ["@penpot/ts" :refer [TestTsxComponent]]
[app.common.geom.point :as gpt]
[app.common.time :as ct]
[app.main.data.common :as dcm]
@@ -50,8 +51,11 @@
::mf/props :obj
::mf/private true}
[{:keys [can-edit]}]
+;; (js/console.log "xxxx" TestTsxComponent)
(let [on-click (mf/use-fn #(st/emit! (dd/create-project)))]
[:header {:class (stl/css :dashboard-header) :data-testid "dashboard-header"}
+ [:div
+ [:> TestTsxComponent]]
[:div#dashboard-projects-title {:class (stl/css :dashboard-title)}
[:h1 (tr "dashboard.projects-title")]]
(when can-edit
diff --git a/frontend/ts/package.json b/frontend/ts/package.json
new file mode 100644
index 0000000000..58603be9a9
--- /dev/null
+++ b/frontend/ts/package.json
@@ -0,0 +1,8 @@
+{
+ "name": "@penpot/ts",
+ "version": "1.0.0",
+ "description": "",
+ "main": "dist/index.js",
+ "type": "module",
+ "packageManager": "yarn@4.3.1"
+}
diff --git a/frontend/ts/src/components/test-tsx.module.css b/frontend/ts/src/components/test-tsx.module.css
new file mode 100644
index 0000000000..29212ea814
--- /dev/null
+++ b/frontend/ts/src/components/test-tsx.module.css
@@ -0,0 +1,3 @@
+.title {
+ color: green;
+}
diff --git a/frontend/ts/src/components/test-tsx.stories.tsx b/frontend/ts/src/components/test-tsx.stories.tsx
new file mode 100644
index 0000000000..adeded4046
--- /dev/null
+++ b/frontend/ts/src/components/test-tsx.stories.tsx
@@ -0,0 +1,16 @@
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+//
+// Copyright (c) KALEIDOS INC
+
+import {TestTsxComponent } from "./test-tsx";
+
+export default {
+ title: "TestTSX",
+ component: TestTsxComponent,
+ argTypes: {},
+ parameters: {},
+};
+
+export const Default = {};
diff --git a/frontend/ts/src/components/test-tsx.tsx b/frontend/ts/src/components/test-tsx.tsx
new file mode 100644
index 0000000000..816fcc0182
--- /dev/null
+++ b/frontend/ts/src/components/test-tsx.tsx
@@ -0,0 +1,11 @@
+import styles from './test-tsx.module.css';
+
+import { translate } from '../penpot-bridge';
+
+export const TestTsxComponent = () => {
+ return (
+
+
{translate("labels.delete")} xx
+
+ );
+};
\ No newline at end of file
diff --git a/frontend/ts/src/index.tsx b/frontend/ts/src/index.tsx
new file mode 100644
index 0000000000..c43b0abd49
--- /dev/null
+++ b/frontend/ts/src/index.tsx
@@ -0,0 +1,4 @@
+/* eslint-disable */
+
+export { TestTsxComponent } from "./components/test-tsx";
+export { setTranslation } from "./penpot-bridge";
\ No newline at end of file
diff --git a/frontend/ts/src/penpot-bridge.ts b/frontend/ts/src/penpot-bridge.ts
new file mode 100644
index 0000000000..a1f5a596be
--- /dev/null
+++ b/frontend/ts/src/penpot-bridge.ts
@@ -0,0 +1,7 @@
+export let translate = (key: string) => {
+ return key;
+};
+
+export function setTranslation(translations: (key: string) => string) {
+ translate = translations;
+}
diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json
new file mode 100644
index 0000000000..8aed7fff08
--- /dev/null
+++ b/frontend/tsconfig.json
@@ -0,0 +1,28 @@
+{
+ "compilerOptions": {
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
+ "target": "ES2022",
+ "useDefineForClassFields": true,
+ "lib": ["ES2022", "DOM", "DOM.Iterable"],
+ "module": "ESNext",
+ "types": ["vite/client"],
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "verbatimModuleSyntax": true,
+ "moduleDetection": "force",
+ "noEmit": true,
+ "jsx": "react-jsx",
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "erasableSyntaxOnly": true,
+ "noFallthroughCasesInSwitch": true,
+ "noUncheckedSideEffectImports": true
+ },
+ "include": ["ts/src"]
+}
diff --git a/frontend/vite.config.js b/frontend/vite.config.js
index bf815d2368..20a8d44c51 100644
--- a/frontend/vite.config.js
+++ b/frontend/vite.config.js
@@ -1,8 +1,25 @@
///
import { defineConfig } from "vite";
import { configDefaults } from "vitest/config";
+import react from "@vitejs/plugin-react";
+import { copyFileSync } from "fs";
+
import { resolve } from "path";
+const copyCssPlugin = () => ({
+ name: "copy-css",
+ closeBundle: () => {
+ try {
+ copyFileSync(
+ "./ts/dist/frontend.css",
+ "./resources/public/css/ts-style.css",
+ );
+ } catch (e) {
+ console.log("Error copying css file", e);
+ }
+ },
+});
+
// https://vitejs.dev/config/
import path from "node:path";
import { fileURLToPath } from "node:url";
@@ -14,6 +31,7 @@ const dirname =
// More info at: https://storybook.js.org/docs/next/writing-tests/integrations/vitest-addon
export default defineConfig({
+ plugins: [react(), copyCssPlugin()],
test: {
exclude: [...configDefaults.exclude, "target/**", "resources/**"],
environment: "jsdom",
@@ -50,4 +68,22 @@ export default defineConfig({
"@public": resolve(__dirname, "./resources/public/js/"),
},
},
+ build: {
+ outDir: './ts/dist/',
+ emptyOutDir: true,
+ lib: {
+ entry: './ts/src/index.tsx',
+ fileName: () => `index.js`,
+ formats: ['es'],
+ },
+ rollupOptions: {
+ external: ['react', 'react-dom'],
+ output: {
+ globals: {
+ react: 'React',
+ "react-dom": "ReactDOM",
+ },
+ },
+ }
+ },
});
diff --git a/frontend/yarn.lock b/frontend/yarn.lock
index 9f8c8c5132..f059978f3b 100644
--- a/frontend/yarn.lock
+++ b/frontend/yarn.lock
@@ -164,6 +164,13 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-plugin-utils@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/helper-plugin-utils@npm:7.27.1"
+ checksum: 10c0/94cf22c81a0c11a09b197b41ab488d416ff62254ce13c57e62912c85700dc2e99e555225787a4099ff6bae7a1812d622c80fbaeda824b79baa10a6c5ac4cf69b
+ languageName: node
+ linkType: hard
+
"@babel/helper-string-parser@npm:^7.27.1":
version: 7.27.1
resolution: "@babel/helper-string-parser@npm:7.27.1"
@@ -224,6 +231,28 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-react-jsx-self@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-react-jsx-self@npm:7.27.1"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/00a4f917b70a608f9aca2fb39aabe04a60aa33165a7e0105fd44b3a8531630eb85bf5572e9f242f51e6ad2fa38c2e7e780902176c863556c58b5ba6f6e164031
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-react-jsx-source@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-react-jsx-source@npm:7.27.1"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/5e67b56c39c4d03e59e03ba80692b24c5a921472079b63af711b1d250fc37c1733a17069b63537f750f3e937ec44a42b1ee6a46cd23b1a0df5163b17f741f7f2
+ languageName: node
+ linkType: hard
+
"@babel/runtime-corejs3@npm:^7.26.9":
version: 7.27.6
resolution: "@babel/runtime-corejs3@npm:7.27.6"
@@ -808,6 +837,94 @@ __metadata:
languageName: node
linkType: hard
+"@eslint-community/eslint-utils@npm:^4.7.0, @eslint-community/eslint-utils@npm:^4.8.0":
+ version: 4.9.0
+ resolution: "@eslint-community/eslint-utils@npm:4.9.0"
+ dependencies:
+ eslint-visitor-keys: "npm:^3.4.3"
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+ checksum: 10c0/8881e22d519326e7dba85ea915ac7a143367c805e6ba1374c987aa2fbdd09195cc51183d2da72c0e2ff388f84363e1b220fd0d19bef10c272c63455162176817
+ languageName: node
+ linkType: hard
+
+"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.12.1":
+ version: 4.12.2
+ resolution: "@eslint-community/regexpp@npm:4.12.2"
+ checksum: 10c0/fddcbc66851b308478d04e302a4d771d6917a0b3740dc351513c0da9ca2eab8a1adf99f5e0aa7ab8b13fa0df005c81adeee7e63a92f3effd7d367a163b721c2d
+ languageName: node
+ linkType: hard
+
+"@eslint/config-array@npm:^0.21.1":
+ version: 0.21.1
+ resolution: "@eslint/config-array@npm:0.21.1"
+ dependencies:
+ "@eslint/object-schema": "npm:^2.1.7"
+ debug: "npm:^4.3.1"
+ minimatch: "npm:^3.1.2"
+ checksum: 10c0/2f657d4edd6ddcb920579b72e7a5b127865d4c3fb4dda24f11d5c4f445a93ca481aebdbd6bf3291c536f5d034458dbcbb298ee3b698bc6c9dd02900fe87eec3c
+ languageName: node
+ linkType: hard
+
+"@eslint/config-helpers@npm:^0.4.2":
+ version: 0.4.2
+ resolution: "@eslint/config-helpers@npm:0.4.2"
+ dependencies:
+ "@eslint/core": "npm:^0.17.0"
+ checksum: 10c0/92efd7a527b2d17eb1a148409d71d80f9ac160b565ac73ee092252e8bf08ecd08670699f46b306b94f13d22e88ac88a612120e7847570dd7cdc72f234d50dcb4
+ languageName: node
+ linkType: hard
+
+"@eslint/core@npm:^0.17.0":
+ version: 0.17.0
+ resolution: "@eslint/core@npm:0.17.0"
+ dependencies:
+ "@types/json-schema": "npm:^7.0.15"
+ checksum: 10c0/9a580f2246633bc752298e7440dd942ec421860d1946d0801f0423830e67887e4aeba10ab9a23d281727a978eb93d053d1922a587d502942a713607f40ed704e
+ languageName: node
+ linkType: hard
+
+"@eslint/eslintrc@npm:^3.3.1":
+ version: 3.3.3
+ resolution: "@eslint/eslintrc@npm:3.3.3"
+ dependencies:
+ ajv: "npm:^6.12.4"
+ debug: "npm:^4.3.2"
+ espree: "npm:^10.0.1"
+ globals: "npm:^14.0.0"
+ ignore: "npm:^5.2.0"
+ import-fresh: "npm:^3.2.1"
+ js-yaml: "npm:^4.1.1"
+ minimatch: "npm:^3.1.2"
+ strip-json-comments: "npm:^3.1.1"
+ checksum: 10c0/532c7acc7ddd042724c28b1f020bd7bf148fcd4653bb44c8314168b5f772508c842ce4ee070299cac51c5c5757d2124bdcfcef5551c8c58ff9986e3e17f2260d
+ languageName: node
+ linkType: hard
+
+"@eslint/js@npm:9.39.1":
+ version: 9.39.1
+ resolution: "@eslint/js@npm:9.39.1"
+ checksum: 10c0/6f7f26f8cdb7ad6327bbf9741973b6278eb946f18f70e35406e88194b0d5c522d0547a34a02f2a208eec95c5d1388cdf7ccb20039efd2e4cb6655615247a50f1
+ languageName: node
+ linkType: hard
+
+"@eslint/object-schema@npm:^2.1.7":
+ version: 2.1.7
+ resolution: "@eslint/object-schema@npm:2.1.7"
+ checksum: 10c0/936b6e499853d1335803f556d526c86f5fe2259ed241bc665000e1d6353828edd913feed43120d150adb75570cae162cf000b5b0dfc9596726761c36b82f4e87
+ languageName: node
+ linkType: hard
+
+"@eslint/plugin-kit@npm:^0.4.1":
+ version: 0.4.1
+ resolution: "@eslint/plugin-kit@npm:0.4.1"
+ dependencies:
+ "@eslint/core": "npm:^0.17.0"
+ levn: "npm:^0.4.1"
+ checksum: 10c0/51600f78b798f172a9915dffb295e2ffb44840d583427bc732baf12ecb963eb841b253300e657da91d890f4b323d10a1bd12934bf293e3018d8bb66fdce5217b
+ languageName: node
+ linkType: hard
+
"@gulp-sourcemaps/identity-map@npm:^2.0.1":
version: 2.0.1
resolution: "@gulp-sourcemaps/identity-map@npm:2.0.1"
@@ -831,6 +948,37 @@ __metadata:
languageName: node
linkType: hard
+"@humanfs/core@npm:^0.19.1":
+ version: 0.19.1
+ resolution: "@humanfs/core@npm:0.19.1"
+ checksum: 10c0/aa4e0152171c07879b458d0e8a704b8c3a89a8c0541726c6b65b81e84fd8b7564b5d6c633feadc6598307d34564bd53294b533491424e8e313d7ab6c7bc5dc67
+ languageName: node
+ linkType: hard
+
+"@humanfs/node@npm:^0.16.6":
+ version: 0.16.7
+ resolution: "@humanfs/node@npm:0.16.7"
+ dependencies:
+ "@humanfs/core": "npm:^0.19.1"
+ "@humanwhocodes/retry": "npm:^0.4.0"
+ checksum: 10c0/9f83d3cf2cfa37383e01e3cdaead11cd426208e04c44adcdd291aa983aaf72d7d3598844d2fe9ce54896bb1bf8bd4b56883376611c8905a19c44684642823f30
+ languageName: node
+ linkType: hard
+
+"@humanwhocodes/module-importer@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "@humanwhocodes/module-importer@npm:1.0.1"
+ checksum: 10c0/909b69c3b86d482c26b3359db16e46a32e0fb30bd306a3c176b8313b9e7313dba0f37f519de6aa8b0a1921349e505f259d19475e123182416a506d7f87e7f529
+ languageName: node
+ linkType: hard
+
+"@humanwhocodes/retry@npm:^0.4.0, @humanwhocodes/retry@npm:^0.4.2":
+ version: 0.4.3
+ resolution: "@humanwhocodes/retry@npm:0.4.3"
+ checksum: 10c0/3775bb30087d4440b3f7406d5a057777d90e4b9f435af488a4923ef249e93615fb78565a85f173a186a076c7706a81d0d57d563a2624e4de2c5c9c66c486ce42
+ languageName: node
+ linkType: hard
+
"@isaacs/balanced-match@npm:^4.0.1":
version: 4.0.1
resolution: "@isaacs/balanced-match@npm:4.0.1"
@@ -1245,6 +1393,12 @@ __metadata:
languageName: node
linkType: soft
+"@penpot/ts@portal:./ts::locator=frontend%40workspace%3A.":
+ version: 0.0.0-use.local
+ resolution: "@penpot/ts@portal:./ts::locator=frontend%40workspace%3A."
+ languageName: node
+ linkType: soft
+
"@pkgjs/parseargs@npm:^0.11.0":
version: 0.11.0
resolution: "@pkgjs/parseargs@npm:0.11.0"
@@ -1399,6 +1553,13 @@ __metadata:
languageName: node
linkType: hard
+"@rolldown/pluginutils@npm:1.0.0-beta.27":
+ version: 1.0.0-beta.27
+ resolution: "@rolldown/pluginutils@npm:1.0.0-beta.27"
+ checksum: 10c0/9658f235b345201d4f6bfb1f32da9754ca164f892d1cb68154fe5f53c1df42bd675ecd409836dff46884a7847d6c00bdc38af870f7c81e05bba5c2645eb4ab9c
+ languageName: node
+ linkType: hard
+
"@rollup/pluginutils@npm:^5.0.2":
version: 5.2.0
resolution: "@rollup/pluginutils@npm:5.2.0"
@@ -1871,13 +2032,20 @@ __metadata:
languageName: node
linkType: hard
-"@types/estree@npm:^1.0.0":
+"@types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6":
version: 1.0.8
resolution: "@types/estree@npm:1.0.8"
checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5
languageName: node
linkType: hard
+"@types/json-schema@npm:^7.0.15":
+ version: 7.0.15
+ resolution: "@types/json-schema@npm:7.0.15"
+ checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db
+ languageName: node
+ linkType: hard
+
"@types/mdx@npm:^2.0.0":
version: 2.0.13
resolution: "@types/mdx@npm:2.0.13"
@@ -1894,6 +2062,24 @@ __metadata:
languageName: node
linkType: hard
+"@types/react-dom@npm:^19.1.9":
+ version: 19.2.3
+ resolution: "@types/react-dom@npm:19.2.3"
+ peerDependencies:
+ "@types/react": ^19.2.0
+ checksum: 10c0/b486ebe0f4e2fb35e2e108df1d8fc0927ca5d6002d5771e8a739de11239fe62d0e207c50886185253c99eb9dedfeeb956ea7429e5ba17f6693c7acb4c02f8cd1
+ languageName: node
+ linkType: hard
+
+"@types/react@npm:^19.1.16":
+ version: 19.2.7
+ resolution: "@types/react@npm:19.2.7"
+ dependencies:
+ csstype: "npm:^3.2.2"
+ checksum: 10c0/a7b75f1f9fcb34badd6f84098be5e35a0aeca614bc91f93d2698664c0b2ba5ad128422bd470ada598238cebe4f9e604a752aead7dc6f5a92261d0c7f9b27cfd1
+ languageName: node
+ linkType: hard
+
"@types/resolve@npm:^1.20.2":
version: 1.20.6
resolution: "@types/resolve@npm:1.20.6"
@@ -1908,6 +2094,157 @@ __metadata:
languageName: node
linkType: hard
+"@typescript-eslint/eslint-plugin@npm:8.49.0":
+ version: 8.49.0
+ resolution: "@typescript-eslint/eslint-plugin@npm:8.49.0"
+ dependencies:
+ "@eslint-community/regexpp": "npm:^4.10.0"
+ "@typescript-eslint/scope-manager": "npm:8.49.0"
+ "@typescript-eslint/type-utils": "npm:8.49.0"
+ "@typescript-eslint/utils": "npm:8.49.0"
+ "@typescript-eslint/visitor-keys": "npm:8.49.0"
+ ignore: "npm:^7.0.0"
+ natural-compare: "npm:^1.4.0"
+ ts-api-utils: "npm:^2.1.0"
+ peerDependencies:
+ "@typescript-eslint/parser": ^8.49.0
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: ">=4.8.4 <6.0.0"
+ checksum: 10c0/f5a6ac622bebad31e6e561caa2e7364bac82e259d487e1832f90c41040c856ed360891c710098f43d3541a17703a429ef023b0f5bb573cc05ee52200096f252f
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/parser@npm:8.49.0":
+ version: 8.49.0
+ resolution: "@typescript-eslint/parser@npm:8.49.0"
+ dependencies:
+ "@typescript-eslint/scope-manager": "npm:8.49.0"
+ "@typescript-eslint/types": "npm:8.49.0"
+ "@typescript-eslint/typescript-estree": "npm:8.49.0"
+ "@typescript-eslint/visitor-keys": "npm:8.49.0"
+ debug: "npm:^4.3.4"
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: ">=4.8.4 <6.0.0"
+ checksum: 10c0/749e6244497f2b617351cce4ae520bc101c948b1c94c28e3bc4c5861eb999ada3b4be5dfad36a377a75675998a27d24c5ffba23ff2af743e2b4c4530f68b2673
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/project-service@npm:8.49.0":
+ version: 8.49.0
+ resolution: "@typescript-eslint/project-service@npm:8.49.0"
+ dependencies:
+ "@typescript-eslint/tsconfig-utils": "npm:^8.49.0"
+ "@typescript-eslint/types": "npm:^8.49.0"
+ debug: "npm:^4.3.4"
+ peerDependencies:
+ typescript: ">=4.8.4 <6.0.0"
+ checksum: 10c0/da6342fe99786c9d9c1d2fc3291ffd62afa043b42f4c7b5c1f8b3a6af266bd9af662281a0905ee70b069a811b63faf7efb63932f6bf55cb138e42309e4ced425
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/scope-manager@npm:8.49.0":
+ version: 8.49.0
+ resolution: "@typescript-eslint/scope-manager@npm:8.49.0"
+ dependencies:
+ "@typescript-eslint/types": "npm:8.49.0"
+ "@typescript-eslint/visitor-keys": "npm:8.49.0"
+ checksum: 10c0/fe7a036e186e8cb933375ecc3b6ea8ce7604f1dd53d72c24d26158cbc2563527f8c1ba7a894b58bcbd079315fe950ff3c5eb5f7061658f39ff473c04d54ef701
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/tsconfig-utils@npm:8.49.0, @typescript-eslint/tsconfig-utils@npm:^8.49.0":
+ version: 8.49.0
+ resolution: "@typescript-eslint/tsconfig-utils@npm:8.49.0"
+ peerDependencies:
+ typescript: ">=4.8.4 <6.0.0"
+ checksum: 10c0/1b255149d3f0d99b6cf5df4b62925a79f44f243748c6e877a7cf1dd0cdbff7411f2971d5e9fa85472ed76055bd1826e55c1adc99f3d82f504bd9fcd6e76f4b3a
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/type-utils@npm:8.49.0":
+ version: 8.49.0
+ resolution: "@typescript-eslint/type-utils@npm:8.49.0"
+ dependencies:
+ "@typescript-eslint/types": "npm:8.49.0"
+ "@typescript-eslint/typescript-estree": "npm:8.49.0"
+ "@typescript-eslint/utils": "npm:8.49.0"
+ debug: "npm:^4.3.4"
+ ts-api-utils: "npm:^2.1.0"
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: ">=4.8.4 <6.0.0"
+ checksum: 10c0/0b5bdcbd100469acc6b02642f1bface12347423fc065b57fce94eef2f059a30ada1dfada2d172531305d4a48640c51236634f25eaa9529a400447862837ff595
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/types@npm:8.49.0, @typescript-eslint/types@npm:^8.49.0":
+ version: 8.49.0
+ resolution: "@typescript-eslint/types@npm:8.49.0"
+ checksum: 10c0/75b26207b142576cf9af86406815b440c7f4bc6645fa58c58a3d781a5d80a39ba7e44d4b4df297980019a7aa1db10da5ac515191aaaf0f1ef6007996c126d8f9
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/typescript-estree@npm:8.49.0":
+ version: 8.49.0
+ resolution: "@typescript-eslint/typescript-estree@npm:8.49.0"
+ dependencies:
+ "@typescript-eslint/project-service": "npm:8.49.0"
+ "@typescript-eslint/tsconfig-utils": "npm:8.49.0"
+ "@typescript-eslint/types": "npm:8.49.0"
+ "@typescript-eslint/visitor-keys": "npm:8.49.0"
+ debug: "npm:^4.3.4"
+ minimatch: "npm:^9.0.4"
+ semver: "npm:^7.6.0"
+ tinyglobby: "npm:^0.2.15"
+ ts-api-utils: "npm:^2.1.0"
+ peerDependencies:
+ typescript: ">=4.8.4 <6.0.0"
+ checksum: 10c0/91d0e4ed00021085142c2845571cc91c89b700ee184eb508e8d1f97a02533c029630f00c3f0f796942b28397ec9f61502b153c81971d228893363fc546bbb341
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/utils@npm:8.49.0":
+ version: 8.49.0
+ resolution: "@typescript-eslint/utils@npm:8.49.0"
+ dependencies:
+ "@eslint-community/eslint-utils": "npm:^4.7.0"
+ "@typescript-eslint/scope-manager": "npm:8.49.0"
+ "@typescript-eslint/types": "npm:8.49.0"
+ "@typescript-eslint/typescript-estree": "npm:8.49.0"
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: ">=4.8.4 <6.0.0"
+ checksum: 10c0/d10fe4d844dacb2f76f0a6e018455d94ba29204845d57248ae220030bda7e13e0e7b488b3ccf8ce1b5d577e1e1775cbdbbff911261a586d9bc7fdfc3cc001697
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/visitor-keys@npm:8.49.0":
+ version: 8.49.0
+ resolution: "@typescript-eslint/visitor-keys@npm:8.49.0"
+ dependencies:
+ "@typescript-eslint/types": "npm:8.49.0"
+ eslint-visitor-keys: "npm:^4.2.1"
+ checksum: 10c0/442c47bf8e46dda50a765cddbd524f6fef9e76acc3d11de2505ca7097054f24e53f12fe57be34b72fb56115f8f74499573a2704f3465bffdb96834083b616cf1
+ languageName: node
+ linkType: hard
+
+"@vitejs/plugin-react@npm:^4.2.0":
+ version: 4.7.0
+ resolution: "@vitejs/plugin-react@npm:4.7.0"
+ dependencies:
+ "@babel/core": "npm:^7.28.0"
+ "@babel/plugin-transform-react-jsx-self": "npm:^7.27.1"
+ "@babel/plugin-transform-react-jsx-source": "npm:^7.27.1"
+ "@rolldown/pluginutils": "npm:1.0.0-beta.27"
+ "@types/babel__core": "npm:^7.20.5"
+ react-refresh: "npm:^0.17.0"
+ peerDependencies:
+ vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
+ checksum: 10c0/692f23960972879485d647713663ec299c478222c96567d60285acf7c7dc5c178e71abfe9d2eefddef1eeb01514dacbc2ed68aad84628debf9c7116134734253
+ languageName: node
+ linkType: hard
+
"@vitest/browser@npm:3.2.4":
version: 3.2.4
resolution: "@vitest/browser@npm:3.2.4"
@@ -2106,6 +2443,15 @@ __metadata:
languageName: node
linkType: hard
+"acorn-jsx@npm:^5.3.2":
+ version: 5.3.2
+ resolution: "acorn-jsx@npm:5.3.2"
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+ checksum: 10c0/4c54868fbef3b8d58927d5e33f0a4de35f59012fe7b12cf9dfbb345fb8f46607709e1c4431be869a23fb63c151033d84c4198fa9f79385cec34fcb1dd53974c1
+ languageName: node
+ linkType: hard
+
"acorn@npm:^6.4.1":
version: 6.4.2
resolution: "acorn@npm:6.4.2"
@@ -2131,6 +2477,18 @@ __metadata:
languageName: node
linkType: hard
+"ajv@npm:^6.12.4":
+ version: 6.12.6
+ resolution: "ajv@npm:6.12.6"
+ dependencies:
+ fast-deep-equal: "npm:^3.1.1"
+ fast-json-stable-stringify: "npm:^2.0.0"
+ json-schema-traverse: "npm:^0.4.1"
+ uri-js: "npm:^4.2.2"
+ checksum: 10c0/41e23642cbe545889245b9d2a45854ebba51cda6c778ebced9649420d9205f2efb39cb43dbc41e358409223b1ea43303ae4839db682c848b891e4811da1a5a71
+ languageName: node
+ linkType: hard
+
"ansi-colors@npm:^1.0.1":
version: 1.1.0
resolution: "ansi-colors@npm:1.1.0"
@@ -2605,6 +2963,13 @@ __metadata:
languageName: node
linkType: hard
+"callsites@npm:^3.0.0":
+ version: 3.1.0
+ resolution: "callsites@npm:3.1.0"
+ checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301
+ languageName: node
+ linkType: hard
+
"caniuse-lite@npm:^1.0.30001702, caniuse-lite@npm:^1.0.30001718":
version: 1.0.30001723
resolution: "caniuse-lite@npm:1.0.30001723"
@@ -2625,7 +2990,7 @@ __metadata:
languageName: node
linkType: hard
-"chalk@npm:4.1.2, chalk@npm:^4.1.2":
+"chalk@npm:4.1.2, chalk@npm:^4.0.0, chalk@npm:^4.1.2":
version: 4.1.2
resolution: "chalk@npm:4.1.2"
dependencies:
@@ -3186,6 +3551,13 @@ __metadata:
languageName: node
linkType: hard
+"csstype@npm:^3.2.2":
+ version: 3.2.3
+ resolution: "csstype@npm:3.2.3"
+ checksum: 10c0/cd29c51e70fa822f1cecd8641a1445bed7063697469d35633b516e60fe8c1bde04b08f6c5b6022136bb669b64c63d4173af54864510fbb4ee23281801841a3ce
+ languageName: node
+ linkType: hard
+
"d@npm:1, d@npm:^1.0.1, d@npm:^1.0.2":
version: 1.0.2
resolution: "d@npm:1.0.2"
@@ -3287,6 +3659,18 @@ __metadata:
languageName: node
linkType: hard
+"debug@npm:^4.3.2":
+ version: 4.4.3
+ resolution: "debug@npm:4.4.3"
+ dependencies:
+ ms: "npm:^2.1.3"
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ checksum: 10c0/d79136ec6c83ecbefd0f6a5593da6a9c91ec4d7ddc4b54c883d6e71ec9accb5f67a1a5e96d00a328196b5b5c86d365e98d8a3a70856aaf16b4e7b1985e67f5a6
+ languageName: node
+ linkType: hard
+
"decimal.js@npm:^10.5.0":
version: 10.5.0
resolution: "decimal.js@npm:10.5.0"
@@ -3308,6 +3692,13 @@ __metadata:
languageName: node
linkType: hard
+"deep-is@npm:^0.1.3":
+ version: 0.1.4
+ resolution: "deep-is@npm:0.1.4"
+ checksum: 10c0/7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c
+ languageName: node
+ linkType: hard
+
"deepmerge@npm:^4.3.1":
version: 4.3.1
resolution: "deepmerge@npm:4.3.1"
@@ -3994,6 +4385,104 @@ __metadata:
languageName: node
linkType: hard
+"escape-string-regexp@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "escape-string-regexp@npm:4.0.0"
+ checksum: 10c0/9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9
+ languageName: node
+ linkType: hard
+
+"eslint-plugin-react-hooks@npm:^5.2.0":
+ version: 5.2.0
+ resolution: "eslint-plugin-react-hooks@npm:5.2.0"
+ peerDependencies:
+ eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
+ checksum: 10c0/1c8d50fa5984c6dea32470651807d2922cc3934cf3425e78f84a24c2dfd972e7f019bee84aefb27e0cf2c13fea0ac1d4473267727408feeb1c56333ca1489385
+ languageName: node
+ linkType: hard
+
+"eslint-plugin-react-refresh@npm:^0.4.22":
+ version: 0.4.24
+ resolution: "eslint-plugin-react-refresh@npm:0.4.24"
+ peerDependencies:
+ eslint: ">=8.40"
+ checksum: 10c0/7471a25663cdec2886b5aec53cff6319475a6704616f96db4eef7ada3cba1236abeb71b4c2db6396e48a3a8a3a416a0266b2eac06bb6ef77d8b5674604ece7fb
+ languageName: node
+ linkType: hard
+
+"eslint-scope@npm:^8.4.0":
+ version: 8.4.0
+ resolution: "eslint-scope@npm:8.4.0"
+ dependencies:
+ esrecurse: "npm:^4.3.0"
+ estraverse: "npm:^5.2.0"
+ checksum: 10c0/407f6c600204d0f3705bd557f81bd0189e69cd7996f408f8971ab5779c0af733d1af2f1412066b40ee1588b085874fc37a2333986c6521669cdbdd36ca5058e0
+ languageName: node
+ linkType: hard
+
+"eslint-visitor-keys@npm:^3.4.3":
+ version: 3.4.3
+ resolution: "eslint-visitor-keys@npm:3.4.3"
+ checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820
+ languageName: node
+ linkType: hard
+
+"eslint-visitor-keys@npm:^4.2.1":
+ version: 4.2.1
+ resolution: "eslint-visitor-keys@npm:4.2.1"
+ checksum: 10c0/fcd43999199d6740db26c58dbe0c2594623e31ca307e616ac05153c9272f12f1364f5a0b1917a8e962268fdecc6f3622c1c2908b4fcc2e047a106fe6de69dc43
+ languageName: node
+ linkType: hard
+
+"eslint@npm:^9.36.0":
+ version: 9.39.1
+ resolution: "eslint@npm:9.39.1"
+ dependencies:
+ "@eslint-community/eslint-utils": "npm:^4.8.0"
+ "@eslint-community/regexpp": "npm:^4.12.1"
+ "@eslint/config-array": "npm:^0.21.1"
+ "@eslint/config-helpers": "npm:^0.4.2"
+ "@eslint/core": "npm:^0.17.0"
+ "@eslint/eslintrc": "npm:^3.3.1"
+ "@eslint/js": "npm:9.39.1"
+ "@eslint/plugin-kit": "npm:^0.4.1"
+ "@humanfs/node": "npm:^0.16.6"
+ "@humanwhocodes/module-importer": "npm:^1.0.1"
+ "@humanwhocodes/retry": "npm:^0.4.2"
+ "@types/estree": "npm:^1.0.6"
+ ajv: "npm:^6.12.4"
+ chalk: "npm:^4.0.0"
+ cross-spawn: "npm:^7.0.6"
+ debug: "npm:^4.3.2"
+ escape-string-regexp: "npm:^4.0.0"
+ eslint-scope: "npm:^8.4.0"
+ eslint-visitor-keys: "npm:^4.2.1"
+ espree: "npm:^10.4.0"
+ esquery: "npm:^1.5.0"
+ esutils: "npm:^2.0.2"
+ fast-deep-equal: "npm:^3.1.3"
+ file-entry-cache: "npm:^8.0.0"
+ find-up: "npm:^5.0.0"
+ glob-parent: "npm:^6.0.2"
+ ignore: "npm:^5.2.0"
+ imurmurhash: "npm:^0.1.4"
+ is-glob: "npm:^4.0.0"
+ json-stable-stringify-without-jsonify: "npm:^1.0.1"
+ lodash.merge: "npm:^4.6.2"
+ minimatch: "npm:^3.1.2"
+ natural-compare: "npm:^1.4.0"
+ optionator: "npm:^0.9.3"
+ peerDependencies:
+ jiti: "*"
+ peerDependenciesMeta:
+ jiti:
+ optional: true
+ bin:
+ eslint: bin/eslint.js
+ checksum: 10c0/59b2480639404ba24578ca480f973683b87b7aac8aa7e349240474a39067804fd13cd8b9cb22fee074170b8c7c563b57bab703ec0f0d3f81ea017e5d2cad299d
+ languageName: node
+ linkType: hard
+
"esniff@npm:^2.0.1":
version: 2.0.1
resolution: "esniff@npm:2.0.1"
@@ -4006,6 +4495,17 @@ __metadata:
languageName: node
linkType: hard
+"espree@npm:^10.0.1, espree@npm:^10.4.0":
+ version: 10.4.0
+ resolution: "espree@npm:10.4.0"
+ dependencies:
+ acorn: "npm:^8.15.0"
+ acorn-jsx: "npm:^5.3.2"
+ eslint-visitor-keys: "npm:^4.2.1"
+ checksum: 10c0/c63fe06131c26c8157b4083313cb02a9a54720a08e21543300e55288c40e06c3fc284bdecf108d3a1372c5934a0a88644c98714f38b6ae8ed272b40d9ea08d6b
+ languageName: node
+ linkType: hard
+
"esprima@npm:~4.0.0":
version: 4.0.1
resolution: "esprima@npm:4.0.1"
@@ -4016,6 +4516,31 @@ __metadata:
languageName: node
linkType: hard
+"esquery@npm:^1.5.0":
+ version: 1.6.0
+ resolution: "esquery@npm:1.6.0"
+ dependencies:
+ estraverse: "npm:^5.1.0"
+ checksum: 10c0/cb9065ec605f9da7a76ca6dadb0619dfb611e37a81e318732977d90fab50a256b95fee2d925fba7c2f3f0523aa16f91587246693bc09bc34d5a59575fe6e93d2
+ languageName: node
+ linkType: hard
+
+"esrecurse@npm:^4.3.0":
+ version: 4.3.0
+ resolution: "esrecurse@npm:4.3.0"
+ dependencies:
+ estraverse: "npm:^5.2.0"
+ checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5
+ languageName: node
+ linkType: hard
+
+"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0":
+ version: 5.3.0
+ resolution: "estraverse@npm:5.3.0"
+ checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107
+ languageName: node
+ linkType: hard
+
"estree-walker@npm:^2.0.2":
version: 2.0.2
resolution: "estree-walker@npm:2.0.2"
@@ -4173,6 +4698,27 @@ __metadata:
languageName: node
linkType: hard
+"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3":
+ version: 3.1.3
+ resolution: "fast-deep-equal@npm:3.1.3"
+ checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0
+ languageName: node
+ linkType: hard
+
+"fast-json-stable-stringify@npm:^2.0.0":
+ version: 2.1.0
+ resolution: "fast-json-stable-stringify@npm:2.1.0"
+ checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b
+ languageName: node
+ linkType: hard
+
+"fast-levenshtein@npm:^2.0.6":
+ version: 2.0.6
+ resolution: "fast-levenshtein@npm:2.0.6"
+ checksum: 10c0/111972b37338bcb88f7d9e2c5907862c280ebf4234433b95bc611e518d192ccb2d38119c4ac86e26b668d75f7f3894f4ff5c4982899afced7ca78633b08287c4
+ languageName: node
+ linkType: hard
+
"fbjs-css-vars@npm:^1.0.0":
version: 1.0.2
resolution: "fbjs-css-vars@npm:1.0.2"
@@ -4207,6 +4753,18 @@ __metadata:
languageName: node
linkType: hard
+"fdir@npm:^6.5.0":
+ version: 6.5.0
+ resolution: "fdir@npm:6.5.0"
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
+ checksum: 10c0/e345083c4306b3aed6cb8ec551e26c36bab5c511e99ea4576a16750ddc8d3240e63826cc624f5ae17ad4dc82e68a253213b60d556c11bfad064b7607847ed07f
+ languageName: node
+ linkType: hard
+
"fecha@npm:^4.2.0":
version: 4.2.3
resolution: "fecha@npm:4.2.3"
@@ -4214,6 +4772,15 @@ __metadata:
languageName: node
linkType: hard
+"file-entry-cache@npm:^8.0.0":
+ version: 8.0.0
+ resolution: "file-entry-cache@npm:8.0.0"
+ dependencies:
+ flat-cache: "npm:^4.0.0"
+ checksum: 10c0/9e2b5938b1cd9b6d7e3612bdc533afd4ac17b2fc646569e9a8abbf2eb48e5eb8e316bc38815a3ef6a1b456f4107f0d0f055a614ca613e75db6bf9ff4d72c1638
+ languageName: node
+ linkType: hard
+
"fill-range@npm:^7.1.1":
version: 7.1.1
resolution: "fill-range@npm:7.1.1"
@@ -4237,6 +4804,16 @@ __metadata:
languageName: node
linkType: hard
+"find-up@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "find-up@npm:5.0.0"
+ dependencies:
+ locate-path: "npm:^6.0.0"
+ path-exists: "npm:^4.0.0"
+ checksum: 10c0/062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a
+ languageName: node
+ linkType: hard
+
"find-yarn-workspace-root@npm:^2.0.0":
version: 2.0.0
resolution: "find-yarn-workspace-root@npm:2.0.0"
@@ -4246,6 +4823,23 @@ __metadata:
languageName: node
linkType: hard
+"flat-cache@npm:^4.0.0":
+ version: 4.0.1
+ resolution: "flat-cache@npm:4.0.1"
+ dependencies:
+ flatted: "npm:^3.2.9"
+ keyv: "npm:^4.5.4"
+ checksum: 10c0/2c59d93e9faa2523e4fda6b4ada749bed432cfa28c8e251f33b25795e426a1c6dbada777afb1f74fcfff33934fdbdea921ee738fcc33e71adc9d6eca984a1cfc
+ languageName: node
+ linkType: hard
+
+"flatted@npm:^3.2.9":
+ version: 3.3.3
+ resolution: "flatted@npm:3.3.3"
+ checksum: 10c0/e957a1c6b0254aa15b8cce8533e24165abd98fadc98575db082b786b5da1b7d72062b81bfdcd1da2f4d46b6ed93bec2434e62333e9b4261d79ef2e75a10dd538
+ languageName: node
+ linkType: hard
+
"fn.name@npm:1.x.x":
version: 1.1.0
resolution: "fn.name@npm:1.1.0"
@@ -4313,6 +4907,7 @@ __metadata:
"@penpot/plugins-runtime": "npm:1.3.2"
"@penpot/svgo": "penpot/svgo#v3.1"
"@penpot/text-editor": "portal:./text-editor"
+ "@penpot/ts": "portal:./ts"
"@playwright/test": "npm:1.52.0"
"@storybook/addon-docs": "npm:10.0.4"
"@storybook/addon-themes": "npm:10.0.4"
@@ -4320,6 +4915,9 @@ __metadata:
"@storybook/react-vite": "npm:10.0.4"
"@tokens-studio/sd-transforms": "npm:1.2.11"
"@types/node": "npm:^22.15.21"
+ "@types/react": "npm:^19.1.16"
+ "@types/react-dom": "npm:^19.1.9"
+ "@vitejs/plugin-react": "npm:4.2.0"
"@vitest/browser": "npm:3.2.4"
"@vitest/coverage-v8": "npm:3.2.4"
"@zip.js/zip.js": "patch:@zip.js/zip.js@npm%3A2.7.60#~/.yarn/patches/@zip.js-zip.js-npm-2.7.60-b6b814410b.patch"
@@ -4328,6 +4926,9 @@ __metadata:
concurrently: "npm:^9.2.1"
date-fns: "npm:^4.1.0"
esbuild: "npm:^0.25.9"
+ eslint: "npm:^9.36.0"
+ eslint-plugin-react-hooks: "npm:^5.2.0"
+ eslint-plugin-react-refresh: "npm:^0.4.22"
eventsource-parser: "npm:^3.0.6"
express: "npm:^5.1.0"
fancy-log: "npm:^2.0.0"
@@ -4376,6 +4977,7 @@ __metadata:
tdigest: "npm:^0.1.2"
tinycolor2: "npm:^1.6.0"
typescript: "npm:^5.9.2"
+ typescript-eslint: "npm:^8.45.0"
ua-parser-js: "npm:2.0.5"
vite: "npm:^6.3.5"
vitest: "npm:^3.2.0"
@@ -4570,6 +5172,15 @@ __metadata:
languageName: node
linkType: hard
+"glob-parent@npm:^6.0.2":
+ version: 6.0.2
+ resolution: "glob-parent@npm:6.0.2"
+ dependencies:
+ is-glob: "npm:^4.0.3"
+ checksum: 10c0/317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8
+ languageName: node
+ linkType: hard
+
"glob-parent@npm:~5.1.2":
version: 5.1.2
resolution: "glob-parent@npm:5.1.2"
@@ -4625,10 +5236,10 @@ __metadata:
languageName: node
linkType: hard
-"globals@npm:^11.1.0":
- version: 11.12.0
- resolution: "globals@npm:11.12.0"
- checksum: 10c0/758f9f258e7b19226bd8d4af5d3b0dcf7038780fb23d82e6f98932c44e239f884847f1766e8fa9cc5635ccb3204f7fa7314d4408dd4002a5e8ea827b4018f0a1
+"globals@npm:^16.5.0":
+ version: 16.5.0
+ resolution: "globals@npm:16.5.0"
+ checksum: 10c0/615241dae7851c8012f5aa0223005b1ed6607713d6813de0741768bd4ddc39353117648f1a7086b4b0fa45eae733f1c0a0fe369aa4e543bb63f8de8990178ea9
languageName: node
linkType: hard
@@ -4917,6 +5528,20 @@ __metadata:
languageName: node
linkType: hard
+"ignore@npm:^5.2.0":
+ version: 5.3.2
+ resolution: "ignore@npm:5.3.2"
+ checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337
+ languageName: node
+ linkType: hard
+
+"ignore@npm:^7.0.0":
+ version: 7.0.5
+ resolution: "ignore@npm:7.0.5"
+ checksum: 10c0/ae00db89fe873064a093b8999fe4cc284b13ef2a178636211842cceb650b9c3e390d3339191acb145d81ed5379d2074840cf0c33a20bdbd6f32821f79eb4ad5d
+ languageName: node
+ linkType: hard
+
"immutable@npm:^5.0.2":
version: 5.1.3
resolution: "immutable@npm:5.1.3"
@@ -4931,6 +5556,16 @@ __metadata:
languageName: node
linkType: hard
+"import-fresh@npm:^3.2.1":
+ version: 3.3.1
+ resolution: "import-fresh@npm:3.3.1"
+ dependencies:
+ parent-module: "npm:^1.0.0"
+ resolve-from: "npm:^4.0.0"
+ checksum: 10c0/bf8cc494872fef783249709385ae883b447e3eb09db0ebd15dcead7d9afe7224dad7bd7591c6b73b0b19b3c0f9640eb8ee884f01cfaf2887ab995b0b36a0cbec
+ languageName: node
+ linkType: hard
+
"imurmurhash@npm:^0.1.4":
version: 0.1.4
resolution: "imurmurhash@npm:0.1.4"
@@ -5170,7 +5805,7 @@ __metadata:
languageName: node
linkType: hard
-"is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1":
+"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1":
version: 4.0.3
resolution: "is-glob@npm:4.0.3"
dependencies:
@@ -5516,6 +6151,17 @@ __metadata:
languageName: node
linkType: hard
+"js-yaml@npm:^4.1.1":
+ version: 4.1.1
+ resolution: "js-yaml@npm:4.1.1"
+ dependencies:
+ argparse: "npm:^2.0.1"
+ bin:
+ js-yaml: bin/js-yaml.js
+ checksum: 10c0/561c7d7088c40a9bb53cc75becbfb1df6ae49b34b5e6e5a81744b14ae8667ec564ad2527709d1a6e7d5e5fa6d483aa0f373a50ad98d42fde368ec4a190d4fae7
+ languageName: node
+ linkType: hard
+
"jsbn@npm:1.1.0":
version: 1.1.0
resolution: "jsbn@npm:1.1.0"
@@ -5565,6 +6211,13 @@ __metadata:
languageName: node
linkType: hard
+"json-buffer@npm:3.0.1":
+ version: 3.0.1
+ resolution: "json-buffer@npm:3.0.1"
+ checksum: 10c0/0d1c91569d9588e7eef2b49b59851f297f3ab93c7b35c7c221e288099322be6b562767d11e4821da500f3219542b9afd2e54c5dc573107c1126ed1080f8e96d7
+ languageName: node
+ linkType: hard
+
"json-parse-better-errors@npm:^1.0.1":
version: 1.0.2
resolution: "json-parse-better-errors@npm:1.0.2"
@@ -5572,6 +6225,20 @@ __metadata:
languageName: node
linkType: hard
+"json-schema-traverse@npm:^0.4.1":
+ version: 0.4.1
+ resolution: "json-schema-traverse@npm:0.4.1"
+ checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce
+ languageName: node
+ linkType: hard
+
+"json-stable-stringify-without-jsonify@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "json-stable-stringify-without-jsonify@npm:1.0.1"
+ checksum: 10c0/cb168b61fd4de83e58d09aaa6425ef71001bae30d260e2c57e7d09a5fd82223e2f22a042dedaab8db23b7d9ae46854b08bb1f91675a8be11c5cffebef5fb66a5
+ languageName: node
+ linkType: hard
+
"json-stable-stringify@npm:^1.0.2":
version: 1.3.0
resolution: "json-stable-stringify@npm:1.3.0"
@@ -5614,6 +6281,15 @@ __metadata:
languageName: node
linkType: hard
+"keyv@npm:^4.5.4":
+ version: 4.5.4
+ resolution: "keyv@npm:4.5.4"
+ dependencies:
+ json-buffer: "npm:3.0.1"
+ checksum: 10c0/aa52f3c5e18e16bb6324876bb8b59dd02acf782a4b789c7b2ae21107fab95fab3890ed448d4f8dba80ce05391eeac4bfabb4f02a20221342982f806fa2cf271e
+ languageName: node
+ linkType: hard
+
"klaw-sync@npm:^6.0.0":
version: 6.0.0
resolution: "klaw-sync@npm:6.0.0"
@@ -5637,6 +6313,16 @@ __metadata:
languageName: node
linkType: hard
+"levn@npm:^0.4.1":
+ version: 0.4.1
+ resolution: "levn@npm:0.4.1"
+ dependencies:
+ prelude-ls: "npm:^1.2.1"
+ type-check: "npm:~0.4.0"
+ checksum: 10c0/effb03cad7c89dfa5bd4f6989364bfc79994c2042ec5966cb9b95990e2edee5cd8969ddf42616a0373ac49fac1403437deaf6e9050fbbaa3546093a59b9ac94e
+ languageName: node
+ linkType: hard
+
"lilconfig@npm:^3.1.1":
version: 3.1.3
resolution: "lilconfig@npm:3.1.3"
@@ -5663,6 +6349,15 @@ __metadata:
languageName: node
linkType: hard
+"locate-path@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "locate-path@npm:6.0.0"
+ dependencies:
+ p-locate: "npm:^5.0.0"
+ checksum: 10c0/d3972ab70dfe58ce620e64265f90162d247e87159b6126b01314dd67be43d50e96a50b517bce2d9452a79409c7614054c277b5232377de50416564a77ac7aad3
+ languageName: node
+ linkType: hard
+
"lodash.camelcase@npm:^4.3.0":
version: 4.3.0
resolution: "lodash.camelcase@npm:4.3.0"
@@ -6145,6 +6840,13 @@ __metadata:
languageName: node
linkType: hard
+"natural-compare@npm:^1.4.0":
+ version: 1.4.0
+ resolution: "natural-compare@npm:1.4.0"
+ checksum: 10c0/f5f9a7974bfb28a91afafa254b197f0f22c684d4a1731763dda960d2c8e375b36c7d690e0d9dc8fba774c537af14a7e979129bca23d88d052fbeb9466955e447
+ languageName: node
+ linkType: hard
+
"negotiator@npm:^1.0.0":
version: 1.0.0
resolution: "negotiator@npm:1.0.0"
@@ -6431,6 +7133,20 @@ __metadata:
languageName: node
linkType: hard
+"optionator@npm:^0.9.3":
+ version: 0.9.4
+ resolution: "optionator@npm:0.9.4"
+ dependencies:
+ deep-is: "npm:^0.1.3"
+ fast-levenshtein: "npm:^2.0.6"
+ levn: "npm:^0.4.1"
+ prelude-ls: "npm:^1.2.1"
+ type-check: "npm:^0.4.0"
+ word-wrap: "npm:^1.2.5"
+ checksum: 10c0/4afb687a059ee65b61df74dfe87d8d6815cd6883cb8b3d5883a910df72d0f5d029821f37025e4bccf4048873dbdb09acc6d303d27b8f76b1a80dd5a7d5334675
+ languageName: node
+ linkType: hard
+
"os-tmpdir@npm:~1.0.2":
version: 1.0.2
resolution: "os-tmpdir@npm:1.0.2"
@@ -6449,6 +7165,15 @@ __metadata:
languageName: node
linkType: hard
+"p-limit@npm:^3.0.2":
+ version: 3.1.0
+ resolution: "p-limit@npm:3.1.0"
+ dependencies:
+ yocto-queue: "npm:^0.1.0"
+ checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a
+ languageName: node
+ linkType: hard
+
"p-limit@npm:^6.2.0":
version: 6.2.0
resolution: "p-limit@npm:6.2.0"
@@ -6458,6 +7183,15 @@ __metadata:
languageName: node
linkType: hard
+"p-locate@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "p-locate@npm:5.0.0"
+ dependencies:
+ p-limit: "npm:^3.0.2"
+ checksum: 10c0/2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a
+ languageName: node
+ linkType: hard
+
"p-map@npm:^7.0.2":
version: 7.0.3
resolution: "p-map@npm:7.0.3"
@@ -6472,6 +7206,15 @@ __metadata:
languageName: node
linkType: hard
+"parent-module@npm:^1.0.0":
+ version: 1.0.1
+ resolution: "parent-module@npm:1.0.1"
+ dependencies:
+ callsites: "npm:^3.0.0"
+ checksum: 10c0/c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556
+ languageName: node
+ linkType: hard
+
"parse-json@npm:^4.0.0":
version: 4.0.0
resolution: "parse-json@npm:4.0.0"
@@ -6530,6 +7273,13 @@ __metadata:
languageName: node
linkType: hard
+"path-exists@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "path-exists@npm:4.0.0"
+ checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b
+ languageName: node
+ linkType: hard
+
"path-is-absolute@npm:^1.0.0":
version: 1.0.1
resolution: "path-is-absolute@npm:1.0.1"
@@ -6886,6 +7636,13 @@ __metadata:
languageName: node
linkType: hard
+"prelude-ls@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "prelude-ls@npm:1.2.1"
+ checksum: 10c0/b00d617431e7886c520a6f498a2e14c75ec58f6d93ba48c3b639cf241b54232d90daa05d83a9e9b9fef6baa63cb7e1e4602c2372fea5bc169668401eb127d0cd
+ languageName: node
+ linkType: hard
+
"prettier@npm:3.5.3, prettier@npm:^3.3.3":
version: 3.5.3
resolution: "prettier@npm:3.5.3"
@@ -7028,7 +7785,7 @@ __metadata:
languageName: node
linkType: hard
-"punycode@npm:^2.3.1":
+"punycode@npm:^2.1.0, punycode@npm:^2.3.1":
version: 2.3.1
resolution: "punycode@npm:2.3.1"
checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9
@@ -7151,6 +7908,13 @@ __metadata:
languageName: node
linkType: hard
+"react-refresh@npm:^0.17.0":
+ version: 0.17.0
+ resolution: "react-refresh@npm:0.17.0"
+ checksum: 10c0/002cba940384c9930008c0bce26cac97a9d5682bc623112c2268ba0c155127d9c178a9a5cc2212d560088d60dfd503edd808669a25f9b377f316a32361d0b23c
+ languageName: node
+ linkType: hard
+
"react-virtualized@npm:^9.22.6":
version: 9.22.6
resolution: "react-virtualized@npm:9.22.6"
@@ -7329,6 +8093,13 @@ __metadata:
languageName: node
linkType: hard
+"resolve-from@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "resolve-from@npm:4.0.0"
+ checksum: 10c0/8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190
+ languageName: node
+ linkType: hard
+
"resolve@npm:^1.10.0, resolve@npm:^1.22.1, resolve@npm:^1.22.8":
version: 1.22.10
resolution: "resolve@npm:1.22.10"
@@ -7815,6 +8586,15 @@ __metadata:
languageName: node
linkType: hard
+"semver@npm:^7.6.0":
+ version: 7.7.3
+ resolution: "semver@npm:7.7.3"
+ bin:
+ semver: bin/semver.js
+ checksum: 10c0/4afe5c986567db82f44c8c6faef8fe9df2a9b1d98098fc1721f57c696c4c21cebd572f297fc21002f81889492345b8470473bc6f4aff5fb032a6ea59ea2bc45e
+ languageName: node
+ linkType: hard
+
"send@npm:^1.1.0, send@npm:^1.2.0":
version: 1.2.0
resolution: "send@npm:1.2.0"
@@ -8420,6 +9200,13 @@ __metadata:
languageName: node
linkType: hard
+"strip-json-comments@npm:^3.1.1":
+ version: 3.1.1
+ resolution: "strip-json-comments@npm:3.1.1"
+ checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd
+ languageName: node
+ linkType: hard
+
"strip-literal@npm:^3.0.0":
version: 3.0.0
resolution: "strip-literal@npm:3.0.0"
@@ -8716,6 +9503,16 @@ __metadata:
languageName: node
linkType: hard
+"tinyglobby@npm:^0.2.15":
+ version: 0.2.15
+ resolution: "tinyglobby@npm:0.2.15"
+ dependencies:
+ fdir: "npm:^6.5.0"
+ picomatch: "npm:^4.0.3"
+ checksum: 10c0/869c31490d0d88eedb8305d178d4c75e7463e820df5a9b9d388291daf93e8b1eb5de1dad1c1e139767e4269fe75f3b10d5009b2cc14db96ff98986920a186844
+ languageName: node
+ linkType: hard
+
"tinypool@npm:^1.1.1":
version: 1.1.1
resolution: "tinypool@npm:1.1.1"
@@ -8846,6 +9643,15 @@ __metadata:
languageName: node
linkType: hard
+"ts-api-utils@npm:^2.1.0":
+ version: 2.1.0
+ resolution: "ts-api-utils@npm:2.1.0"
+ peerDependencies:
+ typescript: ">=4.8.4"
+ checksum: 10c0/9806a38adea2db0f6aa217ccc6bc9c391ddba338a9fe3080676d0d50ed806d305bb90e8cef0276e793d28c8a929f400abb184ddd7ff83a416959c0f4d2ce754f
+ languageName: node
+ linkType: hard
+
"ts-dedent@npm:^2.0.0, ts-dedent@npm:^2.2.0":
version: 2.2.0
resolution: "ts-dedent@npm:2.2.0"
@@ -8871,6 +9677,15 @@ __metadata:
languageName: node
linkType: hard
+"type-check@npm:^0.4.0, type-check@npm:~0.4.0":
+ version: 0.4.0
+ resolution: "type-check@npm:0.4.0"
+ dependencies:
+ prelude-ls: "npm:^1.2.1"
+ checksum: 10c0/7b3fd0ed43891e2080bf0c5c504b418fbb3e5c7b9708d3d015037ba2e6323a28152ec163bcb65212741fa5d2022e3075ac3c76440dbd344c9035f818e8ecee58
+ languageName: node
+ linkType: hard
+
"type-is@npm:^2.0.0, type-is@npm:^2.0.1":
version: 2.0.1
resolution: "type-is@npm:2.0.1"
@@ -8942,6 +9757,21 @@ __metadata:
languageName: node
linkType: hard
+"typescript-eslint@npm:^8.45.0":
+ version: 8.49.0
+ resolution: "typescript-eslint@npm:8.49.0"
+ dependencies:
+ "@typescript-eslint/eslint-plugin": "npm:8.49.0"
+ "@typescript-eslint/parser": "npm:8.49.0"
+ "@typescript-eslint/typescript-estree": "npm:8.49.0"
+ "@typescript-eslint/utils": "npm:8.49.0"
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: ">=4.8.4 <6.0.0"
+ checksum: 10c0/6559807ab5f0708455e22eeface154e5386506d22e4f0c5b1b2038c671ec9fb8b18f0319f6fc1f776f125902e3dc1fcfa99cc44ccf694ccac768c7034499c7e6
+ languageName: node
+ linkType: hard
+
"typescript@npm:^5.9.2":
version: 5.9.2
resolution: "typescript@npm:5.9.2"
@@ -9083,6 +9913,15 @@ __metadata:
languageName: node
linkType: hard
+"uri-js@npm:^4.2.2":
+ version: 4.4.1
+ resolution: "uri-js@npm:4.4.1"
+ dependencies:
+ punycode: "npm:^2.1.0"
+ checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c
+ languageName: node
+ linkType: hard
+
"url@npm:^0.11.3":
version: 0.11.4
resolution: "url@npm:0.11.4"
@@ -9574,6 +10413,13 @@ __metadata:
languageName: node
linkType: hard
+"word-wrap@npm:^1.2.5":
+ version: 1.2.5
+ resolution: "word-wrap@npm:1.2.5"
+ checksum: 10c0/e0e4a1ca27599c92a6ca4c32260e8a92e8a44f4ef6ef93f803f8ed823f486e0889fc0b93be4db59c8d51b3064951d25e43d434e95dc8c960cc3a63d65d00ba20
+ languageName: node
+ linkType: hard
+
"workerpool@npm:^9.3.2":
version: 9.3.2
resolution: "workerpool@npm:9.3.2"
@@ -9721,6 +10567,13 @@ __metadata:
languageName: node
linkType: hard
+"yocto-queue@npm:^0.1.0":
+ version: 0.1.0
+ resolution: "yocto-queue@npm:0.1.0"
+ checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f
+ languageName: node
+ linkType: hard
+
"yocto-queue@npm:^1.1.1":
version: 1.2.1
resolution: "yocto-queue@npm:1.2.1"