chore: replace eslint with biome (#14263)

This commit is contained in:
Kayla Washburn-Love
2024-08-15 13:26:29 -06:00
committed by GitHub
parent 7b09d98238
commit d15f16fa2e
592 changed files with 4160 additions and 6288 deletions

View File

@ -7,7 +7,7 @@ trim_trailing_whitespace = true
insert_final_newline = true insert_final_newline = true
indent_style = tab indent_style = tab
[*.{md,json,yaml,yml,tf,tfvars,nix}] [*.{md,yaml,yml,tf,tfvars,nix}]
indent_style = space indent_style = space
indent_size = 2 indent_size = 2

View File

@ -79,19 +79,13 @@ result
# by Prettier. # by Prettier.
helm/**/templates/*.yaml helm/**/templates/*.yaml
# Terraform state files used in tests, these are automatically generated.
# Example: provisioner/terraform/testdata/instance-id/instance-id.tfstate.json
**/testdata/**/*.tf*.json
# Testdata shouldn't be formatted. # Testdata shouldn't be formatted.
scripts/apitypings/testdata/**/*.ts testdata/
enterprise/tailnet/testdata/*.golden.html
tailnet/testdata/*.golden.html
# Generated files shouldn't be formatted.
site/e2e/provisionerGenerated.ts
# Ignore generated files
**/pnpm-lock.yaml **/pnpm-lock.yaml
# Ignore generated JSON (e.g. examples/examples.gen.json).
**/*.gen.json **/*.gen.json
# Everything in site/ is formatted by Biome. For the rest of the repo though, we
# need broader language support.
site/

View File

@ -2,19 +2,13 @@
# by Prettier. # by Prettier.
helm/**/templates/*.yaml helm/**/templates/*.yaml
# Terraform state files used in tests, these are automatically generated.
# Example: provisioner/terraform/testdata/instance-id/instance-id.tfstate.json
**/testdata/**/*.tf*.json
# Testdata shouldn't be formatted. # Testdata shouldn't be formatted.
scripts/apitypings/testdata/**/*.ts testdata/
enterprise/tailnet/testdata/*.golden.html
tailnet/testdata/*.golden.html
# Generated files shouldn't be formatted.
site/e2e/provisionerGenerated.ts
# Ignore generated files
**/pnpm-lock.yaml **/pnpm-lock.yaml
# Ignore generated JSON (e.g. examples/examples.gen.json).
**/*.gen.json **/*.gen.json
# Everything in site/ is formatted by Biome. For the rest of the repo though, we
# need broader language support.
site/

View File

@ -9,7 +9,7 @@
"zxh404.vscode-proto3", "zxh404.vscode-proto3",
"redhat.vscode-yaml", "redhat.vscode-yaml",
"streetsidesoftware.code-spell-checker", "streetsidesoftware.code-spell-checker",
"dbaeumer.vscode-eslint", "EditorConfig.EditorConfig",
"EditorConfig.EditorConfig" "biomejs.biome"
] ]
} }

14
.vscode/settings.json vendored
View File

@ -190,7 +190,6 @@
} }
] ]
}, },
"eslint.workingDirectories": ["./site"],
"search.exclude": { "search.exclude": {
"**.pb.go": true, "**.pb.go": true,
"**/*.gen.json": true, "**/*.gen.json": true,
@ -224,5 +223,16 @@
// with VS Code. // with VS Code.
"typescript.tsdk": "./site/node_modules/typescript/lib", "typescript.tsdk": "./site/node_modules/typescript/lib",
// Playwright tests in VSCode will open a browser to live "view" the test. // Playwright tests in VSCode will open a browser to live "view" the test.
"playwright.reuseBrowser": true "playwright.reuseBrowser": true,
"[javascript][javascriptreact][json][jsonc][typescript][typescriptreact]": {
"editor.defaultFormatter": "biomejs.biome"
// "editor.codeActionsOnSave": {
// "source.organizeImports.biome": "explicit"
// }
},
"[css][html][markdown][yaml]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
} }

View File

@ -391,7 +391,7 @@ BOLD := $(shell tput bold 2>/dev/null)
GREEN := $(shell tput setaf 2 2>/dev/null) GREEN := $(shell tput setaf 2 2>/dev/null)
RESET := $(shell tput sgr0 2>/dev/null) RESET := $(shell tput sgr0 2>/dev/null)
fmt: fmt/eslint fmt/prettier fmt/terraform fmt/shfmt fmt/go fmt: fmt/ts fmt/go fmt/terraform fmt/shfmt fmt/prettier
.PHONY: fmt .PHONY: fmt
fmt/go: fmt/go:
@ -401,15 +401,19 @@ fmt/go:
go run mvdan.cc/gofumpt@v0.4.0 -w -l . go run mvdan.cc/gofumpt@v0.4.0 -w -l .
.PHONY: fmt/go .PHONY: fmt/go
fmt/eslint: fmt/ts:
echo "$(GREEN)==>$(RESET) $(BOLD)fmt/eslint$(RESET)" echo "$(GREEN)==>$(RESET) $(BOLD)fmt/ts$(RESET)"
cd site cd site
pnpm run lint:fix # Avoid writing files in CI to reduce file write activity
.PHONY: fmt/eslint ifdef CI
pnpm run check --linter-enabled=false
else
pnpm run check:fix
endif
.PHONY: fmt/ts
fmt/prettier: fmt/prettier: .prettierignore
echo "$(GREEN)==>$(RESET) $(BOLD)fmt/prettier$(RESET)" echo "$(GREEN)==>$(RESET) $(BOLD)fmt/prettier$(RESET)"
cd site
# Avoid writing files in CI to reduce file write activity # Avoid writing files in CI to reduce file write activity
ifdef CI ifdef CI
pnpm run format:check pnpm run format:check
@ -442,7 +446,7 @@ lint/site-icons:
lint/ts: lint/ts:
cd site cd site
pnpm i && pnpm lint pnpm lint
.PHONY: lint/ts .PHONY: lint/ts
lint/go: lint/go:
@ -495,9 +499,6 @@ gen: \
.prettierignore.include \ .prettierignore.include \
.prettierignore \ .prettierignore \
provisioner/terraform/testdata/version \ provisioner/terraform/testdata/version \
site/.prettierrc.yaml \
site/.prettierignore \
site/.eslintignore \
site/e2e/provisionerGenerated.ts \ site/e2e/provisionerGenerated.ts \
site/src/theme/icons.json \ site/src/theme/icons.json \
examples/examples.gen.json \ examples/examples.gen.json \
@ -526,9 +527,6 @@ gen/mark-fresh:
coderd/apidoc/swagger.json \ coderd/apidoc/swagger.json \
.prettierignore.include \ .prettierignore.include \
.prettierignore \ .prettierignore \
site/.prettierrc.yaml \
site/.prettierignore \
site/.eslintignore \
site/e2e/provisionerGenerated.ts \ site/e2e/provisionerGenerated.ts \
site/src/theme/icons.json \ site/src/theme/icons.json \
examples/examples.gen.json \ examples/examples.gen.json \
@ -603,7 +601,6 @@ provisionerd/proto/provisionerd.pb.go: provisionerd/proto/provisionerd.proto
site/src/api/typesGenerated.ts: $(wildcard scripts/apitypings/*) $(shell find ./codersdk $(FIND_EXCLUSIONS) -type f -name '*.go') site/src/api/typesGenerated.ts: $(wildcard scripts/apitypings/*) $(shell find ./codersdk $(FIND_EXCLUSIONS) -type f -name '*.go')
go run ./scripts/apitypings/ > $@ go run ./scripts/apitypings/ > $@
./scripts/pnpm_install.sh ./scripts/pnpm_install.sh
pnpm exec prettier --write "$@"
site/e2e/provisionerGenerated.ts: provisionerd/proto/provisionerd.pb.go provisionersdk/proto/provisioner.pb.go site/e2e/provisionerGenerated.ts: provisionerd/proto/provisionerd.pb.go provisionersdk/proto/provisioner.pb.go
cd site cd site
@ -613,7 +610,7 @@ site/e2e/provisionerGenerated.ts: provisionerd/proto/provisionerd.pb.go provisio
site/src/theme/icons.json: $(wildcard scripts/gensite/*) $(wildcard site/static/icon/*) site/src/theme/icons.json: $(wildcard scripts/gensite/*) $(wildcard site/static/icon/*)
go run ./scripts/gensite/ -icons "$@" go run ./scripts/gensite/ -icons "$@"
./scripts/pnpm_install.sh ./scripts/pnpm_install.sh
pnpm exec prettier --write "$@" pnpm -C site/ exec biome format --write src/theme/icons.json
examples/examples.gen.json: scripts/examplegen/main.go examples/examples.go $(shell find ./examples/templates) examples/examples.gen.json: scripts/examplegen/main.go examples/examples.go $(shell find ./examples/templates)
go run ./scripts/examplegen/main.go > examples/examples.gen.json go run ./scripts/examplegen/main.go > examples/examples.gen.json
@ -702,23 +699,6 @@ scripts/ci-report/testdata/.gen-golden: $(wildcard scripts/ci-report/testdata/*)
go test ./scripts/ci-report -run=TestOutputMatchesGoldenFile -update go test ./scripts/ci-report -run=TestOutputMatchesGoldenFile -update
touch "$@" touch "$@"
# Generate a prettierrc for the site package that uses relative paths for
# overrides. This allows us to share the same prettier config between the
# site and the root of the repo.
site/.prettierrc.yaml: .prettierrc.yaml
. ./scripts/lib.sh
dependencies yq
echo "# Code generated by Makefile (../$<). DO NOT EDIT." > "$@"
echo "" >> "$@"
# Replace all listed override files with relative paths inside site/.
# - ./ -> ../
# - ./site -> ./
yq \
'.overrides[].files |= map(. | sub("^./"; "") | sub("^"; "../") | sub("../site/"; "./") | sub("../!"; "!../"))' \
"$<" >> "$@"
# Combine .gitignore with .prettierignore.include to generate .prettierignore. # Combine .gitignore with .prettierignore.include to generate .prettierignore.
.prettierignore: .gitignore .prettierignore.include .prettierignore: .gitignore .prettierignore.include
echo "# Code generated by Makefile ($^). DO NOT EDIT." > "$@" echo "# Code generated by Makefile ($^). DO NOT EDIT." > "$@"
@ -728,40 +708,6 @@ site/.prettierrc.yaml: .prettierrc.yaml
cat "$$f" >> "$@" cat "$$f" >> "$@"
done done
# Generate ignore files based on gitignore into the site directory. We turn all
# rules into relative paths for the `site/` directory (where applicable),
# following the pattern format defined by git:
# https://git-scm.com/docs/gitignore#_pattern_format
#
# This is done for compatibility reasons, see:
# https://github.com/prettier/prettier/issues/8048
# https://github.com/prettier/prettier/issues/8506
# https://github.com/prettier/prettier/issues/8679
site/.eslintignore site/.prettierignore: .prettierignore Makefile
rm -f "$@"
touch "$@"
# Skip generated by header, inherit `.prettierignore` header as-is.
while read -r rule; do
# Remove leading ! if present to simplify rule, added back at the end.
tmp="$${rule#!}"
ignore="$${rule%"$$tmp"}"
rule="$$tmp"
case "$$rule" in
# Comments or empty lines (include).
\#*|'') ;;
# Generic rules (include).
\*\**) ;;
# Site prefixed rules (include).
site/*) rule="$${rule#site/}";;
./site/*) rule="$${rule#./site/}";;
# Rules that are non-generic and don't start with site (rewrite).
/*) rule=.."$$rule";;
*/?*) rule=../"$$rule";;
*) ;;
esac
echo "$${ignore}$${rule}" >> "$@"
done < "$<"
test: test:
$(GIT_FLAGS) gotestsum --format standard-quiet -- -v -short -count=1 ./... $(GIT_FLAGS) gotestsum --format standard-quiet -- -v -short -count=1 ./...
.PHONY: test .PHONY: test

View File

@ -16,7 +16,6 @@
"@chakra-ui/react": "2.8.2", "@chakra-ui/react": "2.8.2",
"@emotion/react": "11.11.4", "@emotion/react": "11.11.4",
"@emotion/styled": "11.11.5", "@emotion/styled": "11.11.5",
"@types/lodash": "4.14.196",
"archiver": "6.0.2", "archiver": "6.0.2",
"framer-motion": "^10.17.6", "framer-motion": "^10.17.6",
"front-matter": "4.0.2", "front-matter": "4.0.2",
@ -36,7 +35,7 @@
"@types/react-dom": "18.3.0", "@types/react-dom": "18.3.0",
"eslint": "8.56.0", "eslint": "8.56.0",
"eslint-config-next": "14.0.1", "eslint-config-next": "14.0.1",
"prettier": "3.1.0", "prettier": "3.3.3",
"typescript": "5.3.2" "typescript": "5.3.2"
}, },
"engines": { "engines": {

View File

@ -10,22 +10,19 @@ importers:
dependencies: dependencies:
'@chakra-ui/react': '@chakra-ui/react':
specifier: 2.8.2 specifier: 2.8.2
version: 2.8.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(@types/react@18.3.3)(framer-motion@10.17.6)(react-dom@18.3.1)(react@18.3.1) version: 2.8.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(framer-motion@10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@emotion/react': '@emotion/react':
specifier: 11.11.4 specifier: 11.11.4
version: 11.11.4(@types/react@18.3.3)(react@18.3.1) version: 11.11.4(@types/react@18.3.3)(react@18.3.1)
'@emotion/styled': '@emotion/styled':
specifier: 11.11.5 specifier: 11.11.5
version: 11.11.5(@emotion/react@11.11.4)(@types/react@18.3.3)(react@18.3.1) version: 11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1)
'@types/lodash':
specifier: 4.14.196
version: 4.14.196
archiver: archiver:
specifier: 6.0.2 specifier: 6.0.2
version: 6.0.2 version: 6.0.2
framer-motion: framer-motion:
specifier: ^10.17.6 specifier: ^10.17.6
version: 10.17.6(react-dom@18.3.1)(react@18.3.1) version: 10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
front-matter: front-matter:
specifier: 4.0.2 specifier: 4.0.2
version: 4.0.2 version: 4.0.2
@ -34,7 +31,7 @@ importers:
version: 4.17.21 version: 4.17.21
next: next:
specifier: 14.2.4 specifier: 14.2.4
version: 14.2.4(react-dom@18.3.1)(react@18.3.1) version: 14.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: react:
specifier: 18.3.1 specifier: 18.3.1
version: 18.3.1 version: 18.3.1
@ -54,6 +51,9 @@ importers:
specifier: 4.0.0 specifier: 4.0.0
version: 4.0.0 version: 4.0.0
devDependencies: devDependencies:
'@types/lodash':
specifier: 4.14.196
version: 4.14.196
'@types/node': '@types/node':
specifier: 18.19.0 specifier: 18.19.0
version: 18.19.0 version: 18.19.0
@ -70,8 +70,8 @@ importers:
specifier: 14.0.1 specifier: 14.0.1
version: 14.0.1(eslint@8.56.0)(typescript@5.3.2) version: 14.0.1(eslint@8.56.0)(typescript@5.3.2)
prettier: prettier:
specifier: 3.1.0 specifier: 3.3.3
version: 3.1.0 version: 3.3.3
typescript: typescript:
specifier: 5.3.2 specifier: 5.3.2
version: 5.3.2 version: 5.3.2
@ -2100,8 +2100,8 @@ packages:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'} engines: {node: '>= 0.8.0'}
prettier@3.1.0: prettier@3.3.3:
resolution: {integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==} resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==}
engines: {node: '>=14'} engines: {node: '>=14'}
hasBin: true hasBin: true
@ -2634,69 +2634,69 @@ snapshots:
'@babel/helper-validator-identifier': 7.22.20 '@babel/helper-validator-identifier': 7.22.20
to-fast-properties: 2.0.0 to-fast-properties: 2.0.0
'@chakra-ui/accordion@2.3.1(@chakra-ui/system@2.6.2)(framer-motion@10.17.6)(react@18.3.1)': '@chakra-ui/accordion@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(framer-motion@10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/descendant': 3.1.0(react@18.3.1) '@chakra-ui/descendant': 3.1.0(react@18.3.1)
'@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1)
'@chakra-ui/react-use-controllable-state': 2.1.0(react@18.3.1) '@chakra-ui/react-use-controllable-state': 2.1.0(react@18.3.1)
'@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
'@chakra-ui/transition': 2.1.0(framer-motion@10.17.6)(react@18.3.1) '@chakra-ui/transition': 2.1.0(framer-motion@10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
framer-motion: 10.17.6(react-dom@18.3.1)(react@18.3.1) framer-motion: 10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/alert@2.2.2(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/alert@2.2.2(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/anatomy@2.2.2': {} '@chakra-ui/anatomy@2.2.2': {}
'@chakra-ui/avatar@2.3.0(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/avatar@2.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/image': 2.1.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/image': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/react-children-utils': 2.0.6(react@18.3.1) '@chakra-ui/react-children-utils': 2.0.6(react@18.3.1)
'@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/breadcrumb@2.2.0(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/breadcrumb@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/react-children-utils': 2.0.6(react@18.3.1) '@chakra-ui/react-children-utils': 2.0.6(react@18.3.1)
'@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/breakpoint-utils@2.0.8': '@chakra-ui/breakpoint-utils@2.0.8':
dependencies: dependencies:
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/button@2.1.0(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/button@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1)
'@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/card@2.2.0(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/card@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/checkbox@2.3.2(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/checkbox@2.3.2(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1)
'@chakra-ui/react-types': 2.0.7(react@18.3.1) '@chakra-ui/react-types': 2.0.7(react@18.3.1)
'@chakra-ui/react-use-callback-ref': 2.1.0(react@18.3.1) '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.3.1)
@ -2705,8 +2705,8 @@ snapshots:
'@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1) '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1)
'@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1) '@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
'@chakra-ui/visually-hidden': 2.2.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/visually-hidden': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@zag-js/focus-visible': 0.16.0 '@zag-js/focus-visible': 0.16.0
react: 18.3.1 react: 18.3.1
@ -2716,10 +2716,10 @@ snapshots:
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
react: 18.3.1 react: 18.3.1
'@chakra-ui/close-button@2.1.1(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/close-button@2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/color-mode@2.2.0(react@18.3.1)': '@chakra-ui/color-mode@2.2.0(react@18.3.1)':
@ -2727,9 +2727,9 @@ snapshots:
'@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1) '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/control-box@2.1.0(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/control-box@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/counter@2.1.0(react@18.3.1)': '@chakra-ui/counter@2.1.0(react@18.3.1)':
@ -2739,7 +2739,7 @@ snapshots:
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
react: 18.3.1 react: 18.3.1
'@chakra-ui/css-reset@2.3.0(@emotion/react@11.11.4)(react@18.3.1)': '@chakra-ui/css-reset@2.3.0(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@emotion/react': 11.11.4(@types/react@18.3.3)(react@18.3.1) '@emotion/react': 11.11.4(@types/react@18.3.3)(react@18.3.1)
react: 18.3.1 react: 18.3.1
@ -2752,7 +2752,7 @@ snapshots:
'@chakra-ui/dom-utils@2.1.0': {} '@chakra-ui/dom-utils@2.1.0': {}
'@chakra-ui/editable@3.1.0(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/editable@3.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1)
'@chakra-ui/react-types': 2.0.7(react@18.3.1) '@chakra-ui/react-types': 2.0.7(react@18.3.1)
@ -2763,7 +2763,7 @@ snapshots:
'@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1) '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1)
'@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1) '@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/event-utils@2.0.8': {} '@chakra-ui/event-utils@2.0.8': {}
@ -2776,14 +2776,14 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- '@types/react' - '@types/react'
'@chakra-ui/form-control@2.2.0(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/form-control@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1)
'@chakra-ui/react-types': 2.0.7(react@18.3.1) '@chakra-ui/react-types': 2.0.7(react@18.3.1)
'@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/hooks@2.2.1(react@18.3.1)': '@chakra-ui/hooks@2.2.1(react@18.3.1)':
@ -2794,38 +2794,38 @@ snapshots:
copy-to-clipboard: 3.3.3 copy-to-clipboard: 3.3.3
react: 18.3.1 react: 18.3.1
'@chakra-ui/icon@3.2.0(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/icon@3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/image@2.1.0(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/image@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1) '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/input@2.1.2(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/input@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/object-utils': 2.1.0 '@chakra-ui/object-utils': 2.1.0
'@chakra-ui/react-children-utils': 2.0.6(react@18.3.1) '@chakra-ui/react-children-utils': 2.0.6(react@18.3.1)
'@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/layout@2.3.1(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/layout@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/breakpoint-utils': 2.0.8 '@chakra-ui/breakpoint-utils': 2.0.8
'@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/object-utils': 2.1.0 '@chakra-ui/object-utils': 2.1.0
'@chakra-ui/react-children-utils': 2.0.6(react@18.3.1) '@chakra-ui/react-children-utils': 2.0.6(react@18.3.1)
'@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/lazy-utils@2.0.5': {} '@chakra-ui/lazy-utils@2.0.5': {}
@ -2834,15 +2834,15 @@ snapshots:
dependencies: dependencies:
react: 18.3.1 react: 18.3.1
'@chakra-ui/media-query@3.3.0(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/media-query@3.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/breakpoint-utils': 2.0.8 '@chakra-ui/breakpoint-utils': 2.0.8
'@chakra-ui/react-env': 3.1.0(react@18.3.1) '@chakra-ui/react-env': 3.1.0(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/menu@2.2.1(@chakra-ui/system@2.6.2)(framer-motion@10.17.6)(react@18.3.1)': '@chakra-ui/menu@2.2.1(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(framer-motion@10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/clickable': 2.1.0(react@18.3.1) '@chakra-ui/clickable': 2.1.0(react@18.3.1)
'@chakra-ui/descendant': 3.1.0(react@18.3.1) '@chakra-ui/descendant': 3.1.0(react@18.3.1)
@ -2858,35 +2858,35 @@ snapshots:
'@chakra-ui/react-use-outside-click': 2.2.0(react@18.3.1) '@chakra-ui/react-use-outside-click': 2.2.0(react@18.3.1)
'@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1) '@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
'@chakra-ui/transition': 2.1.0(framer-motion@10.17.6)(react@18.3.1) '@chakra-ui/transition': 2.1.0(framer-motion@10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
framer-motion: 10.17.6(react-dom@18.3.1)(react@18.3.1) framer-motion: 10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/modal@2.3.1(@chakra-ui/system@2.6.2)(@types/react@18.3.3)(framer-motion@10.17.6)(react-dom@18.3.1)(react@18.3.1)': '@chakra-ui/modal@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(@types/react@18.3.3)(framer-motion@10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/focus-lock': 2.1.0(@types/react@18.3.3)(react@18.3.1) '@chakra-ui/focus-lock': 2.1.0(@types/react@18.3.3)(react@18.3.1)
'@chakra-ui/portal': 2.1.0(react-dom@18.3.1)(react@18.3.1) '@chakra-ui/portal': 2.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1)
'@chakra-ui/react-types': 2.0.7(react@18.3.1) '@chakra-ui/react-types': 2.0.7(react@18.3.1)
'@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
'@chakra-ui/transition': 2.1.0(framer-motion@10.17.6)(react@18.3.1) '@chakra-ui/transition': 2.1.0(framer-motion@10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
aria-hidden: 1.2.3 aria-hidden: 1.2.3
framer-motion: 10.17.6(react-dom@18.3.1)(react@18.3.1) framer-motion: 10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
react-dom: 18.3.1(react@18.3.1) react-dom: 18.3.1(react@18.3.1)
react-remove-scroll: 2.5.6(@types/react@18.3.3)(react@18.3.1) react-remove-scroll: 2.5.6(@types/react@18.3.3)(react@18.3.1)
transitivePeerDependencies: transitivePeerDependencies:
- '@types/react' - '@types/react'
'@chakra-ui/number-input@2.1.2(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/number-input@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/counter': 2.1.0(react@18.3.1) '@chakra-ui/counter': 2.1.0(react@18.3.1)
'@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1)
'@chakra-ui/react-types': 2.0.7(react@18.3.1) '@chakra-ui/react-types': 2.0.7(react@18.3.1)
'@chakra-ui/react-use-callback-ref': 2.1.0(react@18.3.1) '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.3.1)
@ -2896,14 +2896,14 @@ snapshots:
'@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1) '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1)
'@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1) '@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/number-utils@2.0.7': {} '@chakra-ui/number-utils@2.0.7': {}
'@chakra-ui/object-utils@2.1.0': {} '@chakra-ui/object-utils@2.1.0': {}
'@chakra-ui/pin-input@2.1.0(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/pin-input@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/descendant': 3.1.0(react@18.3.1) '@chakra-ui/descendant': 3.1.0(react@18.3.1)
'@chakra-ui/react-children-utils': 2.0.6(react@18.3.1) '@chakra-ui/react-children-utils': 2.0.6(react@18.3.1)
@ -2911,12 +2911,12 @@ snapshots:
'@chakra-ui/react-use-controllable-state': 2.1.0(react@18.3.1) '@chakra-ui/react-use-controllable-state': 2.1.0(react@18.3.1)
'@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/popover@2.2.1(@chakra-ui/system@2.6.2)(framer-motion@10.17.6)(react@18.3.1)': '@chakra-ui/popover@2.2.1(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(framer-motion@10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/lazy-utils': 2.0.5 '@chakra-ui/lazy-utils': 2.0.5
'@chakra-ui/popper': 3.1.0(react@18.3.1) '@chakra-ui/popper': 3.1.0(react@18.3.1)
'@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1)
@ -2927,8 +2927,8 @@ snapshots:
'@chakra-ui/react-use-focus-on-pointer-down': 2.1.0(react@18.3.1) '@chakra-ui/react-use-focus-on-pointer-down': 2.1.0(react@18.3.1)
'@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
framer-motion: 10.17.6(react-dom@18.3.1)(react@18.3.1) framer-motion: 10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/popper@3.1.0(react@18.3.1)': '@chakra-ui/popper@3.1.0(react@18.3.1)':
@ -2938,39 +2938,39 @@ snapshots:
'@popperjs/core': 2.11.8 '@popperjs/core': 2.11.8
react: 18.3.1 react: 18.3.1
'@chakra-ui/portal@2.1.0(react-dom@18.3.1)(react@18.3.1)': '@chakra-ui/portal@2.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1)
'@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1) '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1)
react: 18.3.1 react: 18.3.1
react-dom: 18.3.1(react@18.3.1) react-dom: 18.3.1(react@18.3.1)
'@chakra-ui/progress@2.2.0(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/progress@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1)
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/provider@2.4.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react-dom@18.3.1)(react@18.3.1)': '@chakra-ui/provider@2.4.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/css-reset': 2.3.0(@emotion/react@11.11.4)(react@18.3.1) '@chakra-ui/css-reset': 2.3.0(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
'@chakra-ui/portal': 2.1.0(react-dom@18.3.1)(react@18.3.1) '@chakra-ui/portal': 2.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@chakra-ui/react-env': 3.1.0(react@18.3.1) '@chakra-ui/react-env': 3.1.0(react@18.3.1)
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
'@chakra-ui/utils': 2.0.15 '@chakra-ui/utils': 2.0.15
'@emotion/react': 11.11.4(@types/react@18.3.3)(react@18.3.1) '@emotion/react': 11.11.4(@types/react@18.3.3)(react@18.3.1)
'@emotion/styled': 11.11.5(@emotion/react@11.11.4)(@types/react@18.3.3)(react@18.3.1) '@emotion/styled': 11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1)
react: 18.3.1 react: 18.3.1
react-dom: 18.3.1(react@18.3.1) react-dom: 18.3.1(react@18.3.1)
'@chakra-ui/radio@2.1.2(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/radio@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1)
'@chakra-ui/react-types': 2.0.7(react@18.3.1) '@chakra-ui/react-types': 2.0.7(react@18.3.1)
'@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
'@zag-js/focus-visible': 0.16.0 '@zag-js/focus-visible': 0.16.0
react: 18.3.1 react: 18.3.1
@ -3081,92 +3081,92 @@ snapshots:
'@chakra-ui/utils': 2.0.15 '@chakra-ui/utils': 2.0.15
react: 18.3.1 react: 18.3.1
'@chakra-ui/react@2.8.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(@types/react@18.3.3)(framer-motion@10.17.6)(react-dom@18.3.1)(react@18.3.1)': '@chakra-ui/react@2.8.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(framer-motion@10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/accordion': 2.3.1(@chakra-ui/system@2.6.2)(framer-motion@10.17.6)(react@18.3.1) '@chakra-ui/accordion': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(framer-motion@10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/alert': 2.2.2(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/alert': 2.2.2(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/avatar': 2.3.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/avatar': 2.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/breadcrumb': 2.2.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/breadcrumb': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/button': 2.1.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/button': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/card': 2.2.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/card': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/checkbox': 2.3.2(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/checkbox': 2.3.2(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/control-box': 2.1.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/control-box': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/counter': 2.1.0(react@18.3.1) '@chakra-ui/counter': 2.1.0(react@18.3.1)
'@chakra-ui/css-reset': 2.3.0(@emotion/react@11.11.4)(react@18.3.1) '@chakra-ui/css-reset': 2.3.0(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
'@chakra-ui/editable': 3.1.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/editable': 3.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/focus-lock': 2.1.0(@types/react@18.3.3)(react@18.3.1) '@chakra-ui/focus-lock': 2.1.0(@types/react@18.3.3)(react@18.3.1)
'@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/hooks': 2.2.1(react@18.3.1) '@chakra-ui/hooks': 2.2.1(react@18.3.1)
'@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/image': 2.1.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/image': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/input': 2.1.2(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/input': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/layout': 2.3.1(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/layout': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/live-region': 2.1.0(react@18.3.1) '@chakra-ui/live-region': 2.1.0(react@18.3.1)
'@chakra-ui/media-query': 3.3.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/media-query': 3.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/menu': 2.2.1(@chakra-ui/system@2.6.2)(framer-motion@10.17.6)(react@18.3.1) '@chakra-ui/menu': 2.2.1(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(framer-motion@10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/modal': 2.3.1(@chakra-ui/system@2.6.2)(@types/react@18.3.3)(framer-motion@10.17.6)(react-dom@18.3.1)(react@18.3.1) '@chakra-ui/modal': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(@types/react@18.3.3)(framer-motion@10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@chakra-ui/number-input': 2.1.2(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/number-input': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/pin-input': 2.1.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/pin-input': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/popover': 2.2.1(@chakra-ui/system@2.6.2)(framer-motion@10.17.6)(react@18.3.1) '@chakra-ui/popover': 2.2.1(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(framer-motion@10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/popper': 3.1.0(react@18.3.1) '@chakra-ui/popper': 3.1.0(react@18.3.1)
'@chakra-ui/portal': 2.1.0(react-dom@18.3.1)(react@18.3.1) '@chakra-ui/portal': 2.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@chakra-ui/progress': 2.2.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/progress': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/provider': 2.4.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react-dom@18.3.1)(react@18.3.1) '@chakra-ui/provider': 2.4.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@chakra-ui/radio': 2.1.2(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/radio': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/react-env': 3.1.0(react@18.3.1) '@chakra-ui/react-env': 3.1.0(react@18.3.1)
'@chakra-ui/select': 2.1.2(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/select': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/skeleton': 2.1.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/skeleton': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/skip-nav': 2.1.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/skip-nav': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/slider': 2.1.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/slider': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/stat': 2.1.1(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/stat': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/stepper': 2.3.1(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/stepper': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/styled-system': 2.9.2 '@chakra-ui/styled-system': 2.9.2
'@chakra-ui/switch': 2.1.2(@chakra-ui/system@2.6.2)(framer-motion@10.17.6)(react@18.3.1) '@chakra-ui/switch': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(framer-motion@10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
'@chakra-ui/table': 2.1.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/table': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/tabs': 3.0.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/tabs': 3.0.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/tag': 3.1.1(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/tag': 3.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/textarea': 2.1.2(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/textarea': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/theme': 3.3.1(@chakra-ui/styled-system@2.9.2) '@chakra-ui/theme': 3.3.1(@chakra-ui/styled-system@2.9.2)
'@chakra-ui/theme-utils': 2.0.21 '@chakra-ui/theme-utils': 2.0.21
'@chakra-ui/toast': 7.0.2(@chakra-ui/system@2.6.2)(framer-motion@10.17.6)(react-dom@18.3.1)(react@18.3.1) '@chakra-ui/toast': 7.0.2(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(framer-motion@10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@chakra-ui/tooltip': 2.3.1(@chakra-ui/system@2.6.2)(framer-motion@10.17.6)(react-dom@18.3.1)(react@18.3.1) '@chakra-ui/tooltip': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(framer-motion@10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@chakra-ui/transition': 2.1.0(framer-motion@10.17.6)(react@18.3.1) '@chakra-ui/transition': 2.1.0(framer-motion@10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/utils': 2.0.15 '@chakra-ui/utils': 2.0.15
'@chakra-ui/visually-hidden': 2.2.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/visually-hidden': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@emotion/react': 11.11.4(@types/react@18.3.3)(react@18.3.1) '@emotion/react': 11.11.4(@types/react@18.3.3)(react@18.3.1)
'@emotion/styled': 11.11.5(@emotion/react@11.11.4)(@types/react@18.3.3)(react@18.3.1) '@emotion/styled': 11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1)
framer-motion: 10.17.6(react-dom@18.3.1)(react@18.3.1) framer-motion: 10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
react-dom: 18.3.1(react@18.3.1) react-dom: 18.3.1(react@18.3.1)
transitivePeerDependencies: transitivePeerDependencies:
- '@types/react' - '@types/react'
'@chakra-ui/select@2.1.2(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/select@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/shared-utils@2.0.5': {} '@chakra-ui/shared-utils@2.0.5': {}
'@chakra-ui/skeleton@2.1.0(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/skeleton@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/media-query': 3.3.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/media-query': 3.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/react-use-previous': 2.1.0(react@18.3.1) '@chakra-ui/react-use-previous': 2.1.0(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/skip-nav@2.1.0(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/skip-nav@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/slider@2.1.0(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/slider@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/number-utils': 2.0.7 '@chakra-ui/number-utils': 2.0.7
'@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1)
@ -3178,29 +3178,29 @@ snapshots:
'@chakra-ui/react-use-pan-event': 2.1.0(react@18.3.1) '@chakra-ui/react-use-pan-event': 2.1.0(react@18.3.1)
'@chakra-ui/react-use-size': 2.1.0(react@18.3.1) '@chakra-ui/react-use-size': 2.1.0(react@18.3.1)
'@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1) '@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1)
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/spinner@2.1.0(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/spinner@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/stat@2.1.1(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/stat@2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/stepper@2.3.1(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/stepper@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/styled-system@2.9.2': '@chakra-ui/styled-system@2.9.2':
@ -3209,15 +3209,15 @@ snapshots:
csstype: 3.1.2 csstype: 3.1.2
lodash.mergewith: 4.6.2 lodash.mergewith: 4.6.2
'@chakra-ui/switch@2.1.2(@chakra-ui/system@2.6.2)(framer-motion@10.17.6)(react@18.3.1)': '@chakra-ui/switch@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(framer-motion@10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/checkbox': 2.3.2(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/checkbox': 2.3.2(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
framer-motion: 10.17.6(react-dom@18.3.1)(react@18.3.1) framer-motion: 10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/system@2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1)': '@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/color-mode': 2.2.0(react@18.3.1) '@chakra-ui/color-mode': 2.2.0(react@18.3.1)
'@chakra-ui/object-utils': 2.1.0 '@chakra-ui/object-utils': 2.1.0
@ -3226,18 +3226,18 @@ snapshots:
'@chakra-ui/theme-utils': 2.0.21 '@chakra-ui/theme-utils': 2.0.21
'@chakra-ui/utils': 2.0.15 '@chakra-ui/utils': 2.0.15
'@emotion/react': 11.11.4(@types/react@18.3.3)(react@18.3.1) '@emotion/react': 11.11.4(@types/react@18.3.3)(react@18.3.1)
'@emotion/styled': 11.11.5(@emotion/react@11.11.4)(@types/react@18.3.3)(react@18.3.1) '@emotion/styled': 11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1)
react: 18.3.1 react: 18.3.1
react-fast-compare: 3.2.2 react-fast-compare: 3.2.2
'@chakra-ui/table@2.1.0(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/table@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/tabs@3.0.0(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/tabs@3.0.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/clickable': 2.1.0(react@18.3.1) '@chakra-ui/clickable': 2.1.0(react@18.3.1)
'@chakra-ui/descendant': 3.1.0(react@18.3.1) '@chakra-ui/descendant': 3.1.0(react@18.3.1)
@ -3248,21 +3248,21 @@ snapshots:
'@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1)
'@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1) '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/tag@3.1.1(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/tag@3.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1)
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/textarea@2.1.2(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/textarea@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/theme-tools@2.1.2(@chakra-ui/styled-system@2.9.2)': '@chakra-ui/theme-tools@2.1.2(@chakra-ui/styled-system@2.9.2)':
@ -3286,41 +3286,41 @@ snapshots:
'@chakra-ui/styled-system': 2.9.2 '@chakra-ui/styled-system': 2.9.2
'@chakra-ui/theme-tools': 2.1.2(@chakra-ui/styled-system@2.9.2) '@chakra-ui/theme-tools': 2.1.2(@chakra-ui/styled-system@2.9.2)
'@chakra-ui/toast@7.0.2(@chakra-ui/system@2.6.2)(framer-motion@10.17.6)(react-dom@18.3.1)(react@18.3.1)': '@chakra-ui/toast@7.0.2(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(framer-motion@10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/alert': 2.2.2(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/alert': 2.2.2(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2)(react@18.3.1) '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/portal': 2.1.0(react-dom@18.3.1)(react@18.3.1) '@chakra-ui/portal': 2.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1)
'@chakra-ui/react-use-timeout': 2.1.0(react@18.3.1) '@chakra-ui/react-use-timeout': 2.1.0(react@18.3.1)
'@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1) '@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/styled-system': 2.9.2 '@chakra-ui/styled-system': 2.9.2
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
'@chakra-ui/theme': 3.3.1(@chakra-ui/styled-system@2.9.2) '@chakra-ui/theme': 3.3.1(@chakra-ui/styled-system@2.9.2)
framer-motion: 10.17.6(react-dom@18.3.1)(react@18.3.1) framer-motion: 10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
react-dom: 18.3.1(react@18.3.1) react-dom: 18.3.1(react@18.3.1)
'@chakra-ui/tooltip@2.3.1(@chakra-ui/system@2.6.2)(framer-motion@10.17.6)(react-dom@18.3.1)(react@18.3.1)': '@chakra-ui/tooltip@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(framer-motion@10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/dom-utils': 2.1.0 '@chakra-ui/dom-utils': 2.1.0
'@chakra-ui/popper': 3.1.0(react@18.3.1) '@chakra-ui/popper': 3.1.0(react@18.3.1)
'@chakra-ui/portal': 2.1.0(react-dom@18.3.1)(react@18.3.1) '@chakra-ui/portal': 2.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@chakra-ui/react-types': 2.0.7(react@18.3.1) '@chakra-ui/react-types': 2.0.7(react@18.3.1)
'@chakra-ui/react-use-disclosure': 2.1.0(react@18.3.1) '@chakra-ui/react-use-disclosure': 2.1.0(react@18.3.1)
'@chakra-ui/react-use-event-listener': 2.1.0(react@18.3.1) '@chakra-ui/react-use-event-listener': 2.1.0(react@18.3.1)
'@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
framer-motion: 10.17.6(react-dom@18.3.1)(react@18.3.1) framer-motion: 10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
react-dom: 18.3.1(react@18.3.1) react-dom: 18.3.1(react@18.3.1)
'@chakra-ui/transition@2.1.0(framer-motion@10.17.6)(react@18.3.1)': '@chakra-ui/transition@2.1.0(framer-motion@10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/shared-utils': 2.0.5
framer-motion: 10.17.6(react-dom@18.3.1)(react@18.3.1) framer-motion: 10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/utils@2.0.15': '@chakra-ui/utils@2.0.15':
@ -3330,9 +3330,9 @@ snapshots:
framesync: 6.1.2 framesync: 6.1.2
lodash.mergewith: 4.6.2 lodash.mergewith: 4.6.2
'@chakra-ui/visually-hidden@2.2.0(@chakra-ui/system@2.6.2)(react@18.3.1)': '@chakra-ui/visually-hidden@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@chakra-ui/system': 2.6.2(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@emotion/babel-plugin@11.11.0': '@emotion/babel-plugin@11.11.0':
@ -3382,9 +3382,10 @@ snapshots:
'@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.1) '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.1)
'@emotion/utils': 1.2.1 '@emotion/utils': 1.2.1
'@emotion/weak-memoize': 0.3.1 '@emotion/weak-memoize': 0.3.1
'@types/react': 18.3.3
hoist-non-react-statics: 3.3.2 hoist-non-react-statics: 3.3.2
react: 18.3.1 react: 18.3.1
optionalDependencies:
'@types/react': 18.3.3
'@emotion/serialize@1.1.4': '@emotion/serialize@1.1.4':
dependencies: dependencies:
@ -3396,7 +3397,7 @@ snapshots:
'@emotion/sheet@1.2.2': {} '@emotion/sheet@1.2.2': {}
'@emotion/styled@11.11.5(@emotion/react@11.11.4)(@types/react@18.3.3)(react@18.3.1)': '@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1)':
dependencies: dependencies:
'@babel/runtime': 7.22.6 '@babel/runtime': 7.22.6
'@emotion/babel-plugin': 11.11.0 '@emotion/babel-plugin': 11.11.0
@ -3405,8 +3406,9 @@ snapshots:
'@emotion/serialize': 1.1.4 '@emotion/serialize': 1.1.4
'@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.1) '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.1)
'@emotion/utils': 1.2.1 '@emotion/utils': 1.2.1
'@types/react': 18.3.3
react: 18.3.1 react: 18.3.1
optionalDependencies:
'@types/react': 18.3.3
'@emotion/unitless@0.8.1': {} '@emotion/unitless@0.8.1': {}
@ -3574,6 +3576,7 @@ snapshots:
'@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.2) '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.2)
debug: 4.3.4 debug: 4.3.4
eslint: 8.56.0 eslint: 8.56.0
optionalDependencies:
typescript: 5.3.2 typescript: 5.3.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -3594,6 +3597,7 @@ snapshots:
is-glob: 4.0.3 is-glob: 4.0.3
semver: 7.5.4 semver: 7.5.4
tsutils: 3.21.0(typescript@5.3.2) tsutils: 3.21.0(typescript@5.3.2)
optionalDependencies:
typescript: 5.3.2 typescript: 5.3.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -4040,11 +4044,12 @@ snapshots:
'@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@5.3.2) '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@5.3.2)
eslint: 8.56.0 eslint: 8.56.0
eslint-import-resolver-node: 0.3.7 eslint-import-resolver-node: 0.3.7
eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.28.1)(eslint@8.56.0) eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.56.0)(typescript@5.3.2))(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.28.1(eslint@8.56.0))(eslint@8.56.0)
eslint-plugin-import: 2.28.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.56.0) eslint-plugin-import: 2.28.1(@typescript-eslint/parser@5.62.0(eslint@8.56.0)(typescript@5.3.2))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.56.0)(typescript@5.3.2))(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.28.1(eslint@8.56.0))(eslint@8.56.0))(eslint@8.56.0)
eslint-plugin-jsx-a11y: 6.7.1(eslint@8.56.0) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.56.0)
eslint-plugin-react: 7.33.2(eslint@8.56.0) eslint-plugin-react: 7.33.2(eslint@8.56.0)
eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0)
optionalDependencies:
typescript: 5.3.2 typescript: 5.3.2
transitivePeerDependencies: transitivePeerDependencies:
- eslint-import-resolver-webpack - eslint-import-resolver-webpack
@ -4058,13 +4063,13 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.28.1)(eslint@8.56.0): eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.56.0)(typescript@5.3.2))(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.28.1(eslint@8.56.0))(eslint@8.56.0):
dependencies: dependencies:
debug: 4.3.4 debug: 4.3.4
enhanced-resolve: 5.15.0 enhanced-resolve: 5.15.0
eslint: 8.56.0 eslint: 8.56.0
eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.56.0) eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0(eslint@8.56.0)(typescript@5.3.2))(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.56.0)(typescript@5.3.2))(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.28.1(eslint@8.56.0))(eslint@8.56.0))(eslint@8.56.0)
eslint-plugin-import: 2.28.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.56.0) eslint-plugin-import: 2.28.1(@typescript-eslint/parser@5.62.0(eslint@8.56.0)(typescript@5.3.2))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.56.0)(typescript@5.3.2))(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.28.1(eslint@8.56.0))(eslint@8.56.0))(eslint@8.56.0)
get-tsconfig: 4.6.2 get-tsconfig: 4.6.2
globby: 13.2.2 globby: 13.2.2
is-core-module: 2.13.0 is-core-module: 2.13.0
@ -4076,19 +4081,19 @@ snapshots:
- eslint-import-resolver-webpack - eslint-import-resolver-webpack
- supports-color - supports-color
eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.56.0): eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0(eslint@8.56.0)(typescript@5.3.2))(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.56.0)(typescript@5.3.2))(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.28.1(eslint@8.56.0))(eslint@8.56.0))(eslint@8.56.0):
dependencies: dependencies:
'@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@5.3.2)
debug: 3.2.7 debug: 3.2.7
optionalDependencies:
'@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@5.3.2)
eslint: 8.56.0 eslint: 8.56.0
eslint-import-resolver-node: 0.3.7 eslint-import-resolver-node: 0.3.7
eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.28.1)(eslint@8.56.0) eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.56.0)(typescript@5.3.2))(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.28.1(eslint@8.56.0))(eslint@8.56.0)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-plugin-import@2.28.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.56.0): eslint-plugin-import@2.28.1(@typescript-eslint/parser@5.62.0(eslint@8.56.0)(typescript@5.3.2))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.56.0)(typescript@5.3.2))(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.28.1(eslint@8.56.0))(eslint@8.56.0))(eslint@8.56.0):
dependencies: dependencies:
'@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@5.3.2)
array-includes: 3.1.6 array-includes: 3.1.6
array.prototype.findlastindex: 1.2.3 array.prototype.findlastindex: 1.2.3
array.prototype.flat: 1.3.1 array.prototype.flat: 1.3.1
@ -4097,7 +4102,7 @@ snapshots:
doctrine: 2.1.0 doctrine: 2.1.0
eslint: 8.56.0 eslint: 8.56.0
eslint-import-resolver-node: 0.3.7 eslint-import-resolver-node: 0.3.7
eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.56.0) eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0(eslint@8.56.0)(typescript@5.3.2))(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.56.0)(typescript@5.3.2))(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.28.1(eslint@8.56.0))(eslint@8.56.0))(eslint@8.56.0)
has: 1.0.3 has: 1.0.3
is-core-module: 2.13.0 is-core-module: 2.13.0
is-glob: 4.0.3 is-glob: 4.0.3
@ -4107,6 +4112,8 @@ snapshots:
object.values: 1.1.6 object.values: 1.1.6
semver: 6.3.1 semver: 6.3.1
tsconfig-paths: 3.14.2 tsconfig-paths: 3.14.2
optionalDependencies:
'@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@5.3.2)
transitivePeerDependencies: transitivePeerDependencies:
- eslint-import-resolver-typescript - eslint-import-resolver-typescript
- eslint-import-resolver-webpack - eslint-import-resolver-webpack
@ -4305,13 +4312,13 @@ snapshots:
dependencies: dependencies:
is-callable: 1.2.7 is-callable: 1.2.7
framer-motion@10.17.6(react-dom@18.3.1)(react@18.3.1): framer-motion@10.17.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies: dependencies:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
tslib: 2.6.2 tslib: 2.6.2
optionalDependencies: optionalDependencies:
'@emotion/is-prop-valid': 0.8.8 '@emotion/is-prop-valid': 0.8.8
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
framesync@6.1.2: framesync@6.1.2:
dependencies: dependencies:
@ -5137,7 +5144,7 @@ snapshots:
natural-compare@1.4.0: {} natural-compare@1.4.0: {}
next@14.2.4(react-dom@18.3.1)(react@18.3.1): next@14.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies: dependencies:
'@next/env': 14.2.4 '@next/env': 14.2.4
'@swc/helpers': 0.5.5 '@swc/helpers': 0.5.5
@ -5301,7 +5308,7 @@ snapshots:
prelude-ls@1.2.1: {} prelude-ls@1.2.1: {}
prettier@3.1.0: {} prettier@3.3.3: {}
process-nextick-args@2.0.1: {} process-nextick-args@2.0.1: {}
@ -5335,13 +5342,14 @@ snapshots:
react-focus-lock@2.9.5(@types/react@18.3.3)(react@18.3.1): react-focus-lock@2.9.5(@types/react@18.3.3)(react@18.3.1):
dependencies: dependencies:
'@babel/runtime': 7.22.6 '@babel/runtime': 7.22.6
'@types/react': 18.3.3
focus-lock: 0.11.6 focus-lock: 0.11.6
prop-types: 15.8.1 prop-types: 15.8.1
react: 18.3.1 react: 18.3.1
react-clientside-effect: 1.2.6(react@18.3.1) react-clientside-effect: 1.2.6(react@18.3.1)
use-callback-ref: 1.3.0(@types/react@18.3.3)(react@18.3.1) use-callback-ref: 1.3.0(@types/react@18.3.3)(react@18.3.1)
use-sidecar: 1.1.2(@types/react@18.3.3)(react@18.3.1) use-sidecar: 1.1.2(@types/react@18.3.3)(react@18.3.1)
optionalDependencies:
'@types/react': 18.3.3
react-icons@4.12.0(react@18.3.1): react-icons@4.12.0(react@18.3.1):
dependencies: dependencies:
@ -5368,28 +5376,31 @@ snapshots:
react-remove-scroll-bar@2.3.4(@types/react@18.3.3)(react@18.3.1): react-remove-scroll-bar@2.3.4(@types/react@18.3.3)(react@18.3.1):
dependencies: dependencies:
'@types/react': 18.3.3
react: 18.3.1 react: 18.3.1
react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1)
tslib: 2.6.2 tslib: 2.6.2
optionalDependencies:
'@types/react': 18.3.3
react-remove-scroll@2.5.6(@types/react@18.3.3)(react@18.3.1): react-remove-scroll@2.5.6(@types/react@18.3.3)(react@18.3.1):
dependencies: dependencies:
'@types/react': 18.3.3
react: 18.3.1 react: 18.3.1
react-remove-scroll-bar: 2.3.4(@types/react@18.3.3)(react@18.3.1) react-remove-scroll-bar: 2.3.4(@types/react@18.3.3)(react@18.3.1)
react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1)
tslib: 2.6.2 tslib: 2.6.2
use-callback-ref: 1.3.0(@types/react@18.3.3)(react@18.3.1) use-callback-ref: 1.3.0(@types/react@18.3.3)(react@18.3.1)
use-sidecar: 1.1.2(@types/react@18.3.3)(react@18.3.1) use-sidecar: 1.1.2(@types/react@18.3.3)(react@18.3.1)
optionalDependencies:
'@types/react': 18.3.3
react-style-singleton@2.2.1(@types/react@18.3.3)(react@18.3.1): react-style-singleton@2.2.1(@types/react@18.3.3)(react@18.3.1):
dependencies: dependencies:
'@types/react': 18.3.3
get-nonce: 1.0.1 get-nonce: 1.0.1
invariant: 2.2.4 invariant: 2.2.4
react: 18.3.1 react: 18.3.1
tslib: 2.6.2 tslib: 2.6.2
optionalDependencies:
'@types/react': 18.3.3
react@18.3.1: react@18.3.1:
dependencies: dependencies:
@ -5789,16 +5800,18 @@ snapshots:
use-callback-ref@1.3.0(@types/react@18.3.3)(react@18.3.1): use-callback-ref@1.3.0(@types/react@18.3.3)(react@18.3.1):
dependencies: dependencies:
'@types/react': 18.3.3
react: 18.3.1 react: 18.3.1
tslib: 2.6.2 tslib: 2.6.2
optionalDependencies:
'@types/react': 18.3.3
use-sidecar@1.1.2(@types/react@18.3.3)(react@18.3.1): use-sidecar@1.1.2(@types/react@18.3.3)(react@18.3.1):
dependencies: dependencies:
'@types/react': 18.3.3
detect-node-es: 1.1.0 detect-node-es: 1.1.0
react: 18.3.1 react: 18.3.1
tslib: 2.6.2 tslib: 2.6.2
optionalDependencies:
'@types/react': 18.3.3
util-deprecate@1.0.2: {} util-deprecate@1.0.2: {}

View File

@ -2,15 +2,13 @@
"_comment": "This version doesn't matter, it's just to allow importing from other repos.", "_comment": "This version doesn't matter, it's just to allow importing from other repos.",
"name": "coder", "name": "coder",
"version": "0.0.0", "version": "0.0.0",
"packageManager": "pnpm@9.7.1+sha512.faf344af2d6ca65c4c5c8c2224ea77a81a5e8859cbc4e06b1511ddce2f0151512431dd19e6aff31f2c6a8f5f2aced9bd2273e1fed7dd4de1868984059d2c4247",
"scripts": { "scripts": {
"format": "prettier --cache --write", "format": "prettier --cache --write '**/*.{css,html,json,md,yaml,yml}'",
"format:check": "prettier --cache --check '**/*.{css,html,json,md,yaml,yml}'",
"storybook": "pnpm run -C site/ storybook" "storybook": "pnpm run -C site/ storybook"
}, },
"devDependencies": { "devDependencies": {
"prettier": "3.0.0" "prettier": "3.3.3"
}, }
"dependencies": {
"exec": "^0.2.1"
},
"packageManager": "pnpm@8.14.0+sha1.bb42032ff80dba5f9245bc1b03470d2fa0b7fb2f"
} }

21
pnpm-lock.yaml generated
View File

@ -7,29 +7,18 @@ settings:
importers: importers:
.: .:
dependencies:
exec:
specifier: ^0.2.1
version: 0.2.1
devDependencies: devDependencies:
prettier: prettier:
specifier: 3.0.0 specifier: 3.3.3
version: 3.0.0 version: 3.3.3
packages: packages:
exec@0.2.1: prettier@3.3.3:
resolution: {integrity: sha512-lE5ZlJgRYh+rmwidatL2AqRA/U9IBoCpKlLriBmnfUIrV/Rj4oLjb63qZ57iBCHWi5j9IjLt5wOWkFYPiTfYAg==} resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==}
engines: {node: '>= v0.9.1'}
deprecated: deprecated in favor of builtin child_process.execFile
prettier@3.0.0:
resolution: {integrity: sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==}
engines: {node: '>=14'} engines: {node: '>=14'}
hasBin: true hasBin: true
snapshots: snapshots:
exec@0.2.1: {} prettier@3.3.3: {}
prettier@3.0.0: {}

View File

@ -1,97 +0,0 @@
# Code generated by Makefile (.gitignore .prettierignore.include). DO NOT EDIT.
# .gitignore:
# Common ignore patterns, these rules applies in both root and subdirectories.
.DS_Store
.eslintcache
.gitpod.yml
.idea
**/*.swp
gotests.coverage
gotests.xml
gotests_stats.json
gotests.json
node_modules/
vendor/
yarn-error.log
# VSCode settings.
**/.vscode/*
# Allow VSCode recommendations and default settings in project root.
!../.vscode/extensions.json
!../.vscode/settings.json
# Front-end ignore patterns.
.next/
build-storybook.log
coverage/
storybook-static/
test-results/*
e2e/test-results/*
e2e/states/*.json
e2e/.auth.json
playwright-report/*
.swc
# Make target for updating golden files (any dir).
.gen-golden
# Build
build/
dist/
out/
# Bundle analysis
stats/
*.tfstate
*.tfstate.backup
*.tfplan
*.lock.hcl
.terraform/
**/.coderv2/*
**/__debug_bin
# direnv
.envrc
*.test
# Loadtesting
.././scaletest/terraform/.terraform
.././scaletest/terraform/.terraform.lock.hcl
../scaletest/terraform/secrets.tfvars
.terraform.tfstate.*
# Nix
result
# Data dumps from unit tests
**/*.test.sql
# Filebrowser.db
**/filebrowser.db
# pnpm
.pnpm-store/
# .prettierignore.include:
# Helm templates contain variables that are invalid YAML and can't be formatted
# by Prettier.
../helm/**/templates/*.yaml
# Terraform state files used in tests, these are automatically generated.
# Example: provisioner/terraform/testdata/instance-id/instance-id.tfstate.json
**/testdata/**/*.tf*.json
# Testdata shouldn't be formatted.
../scripts/apitypings/testdata/**/*.ts
../enterprise/tailnet/testdata/*.golden.html
../tailnet/testdata/*.golden.html
# Generated files shouldn't be formatted.
e2e/provisionerGenerated.ts
**/pnpm-lock.yaml
# Ignore generated JSON (e.g. examples/examples.gen.json).
**/*.gen.json

View File

@ -1,205 +0,0 @@
---
env:
browser: true
commonjs: true
es6: true
jest: true
node: true
ignorePatterns:
- "jest.polyfills.js"
extends:
- eslint:recommended
- plugin:@typescript-eslint/recommended
- plugin:@typescript-eslint/recommended-requiring-type-checking
- plugin:eslint-comments/recommended
- plugin:import/recommended
- plugin:import/typescript
- plugin:react/recommended
- plugin:jsx-a11y/strict
- plugin:compat/recommended
- prettier
parser: "@typescript-eslint/parser"
parserOptions:
ecmaVersion: 2018
project: "./tsconfig.json"
sourceType: module
ecmaFeatures:
jsx: true
# REMARK(Grey): We might want to move this to repository root eventually to
# lint multiple projects (supply array to project property).
tsconfigRootDir: "./"
plugins:
- "@typescript-eslint"
- import
- react-hooks
- jest
- unicorn
- testing-library
overrides:
- files: ["**/__tests__/**/*.[jt]s?(x)", "**/?(*.)+(spec|test).[jt]s?(x)"]
extends: ["plugin:testing-library/react", "plugin:testing-library/dom"]
rules:
# Occasionally, we must traverse the DOM when querying for an element to
# avoid the performance costs that come with using selectors like ByRole.
# You can read more about these performance costs here:
# https://coder.com/docs/contributing/frontend#tests-getting-too-slow.
testing-library/no-node-access: off
testing-library/no-container: off
- files: ["e2e/**/*.[tj]s"]
extends: ["plugin:testing-library/react", "plugin:testing-library/dom"]
rules:
# Sometimes the eslint-plugin-testing-library believes playwright queries are
# also react-testing-library queries, which is not the case. So we disable this
# rule for all e2e tests.
testing-library/prefer-screen-queries: "off"
root: true
rules:
# TODO: Investigate whether to enable this rule & fix and/or disable all its complaints
"@typescript-eslint/no-misused-promises": "off"
# TODO: Investigate whether to enable this rule & fix and/or disable all its complaints
"@typescript-eslint/no-unsafe-argument": "off"
# TODO: Investigate whether to enable this rule & fix and/or disable all its complaints
"@typescript-eslint/no-unsafe-assignment": "off"
# TODO: Investigate whether to enable this rule & fix and/or disable all its complaints
"@typescript-eslint/no-unsafe-call": "off"
# TODO: Investigate whether to enable this rule & fix and/or disable all its complaints
"@typescript-eslint/no-unsafe-member-access": "off"
# TODO: Investigate whether to enable this rule & fix and/or disable all its complaints
"@typescript-eslint/no-unsafe-return": "off"
# TODO: Investigate whether to enable this rule & fix and/or disable all its complaints
"@typescript-eslint/require-await": "off"
# TODO: Investigate whether to enable this rule & fix and/or disable all its complaints
"@typescript-eslint/restrict-plus-operands": "off"
# TODO: Investigate whether to enable this rule & fix and/or disable all its complaints
"@typescript-eslint/restrict-template-expressions": "off"
# TODO: Investigate whether to enable this rule & fix and/or disable all its complaints
"@typescript-eslint/unbound-method": "off"
"@typescript-eslint/brace-style":
["error", "1tbs", { "allowSingleLine": false }]
"@typescript-eslint/consistent-type-imports":
- error
- fixStyle: inline-type-imports
"@typescript-eslint/method-signature-style": ["error", "property"]
"@typescript-eslint/no-import-type-side-effects": "error"
# We're disabling the `no-namespace` rule to use a pattern of defining an interface,
# and then defining functions that operate on that data via namespace. This is helpful for
# dealing with immutable objects. This is a common pattern that shows up in some other
# large TypeScript projects, like VSCode.
# More details: https://github.com/coder/m/pull/9720#discussion_r697609528
"@typescript-eslint/no-namespace": "off"
"@typescript-eslint/no-unused-vars":
- error
- argsIgnorePattern: "^_"
varsIgnorePattern: "^_"
ignoreRestSiblings: true
"@typescript-eslint/no-empty-interface":
- error
- allowSingleExtends: true
"brace-style": "off"
"curly": ["error", "all"]
"eslint-comments/disable-enable-pair":
- error
- allowWholeFile: true
"eslint-comments/require-description": "error"
eqeqeq: error
import/default: "off"
import/namespace: "off"
import/newline-after-import:
- error
- count: 1
import/no-named-as-default: "off"
import/no-named-as-default-member: "off"
import/prefer-default-export: "off"
import/order:
- error
- groups: [["builtin", "external"], "internal", "parent"]
newlines-between: never
alphabetize:
order: asc
caseInsensitive: true
jest/no-focused-tests: "error"
jsx-a11y/label-has-for: "off"
jsx-a11y/no-autofocus: "off"
no-console:
- warn
- allow:
- warn
- error
- info
- debug
no-dupe-class-members: "off"
no-implicit-coercion: "error"
no-restricted-imports:
- error
- paths:
- name: "@mui/material"
message:
"Use path imports to avoid pulling in unused modules. See:
https://material-ui.com/guides/minimizing-bundle-size/"
- name: "@mui/icons-material"
message:
"Use path imports to avoid pulling in unused modules. See:
https://material-ui.com/guides/minimizing-bundle-size/"
- name: "@mui/material/Avatar"
message:
"You should use the Avatar component provided on
components/Avatar/Avatar"
- name: "@mui/material/Alert"
message:
"You should use the Alert component provided on
components/Alert/Alert"
- name: "@mui/material/Popover"
message:
"You should use the Popover component provided on
components/Popover/Popover"
- name: "@mui/material/Typography"
message:
"You should use the native HTML elements as span, p, h1, h2, h3..."
- name: "@mui/material/Box"
message: "You should use a <div> instead"
- name: "@mui/material/styles"
importNames: ["Interpolation", "Theme", "useTheme"]
message: "Import from @emotion/react instead."
- name: "lodash"
message: "Import from lodash/<name> instead."
no-unused-vars: "off"
"object-curly-spacing": "off"
react-hooks/exhaustive-deps: warn
react-hooks/rules-of-hooks: error
react/display-name: "off"
react/jsx-no-script-url:
- error
- - name: Link
props:
- to
- name: Button
props:
- href
- name: IconButton
props:
- href
react/prop-types: "off"
react/jsx-boolean-value: ["error", "never"]
react/jsx-curly-brace-presence:
- error
- children: ignore
# https://reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html#eslint
react/jsx-key: error
react/jsx-uses-react: "off"
react/no-unknown-property: ["error", { ignore: ["css"] }]
react/react-in-jsx-scope: "off"
# https://github.com/jsx-eslint/eslint-plugin-react/issues/2628#issuecomment-984160944
no-restricted-syntax:
[
"error",
{
selector: "ImportDeclaration[source.value='react'][specifiers.0.type='ImportDefaultSpecifier']",
message: "Default React import not allowed",
},
]
settings:
react:
version: detect
import/resolver:
typescript: {}

View File

@ -1,97 +0,0 @@
# Code generated by Makefile (.gitignore .prettierignore.include). DO NOT EDIT.
# .gitignore:
# Common ignore patterns, these rules applies in both root and subdirectories.
.DS_Store
.eslintcache
.gitpod.yml
.idea
**/*.swp
gotests.coverage
gotests.xml
gotests_stats.json
gotests.json
node_modules/
vendor/
yarn-error.log
# VSCode settings.
**/.vscode/*
# Allow VSCode recommendations and default settings in project root.
!../.vscode/extensions.json
!../.vscode/settings.json
# Front-end ignore patterns.
.next/
build-storybook.log
coverage/
storybook-static/
test-results/*
e2e/test-results/*
e2e/states/*.json
e2e/.auth.json
playwright-report/*
.swc
# Make target for updating golden files (any dir).
.gen-golden
# Build
build/
dist/
out/
# Bundle analysis
stats/
*.tfstate
*.tfstate.backup
*.tfplan
*.lock.hcl
.terraform/
**/.coderv2/*
**/__debug_bin
# direnv
.envrc
*.test
# Loadtesting
.././scaletest/terraform/.terraform
.././scaletest/terraform/.terraform.lock.hcl
../scaletest/terraform/secrets.tfvars
.terraform.tfstate.*
# Nix
result
# Data dumps from unit tests
**/*.test.sql
# Filebrowser.db
**/filebrowser.db
# pnpm
.pnpm-store/
# .prettierignore.include:
# Helm templates contain variables that are invalid YAML and can't be formatted
# by Prettier.
../helm/**/templates/*.yaml
# Terraform state files used in tests, these are automatically generated.
# Example: provisioner/terraform/testdata/instance-id/instance-id.tfstate.json
**/testdata/**/*.tf*.json
# Testdata shouldn't be formatted.
../scripts/apitypings/testdata/**/*.ts
../enterprise/tailnet/testdata/*.golden.html
../tailnet/testdata/*.golden.html
# Generated files shouldn't be formatted.
e2e/provisionerGenerated.ts
**/pnpm-lock.yaml
# Ignore generated JSON (e.g. examples/examples.gen.json).
**/*.gen.json

View File

@ -1,20 +0,0 @@
# Code generated by Makefile (../.prettierrc.yaml). DO NOT EDIT.
# This config file is used in conjunction with `.editorconfig` to specify
# formatting for prettier-supported files. See `.editorconfig` and
# `site/.editorconfig` for whitespace formatting options.
printWidth: 80
proseWrap: always
trailingComma: all
useTabs: false
tabWidth: 2
overrides:
- files:
- ../README.md
- ../docs/reference/api/**/*.md
- ../docs/reference/cli/**/*.md
- ../docs/changelogs/*.md
- ../.github/**/*.{yaml,yml,toml}
- ../scripts/**/*.{yaml,yml,toml}
options:
proseWrap: preserve

45
site/biome.json Normal file
View File

@ -0,0 +1,45 @@
{
"files": {
"ignore": ["**/*Generated.ts"]
},
"formatter": {
"indentStyle": "space",
"indentWidth": 2
},
"linter": {
"rules": {
"a11y": {
"noSvgWithoutTitle": { "level": "off" },
"useButtonType": { "level": "off" }
},
"style": {
"noNonNullAssertion": { "level": "off" },
"noParameterAssign": { "level": "off" },
"useDefaultParameterLast": { "level": "off" },
"useSelfClosingElements": { "level": "off" }
},
"suspicious": {
"noArrayIndexKey": { "level": "off" },
"noThenProperty": { "level": "off" }
},
"nursery": {
"noRestrictedImports": {
"level": "error",
"options": {
"paths": {
"@mui/material": "Use @mui/material/<name> instead. See: https://material-ui.com/guides/minimizing-bundle-size/.",
"@mui/icons-material": "Use @mui/icons-material/<name> instead. See: https://material-ui.com/guides/minimizing-bundle-size/.",
"@mui/material/Avatar": "Use components/Avatar/Avatar instead.",
"@mui/material/Alert": "Use components/Alert/Alert instead.",
"@mui/material/Popover": "Use components/Popover/Popover instead.",
"@mui/material/Typography": "Use native HTML elements instead. Eg: <span>, <p>, <h1>, etc.",
"@mui/material/Box": "Use a <div> instead.",
"@mui/material/styles": "Import from @emotion/react instead.",
"lodash": "Use lodash/<name> instead."
}
}
}
}
}
}
}

View File

@ -1,8 +1,8 @@
import type { Page } from "@playwright/test"; import type { Page } from "@playwright/test";
import { expect } from "@playwright/test"; import { expect } from "@playwright/test";
import { formatDuration, intervalToDuration } from "date-fns"; import { API, type DeploymentConfig } from "api/api";
import { type DeploymentConfig, API } from "api/api";
import type { SerpentOption } from "api/typesGenerated"; import type { SerpentOption } from "api/typesGenerated";
import { formatDuration, intervalToDuration } from "date-fns";
import { coderPort } from "./constants"; import { coderPort } from "./constants";
import { findSessionToken, randomName } from "./helpers"; import { findSessionToken, randomName } from "./helpers";

View File

@ -1,4 +1,4 @@
import * as path from "path"; import * as path from "node:path";
export const coderMain = path.join(__dirname, "../../enterprise/cmd/coder"); export const coderMain = path.join(__dirname, "../../enterprise/cmd/coder");

View File

@ -1,4 +1,4 @@
import { expect, type Page } from "@playwright/test"; import { type Page, expect } from "@playwright/test";
type PollingOptions = { timeout?: number; intervals?: number[] }; type PollingOptions = { timeout?: number; intervals?: number[] };
@ -11,7 +11,10 @@ export const expectUrl = expect.extend({
let pass: boolean; let pass: boolean;
try { try {
await expect await expect
.poll(() => (actual = new URL(page.url()).pathname), options) .poll(() => {
actual = new URL(page.url()).pathname;
return actual;
}, options)
.toBe(expected); .toBe(expected);
pass = true; pass = true;
} catch { } catch {
@ -24,11 +27,11 @@ export const expectUrl = expect.extend({
actual, actual,
expected, expected,
message: () => message: () =>
"The page does not have the expected URL pathname.\n" + `The page does not have the expected URL pathname.\nExpected: ${
`Expected: ${this.isNot ? "not" : ""}${this.utils.printExpected( this.isNot ? "not" : ""
}${this.utils.printExpected(
expected, expected,
)}\n` + )}\nActual: ${this.utils.printReceived(actual)}`,
`Actual: ${this.utils.printReceived(actual)}`,
}; };
}, },
}); });

View File

@ -1,16 +1,16 @@
import { type BrowserContext, expect, type Page, test } from "@playwright/test"; import { type ChildProcess, exec, spawn } from "node:child_process";
import { type ChildProcess, exec, spawn } from "child_process"; import { randomUUID } from "node:crypto";
import { randomUUID } from "crypto"; import path from "node:path";
import express from "express"; import { Duplex } from "node:stream";
import capitalize from "lodash/capitalize"; import { type BrowserContext, type Page, expect, test } from "@playwright/test";
import path from "path";
import * as ssh from "ssh2";
import { Duplex } from "stream";
import { API } from "api/api"; import { API } from "api/api";
import type { import type {
WorkspaceBuildParameter,
UpdateTemplateMeta, UpdateTemplateMeta,
WorkspaceBuildParameter,
} from "api/typesGenerated"; } from "api/typesGenerated";
import express from "express";
import capitalize from "lodash/capitalize";
import * as ssh from "ssh2";
import { TarWriter } from "utils/tar"; import { TarWriter } from "utils/tar";
import { import {
agentPProfPort, agentPProfPort,
@ -26,13 +26,13 @@ import {
Agent, Agent,
type App, type App,
AppSharingLevel, AppSharingLevel,
type ApplyComplete,
type ExternalAuthProviderResource,
type ParseComplete, type ParseComplete,
type PlanComplete, type PlanComplete,
type ApplyComplete,
type Resource, type Resource,
Response, Response,
type RichParameter, type RichParameter,
type ExternalAuthProviderResource,
} from "./provisionerGenerated"; } from "./provisionerGenerated";
// requiresEnterpriseLicense will skip the test if we're not running with an enterprise license // requiresEnterpriseLicense will skip the test if we're not running with an enterprise license
@ -88,7 +88,7 @@ export const createWorkspace = async (
await page.getByTestId("form-submit").click(); await page.getByTestId("form-submit").click();
await expectUrl(page).toHavePathName("/@admin/" + name); await expectUrl(page).toHavePathName(`/@admin/${name}`);
await page.waitForSelector("*[data-testid='build-status'] >> text=Running", { await page.waitForSelector("*[data-testid='build-status'] >> text=Running", {
state: "visible", state: "visible",
@ -102,7 +102,7 @@ export const verifyParameters = async (
richParameters: RichParameter[], richParameters: RichParameter[],
expectedBuildParameters: WorkspaceBuildParameter[], expectedBuildParameters: WorkspaceBuildParameter[],
) => { ) => {
await page.goto("/@admin/" + workspaceName + "/settings/parameters", { await page.goto(`/@admin/${workspaceName}/settings/parameters`, {
waitUntil: "domcontentloaded", waitUntil: "domcontentloaded",
}); });
await expectUrl(page).toHavePathName( await expectUrl(page).toHavePathName(
@ -120,7 +120,7 @@ export const verifyParameters = async (
} }
const parameterLabel = await page.waitForSelector( const parameterLabel = await page.waitForSelector(
"[data-testid='parameter-field-" + richParameter.name + "']", `[data-testid='parameter-field-${richParameter.name}']`,
{ state: "visible" }, { state: "visible" },
); );
@ -128,17 +128,13 @@ export const verifyParameters = async (
if (richParameter.type === "bool") { if (richParameter.type === "bool") {
const parameterField = await parameterLabel.waitForSelector( const parameterField = await parameterLabel.waitForSelector(
"[data-testid='parameter-field-bool'] .MuiRadio-root.Mui-checked" + `[data-testid='parameter-field-bool'] .MuiRadio-root.Mui-checked${muiDisabled} input`,
muiDisabled +
" input",
); );
const value = await parameterField.inputValue(); const value = await parameterField.inputValue();
expect(value).toEqual(buildParameter.value); expect(value).toEqual(buildParameter.value);
} else if (richParameter.options.length > 0) { } else if (richParameter.options.length > 0) {
const parameterField = await parameterLabel.waitForSelector( const parameterField = await parameterLabel.waitForSelector(
"[data-testid='parameter-field-options'] .MuiRadio-root.Mui-checked" + `[data-testid='parameter-field-options'] .MuiRadio-root.Mui-checked${muiDisabled} input`,
muiDisabled +
" input",
); );
const value = await parameterField.inputValue(); const value = await parameterField.inputValue();
expect(value).toEqual(buildParameter.value); expect(value).toEqual(buildParameter.value);
@ -147,7 +143,7 @@ export const verifyParameters = async (
} else { } else {
// text or number // text or number
const parameterField = await parameterLabel.waitForSelector( const parameterField = await parameterLabel.waitForSelector(
"[data-testid='parameter-field-text'] input" + muiDisabled, `[data-testid='parameter-field-text'] input${muiDisabled}`,
); );
const value = await parameterField.inputValue(); const value = await parameterField.inputValue();
expect(value).toEqual(buildParameter.value); expect(value).toEqual(buildParameter.value);
@ -266,7 +262,7 @@ export const sshIntoWorkspace = async (
}; };
export const stopWorkspace = async (page: Page, workspaceName: string) => { export const stopWorkspace = async (page: Page, workspaceName: string) => {
await page.goto("/@admin/" + workspaceName, { await page.goto(`/@admin/${workspaceName}`, {
waitUntil: "domcontentloaded", waitUntil: "domcontentloaded",
}); });
await expectUrl(page).toHavePathName(`/@admin/${workspaceName}`); await expectUrl(page).toHavePathName(`/@admin/${workspaceName}`);
@ -283,9 +279,9 @@ export const buildWorkspaceWithParameters = async (
workspaceName: string, workspaceName: string,
richParameters: RichParameter[] = [], richParameters: RichParameter[] = [],
buildParameters: WorkspaceBuildParameter[] = [], buildParameters: WorkspaceBuildParameter[] = [],
confirm: boolean = false, confirm = false,
) => { ) => {
await page.goto("/@admin/" + workspaceName, { await page.goto(`/@admin/${workspaceName}`, {
waitUntil: "domcontentloaded", waitUntil: "domcontentloaded",
}); });
await expectUrl(page).toHavePathName(`/@admin/${workspaceName}`); await expectUrl(page).toHavePathName(`/@admin/${workspaceName}`);
@ -321,7 +317,7 @@ export const downloadCoderVersion = async (
version = version.slice(1); version = version.slice(1);
} }
const binaryName = "coder-e2e-" + version; const binaryName = `coder-e2e-${version}`;
const tempDir = "/tmp/coder-e2e-cache"; const tempDir = "/tmp/coder-e2e-cache";
// The install script adds `./bin` automatically to the path :shrug: // The install script adds `./bin` automatically to the path :shrug:
const binaryPath = path.join(tempDir, "bin", binaryName); const binaryPath = path.join(tempDir, "bin", binaryName);
@ -367,7 +363,7 @@ export const downloadCoderVersion = async (
if (code === 0) { if (code === 0) {
resolve(); resolve();
} else { } else {
reject(new Error("install.sh failed with code " + code)); reject(new Error(`install.sh failed with code ${code}`));
} }
}); });
}); });
@ -385,8 +381,8 @@ export const startAgentWithCommand = async (
...process.env, ...process.env,
CODER_AGENT_URL: `http://localhost:${coderPort}`, CODER_AGENT_URL: `http://localhost:${coderPort}`,
CODER_AGENT_TOKEN: token, CODER_AGENT_TOKEN: token,
CODER_AGENT_PPROF_ADDRESS: "127.0.0.1:" + agentPProfPort, CODER_AGENT_PPROF_ADDRESS: `127.0.0.1:${agentPProfPort}`,
CODER_AGENT_PROMETHEUS_ADDRESS: "127.0.0.1:" + prometheusPort, CODER_AGENT_PROMETHEUS_ADDRESS: `127.0.0.1:${prometheusPort}`,
}, },
}); });
cp.stdout.on("data", (data: Buffer) => { cp.stdout.on("data", (data: Buffer) => {
@ -406,7 +402,7 @@ export const startAgentWithCommand = async (
return cp; return cp;
}; };
export const stopAgent = async (cp: ChildProcess, goRun: boolean = true) => { export const stopAgent = async (cp: ChildProcess, goRun = true) => {
// When the web server is started with `go run`, it spawns a child process with coder server. // When the web server is started with `go run`, it spawns a child process with coder server.
// `pkill -P` terminates child processes belonging the same group as `go run`. // `pkill -P` terminates child processes belonging the same group as `go run`.
// The command `kill` is used to terminate a web server started as a standalone binary. // The command `kill` is used to terminate a web server started as a standalone binary.
@ -415,7 +411,7 @@ export const stopAgent = async (cp: ChildProcess, goRun: boolean = true) => {
throw new Error(`exec error: ${JSON.stringify(error)}`); throw new Error(`exec error: ${JSON.stringify(error)}`);
} }
}); });
await waitUntilUrlIsNotResponding("http://localhost:" + prometheusPort); await waitUntilUrlIsNotResponding(`http://localhost:${prometheusPort}`);
}; };
export const waitUntilUrlIsNotResponding = async (url: string) => { export const waitUntilUrlIsNotResponding = async (url: string) => {
@ -555,7 +551,7 @@ const createTemplateVersionTar = async (
try { try {
Agent.encode(agentResource); Agent.encode(agentResource);
} catch (e) { } catch (e) {
let m = `Error: agentResource encode failed, missing defaults?`; let m = "Error: agentResource encode failed, missing defaults?";
if (e instanceof Error) { if (e instanceof Error) {
if (!e.stack?.includes(e.message)) { if (!e.stack?.includes(e.message)) {
m += `\n${e.name}: ${e.message}`; m += `\n${e.name}: ${e.message}`;
@ -632,7 +628,9 @@ export class Awaiter {
private callback?: () => void; private callback?: () => void;
constructor() { constructor() {
this.promise = new Promise((r) => (this.callback = r)); this.promise = new Promise((r) => {
this.callback = r;
});
} }
public done(): void { public done(): void {
@ -745,22 +743,18 @@ export const fillParameters = async (
} }
const parameterLabel = await page.waitForSelector( const parameterLabel = await page.waitForSelector(
"[data-testid='parameter-field-" + richParameter.name + "']", `[data-testid='parameter-field-${richParameter.name}']`,
{ state: "visible" }, { state: "visible" },
); );
if (richParameter.type === "bool") { if (richParameter.type === "bool") {
const parameterField = await parameterLabel.waitForSelector( const parameterField = await parameterLabel.waitForSelector(
"[data-testid='parameter-field-bool'] .MuiRadio-root input[value='" + `[data-testid='parameter-field-bool'] .MuiRadio-root input[value='${buildParameter.value}']`,
buildParameter.value +
"']",
); );
await parameterField.click(); await parameterField.click();
} else if (richParameter.options.length > 0) { } else if (richParameter.options.length > 0) {
const parameterField = await parameterLabel.waitForSelector( const parameterField = await parameterLabel.waitForSelector(
"[data-testid='parameter-field-options'] .MuiRadio-root input[value='" + `[data-testid='parameter-field-options'] .MuiRadio-root input[value='${buildParameter.value}']`,
buildParameter.value +
"']",
); );
await parameterField.click(); await parameterField.click();
} else if (richParameter.type === "list(string)") { } else if (richParameter.type === "list(string)") {
@ -856,7 +850,7 @@ export const updateWorkspace = async (
richParameters: RichParameter[] = [], richParameters: RichParameter[] = [],
buildParameters: WorkspaceBuildParameter[] = [], buildParameters: WorkspaceBuildParameter[] = [],
) => { ) => {
await page.goto("/@admin/" + workspaceName, { await page.goto(`/@admin/${workspaceName}`, {
waitUntil: "domcontentloaded", waitUntil: "domcontentloaded",
}); });
await expectUrl(page).toHavePathName(`/@admin/${workspaceName}`); await expectUrl(page).toHavePathName(`/@admin/${workspaceName}`);
@ -878,7 +872,7 @@ export const updateWorkspaceParameters = async (
richParameters: RichParameter[] = [], richParameters: RichParameter[] = [],
buildParameters: WorkspaceBuildParameter[] = [], buildParameters: WorkspaceBuildParameter[] = [],
) => { ) => {
await page.goto("/@admin/" + workspaceName + "/settings/parameters", { await page.goto(`/@admin/${workspaceName}/settings/parameters`, {
waitUntil: "domcontentloaded", waitUntil: "domcontentloaded",
}); });
await expectUrl(page).toHavePathName( await expectUrl(page).toHavePathName(
@ -897,7 +891,7 @@ export async function openTerminalWindow(
page: Page, page: Page,
context: BrowserContext, context: BrowserContext,
workspaceName: string, workspaceName: string,
agentName: string = "dev", agentName = "dev",
): Promise<Page> { ): Promise<Page> {
// Wait for the web terminal to open in a new tab // Wait for the web terminal to open in a new tab
const pagePromise = context.waitForEvent("page"); const pagePromise = context.waitForEvent("page");

View File

@ -1,10 +1,10 @@
import http from "node:http";
import type { BrowserContext, Page } from "@playwright/test"; import type { BrowserContext, Page } from "@playwright/test";
import http from "http";
import { coderPort, gitAuth } from "./constants"; import { coderPort, gitAuth } from "./constants";
export const beforeCoderTest = async (page: Page) => { export const beforeCoderTest = async (page: Page) => {
// eslint-disable-next-line no-console -- Show everything that was printed with console.log() // eslint-disable-next-line no-console -- Show everything that was printed with console.log()
page.on("console", (msg) => console.log("[onConsole] " + msg.text())); page.on("console", (msg) => console.log(`[onConsole] ${msg.text()}`));
page.on("request", (request) => { page.on("request", (request) => {
if (!isApiCall(request.url())) { if (!isApiCall(request.url())) {

View File

@ -132,7 +132,7 @@ export const seventhParameter: RichParameter = {
// It helps to avoid cross-test interference when user-auto-fill triggers on // It helps to avoid cross-test interference when user-auto-fill triggers on
// the same parameter name. // the same parameter name.
export const randParamName = (p: RichParameter): RichParameter => { export const randParamName = (p: RichParameter): RichParameter => {
const name = p.name + "_" + Math.random().toString(36).substring(7); const name = `${p.name}_${Math.random().toString(36).substring(7)}`;
return { ...p, name: name }; return { ...p, name: name };
}; };

View File

@ -1,6 +1,6 @@
import { execSync } from "node:child_process";
import * as path from "node:path";
import { defineConfig } from "@playwright/test"; import { defineConfig } from "@playwright/test";
import { execSync } from "child_process";
import * as path from "path";
import { import {
coderMain, coderMain,
coderPort, coderPort,
@ -38,14 +38,15 @@ try {
} }
if (!hasTerraform || !hasDocker) { if (!hasTerraform || !hasDocker) {
const msg = const msg = `Terraform provisioners require docker & terraform binaries to function. \n${
"Terraform provisioners require docker & terraform binaries to function. \n" + hasTerraform
(hasTerraform
? "" ? ""
: "\tThe `terraform` executable is not present in the runtime environment.\n") + : "\tThe `terraform` executable is not present in the runtime environment.\n"
(hasDocker }${
hasDocker
? "" ? ""
: "\tThe `docker` executable is not present in the runtime environment.\n"); : "\tThe `docker` executable is not present in the runtime environment.\n"
}`;
throw new Error(msg); throw new Error(msg);
} }
@ -96,7 +97,7 @@ export default defineConfig({
"--provisioner-daemons 10", "--provisioner-daemons 10",
// TODO: Enable some terraform provisioners // TODO: Enable some terraform provisioners
`--provisioner-types=echo${requireTerraformTests ? ",terraform" : ""}`, `--provisioner-types=echo${requireTerraformTests ? ",terraform" : ""}`,
`--provisioner-daemons=10`, "--provisioner-daemons=10",
"--web-terminal-renderer=dom", "--web-terminal-renderer=dom",
"--pprof-enable", "--pprof-enable",
] ]
@ -146,7 +147,7 @@ export default defineConfig({
gitAuth.webPort, gitAuth.webPort,
gitAuth.validatePath, gitAuth.validatePath,
), ),
CODER_PPROF_ADDRESS: "127.0.0.1:" + coderdPProfPort, CODER_PPROF_ADDRESS: `127.0.0.1:${coderdPProfPort}`,
CODER_EXPERIMENTS: `multi-organization,${e2eFakeExperiment1},${e2eFakeExperiment2}`, CODER_EXPERIMENTS: `multi-organization,${e2eFakeExperiment1},${e2eFakeExperiment2}`,
// Tests for Deployment / User Authentication / OIDC // Tests for Deployment / User Authentication / OIDC

View File

@ -1,4 +1,4 @@
import { spawn, type ChildProcess, exec } from "child_process"; import { type ChildProcess, exec, spawn } from "node:child_process";
import { coderMain, coderPort, workspaceProxyPort } from "./constants"; import { coderMain, coderPort, workspaceProxyPort } from "./constants";
import { waitUntilUrlIsNotResponding } from "./helpers"; import { waitUntilUrlIsNotResponding } from "./helpers";
@ -28,10 +28,7 @@ export const startWorkspaceProxy = async (
return cp; return cp;
}; };
export const stopWorkspaceProxy = async ( export const stopWorkspaceProxy = async (cp: ChildProcess, goRun = true) => {
cp: ChildProcess,
goRun: boolean = true,
) => {
exec(goRun ? `pkill -P ${cp.pid}` : `kill ${cp.pid}`, (error) => { exec(goRun ? `pkill -P ${cp.pid}` : `kill ${cp.pid}`, (error) => {
if (error) { if (error) {
throw new Error(`exec error: ${JSON.stringify(error)}`); throw new Error(`exec error: ${JSON.stringify(error)}`);

View File

@ -1,15 +1,15 @@
import * as fs from "node:fs/promises";
import type { Writable } from "node:stream";
/* eslint-disable no-console -- Logging is sort of the whole point here */ /* eslint-disable no-console -- Logging is sort of the whole point here */
import type { import type {
FullConfig, FullConfig,
Suite,
TestCase,
TestResult,
FullResult, FullResult,
Reporter, Reporter,
Suite,
TestCase,
TestError, TestError,
TestResult,
} from "@playwright/test/reporter"; } from "@playwright/test/reporter";
import * as fs from "fs/promises";
import type { Writable } from "stream";
import { API } from "api/api"; import { API } from "api/api";
import { coderdPProfPort, enterpriseLicense } from "./constants"; import { coderdPProfPort, enterpriseLicense } from "./constants";

View File

@ -1,6 +1,6 @@
import { randomUUID } from "node:crypto";
import * as http from "node:http";
import { test } from "@playwright/test"; import { test } from "@playwright/test";
import { randomUUID } from "crypto";
import * as http from "http";
import { import {
createTemplate, createTemplate,
createWorkspace, createWorkspace,
@ -37,7 +37,7 @@ test("app", async ({ context, page }) => {
token, token,
apps: [ apps: [
{ {
url: "http://localhost:" + addr.port, url: `http://localhost:${addr.port}`,
displayName: appName, displayName: appName,
order: 0, order: 0,
}, },

View File

@ -1,6 +1,6 @@
import type { Page } from "@playwright/test"; import type { Page } from "@playwright/test";
import { expect, test } from "@playwright/test"; import { expect, test } from "@playwright/test";
import { type DeploymentConfig, API } from "api/api"; import { API, type DeploymentConfig } from "api/api";
import { import {
findConfigOption, findConfigOption,
setupApiCalls, setupApiCalls,

View File

@ -1,4 +1,4 @@
import { test, expect, type Page } from "@playwright/test"; import { type Page, expect, test } from "@playwright/test";
import { API } from "api/api"; import { API } from "api/api";
import { setupApiCalls } from "../../api"; import { setupApiCalls } from "../../api";
import { coderPort, workspaceProxyPort } from "../../constants"; import { coderPort, workspaceProxyPort } from "../../constants";
@ -23,7 +23,7 @@ test("default proxy is online", async ({ page }) => {
const workspaceProxyStatus = workspaceProxyPrimary.locator("td.status span"); const workspaceProxyStatus = workspaceProxyPrimary.locator("td.status span");
await expect(workspaceProxyName).toHaveText("Default"); await expect(workspaceProxyName).toHaveText("Default");
await expect(workspaceProxyURL).toHaveText("http://localhost:" + coderPort); await expect(workspaceProxyURL).toHaveText(`http://localhost:${coderPort}`);
await expect(workspaceProxyStatus).toHaveText("Healthy"); await expect(workspaceProxyStatus).toHaveText("Healthy");
}); });
@ -50,7 +50,7 @@ test("custom proxy is online", async ({ page }) => {
waitUntil: "domcontentloaded", waitUntil: "domcontentloaded",
}); });
const workspaceProxy = page.locator(`table.MuiTable-root tr`, { const workspaceProxy = page.locator("table.MuiTable-root tr", {
hasText: proxyName, hasText: proxyName,
}); });
@ -82,7 +82,7 @@ const waitUntilWorkspaceProxyIsHealthy = async (
while (retries < maxRetries) { while (retries < maxRetries) {
await page.reload(); await page.reload();
const workspaceProxy = page.locator(`table.MuiTable-root tr`, { const workspaceProxy = page.locator("table.MuiTable-root tr", {
hasText: proxyName, hasText: proxyName,
}); });
const workspaceProxyStatus = workspaceProxy.locator("td.status span"); const workspaceProxyStatus = workspaceProxy.locator("td.status span");

View File

@ -26,8 +26,7 @@ test.beforeAll(async ({ baseURL }) => {
}); });
srv.use(gitAuth.authPath, (req, res) => { srv.use(gitAuth.authPath, (req, res) => {
res.redirect( res.redirect(
`${baseURL}/external-auth/${gitAuth.webProvider}/callback?code=1234&state=` + `${baseURL}/external-auth/${gitAuth.webProvider}/callback?code=1234&state=${req.query.state}`,
req.query.state,
); );
}); });
}); });

View File

@ -1,4 +1,4 @@
import { test, expect } from "@playwright/test"; import { expect, test } from "@playwright/test";
import { import {
createGroup, createGroup,
createUser, createUser,

View File

@ -1,4 +1,4 @@
import { test, expect } from "@playwright/test"; import { expect, test } from "@playwright/test";
import { createUser, getCurrentOrgId, setupApiCalls } from "../../api"; import { createUser, getCurrentOrgId, setupApiCalls } from "../../api";
import { requiresEnterpriseLicense } from "../../helpers"; import { requiresEnterpriseLicense } from "../../helpers";
import { beforeCoderTest } from "../../hooks"; import { beforeCoderTest } from "../../hooks";

View File

@ -1,4 +1,4 @@
import { test, expect } from "@playwright/test"; import { expect, test } from "@playwright/test";
import { randomName, requiresEnterpriseLicense } from "../../helpers"; import { randomName, requiresEnterpriseLicense } from "../../helpers";
import { beforeCoderTest } from "../../hooks"; import { beforeCoderTest } from "../../hooks";

View File

@ -1,4 +1,4 @@
import { test, expect } from "@playwright/test"; import { expect, test } from "@playwright/test";
import { createGroup, getCurrentOrgId, setupApiCalls } from "../../api"; import { createGroup, getCurrentOrgId, setupApiCalls } from "../../api";
import { requiresEnterpriseLicense } from "../../helpers"; import { requiresEnterpriseLicense } from "../../helpers";
import { beforeCoderTest } from "../../hooks"; import { beforeCoderTest } from "../../hooks";

View File

@ -1,4 +1,4 @@
import { test, expect } from "@playwright/test"; import { expect, test } from "@playwright/test";
import { createGroup, getCurrentOrgId, setupApiCalls } from "../../api"; import { createGroup, getCurrentOrgId, setupApiCalls } from "../../api";
import { requiresEnterpriseLicense } from "../../helpers"; import { requiresEnterpriseLicense } from "../../helpers";
import { beforeCoderTest } from "../../hooks"; import { beforeCoderTest } from "../../hooks";

View File

@ -1,4 +1,4 @@
import { test, expect } from "@playwright/test"; import { expect, test } from "@playwright/test";
import { API } from "api/api"; import { API } from "api/api";
import { import {
createGroup, createGroup,

View File

@ -1,4 +1,4 @@
import { test, expect } from "@playwright/test"; import { expect, test } from "@playwright/test";
import { setupApiCalls } from "../api"; import { setupApiCalls } from "../api";
import { expectUrl } from "../expectUrl"; import { expectUrl } from "../expectUrl";
import { requiresEnterpriseLicense } from "../helpers"; import { requiresEnterpriseLicense } from "../helpers";

View File

@ -1,5 +1,5 @@
import { randomUUID } from "node:crypto";
import { test } from "@playwright/test"; import { test } from "@playwright/test";
import { randomUUID } from "crypto";
import { import {
createTemplate, createTemplate,
createWorkspace, createWorkspace,
@ -16,7 +16,7 @@ const agentVersion = "v2.12.1";
test.beforeEach(({ page }) => beforeCoderTest(page)); test.beforeEach(({ page }) => beforeCoderTest(page));
test("ssh with agent " + agentVersion, async ({ page }) => { test(`ssh with agent ${agentVersion}`, async ({ page }) => {
test.setTimeout(40_000); // This is a slow test, 20s may not be enough on Mac. test.setTimeout(40_000); // This is a slow test, 20s may not be enough on Mac.
const token = randomUUID(); const token = randomUUID();

View File

@ -1,5 +1,5 @@
import { randomUUID } from "node:crypto";
import { test } from "@playwright/test"; import { test } from "@playwright/test";
import { randomUUID } from "crypto";
import { import {
createTemplate, createTemplate,
createWorkspace, createWorkspace,
@ -16,7 +16,7 @@ const clientVersion = "v0.27.0";
test.beforeEach(({ page }) => beforeCoderTest(page)); test.beforeEach(({ page }) => beforeCoderTest(page));
test("ssh with client " + clientVersion, async ({ page }) => { test(`ssh with client ${clientVersion}`, async ({ page }) => {
const token = randomUUID(); const token = randomUUID();
const template = await createTemplate(page, { const template = await createTemplate(page, {
apply: [ apply: [

View File

@ -1,4 +1,4 @@
import { test, expect } from "@playwright/test"; import { expect, test } from "@playwright/test";
import { beforeCoderTest } from "../../hooks"; import { beforeCoderTest } from "../../hooks";
test.beforeEach(({ page }) => beforeCoderTest(page)); test.beforeEach(({ page }) => beforeCoderTest(page));

View File

@ -1,4 +1,4 @@
import { test, expect } from "@playwright/test"; import { expect, test } from "@playwright/test";
import { randomName } from "../../helpers"; import { randomName } from "../../helpers";
import { beforeCoderTest } from "../../hooks"; import { beforeCoderTest } from "../../hooks";

View File

@ -1,4 +1,4 @@
import { test, expect } from "@playwright/test"; import { expect, test } from "@playwright/test";
import { createUser, getCurrentOrgId, setupApiCalls } from "../../api"; import { createUser, getCurrentOrgId, setupApiCalls } from "../../api";
import { beforeCoderTest } from "../../hooks"; import { beforeCoderTest } from "../../hooks";

View File

@ -1,5 +1,5 @@
import { randomUUID } from "node:crypto";
import { test } from "@playwright/test"; import { test } from "@playwright/test";
import { randomUUID } from "crypto";
import { import {
createTemplate, createTemplate,
createWorkspace, createWorkspace,

View File

@ -1,4 +1,4 @@
import { test, expect } from "@playwright/test"; import { expect, test } from "@playwright/test";
import { username } from "../../constants"; import { username } from "../../constants";
import { import {
createTemplate, createTemplate,

View File

@ -1,4 +1,4 @@
import { test, expect } from "@playwright/test"; import { expect, test } from "@playwright/test";
import { import {
StarterTemplates, StarterTemplates,
createTemplate, createTemplate,
@ -10,14 +10,14 @@ import {
} from "../../helpers"; } from "../../helpers";
import { beforeCoderTest } from "../../hooks"; import { beforeCoderTest } from "../../hooks";
import { import {
secondParameter,
fourthParameter,
fifthParameter, fifthParameter,
firstParameter, firstParameter,
thirdParameter, fourthParameter,
randParamName,
secondParameter,
seventhParameter, seventhParameter,
sixthParameter, sixthParameter,
randParamName, thirdParameter,
} from "../../parameters"; } from "../../parameters";
import type { RichParameter } from "../../provisionerGenerated"; import type { RichParameter } from "../../provisionerGenerated";

View File

@ -12,9 +12,9 @@ import { beforeCoderTest } from "../../hooks";
import { import {
fifthParameter, fifthParameter,
firstParameter, firstParameter,
secondBuildOption,
secondParameter, secondParameter,
sixthParameter, sixthParameter,
secondBuildOption,
} from "../../parameters"; } from "../../parameters";
import type { RichParameter } from "../../provisionerGenerated"; import type { RichParameter } from "../../provisionerGenerated";

View File

@ -1,13 +0,0 @@
// Toggle eslint --fix by specifying the `FIX` env.
const fix = !!process.env.FIX;
module.exports = {
cliOptions: {
ext: [".js", ".ts", ".tsx"],
ignorePath: ".eslintignore",
cache: false,
fix,
resolvePluginsRelativeTo: ".",
maxWarnings: 0,
},
};

View File

@ -49,21 +49,6 @@ module.exports = {
"^@fontsource": "<rootDir>/src/testHelpers/styleMock.ts", "^@fontsource": "<rootDir>/src/testHelpers/styleMock.ts",
}, },
}, },
{
displayName: "lint",
runner: "jest-runner-eslint",
testMatch: [
"<rootDir>/**/*.js",
"<rootDir>/**/*.ts",
"<rootDir>/**/*.tsx",
],
testPathIgnorePatterns: [
"/out/",
"/_jest/",
"jest.config.js",
"jest-runner.*.js",
],
},
], ],
collectCoverageFrom: [ collectCoverageFrom: [
// included files // included files

View File

@ -1,193 +1,177 @@
{ {
"name": "coder-v2", "name": "coder-v2",
"description": "Coder V2 (Workspaces V2)", "description": "Coder V2 (Workspaces V2)",
"repository": "https://github.com/coder/coder", "repository": "https://github.com/coder/coder",
"private": true, "private": true,
"license": "AGPL-3.0", "license": "AGPL-3.0",
"scripts": { "scripts": {
"build": "NODE_ENV=production pnpm vite build", "build": "NODE_ENV=production pnpm vite build",
"check:all": "pnpm format:check && pnpm lint && pnpm test", "check": "biome check --error-on-warnings e2e/ src/",
"chromatic": "chromatic", "check:fix": "biome check --error-on-warnings --fix e2e/ src/",
"dev": "vite", "check:all": "pnpm check && pnpm test",
"format": "prettier --cache --write '../**/*.{css,html,js,json,jsx,md,ts,tsx,yaml,yml}'", "chromatic": "chromatic",
"format:check": "prettier --cache --check '../**/*.{css,html,js,json,jsx,md,ts,tsx,yaml,yml}'", "dev": "vite",
"lint": "pnpm run lint:types && jest --selectProjects lint", "format": "biome format --write e2e/ src/",
"lint:fix": "eslint --fix e2e/ src/", "format:check": "biome format e2e/ src/",
"lint:types": "tsc -p .", "lint": "pnpm run lint:check && pnpm run lint:types",
"playwright:install": "playwright install --with-deps chromium", "lint:check": " biome lint --error-on-warnings e2e/ src/",
"playwright:test": "playwright test --config=e2e/playwright.config.ts", "lint:fix": " biome lint --error-on-warnings --write e2e/ src/",
"playwright:test-ui": "playwright test --config=e2e/playwright.config.ts --ui $([[ \"$CODER\" == \"true\" ]] && echo --ui-port=7500 --ui-host=0.0.0.0)", "lint:types": "tsc -p .",
"gen:provisioner": "protoc --plugin=./node_modules/.bin/protoc-gen-ts_proto --ts_proto_out=./e2e/ --ts_proto_opt=outputJsonMethods=false,outputEncodeMethods=encode-no-creation,outputClientImpl=false,nestJs=false,outputPartialMethods=false,fileSuffix=Generated,suffix=hey -I ../provisionersdk/proto ../provisionersdk/proto/provisioner.proto && pnpm exec prettier --ignore-path '/dev/null' --cache --write './e2e/provisionerGenerated.ts'", "playwright:install": "playwright install --with-deps chromium",
"storybook": "STORYBOOK=true storybook dev -p 6006", "playwright:test": "playwright test --config=e2e/playwright.config.ts",
"storybook:build": "storybook build", "playwright:test-ui": "playwright test --config=e2e/playwright.config.ts --ui $([[ \"$CODER\" == \"true\" ]] && echo --ui-port=7500 --ui-host=0.0.0.0)",
"storybook:ci": "storybook build --test", "gen:provisioner": "protoc --plugin=./node_modules/.bin/protoc-gen-ts_proto --ts_proto_out=./e2e/ --ts_proto_opt=outputJsonMethods=false,outputEncodeMethods=encode-no-creation,outputClientImpl=false,nestJs=false,outputPartialMethods=false,fileSuffix=Generated,suffix=hey -I ../provisionersdk/proto ../provisionersdk/proto/provisioner.proto && pnpm exec prettier --ignore-path '/dev/null' --cache --write './e2e/provisionerGenerated.ts'",
"test": "jest --selectProjects test", "storybook": "STORYBOOK=true storybook dev -p 6006",
"test:ci": "jest --selectProjects test --silent", "storybook:build": "storybook build",
"test:coverage": "jest --selectProjects test --collectCoverage", "storybook:ci": "storybook build --test",
"test:watch": "jest --selectProjects test --watch", "test": "jest --selectProjects test",
"test:storybook": "test-storybook", "test:ci": "jest --selectProjects test --silent",
"stats": "STATS=true pnpm build && npx http-server ./stats -p 8081 -c-1", "test:coverage": "jest --selectProjects test --collectCoverage",
"deadcode": "ts-prune | grep -v \".stories\\|.config\\|e2e\\|__mocks__\\|used in module\\|testHelpers\\|typesGenerated\" || echo \"No deadcode found.\"" "test:watch": "jest --selectProjects test --watch",
}, "test:storybook": "test-storybook",
"dependencies": { "stats": "STATS=true pnpm build && npx http-server ./stats -p 8081 -c-1",
"@alwaysmeticulous/recorder-loader": "2.137.0", "deadcode": "ts-prune | grep -v \".stories\\|.config\\|e2e\\|__mocks__\\|used in module\\|testHelpers\\|typesGenerated\" || echo \"No deadcode found.\""
"@emoji-mart/data": "1.2.1", },
"@emoji-mart/react": "1.1.1", "dependencies": {
"@emotion/css": "11.11.2", "@alwaysmeticulous/recorder-loader": "2.137.0",
"@emotion/react": "11.11.4", "@emoji-mart/data": "1.2.1",
"@emotion/styled": "11.11.5", "@emoji-mart/react": "1.1.1",
"@fastly/performance-observer-polyfill": "2.0.0", "@emotion/css": "11.11.2",
"@fontsource-variable/inter": "5.0.15", "@emotion/react": "11.11.4",
"@fontsource/ibm-plex-mono": "5.0.5", "@emotion/styled": "11.11.5",
"@monaco-editor/react": "4.6.0", "@fastly/performance-observer-polyfill": "2.0.0",
"@mui/icons-material": "5.16.0", "@fontsource-variable/inter": "5.0.15",
"@mui/lab": "5.0.0-alpha.129", "@fontsource/ibm-plex-mono": "5.0.5",
"@mui/material": "5.16.0", "@monaco-editor/react": "4.6.0",
"@mui/system": "5.16.0", "@mui/icons-material": "5.16.0",
"@mui/utils": "5.16.0", "@mui/lab": "5.0.0-alpha.129",
"@mui/x-tree-view": "7.9.0", "@mui/material": "5.16.0",
"@tanstack/react-query-devtools": "4.35.3", "@mui/system": "5.16.0",
"@xterm/addon-canvas": "0.7.0", "@mui/utils": "5.16.0",
"@xterm/addon-fit": "0.10.0", "@mui/x-tree-view": "7.9.0",
"@xterm/addon-unicode11": "0.8.0", "@tanstack/react-query-devtools": "4.35.3",
"@xterm/addon-web-links": "0.11.0", "@xterm/addon-canvas": "0.7.0",
"@xterm/addon-webgl": "0.18.0", "@xterm/addon-fit": "0.10.0",
"@xterm/xterm": "5.5.0", "@xterm/addon-unicode11": "0.8.0",
"ansi-to-html": "0.7.2", "@xterm/addon-web-links": "0.11.0",
"axios": "1.7.2", "@xterm/addon-webgl": "0.18.0",
"canvas": "3.0.0-rc2", "@xterm/xterm": "5.5.0",
"chart.js": "4.4.0", "ansi-to-html": "0.7.2",
"chartjs-adapter-date-fns": "3.0.0", "axios": "1.7.2",
"chartjs-plugin-annotation": "3.0.1", "canvas": "3.0.0-rc2",
"chroma-js": "2.4.2", "chart.js": "4.4.0",
"color-convert": "2.0.1", "chartjs-adapter-date-fns": "3.0.0",
"cron-parser": "4.9.0", "chartjs-plugin-annotation": "3.0.1",
"cronstrue": "2.43.0", "chroma-js": "2.4.2",
"date-fns": "2.30.0", "color-convert": "2.0.1",
"dayjs": "1.11.4", "cron-parser": "4.9.0",
"emoji-mart": "5.6.0", "cronstrue": "2.43.0",
"file-saver": "2.0.5", "date-fns": "2.30.0",
"formik": "2.4.6", "dayjs": "1.11.4",
"front-matter": "4.0.2", "emoji-mart": "5.6.0",
"jszip": "3.10.1", "file-saver": "2.0.5",
"lodash": "4.17.21", "formik": "2.4.6",
"monaco-editor": "0.50.0", "front-matter": "4.0.2",
"pretty-bytes": "6.1.0", "jszip": "3.10.1",
"react": "18.3.1", "lodash": "4.17.21",
"react-chartjs-2": "5.2.0", "monaco-editor": "0.50.0",
"react-color": "2.19.3", "pretty-bytes": "6.1.0",
"react-confetti": "6.1.0", "react": "18.3.1",
"react-date-range": "1.4.0", "react-chartjs-2": "5.2.0",
"react-dom": "18.3.1", "react-color": "2.19.3",
"react-helmet-async": "2.0.5", "react-confetti": "6.1.0",
"react-markdown": "9.0.1", "react-date-range": "1.4.0",
"react-query": "npm:@tanstack/react-query@4.35.3", "react-dom": "18.3.1",
"react-router-dom": "6.24.0", "react-helmet-async": "2.0.5",
"react-syntax-highlighter": "15.5.0", "react-markdown": "9.0.1",
"react-virtualized-auto-sizer": "1.0.24", "react-query": "npm:@tanstack/react-query@4.35.3",
"react-window": "1.8.10", "react-router-dom": "6.24.0",
"remark-gfm": "4.0.0", "react-syntax-highlighter": "15.5.0",
"rollup-plugin-visualizer": "5.12.0", "react-virtualized-auto-sizer": "1.0.24",
"semver": "7.6.2", "react-window": "1.8.10",
"tzdata": "1.0.30", "remark-gfm": "4.0.0",
"ua-parser-js": "1.0.33", "rollup-plugin-visualizer": "5.12.0",
"ufuzzy": "npm:@leeoniya/ufuzzy@1.0.10", "semver": "7.6.2",
"undici": "6.19.2", "tzdata": "1.0.30",
"unique-names-generator": "4.7.1", "ua-parser-js": "1.0.33",
"uuid": "9.0.0", "ufuzzy": "npm:@leeoniya/ufuzzy@1.0.10",
"yup": "1.4.0" "undici": "6.19.2",
}, "unique-names-generator": "4.7.1",
"devDependencies": { "uuid": "9.0.0",
"@chromatic-com/storybook": "1.6.0", "yup": "1.4.0"
"@octokit/types": "12.3.0", },
"@playwright/test": "1.40.1", "devDependencies": {
"@storybook/addon-actions": "8.1.11", "@biomejs/biome": "1.8.3",
"@storybook/addon-essentials": "8.1.11", "@chromatic-com/storybook": "1.6.0",
"@storybook/addon-interactions": "8.1.11", "@octokit/types": "12.3.0",
"@storybook/addon-links": "8.1.11", "@playwright/test": "1.40.1",
"@storybook/addon-mdx-gfm": "8.1.11", "@storybook/addon-actions": "8.1.11",
"@storybook/addon-themes": "8.1.11", "@storybook/addon-essentials": "8.1.11",
"@storybook/preview-api": "8.1.11", "@storybook/addon-interactions": "8.1.11",
"@storybook/react": "8.1.11", "@storybook/addon-links": "8.1.11",
"@storybook/react-vite": "8.1.11", "@storybook/addon-mdx-gfm": "8.1.11",
"@storybook/test": "8.1.11", "@storybook/addon-themes": "8.1.11",
"@swc/core": "1.3.38", "@storybook/preview-api": "8.1.11",
"@swc/jest": "0.2.24", "@storybook/react": "8.1.11",
"@testing-library/jest-dom": "6.4.6", "@storybook/react-vite": "8.1.11",
"@testing-library/react": "14.1.0", "@storybook/test": "8.1.11",
"@testing-library/react-hooks": "8.0.1", "@swc/core": "1.3.38",
"@testing-library/user-event": "14.5.1", "@swc/jest": "0.2.24",
"@types/chroma-js": "2.4.0", "@testing-library/jest-dom": "6.4.6",
"@types/color-convert": "2.0.0", "@testing-library/react": "14.1.0",
"@types/express": "4.17.17", "@testing-library/react-hooks": "8.0.1",
"@types/file-saver": "2.0.7", "@testing-library/user-event": "14.5.1",
"@types/jest": "29.5.2", "@types/chroma-js": "2.4.0",
"@types/lodash": "4.17.6", "@types/color-convert": "2.0.0",
"@types/node": "18.19.0", "@types/express": "4.17.17",
"@types/react": "18.2.6", "@types/file-saver": "2.0.7",
"@types/react-color": "3.0.6", "@types/jest": "29.5.2",
"@types/react-date-range": "1.4.4", "@types/lodash": "4.17.6",
"@types/react-dom": "18.2.4", "@types/node": "18.19.0",
"@types/react-syntax-highlighter": "15.5.13", "@types/react": "18.2.6",
"@types/react-virtualized-auto-sizer": "1.0.4", "@types/react-color": "3.0.6",
"@types/react-window": "1.8.8", "@types/react-date-range": "1.4.4",
"@types/semver": "7.5.8", "@types/react-dom": "18.2.4",
"@types/ssh2": "1.15.0", "@types/react-syntax-highlighter": "15.5.13",
"@types/ua-parser-js": "0.7.36", "@types/react-virtualized-auto-sizer": "1.0.4",
"@types/uuid": "9.0.2", "@types/react-window": "1.8.8",
"@typescript-eslint/eslint-plugin": "6.9.1", "@types/semver": "7.5.8",
"@typescript-eslint/parser": "6.9.1", "@types/ssh2": "1.15.0",
"@vitejs/plugin-react": "4.3.1", "@types/ua-parser-js": "0.7.36",
"chromatic": "11.3.0", "@types/uuid": "9.0.2",
"eslint": "8.52.0", "@vitejs/plugin-react": "4.3.1",
"eslint-config-prettier": "9.0.0", "chromatic": "11.3.0",
"eslint-import-resolver-typescript": "3.6.0", "eventsourcemock": "2.0.0",
"eslint-plugin-compat": "4.2.0", "express": "4.19.2",
"eslint-plugin-eslint-comments": "3.2.0", "jest": "29.6.2",
"eslint-plugin-import": "2.29.0", "jest-canvas-mock": "2.5.2",
"eslint-plugin-jest": "27.6.0", "jest-environment-jsdom": "29.5.0",
"eslint-plugin-jsx-a11y": "6.7.1", "jest-location-mock": "2.0.0",
"eslint-plugin-react": "7.33.0", "jest-websocket-mock": "2.5.0",
"eslint-plugin-react-hooks": "4.6.0", "jest_workaround": "0.1.14",
"eslint-plugin-storybook": "0.8.0", "msw": "2.2.3",
"eslint-plugin-testing-library": "6.1.0", "prettier": "3.3.3",
"eslint-plugin-unicorn": "49.0.0", "protobufjs": "7.2.5",
"eventsourcemock": "2.0.0", "rxjs": "7.8.1",
"express": "4.19.2", "ssh2": "1.15.0",
"jest": "29.6.2", "storybook": "8.1.11",
"jest-canvas-mock": "2.5.2", "storybook-addon-remix-react-router": "3.0.0",
"jest-environment-jsdom": "29.5.0", "storybook-react-context": "0.6.0",
"jest-location-mock": "2.0.0", "ts-node": "10.9.1",
"jest-runner-eslint": "2.1.0", "ts-proto": "1.164.0",
"jest-websocket-mock": "2.5.0", "ts-prune": "0.10.3",
"jest_workaround": "0.1.14", "typescript": "5.2.2",
"msw": "2.2.3", "vite": "5.3.3",
"prettier": "3.1.0", "vite-plugin-checker": "0.7.1",
"protobufjs": "7.2.5", "vite-plugin-turbosnap": "1.0.2"
"rxjs": "7.8.1", },
"ssh2": "1.15.0", "browserslist": ["chrome 110", "firefox 111", "safari 16.0"],
"storybook": "8.1.11", "resolutions": {
"storybook-addon-remix-react-router": "3.0.0", "optionator": "0.9.3",
"storybook-react-context": "0.6.0", "semver": "7.6.2"
"ts-node": "10.9.1", },
"ts-proto": "1.164.0", "engines": {
"ts-prune": "0.10.3", "npm": ">=9.0.0 <10.0.0",
"typescript": "5.2.2", "node": ">=18.0.0 <21.0.0"
"vite": "5.3.3", }
"vite-plugin-checker": "0.7.1",
"vite-plugin-turbosnap": "1.0.2"
},
"browserslist": [
"chrome 110",
"firefox 111",
"safari 16.0"
],
"resolutions": {
"optionator": "0.9.3",
"semver": "7.6.2"
},
"engines": {
"npm": ">=9.0.0 <10.0.0",
"node": ">=18.0.0 <21.0.0"
}
} }

1633
site/pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,4 @@
// biome-ignore lint/nursery/noRestrictedImports: base theme types
import type { PaletteColor, PaletteColorOptions } from "@mui/material/styles"; import type { PaletteColor, PaletteColorOptions } from "@mui/material/styles";
declare module "@mui/material/styles" { declare module "@mui/material/styles" {

View File

@ -1,13 +1,13 @@
import * as _storybook_types from "@storybook/react"; import * as _storybook_types from "@storybook/react";
import type { QueryKey } from "react-query";
import type { import type {
DeploymentValues,
Experiments, Experiments,
FeatureName, FeatureName,
SerpentOption, SerpentOption,
User, User,
DeploymentValues,
} from "api/typesGenerated"; } from "api/typesGenerated";
import type { Permissions } from "contexts/auth/permissions"; import type { Permissions } from "contexts/auth/permissions";
import type { QueryKey } from "react-query";
declare module "@storybook/react" { declare module "@storybook/react" {
type WebSocketEvent = type WebSocketEvent =

View File

@ -12,8 +12,8 @@ import { QueryClient, QueryClientProvider } from "react-query";
import { RouterProvider } from "react-router-dom"; import { RouterProvider } from "react-router-dom";
import { ErrorBoundary } from "./components/ErrorBoundary/ErrorBoundary"; import { ErrorBoundary } from "./components/ErrorBoundary/ErrorBoundary";
import { GlobalSnackbar } from "./components/GlobalSnackbar/GlobalSnackbar"; import { GlobalSnackbar } from "./components/GlobalSnackbar/GlobalSnackbar";
import { AuthProvider } from "./contexts/auth/AuthProvider";
import { ThemeProvider } from "./contexts/ThemeProvider"; import { ThemeProvider } from "./contexts/ThemeProvider";
import { AuthProvider } from "./contexts/auth/AuthProvider";
import { router } from "./router"; import { router } from "./router";
const defaultQueryClient = new QueryClient({ const defaultQueryClient = new QueryClient({

View File

@ -17,4 +17,4 @@ const monaco = {
module.exports = monaco; module.exports = monaco;
export {}; export type {};

View File

@ -6,7 +6,7 @@ import {
MockWorkspaceBuild, MockWorkspaceBuild,
MockWorkspaceBuildParameter1, MockWorkspaceBuildParameter1,
} from "testHelpers/entities"; } from "testHelpers/entities";
import { API, getURLWithSearchParams, MissingBuildParameters } from "./api"; import { API, MissingBuildParameters, getURLWithSearchParams } from "./api";
import type * as TypesGen from "./typesGenerated"; import type * as TypesGen from "./typesGenerated";
const axiosInstance = API.getAxiosInstance(); const axiosInstance = API.getAxiosInstance();
@ -146,7 +146,7 @@ describe("api.ts", () => {
"/api/v2/workspaces?q=owner%3Ame", "/api/v2/workspaces?q=owner%3Ame",
], ],
])( ])(
`Workspaces - getURLWithSearchParams(%p, %p) returns %p`, "Workspaces - getURLWithSearchParams(%p, %p) returns %p",
(basePath, filter, expected) => { (basePath, filter, expected) => {
expect(getURLWithSearchParams(basePath, filter)).toBe(expected); expect(getURLWithSearchParams(basePath, filter)).toBe(expected);
}, },
@ -163,7 +163,7 @@ describe("api.ts", () => {
], ],
["/api/v2/users", { q: "" }, "/api/v2/users"], ["/api/v2/users", { q: "" }, "/api/v2/users"],
])( ])(
`Users - getURLWithSearchParams(%p, %p) returns %p`, "Users - getURLWithSearchParams(%p, %p) returns %p",
(basePath, filter, expected) => { (basePath, filter, expected) => {
expect(getURLWithSearchParams(basePath, filter)).toBe(expected); expect(getURLWithSearchParams(basePath, filter)).toBe(expected);
}, },

View File

@ -34,7 +34,7 @@ const getMissingParameters = (
const missingParameters: TypesGen.TemplateVersionParameter[] = []; const missingParameters: TypesGen.TemplateVersionParameter[] = [];
const requiredParameters: TypesGen.TemplateVersionParameter[] = []; const requiredParameters: TypesGen.TemplateVersionParameter[] = [];
templateParameters.forEach((p) => { for (const p of templateParameters) {
// It is mutable and required. Mutable values can be changed after so we // It is mutable and required. Mutable values can be changed after so we
// don't need to ask them if they are not required. // don't need to ask them if they are not required.
const isMutableAndRequired = p.mutable && p.required; const isMutableAndRequired = p.mutable && p.required;
@ -44,7 +44,7 @@ const getMissingParameters = (
if (isMutableAndRequired || isImmutable) { if (isMutableAndRequired || isImmutable) {
requiredParameters.push(p); requiredParameters.push(p);
} }
}); }
for (const parameter of requiredParameters) { for (const parameter of requiredParameters) {
// Check if there is a new value // Check if there is a new value
@ -68,9 +68,9 @@ const getMissingParameters = (
} }
// Check if parameter "options" changed and we can't use old build parameters. // Check if parameter "options" changed and we can't use old build parameters.
templateParameters.forEach((templateParameter) => { for (const templateParameter of templateParameters) {
if (templateParameter.options.length === 0) { if (templateParameter.options.length === 0) {
return; continue;
} }
// Check if there is a new value // Check if there is a new value
@ -86,7 +86,7 @@ const getMissingParameters = (
} }
if (!buildParameter) { if (!buildParameter) {
return; continue;
} }
const matchingOption = templateParameter.options.find( const matchingOption = templateParameter.options.find(
@ -95,7 +95,8 @@ const getMissingParameters = (
if (!matchingOption) { if (!matchingOption) {
missingParameters.push(templateParameter); missingParameters.push(templateParameter);
} }
}); }
return missingParameters; return missingParameters;
}; };
@ -132,13 +133,11 @@ export const getURLWithSearchParams = (
} }
const searchParams = new URLSearchParams(); const searchParams = new URLSearchParams();
const keys = Object.keys(options) as (keyof SearchParamOptions)[]; for (const [key, value] of Object.entries(options)) {
keys.forEach((key) => {
const value = options[key];
if (value !== undefined && value !== "") { if (value !== undefined && value !== "") {
searchParams.append(key, value.toString()); searchParams.append(key, value.toString());
} }
}); }
const searchString = searchParams.toString(); const searchString = searchParams.toString();
return searchString ? `${basePath}?${searchString}` : basePath; return searchString ? `${basePath}?${searchString}` : basePath;
@ -241,7 +240,7 @@ export const watchWorkspaceAgentLogs = (
}); });
socket.addEventListener("close", () => { socket.addEventListener("close", () => {
onDone && onDone(); onDone?.();
}); });
return socket; return socket;
@ -281,13 +280,13 @@ export const watchBuildLogsByBuildId = (
); );
socket.addEventListener("error", () => { socket.addEventListener("error", () => {
onError && onError(new Error("Connection for logs failed.")); onError?.(new Error("Connection for logs failed."));
socket.close(); socket.close();
}); });
socket.addEventListener("close", () => { socket.addEventListener("close", () => {
// When the socket closes, logs have finished streaming! // When the socket closes, logs have finished streaming!
onDone && onDone(); onDone?.();
}); });
return socket; return socket;
@ -317,7 +316,7 @@ function normalizeGetTemplatesOptions(
const params: Record<string, string> = {}; const params: Record<string, string> = {};
if (options.deprecated !== undefined) { if (options.deprecated !== undefined) {
params["deprecated"] = String(options.deprecated); params.deprecated = String(options.deprecated);
} }
return params; return params;
} }
@ -464,7 +463,7 @@ class ApiMethods {
params: TypesGen.AuthorizationRequest, params: TypesGen.AuthorizationRequest,
): Promise<TypesGen.AuthorizationResponse> => { ): Promise<TypesGen.AuthorizationResponse> => {
const response = await this.axios.post<TypesGen.AuthorizationResponse>( const response = await this.axios.post<TypesGen.AuthorizationResponse>(
`/api/v2/authcheck`, "/api/v2/authcheck",
params, params,
); );
@ -483,7 +482,7 @@ class ApiMethods {
params: TypesGen.TokensFilter, params: TypesGen.TokensFilter,
): Promise<TypesGen.APIKeyWithOwner[]> => { ): Promise<TypesGen.APIKeyWithOwner[]> => {
const response = await this.axios.get<TypesGen.APIKeyWithOwner[]>( const response = await this.axios.get<TypesGen.APIKeyWithOwner[]>(
`/api/v2/users/me/keys/tokens`, "/api/v2/users/me/keys/tokens",
{ params }, { params },
); );
@ -498,7 +497,7 @@ class ApiMethods {
params: TypesGen.CreateTokenRequest, params: TypesGen.CreateTokenRequest,
): Promise<TypesGen.GenerateAPIKeyResponse> => { ): Promise<TypesGen.GenerateAPIKeyResponse> => {
const response = await this.axios.post( const response = await this.axios.post(
`/api/v2/users/me/keys/tokens`, "/api/v2/users/me/keys/tokens",
params, params,
); );
@ -706,7 +705,7 @@ class ApiMethods {
): Promise<TypesGen.Template[]> => { ): Promise<TypesGen.Template[]> => {
const params = normalizeGetTemplatesOptions(options); const params = normalizeGetTemplatesOptions(options);
const response = await this.axios.get<TypesGen.Template[]>( const response = await this.axios.get<TypesGen.Template[]>(
`/api/v2/templates`, "/api/v2/templates",
{ params }, { params },
); );
@ -993,8 +992,8 @@ class ApiMethods {
let latestJobInfo: TypesGen.ProvisionerJob | undefined = undefined; let latestJobInfo: TypesGen.ProvisionerJob | undefined = undefined;
while ( while (
!["succeeded", "canceled"].some( !["succeeded", "canceled"].some((status) =>
(status) => latestJobInfo?.status.includes(status), latestJobInfo?.status.includes(status),
) )
) { ) {
const { job } = await this.getWorkspaceBuildByNumber( const { job } = await this.getWorkspaceBuildByNumber(
@ -1276,7 +1275,7 @@ class ApiMethods {
createFirstUser = async ( createFirstUser = async (
req: TypesGen.CreateFirstUserRequest, req: TypesGen.CreateFirstUserRequest,
): Promise<TypesGen.CreateFirstUserResponse> => { ): Promise<TypesGen.CreateFirstUserResponse> => {
const response = await this.axios.post(`/api/v2/users/first`, req); const response = await this.axios.post("/api/v2/users/first", req);
return response.data; return response.data;
}; };
@ -1288,8 +1287,9 @@ class ApiMethods {
}; };
getRoles = async (): Promise<Array<TypesGen.AssignableRoles>> => { getRoles = async (): Promise<Array<TypesGen.AssignableRoles>> => {
const response = const response = await this.axios.get<TypesGen.AssignableRoles[]>(
await this.axios.get<TypesGen.AssignableRoles[]>(`/api/v2/users/roles`); "/api/v2/users/roles",
);
return response.data; return response.data;
}; };
@ -1449,7 +1449,7 @@ class ApiMethods {
getUserExternalAuthProviders = getUserExternalAuthProviders =
async (): Promise<TypesGen.ListUserExternalAuthResponse> => { async (): Promise<TypesGen.ListUserExternalAuthResponse> => {
const resp = await this.axios.get(`/api/v2/external-auth`); const resp = await this.axios.get("/api/v2/external-auth");
return resp.data; return resp.data;
}; };
@ -1480,7 +1480,7 @@ class ApiMethods {
data: TypesGen.PostOAuth2ProviderAppRequest, data: TypesGen.PostOAuth2ProviderAppRequest,
): Promise<TypesGen.OAuth2ProviderApp> => { ): Promise<TypesGen.OAuth2ProviderApp> => {
const response = await this.axios.post( const response = await this.axios.post(
`/api/v2/oauth2-provider/apps`, "/api/v2/oauth2-provider/apps",
data, data,
); );
return response.data; return response.data;
@ -1599,7 +1599,7 @@ class ApiMethods {
}; };
getApplicationsHost = async (): Promise<TypesGen.AppHostResponse> => { getApplicationsHost = async (): Promise<TypesGen.AppHostResponse> => {
const response = await this.axios.get(`/api/v2/applications/host`); const response = await this.axios.get("/api/v2/applications/host");
return response.data; return response.data;
}; };
@ -1722,22 +1722,22 @@ class ApiMethods {
// getDeploymentSSHConfig is used by the VSCode-Extension. // getDeploymentSSHConfig is used by the VSCode-Extension.
getDeploymentSSHConfig = async (): Promise<TypesGen.SSHConfigResponse> => { getDeploymentSSHConfig = async (): Promise<TypesGen.SSHConfigResponse> => {
const response = await this.axios.get(`/api/v2/deployment/ssh`); const response = await this.axios.get("/api/v2/deployment/ssh");
return response.data; return response.data;
}; };
getDeploymentConfig = async (): Promise<DeploymentConfig> => { getDeploymentConfig = async (): Promise<DeploymentConfig> => {
const response = await this.axios.get(`/api/v2/deployment/config`); const response = await this.axios.get("/api/v2/deployment/config");
return response.data; return response.data;
}; };
getDeploymentStats = async (): Promise<TypesGen.DeploymentStats> => { getDeploymentStats = async (): Promise<TypesGen.DeploymentStats> => {
const response = await this.axios.get(`/api/v2/deployment/stats`); const response = await this.axios.get("/api/v2/deployment/stats");
return response.data; return response.data;
}; };
getReplicas = async (): Promise<TypesGen.Replica[]> => { getReplicas = async (): Promise<TypesGen.Replica[]> => {
const response = await this.axios.get(`/api/v2/replicas`); const response = await this.axios.get("/api/v2/replicas");
return response.data; return response.data;
}; };
@ -1755,7 +1755,7 @@ class ApiMethods {
> => { > => {
const response = const response =
await this.axios.get<TypesGen.RegionsResponse<TypesGen.Region>>( await this.axios.get<TypesGen.RegionsResponse<TypesGen.Region>>(
`/api/v2/regions`, "/api/v2/regions",
); );
return response.data; return response.data;
@ -1766,7 +1766,7 @@ class ApiMethods {
> => { > => {
const response = await this.axios.get< const response = await this.axios.get<
TypesGen.RegionsResponse<TypesGen.WorkspaceProxy> TypesGen.RegionsResponse<TypesGen.WorkspaceProxy>
>(`/api/v2/workspaceproxies`); >("/api/v2/workspaceproxies");
return response.data; return response.data;
}; };
@ -1774,13 +1774,13 @@ class ApiMethods {
createWorkspaceProxy = async ( createWorkspaceProxy = async (
b: TypesGen.CreateWorkspaceProxyRequest, b: TypesGen.CreateWorkspaceProxyRequest,
): Promise<TypesGen.UpdateWorkspaceProxyResponse> => { ): Promise<TypesGen.UpdateWorkspaceProxyResponse> => {
const response = await this.axios.post(`/api/v2/workspaceproxies`, b); const response = await this.axios.post("/api/v2/workspaceproxies", b);
return response.data; return response.data;
}; };
getAppearance = async (): Promise<TypesGen.AppearanceConfig> => { getAppearance = async (): Promise<TypesGen.AppearanceConfig> => {
try { try {
const response = await this.axios.get(`/api/v2/appearance`); const response = await this.axios.get("/api/v2/appearance");
return response.data || {}; return response.data || {};
} catch (ex) { } catch (ex) {
if (isAxiosError(ex) && ex.response?.status === 404) { if (isAxiosError(ex) && ex.response?.status === 404) {
@ -1801,7 +1801,7 @@ class ApiMethods {
updateAppearance = async ( updateAppearance = async (
b: TypesGen.AppearanceConfig, b: TypesGen.AppearanceConfig,
): Promise<TypesGen.AppearanceConfig> => { ): Promise<TypesGen.AppearanceConfig> => {
const response = await this.axios.put(`/api/v2/appearance`, b); const response = await this.axios.put("/api/v2/appearance", b);
return response.data; return response.data;
}; };
@ -1809,7 +1809,7 @@ class ApiMethods {
* @param organization Can be the organization's ID or name * @param organization Can be the organization's ID or name
*/ */
getTemplateExamples = async (): Promise<TypesGen.TemplateExample[]> => { getTemplateExamples = async (): Promise<TypesGen.TemplateExample[]> => {
const response = await this.axios.get(`/api/v2/templates/examples`); const response = await this.axios.get("/api/v2/templates/examples");
return response.data; return response.data;
}; };
@ -1849,14 +1849,14 @@ class ApiMethods {
}; };
getLicenses = async (): Promise<GetLicensesResponse[]> => { getLicenses = async (): Promise<GetLicensesResponse[]> => {
const response = await this.axios.get(`/api/v2/licenses`); const response = await this.axios.get("/api/v2/licenses");
return response.data; return response.data;
}; };
createLicense = async ( createLicense = async (
data: TypesGen.AddLicenseRequest, data: TypesGen.AddLicenseRequest,
): Promise<TypesGen.AddLicenseRequest> => { ): Promise<TypesGen.AddLicenseRequest> => {
const response = await this.axios.post(`/api/v2/licenses`, data); const response = await this.axios.post("/api/v2/licenses", data);
return response.data; return response.data;
}; };
@ -2005,7 +2005,7 @@ class ApiMethods {
return response.data; return response.data;
}; };
getHealth = async (force: boolean = false) => { getHealth = async (force = false) => {
const params = new URLSearchParams({ force: force.toString() }); const params = new URLSearchParams({ force: force.toString() });
const response = await this.axios.get<TypesGen.HealthcheckReport>( const response = await this.axios.get<TypesGen.HealthcheckReport>(
`/api/v2/debug/health?${params}`, `/api/v2/debug/health?${params}`,
@ -2015,7 +2015,7 @@ class ApiMethods {
getHealthSettings = async (): Promise<TypesGen.HealthSettings> => { getHealthSettings = async (): Promise<TypesGen.HealthSettings> => {
const res = await this.axios.get<TypesGen.HealthSettings>( const res = await this.axios.get<TypesGen.HealthSettings>(
`/api/v2/debug/health/settings`, "/api/v2/debug/health/settings",
); );
return res.data; return res.data;
@ -2023,7 +2023,7 @@ class ApiMethods {
updateHealthSettings = async (data: TypesGen.UpdateHealthSettings) => { updateHealthSettings = async (data: TypesGen.UpdateHealthSettings) => {
const response = await this.axios.put<TypesGen.HealthSettings>( const response = await this.axios.put<TypesGen.HealthSettings>(
`/api/v2/debug/health/settings`, "/api/v2/debug/health/settings",
data, data,
); );
@ -2093,14 +2093,14 @@ class ApiMethods {
getSystemNotificationTemplates = async () => { getSystemNotificationTemplates = async () => {
const res = await this.axios.get<TypesGen.NotificationTemplate[]>( const res = await this.axios.get<TypesGen.NotificationTemplate[]>(
`/api/v2/notifications/templates/system`, "/api/v2/notifications/templates/system",
); );
return res.data; return res.data;
}; };
getNotificationDispatchMethods = async () => { getNotificationDispatchMethods = async () => {
const res = await this.axios.get<TypesGen.NotificationMethodsResponse>( const res = await this.axios.get<TypesGen.NotificationMethodsResponse>(
`/api/v2/notifications/dispatch-methods`, "/api/v2/notifications/dispatch-methods",
); );
return res.data; return res.data;
}; };

View File

@ -1,9 +1,9 @@
import { mockApiError } from "testHelpers/entities"; import { mockApiError } from "testHelpers/entities";
import { import {
getErrorMessage,
getValidationErrorMessage, getValidationErrorMessage,
isApiError, isApiError,
mapApiErrorToFieldErrors, mapApiErrorToFieldErrors,
getErrorMessage,
} from "./errors"; } from "./errors";
describe("isApiError", () => { describe("isApiError", () => {

View File

@ -1,7 +1,7 @@
import type { QueryClient } from "react-query";
import { API } from "api/api"; import { API } from "api/api";
import type { AppearanceConfig } from "api/typesGenerated"; import type { AppearanceConfig } from "api/typesGenerated";
import type { MetadataState } from "hooks/useEmbeddedMetadata"; import type { MetadataState } from "hooks/useEmbeddedMetadata";
import type { QueryClient } from "react-query";
import { cachedQuery } from "./util"; import { cachedQuery } from "./util";
export const appearanceConfigKey = ["appearance"] as const; export const appearanceConfigKey = ["appearance"] as const;

View File

@ -1,6 +1,6 @@
import type { QueryClient, UseMutationOptions } from "react-query";
import { API } from "api/api"; import { API } from "api/api";
import type { HealthSettings, UpdateHealthSettings } from "api/typesGenerated"; import type { HealthSettings, UpdateHealthSettings } from "api/typesGenerated";
import type { QueryClient, UseMutationOptions } from "react-query";
export const HEALTH_QUERY_KEY = ["health"]; export const HEALTH_QUERY_KEY = ["health"];
export const HEALTH_QUERY_SETTINGS_KEY = ["health", "settings"]; export const HEALTH_QUERY_SETTINGS_KEY = ["health", "settings"];

View File

@ -1,7 +1,7 @@
import type { QueryClient } from "react-query";
import { API } from "api/api"; import { API } from "api/api";
import type { Entitlements } from "api/typesGenerated"; import type { Entitlements } from "api/typesGenerated";
import type { MetadataState } from "hooks/useEmbeddedMetadata"; import type { MetadataState } from "hooks/useEmbeddedMetadata";
import type { QueryClient } from "react-query";
import { cachedQuery } from "./util"; import { cachedQuery } from "./util";
const entitlementsQueryKey = ["entitlements"] as const; const entitlementsQueryKey = ["entitlements"] as const;

View File

@ -1,6 +1,6 @@
import type { QueryClient, UseMutationOptions } from "react-query";
import { API } from "api/api"; import { API } from "api/api";
import type { ExternalAuth } from "api/typesGenerated"; import type { ExternalAuth } from "api/typesGenerated";
import type { QueryClient, UseMutationOptions } from "react-query";
// Returns all configured external auths for a given user. // Returns all configured external auths for a given user.
export const externalAuths = () => { export const externalAuths = () => {

View File

@ -1,10 +1,10 @@
import type { QueryClient, UseQueryOptions } from "react-query";
import { API } from "api/api"; import { API } from "api/api";
import type { import type {
CreateGroupRequest, CreateGroupRequest,
Group, Group,
PatchGroupRequest, PatchGroupRequest,
} from "api/typesGenerated"; } from "api/typesGenerated";
import type { QueryClient, UseQueryOptions } from "react-query";
type GroupSortOrder = "asc" | "desc"; type GroupSortOrder = "asc" | "desc";
@ -120,7 +120,7 @@ export const patchGroup = (queryClient: QueryClient) => {
export const deleteGroup = (queryClient: QueryClient) => { export const deleteGroup = (queryClient: QueryClient) => {
return { return {
mutationFn: API.deleteGroup, mutationFn: API.deleteGroup,
onSuccess: async (_: void, groupId: string) => onSuccess: async (_: unknown, groupId: string) =>
invalidateGroup(queryClient, "default", groupId), invalidateGroup(queryClient, "default", groupId),
}; };
}; };
@ -159,15 +159,12 @@ export function sortGroupsByName(
) { ) {
return [...groups].sort((g1, g2) => { return [...groups].sort((g1, g2) => {
const key = g1.display_name && g2.display_name ? "display_name" : "name"; const key = g1.display_name && g2.display_name ? "display_name" : "name";
const direction = order === "asc" ? 1 : -1;
if (g1[key] === g2[key]) { if (g1[key] === g2[key]) {
return 0; return 0;
} }
if (order === "asc") { return (g1[key] < g2[key] ? -1 : 1) * direction;
return g1[key] < g2[key] ? -1 : 1;
} else {
return g1[key] < g2[key] ? 1 : -1;
}
}); });
} }

View File

@ -1,4 +1,4 @@
import { type InsightsParams, type InsightsTemplateParams, API } from "api/api"; import { API, type InsightsParams, type InsightsTemplateParams } from "api/api";
export const insightsTemplate = (params: InsightsTemplateParams) => { export const insightsTemplate = (params: InsightsTemplateParams) => {
return { return {

View File

@ -1,4 +1,3 @@
import type { QueryClient, UseMutationOptions } from "react-query";
import { API } from "api/api"; import { API } from "api/api";
import type { import type {
NotificationPreference, NotificationPreference,
@ -6,6 +5,7 @@ import type {
UpdateNotificationTemplateMethod, UpdateNotificationTemplateMethod,
UpdateUserNotificationPreferences, UpdateUserNotificationPreferences,
} from "api/typesGenerated"; } from "api/typesGenerated";
import type { QueryClient, UseMutationOptions } from "react-query";
export const userNotificationPreferencesKey = (userId: string) => [ export const userNotificationPreferencesKey = (userId: string) => [
"users", "users",
@ -98,7 +98,7 @@ export const notificationDispatchMethodsKey = [
export const notificationDispatchMethods = () => { export const notificationDispatchMethods = () => {
return { return {
staleTime: Infinity, staleTime: Number.POSITIVE_INFINITY,
queryKey: notificationDispatchMethodsKey, queryKey: notificationDispatchMethodsKey,
queryFn: () => API.getNotificationDispatchMethods(), queryFn: () => API.getNotificationDispatchMethods(),
}; };

View File

@ -1,6 +1,6 @@
import type { QueryClient } from "react-query";
import { API } from "api/api"; import { API } from "api/api";
import type * as TypesGen from "api/typesGenerated"; import type * as TypesGen from "api/typesGenerated";
import type { QueryClient } from "react-query";
const appsKey = ["oauth2-provider", "apps"]; const appsKey = ["oauth2-provider", "apps"];
const userAppsKey = (userId: string) => appsKey.concat(userId); const userAppsKey = (userId: string) => appsKey.concat(userId);
@ -85,7 +85,7 @@ export const deleteAppSecret = (queryClient: QueryClient) => {
return { return {
mutationFn: ({ appId, secretId }: { appId: string; secretId: string }) => mutationFn: ({ appId, secretId }: { appId: string; secretId: string }) =>
API.deleteOAuth2ProviderAppSecret(appId, secretId), API.deleteOAuth2ProviderAppSecret(appId, secretId),
onSuccess: async (_: void, { appId }: { appId: string }) => { onSuccess: async (_: unknown, { appId }: { appId: string }) => {
await queryClient.invalidateQueries({ await queryClient.invalidateQueries({
queryKey: appSecretsKey(appId), queryKey: appSecretsKey(appId),
}); });

View File

@ -1,10 +1,10 @@
import type { QueryClient } from "react-query";
import { API } from "api/api"; import { API } from "api/api";
import type { import type {
AuthorizationResponse, AuthorizationResponse,
CreateOrganizationRequest, CreateOrganizationRequest,
UpdateOrganizationRequest, UpdateOrganizationRequest,
} from "api/typesGenerated"; } from "api/typesGenerated";
import type { QueryClient } from "react-query";
import { meKey } from "./users"; import { meKey } from "./users";
export const createOrganization = (queryClient: QueryClient) => { export const createOrganization = (queryClient: QueryClient) => {
@ -221,14 +221,12 @@ export const organizationsPermissions = (
// The endpoint takes a flat array, so to avoid collisions prepend each // The endpoint takes a flat array, so to avoid collisions prepend each
// check with the org ID (the key can be anything we want). // check with the org ID (the key can be anything we want).
const prefixedChecks = organizationIds const prefixedChecks = organizationIds.flatMap((orgId) =>
.map((orgId) => Object.entries(checks(orgId)).map(([key, val]) => [
Object.entries(checks(orgId)).map(([key, val]) => [ `${orgId}.${key}`,
`${orgId}.${key}`, val,
val, ]),
]), );
)
.flat();
const response = await API.checkAuthorization({ const response = await API.checkAuthorization({
checks: Object.fromEntries(prefixedChecks), checks: Object.fromEntries(prefixedChecks),

View File

@ -1,6 +1,6 @@
import type { QueryClient } from "react-query";
import { API } from "api/api"; import { API } from "api/api";
import type { Role } from "api/typesGenerated"; import type { Role } from "api/typesGenerated";
import type { QueryClient } from "react-query";
const getRoleQueryKey = (organizationId: string, roleName: string) => [ const getRoleQueryKey = (organizationId: string, roleName: string) => [
"organization", "organization",
@ -58,7 +58,7 @@ export const deleteOrganizationRole = (
return { return {
mutationFn: (roleName: string) => mutationFn: (roleName: string) =>
API.deleteOrganizationRole(organization, roleName), API.deleteOrganizationRole(organization, roleName),
onSuccess: async (_: void, roleName: string) => onSuccess: async (_: unknown, roleName: string) =>
await queryClient.invalidateQueries( await queryClient.invalidateQueries(
getRoleQueryKey(organization, roleName), getRoleQueryKey(organization, roleName),
), ),

View File

@ -1,9 +1,9 @@
import type { QueryClient, QueryOptions } from "react-query";
import { API } from "api/api"; import { API } from "api/api";
import type { import type {
UpdateUserQuietHoursScheduleRequest, UpdateUserQuietHoursScheduleRequest,
UserQuietHoursScheduleResponse, UserQuietHoursScheduleResponse,
} from "api/typesGenerated"; } from "api/typesGenerated";
import type { QueryClient, QueryOptions } from "react-query";
export const userQuietHoursScheduleKey = (userId: string) => [ export const userQuietHoursScheduleKey = (userId: string) => [
"settings", "settings",

View File

@ -1,6 +1,6 @@
import type { QueryClient } from "react-query";
import { API } from "api/api"; import { API } from "api/api";
import type { GitSSHKey } from "api/typesGenerated"; import type { GitSSHKey } from "api/typesGenerated";
import type { QueryClient } from "react-query";
const getUserSSHKeyQueryKey = (userId: string) => [userId, "sshKey"]; const getUserSSHKeyQueryKey = (userId: string) => [userId, "sshKey"];

View File

@ -1,15 +1,15 @@
import type { MutationOptions, QueryClient, QueryOptions } from "react-query"; import { API, type GetTemplatesOptions, type GetTemplatesQuery } from "api/api";
import { API, type GetTemplatesQuery, type GetTemplatesOptions } from "api/api";
import type { import type {
CreateTemplateRequest, CreateTemplateRequest,
CreateTemplateVersionRequest, CreateTemplateVersionRequest,
ProvisionerJob, ProvisionerJob,
ProvisionerJobStatus, ProvisionerJobStatus,
UsersRequest,
Template, Template,
TemplateRole, TemplateRole,
TemplateVersion, TemplateVersion,
UsersRequest,
} from "api/typesGenerated"; } from "api/typesGenerated";
import type { MutationOptions, QueryClient, QueryOptions } from "react-query";
import { delay } from "utils/delay"; import { delay } from "utils/delay";
import { getTemplateVersionFiles } from "utils/templateVersion"; import { getTemplateVersionFiles } from "utils/templateVersion";

View File

@ -1,24 +1,24 @@
import { API } from "api/api";
import type {
AuthorizationRequest,
GenerateAPIKeyResponse,
GetUsersResponse,
UpdateUserAppearanceSettingsRequest,
UpdateUserPasswordRequest,
UpdateUserProfileRequest,
User,
UsersRequest,
} from "api/typesGenerated";
import {
type MetadataState,
defaultMetadataManager,
} from "hooks/useEmbeddedMetadata";
import type { UsePaginatedQueryOptions } from "hooks/usePaginatedQuery";
import type { import type {
QueryClient, QueryClient,
UseMutationOptions, UseMutationOptions,
UseQueryOptions, UseQueryOptions,
} from "react-query"; } from "react-query";
import { API } from "api/api";
import type {
AuthorizationRequest,
GetUsersResponse,
UpdateUserPasswordRequest,
UpdateUserProfileRequest,
UpdateUserAppearanceSettingsRequest,
UsersRequest,
User,
GenerateAPIKeyResponse,
} from "api/typesGenerated";
import {
defaultMetadataManager,
type MetadataState,
} from "hooks/useEmbeddedMetadata";
import type { UsePaginatedQueryOptions } from "hooks/usePaginatedQuery";
import { prepareQuery } from "utils/filters"; import { prepareQuery } from "utils/filters";
import { getAuthorizationKey } from "./authCheck"; import { getAuthorizationKey } from "./authCheck";
import { cachedQuery } from "./util"; import { cachedQuery } from "./util";

View File

@ -1,9 +1,9 @@
import type { UseQueryOptions, QueryKey } from "react-query";
import type { MetadataState, MetadataValue } from "hooks/useEmbeddedMetadata"; import type { MetadataState, MetadataValue } from "hooks/useEmbeddedMetadata";
import type { QueryKey, UseQueryOptions } from "react-query";
export const disabledRefetchOptions = { export const disabledRefetchOptions = {
cacheTime: Infinity, cacheTime: Number.POSITIVE_INFINITY,
staleTime: Infinity, staleTime: Number.POSITIVE_INFINITY,
refetchOnMount: false, refetchOnMount: false,
refetchOnReconnect: false, refetchOnReconnect: false,
refetchOnWindowFocus: false, refetchOnWindowFocus: false,

View File

@ -1,10 +1,10 @@
import type { QueryOptions, UseInfiniteQueryOptions } from "react-query";
import { API } from "api/api"; import { API } from "api/api";
import type { import type {
WorkspaceBuild, WorkspaceBuild,
WorkspaceBuildParameter, WorkspaceBuildParameter,
WorkspaceBuildsRequest, WorkspaceBuildsRequest,
} from "api/typesGenerated"; } from "api/typesGenerated";
import type { QueryOptions, UseInfiniteQueryOptions } from "react-query";
export function workspaceBuildParametersKey(workspaceBuildId: string) { export function workspaceBuildParametersKey(workspaceBuildId: string) {
return ["workspaceBuilds", workspaceBuildId, "parameters"] as const; return ["workspaceBuilds", workspaceBuildId, "parameters"] as const;

View File

@ -1,10 +1,4 @@
import type { Dayjs } from "dayjs"; import { API, type DeleteWorkspaceOptions } from "api/api";
import type {
QueryClient,
QueryOptions,
UseMutationOptions,
} from "react-query";
import { type DeleteWorkspaceOptions, API } from "api/api";
import { DetailedError, isApiValidationError } from "api/errors"; import { DetailedError, isApiValidationError } from "api/errors";
import type { import type {
CreateWorkspaceRequest, CreateWorkspaceRequest,
@ -16,7 +10,13 @@ import type {
WorkspacesRequest, WorkspacesRequest,
WorkspacesResponse, WorkspacesResponse,
} from "api/typesGenerated"; } from "api/typesGenerated";
import type { Dayjs } from "dayjs";
import type { ConnectionStatus } from "pages/TerminalPage/types"; import type { ConnectionStatus } from "pages/TerminalPage/types";
import type {
QueryClient,
QueryOptions,
UseMutationOptions,
} from "react-query";
import { disabledRefetchOptions } from "./util"; import { disabledRefetchOptions } from "./util";
import { workspaceBuildsKey } from "./workspaceBuilds"; import { workspaceBuildsKey } from "./workspaceBuilds";
@ -88,7 +88,7 @@ export const autoCreateWorkspace = (queryClient: QueryClient) => {
} }
} }
let templateVersionParameters; let templateVersionParameters: Partial<CreateWorkspaceRequest>;
if (templateVersionId) { if (templateVersionId) {
templateVersionParameters = { template_version_id: templateVersionId }; templateVersionParameters = { template_version_id: templateVersionId };
@ -307,9 +307,8 @@ export const toggleFavorite = (
mutationFn: () => { mutationFn: () => {
if (workspace.favorite) { if (workspace.favorite) {
return API.deleteFavoriteWorkspace(workspace.id); return API.deleteFavoriteWorkspace(workspace.id);
} else {
return API.putFavoriteWorkspace(workspace.id);
} }
return API.putFavoriteWorkspace(workspace.id);
}, },
onSuccess: async () => { onSuccess: async () => {
queryClient.setQueryData( queryClient.setQueryData(

File diff suppressed because it is too large Load Diff

View File

@ -57,7 +57,7 @@ function getAccessibleLabel(
} }
function initializeText(text: string): string { function initializeText(text: string): string {
return text.trim().toUpperCase().replaceAll(/\B/g, ".") + "."; return `${text.trim().toUpperCase().replaceAll(/\B/g, ".")}.`;
} }
function flattenPronunciation(text: string): string { function flattenPronunciation(text: string): string {

View File

@ -4,27 +4,27 @@ import {
CategoryScale, CategoryScale,
Chart as ChartJS, Chart as ChartJS,
type ChartOptions, type ChartOptions,
defaults,
Filler, Filler,
Legend, Legend,
LinearScale,
LineElement, LineElement,
LinearScale,
PointElement,
TimeScale, TimeScale,
Title, Title,
Tooltip, Tooltip,
PointElement, defaults,
} from "chart.js"; } from "chart.js";
import annotationPlugin from "chartjs-plugin-annotation"; import annotationPlugin from "chartjs-plugin-annotation";
import {
HelpTooltip,
HelpTooltipContent,
HelpTooltipText,
HelpTooltipTitle,
HelpTooltipTrigger,
} from "components/HelpTooltip/HelpTooltip";
import dayjs from "dayjs"; import dayjs from "dayjs";
import type { FC } from "react"; import type { FC } from "react";
import { Line } from "react-chartjs-2"; import { Line } from "react-chartjs-2";
import {
HelpTooltip,
HelpTooltipTitle,
HelpTooltipText,
HelpTooltipContent,
HelpTooltipTrigger,
} from "components/HelpTooltip/HelpTooltip";
ChartJS.register( ChartJS.register(
CategoryScale, CategoryScale,

View File

@ -1,14 +1,14 @@
// eslint-disable-next-line no-restricted-imports -- It is the base component
import MuiAlert, { import MuiAlert, {
type AlertProps as MuiAlertProps, type AlertProps as MuiAlertProps,
// biome-ignore lint/nursery/noRestrictedImports: Used as base component
} from "@mui/material/Alert"; } from "@mui/material/Alert";
import Button from "@mui/material/Button"; import Button from "@mui/material/Button";
import Collapse from "@mui/material/Collapse"; import Collapse from "@mui/material/Collapse";
import { import {
useState,
type FC, type FC,
type ReactNode,
type PropsWithChildren, type PropsWithChildren,
type ReactNode,
useState,
} from "react"; } from "react";
export type AlertProps = MuiAlertProps & { export type AlertProps = MuiAlertProps & {

View File

@ -1,6 +1,6 @@
import AlertTitle from "@mui/material/AlertTitle"; import AlertTitle from "@mui/material/AlertTitle";
import { getErrorDetail, getErrorMessage } from "api/errors";
import type { FC } from "react"; import type { FC } from "react";
import { getErrorMessage, getErrorDetail } from "api/errors";
import { Alert, AlertDetail, type AlertProps } from "./Alert"; import { Alert, AlertDetail, type AlertProps } from "./Alert";
export const ErrorAlert: FC< export const ErrorAlert: FC<

View File

@ -1,8 +1,7 @@
import { css, type Interpolation, type Theme, useTheme } from "@emotion/react"; import { type Interpolation, type Theme, css, useTheme } from "@emotion/react";
// This is the only place MuiAvatar can be used
// eslint-disable-next-line no-restricted-imports -- Read above
import MuiAvatar, { import MuiAvatar, {
type AvatarProps as MuiAvatarProps, type AvatarProps as MuiAvatarProps,
// biome-ignore lint/nursery/noRestrictedImports: Used as base component
} from "@mui/material/Avatar"; } from "@mui/material/Avatar";
import { visuallyHidden } from "@mui/utils"; import { visuallyHidden } from "@mui/utils";
import { type FC, useId } from "react"; import { type FC, useId } from "react";

View File

@ -1,6 +1,6 @@
import { type CSSObject, useTheme } from "@emotion/react"; import { type CSSObject, useTheme } from "@emotion/react";
import type { FC, ReactNode } from "react";
import { Avatar } from "components/Avatar/Avatar"; import { Avatar } from "components/Avatar/Avatar";
import type { FC, ReactNode } from "react";
type AvatarCardProps = { type AvatarCardProps = {
header: string; header: string;

View File

@ -1,7 +1,7 @@
import { useTheme } from "@emotion/react"; import { useTheme } from "@emotion/react";
import type { FC, ReactNode } from "react";
import { Avatar } from "components/Avatar/Avatar"; import { Avatar } from "components/Avatar/Avatar";
import { Stack } from "components/Stack/Stack"; import { Stack } from "components/Stack/Stack";
import type { FC, ReactNode } from "react";
export interface AvatarDataProps { export interface AvatarDataProps {
title: ReactNode; title: ReactNode;

View File

@ -1,6 +1,6 @@
import Skeleton from "@mui/material/Skeleton"; import Skeleton from "@mui/material/Skeleton";
import type { FC } from "react";
import { Stack } from "components/Stack/Stack"; import { Stack } from "components/Stack/Stack";
import type { FC } from "react";
export const AvatarDataSkeleton: FC = () => { export const AvatarDataSkeleton: FC = () => {
return ( return (

View File

@ -1,16 +1,16 @@
import type { Meta, StoryObj } from "@storybook/react"; import type { Meta, StoryObj } from "@storybook/react";
import { import {
Badges,
AlphaBadge, AlphaBadge,
PreviewBadge, Badges,
DisabledBadge, DisabledBadge,
EnabledBadge, EnabledBadge,
EntitledBadge,
EnterpriseBadge, EnterpriseBadge,
EntitledBadge,
HealthyBadge, HealthyBadge,
NotHealthyBadge, NotHealthyBadge,
NotRegisteredBadge,
NotReachableBadge, NotReachableBadge,
NotRegisteredBadge,
PreviewBadge,
} from "./Badges"; } from "./Badges";
const meta: Meta<typeof Badges> = { const meta: Meta<typeof Badges> = {

View File

@ -1,12 +1,12 @@
import type { Interpolation, Theme } from "@emotion/react"; import type { Interpolation, Theme } from "@emotion/react";
import Tooltip from "@mui/material/Tooltip"; import Tooltip from "@mui/material/Tooltip";
import { Stack } from "components/Stack/Stack";
import { import {
type FC, type FC,
forwardRef,
type HTMLAttributes, type HTMLAttributes,
type PropsWithChildren, type PropsWithChildren,
forwardRef,
} from "react"; } from "react";
import { Stack } from "components/Stack/Stack";
const styles = { const styles = {
badge: { badge: {

View File

@ -1,11 +1,11 @@
import { css, cx } from "@emotion/css"; import { css, cx } from "@emotion/css";
import { useTheme } from "@emotion/react"; import { useTheme } from "@emotion/react";
import Badge from "@mui/material/Badge"; import Badge from "@mui/material/Badge";
import type { FC } from "react";
import type { WorkspaceBuild } from "api/typesGenerated"; import type { WorkspaceBuild } from "api/typesGenerated";
import { Avatar, type AvatarProps } from "components/Avatar/Avatar"; import { Avatar, type AvatarProps } from "components/Avatar/Avatar";
import { BuildIcon } from "components/BuildIcon/BuildIcon"; import { BuildIcon } from "components/BuildIcon/BuildIcon";
import { useClassName } from "hooks/useClassName"; import { useClassName } from "hooks/useClassName";
import type { FC } from "react";
import { getDisplayWorkspaceBuildStatus } from "utils/workspace"; import { getDisplayWorkspaceBuildStatus } from "utils/workspace";
export interface BuildAvatarProps { export interface BuildAvatarProps {

View File

@ -1,8 +1,8 @@
import DeleteOutlined from "@mui/icons-material/DeleteOutlined"; import DeleteOutlined from "@mui/icons-material/DeleteOutlined";
import PlayArrowOutlined from "@mui/icons-material/PlayArrowOutlined"; import PlayArrowOutlined from "@mui/icons-material/PlayArrowOutlined";
import StopOutlined from "@mui/icons-material/StopOutlined"; import StopOutlined from "@mui/icons-material/StopOutlined";
import type { ComponentProps } from "react";
import type { WorkspaceTransition } from "api/typesGenerated"; import type { WorkspaceTransition } from "api/typesGenerated";
import type { ComponentProps } from "react";
type SVGIcon = typeof PlayArrowOutlined; type SVGIcon = typeof PlayArrowOutlined;

View File

@ -1,9 +1,9 @@
import { css, type Interpolation, type Theme } from "@emotion/react"; import { type Interpolation, type Theme, css } from "@emotion/react";
import Check from "@mui/icons-material/Check"; import Check from "@mui/icons-material/Check";
import IconButton from "@mui/material/Button"; import IconButton from "@mui/material/Button";
import Tooltip from "@mui/material/Tooltip"; import Tooltip from "@mui/material/Tooltip";
import { forwardRef, type ReactNode } from "react";
import { useClipboard } from "hooks/useClipboard"; import { useClipboard } from "hooks/useClipboard";
import { type ReactNode, forwardRef } from "react";
import { FileCopyIcon } from "../Icons/FileCopyIcon"; import { FileCopyIcon } from "../Icons/FileCopyIcon";
interface CopyButtonProps { interface CopyButtonProps {

View File

@ -1,7 +1,7 @@
import Tooltip, { type TooltipProps } from "@mui/material/Tooltip"; import Tooltip, { type TooltipProps } from "@mui/material/Tooltip";
import type { FC, HTMLAttributes } from "react";
import { useClickable } from "hooks/useClickable"; import { useClickable } from "hooks/useClickable";
import { useClipboard } from "hooks/useClipboard"; import { useClipboard } from "hooks/useClipboard";
import type { FC, HTMLAttributes } from "react";
interface CopyableValueProps extends HTMLAttributes<HTMLSpanElement> { interface CopyableValueProps extends HTMLAttributes<HTMLSpanElement> {
value: string; value: string;

View File

@ -1,5 +1,5 @@
import type { Meta, StoryObj } from "@storybook/react"; import type { Meta, StoryObj } from "@storybook/react";
import { expect, within, userEvent } from "@storybook/test"; import { expect, userEvent, within } from "@storybook/test";
import { useState } from "react"; import { useState } from "react";
import { DurationField } from "./DurationField"; import { DurationField } from "./DurationField";

View File

@ -163,7 +163,7 @@ function intMask(value: string): string {
} }
function durationInMs(durationFieldValue: string, unit: TimeUnit): number { function durationInMs(durationFieldValue: string, unit: TimeUnit): number {
const durationInMs = parseInt(durationFieldValue, 10); const durationInMs = Number.parseInt(durationFieldValue, 10);
if (Number.isNaN(durationInMs)) { if (Number.isNaN(durationInMs)) {
return 0; return 0;

View File

@ -1,15 +1,15 @@
import { css, type Interpolation, type Theme } from "@emotion/react"; import { type Interpolation, type Theme, css } from "@emotion/react";
import RefreshOutlined from "@mui/icons-material/RefreshOutlined"; import RefreshOutlined from "@mui/icons-material/RefreshOutlined";
import Button from "@mui/material/Button"; import Button from "@mui/material/Button";
import Link from "@mui/material/Link"; import Link from "@mui/material/Link";
import { type FC, useEffect, useState } from "react";
import { Helmet } from "react-helmet-async";
import type { BuildInfoResponse } from "api/typesGenerated"; import type { BuildInfoResponse } from "api/typesGenerated";
import { CopyButton } from "components/CopyButton/CopyButton"; import { CopyButton } from "components/CopyButton/CopyButton";
import { CoderIcon } from "components/Icons/CoderIcon"; import { CoderIcon } from "components/Icons/CoderIcon";
import { Loader } from "components/Loader/Loader"; import { Loader } from "components/Loader/Loader";
import { Margins } from "components/Margins/Margins"; import { Margins } from "components/Margins/Margins";
import { Stack } from "components/Stack/Stack"; import { Stack } from "components/Stack/Stack";
import { type FC, useEffect, useState } from "react";
import { Helmet } from "react-helmet-async";
import { getStaticBuildInfo } from "utils/buildInfo"; import { getStaticBuildInfo } from "utils/buildInfo";
const fetchDynamicallyImportedModuleError = const fetchDynamicallyImportedModuleError =
@ -71,8 +71,8 @@ export const RuntimeErrorState: FC<RuntimeErrorStateProps> = ({ error }) => {
["**Version**", coderVersion ?? "-- Set version --"].join( ["**Version**", coderVersion ?? "-- Set version --"].join(
"\n", "\n",
), ),
["**Path**", "`" + location.pathname + "`"].join("\n"), ["**Path**", `\`${location.pathname}\``].join("\n"),
["**Error**", "```\n" + error.stack + "\n```"].join("\n"), ["**Error**", `\`\`\`\n${error.stack}\n\`\`\``].join("\n"),
].join("\n\n"), ].join("\n\n"),
)}`} )}`}
target="_blank" target="_blank"

View File

@ -1,8 +1,8 @@
import type { Interpolation, Theme } from "@emotion/react"; import type { Interpolation, Theme } from "@emotion/react";
import Collapse from "@mui/material/Collapse"; import Collapse from "@mui/material/Collapse";
import Link from "@mui/material/Link"; import Link from "@mui/material/Link";
import type { FC, ReactNode } from "react";
import { DropdownArrow } from "components/DropdownArrow/DropdownArrow"; import { DropdownArrow } from "components/DropdownArrow/DropdownArrow";
import type { FC, ReactNode } from "react";
export interface ExpanderProps { export interface ExpanderProps {
expanded: boolean; expanded: boolean;

View File

@ -9,9 +9,9 @@ export const ExternalImage = forwardRef<
const theme = useTheme(); const theme = useTheme();
return ( return (
// biome-ignore lint/a11y/useAltText: no reasonable alt to provide
<img <img
ref={ref} ref={ref}
alt=""
css={getExternalImageStylesFromUrl(theme.externalImages, attrs.src)} css={getExternalImageStylesFromUrl(theme.externalImages, attrs.src)}
{...attrs} {...attrs}
/> />

View File

@ -1,12 +1,12 @@
import { css, type Interpolation, type Theme } from "@emotion/react"; import { type Interpolation, type Theme, css } from "@emotion/react";
import UploadIcon from "@mui/icons-material/CloudUploadOutlined"; import UploadIcon from "@mui/icons-material/CloudUploadOutlined";
import RemoveIcon from "@mui/icons-material/DeleteOutline"; import RemoveIcon from "@mui/icons-material/DeleteOutline";
import FileIcon from "@mui/icons-material/FolderOutlined"; import FileIcon from "@mui/icons-material/FolderOutlined";
import CircularProgress from "@mui/material/CircularProgress"; import CircularProgress from "@mui/material/CircularProgress";
import IconButton from "@mui/material/IconButton"; import IconButton from "@mui/material/IconButton";
import { type FC, type DragEvent, useRef, type ReactNode } from "react";
import { Stack } from "components/Stack/Stack"; import { Stack } from "components/Stack/Stack";
import { useClickable } from "hooks/useClickable"; import { useClickable } from "hooks/useClickable";
import { type DragEvent, type FC, type ReactNode, useRef } from "react";
export interface FileUploadProps { export interface FileUploadProps {
isUploading: boolean; isUploading: boolean;
@ -31,8 +31,8 @@ export const FileUpload: FC<FileUploadProps> = ({
}) => { }) => {
const fileDrop = useFileDrop(onUpload, extensions); const fileDrop = useFileDrop(onUpload, extensions);
const inputRef = useRef<HTMLInputElement>(null); const inputRef = useRef<HTMLInputElement>(null);
const clickable = useClickable<HTMLDivElement>( const clickable = useClickable<HTMLDivElement>(() =>
() => inputRef.current?.click(), inputRef.current?.click(),
); );
if (!isUploading && file) { if (!isUploading && file) {

View File

@ -1,13 +1,13 @@
import { action } from "@storybook/addon-actions"; import { action } from "@storybook/addon-actions";
import type { Meta, StoryObj } from "@storybook/react"; import type { Meta, StoryObj } from "@storybook/react";
import { userEvent, within, expect } from "@storybook/test"; import { expect, userEvent, within } from "@storybook/test";
import { useState } from "react";
import { UserAvatar } from "components/UserAvatar/UserAvatar"; import { UserAvatar } from "components/UserAvatar/UserAvatar";
import { useState } from "react";
import { withDesktopViewport } from "testHelpers/storybook"; import { withDesktopViewport } from "testHelpers/storybook";
import { import {
SelectFilter, SelectFilter,
SelectFilterSearch,
type SelectFilterOption, type SelectFilterOption,
SelectFilterSearch,
} from "./SelectFilter"; } from "./SelectFilter";
const options: SelectFilterOption[] = Array.from({ length: 50 }, (_, i) => ({ const options: SelectFilterOption[] = Array.from({ length: 50 }, (_, i) => ({

View File

@ -1,15 +1,15 @@
import { useState, type FC, type ReactNode } from "react";
import { Loader } from "components/Loader/Loader"; import { Loader } from "components/Loader/Loader";
import { import {
SelectMenu, SelectMenu,
SelectMenuTrigger,
SelectMenuButton, SelectMenuButton,
SelectMenuContent, SelectMenuContent,
SelectMenuSearch,
SelectMenuList,
SelectMenuItem,
SelectMenuIcon, SelectMenuIcon,
SelectMenuItem,
SelectMenuList,
SelectMenuSearch,
SelectMenuTrigger,
} from "components/SelectMenu/SelectMenu"; } from "components/SelectMenu/SelectMenu";
import { type FC, type ReactNode, useState } from "react";
const BASE_WIDTH = 200; const BASE_WIDTH = 200;
const POPOVER_WIDTH = 320; const POPOVER_WIDTH = 320;

View File

@ -1,12 +1,12 @@
import type { FC } from "react";
import { API } from "api/api"; import { API } from "api/api";
import { import {
SelectFilter, SelectFilter,
SelectFilterSearch,
type SelectFilterOption, type SelectFilterOption,
SelectFilterSearch,
} from "components/Filter/SelectFilter"; } from "components/Filter/SelectFilter";
import { UserAvatar } from "components/UserAvatar/UserAvatar"; import { UserAvatar } from "components/UserAvatar/UserAvatar";
import { useAuthenticated } from "contexts/auth/RequireAuth"; import { useAuthenticated } from "contexts/auth/RequireAuth";
import type { FC } from "react";
import { type UseFilterMenuOptions, useFilterMenu } from "./menu"; import { type UseFilterMenuOptions, useFilterMenu } from "./menu";
export const useUserFilterMenu = ({ export const useUserFilterMenu = ({

View File

@ -7,8 +7,6 @@ import Menu from "@mui/material/Menu";
import MenuItem from "@mui/material/MenuItem"; import MenuItem from "@mui/material/MenuItem";
import Skeleton, { type SkeletonProps } from "@mui/material/Skeleton"; import Skeleton, { type SkeletonProps } from "@mui/material/Skeleton";
import type { Breakpoint } from "@mui/system/createTheme"; import type { Breakpoint } from "@mui/system/createTheme";
import { type FC, type ReactNode, useEffect, useRef, useState } from "react";
import type { useSearchParams } from "react-router-dom";
import { import {
getValidationErrorMessage, getValidationErrorMessage,
hasError, hasError,
@ -17,6 +15,8 @@ import {
import { InputGroup } from "components/InputGroup/InputGroup"; import { InputGroup } from "components/InputGroup/InputGroup";
import { SearchField } from "components/SearchField/SearchField"; import { SearchField } from "components/SearchField/SearchField";
import { useDebouncedFunction } from "hooks/debounce"; import { useDebouncedFunction } from "hooks/debounce";
import { type FC, type ReactNode, useEffect, useRef, useState } from "react";
import type { useSearchParams } from "react-router-dom";
export type PresetFilter = { export type PresetFilter = {
name: string; name: string;

View File

@ -1,6 +1,6 @@
import type { SelectFilterOption } from "components/Filter/SelectFilter";
import { useMemo, useRef, useState } from "react"; import { useMemo, useRef, useState } from "react";
import { useQuery } from "react-query"; import { useQuery } from "react-query";
import type { SelectFilterOption } from "components/Filter/SelectFilter";
export type UseFilterMenuOptions<TOption extends SelectFilterOption> = { export type UseFilterMenuOptions<TOption extends SelectFilterOption> = {
id: string; id: string;

View File

@ -1,15 +1,15 @@
import { type Interpolation, type Theme, useTheme } from "@emotion/react"; import { type Interpolation, type Theme, useTheme } from "@emotion/react";
import {
type ComponentProps,
createContext,
type FC,
forwardRef,
type HTMLProps,
type ReactNode,
useContext,
} from "react";
import { AlphaBadge, DeprecatedBadge } from "components/Badges/Badges"; import { AlphaBadge, DeprecatedBadge } from "components/Badges/Badges";
import { Stack } from "components/Stack/Stack"; import { Stack } from "components/Stack/Stack";
import {
type ComponentProps,
type FC,
type HTMLProps,
type ReactNode,
createContext,
forwardRef,
useContext,
} from "react";
import { import {
FormFooter as BaseFormFooter, FormFooter as BaseFormFooter,
type FormFooterProps, type FormFooterProps,

View File

@ -1,10 +1,10 @@
import type { FC, ReactNode } from "react";
import { Margins } from "components/Margins/Margins"; import { Margins } from "components/Margins/Margins";
import { import {
PageHeader, PageHeader,
PageHeaderTitle,
PageHeaderSubtitle, PageHeaderSubtitle,
PageHeaderTitle,
} from "components/PageHeader/PageHeader"; } from "components/PageHeader/PageHeader";
import type { FC, ReactNode } from "react";
export interface FullPageFormProps { export interface FullPageFormProps {
title: string; title: string;

Some files were not shown because too many files have changed in this diff Show More