1
0
mirror of https://github.com/coder/coder.git synced 2025-03-15 10:17:09 +00:00

chore: replace eslint with biome ()

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
.editorconfig.prettierignore.prettierignore.include
.vscode
Makefile
offlinedocs
package.jsonpnpm-lock.yaml
site
.eslintignore.eslintrc.yaml.prettierignore.prettierrc.yamlbiome.json
e2e
jest-runner-eslint.config.jsjest.config.tspackage.jsonpnpm-lock.yaml
src
@types
App.tsx
__mocks__
api
components
Abbr
ActiveUserChart
Alert
Avatar
AvatarCard
AvatarData
Badges
BuildAvatar
BuildIcon
CopyButton
CopyableValue
DurationField
ErrorBoundary
Expander
ExternalImage
FileUpload
Filter
Form
FullPageForm
FullPageLayout
GlobalSnackbar
GroupAvatar
HelpTooltip
IconField
InfoTooltip
Latency
Logs
Menu
MoreMenu
OrganizationAutocomplete
PaginationWidget
Paywall
Pill
Popover
RichParameterInput
Search
SelectMenu
SettingsHeader
Sidebar
StackLabel
Stats
TableEmpty
Tabs
TemplateAvatar
Timeline
UserAutocomplete
UserAvatar
contexts
hooks
modules
dashboard
resources
templates
workspaces
pages
AuditPage
CliAuthPage
CreateTemplatePage
CreateTemplatesGalleryPage
CreateTokenPage
CreateUserPage
CreateWorkspacePage
DeploySettingsPage
ExternalAuthPage
GroupsPage
HealthPage
IconsPage
LoginPage
ManagementSettingsPage
SetupPage
StarterTemplatePage
TemplatePage
TemplateSettingsPage
TemplateVersionEditorPage
TemplateVersionPage
TemplatesPage
TerminalPage
UserSettingsPage
UsersPage
WorkspaceBuildPage
WorkspacePage
WorkspaceSettingsPage
WorkspacesPage
router.tsx
testHelpers
theme
utils

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

@ -79,19 +79,13 @@ result
# 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.
site/e2e/provisionerGenerated.ts
testdata/
# Ignore generated files
**/pnpm-lock.yaml
# Ignore generated JSON (e.g. examples/examples.gen.json).
**/*.gen.json
# Everything in site/ is formatted by Biome. For the rest of the repo though, we
# need broader language support.
site/

@ -2,19 +2,13 @@
# 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.
site/e2e/provisionerGenerated.ts
testdata/
# Ignore generated files
**/pnpm-lock.yaml
# Ignore generated JSON (e.g. examples/examples.gen.json).
**/*.gen.json
# Everything in site/ is formatted by Biome. For the rest of the repo though, we
# need broader language support.
site/

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

14
.vscode/settings.json vendored

@ -190,7 +190,6 @@
}
]
},
"eslint.workingDirectories": ["./site"],
"search.exclude": {
"**.pb.go": true,
"**/*.gen.json": true,
@ -224,5 +223,16 @@
// with VS Code.
"typescript.tsdk": "./site/node_modules/typescript/lib",
// 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"
}
}

@ -391,7 +391,7 @@ BOLD := $(shell tput bold 2>/dev/null)
GREEN := $(shell tput setaf 2 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
fmt/go:
@ -401,15 +401,19 @@ fmt/go:
go run mvdan.cc/gofumpt@v0.4.0 -w -l .
.PHONY: fmt/go
fmt/eslint:
echo "$(GREEN)==>$(RESET) $(BOLD)fmt/eslint$(RESET)"
fmt/ts:
echo "$(GREEN)==>$(RESET) $(BOLD)fmt/ts$(RESET)"
cd site
pnpm run lint:fix
.PHONY: fmt/eslint
# Avoid writing files in CI to reduce file write activity
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)"
cd site
# Avoid writing files in CI to reduce file write activity
ifdef CI
pnpm run format:check
@ -442,7 +446,7 @@ lint/site-icons:
lint/ts:
cd site
pnpm i && pnpm lint
pnpm lint
.PHONY: lint/ts
lint/go:
@ -495,9 +499,6 @@ gen: \
.prettierignore.include \
.prettierignore \
provisioner/terraform/testdata/version \
site/.prettierrc.yaml \
site/.prettierignore \
site/.eslintignore \
site/e2e/provisionerGenerated.ts \
site/src/theme/icons.json \
examples/examples.gen.json \
@ -526,9 +527,6 @@ gen/mark-fresh:
coderd/apidoc/swagger.json \
.prettierignore.include \
.prettierignore \
site/.prettierrc.yaml \
site/.prettierignore \
site/.eslintignore \
site/e2e/provisionerGenerated.ts \
site/src/theme/icons.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')
go run ./scripts/apitypings/ > $@
./scripts/pnpm_install.sh
pnpm exec prettier --write "$@"
site/e2e/provisionerGenerated.ts: provisionerd/proto/provisionerd.pb.go provisionersdk/proto/provisioner.pb.go
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/*)
go run ./scripts/gensite/ -icons "$@"
./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)
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
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.
.prettierignore: .gitignore .prettierignore.include
echo "# Code generated by Makefile ($^). DO NOT EDIT." > "$@"
@ -728,40 +708,6 @@ site/.prettierrc.yaml: .prettierrc.yaml
cat "$$f" >> "$@"
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:
$(GIT_FLAGS) gotestsum --format standard-quiet -- -v -short -count=1 ./...
.PHONY: test

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

@ -10,22 +10,19 @@ importers:
dependencies:
'@chakra-ui/react':
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':
specifier: 11.11.4
version: 11.11.4(@types/react@18.3.3)(react@18.3.1)
'@emotion/styled':
specifier: 11.11.5
version: 11.11.5(@emotion/react@11.11.4)(@types/react@18.3.3)(react@18.3.1)
'@types/lodash':
specifier: 4.14.196
version: 4.14.196
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)
archiver:
specifier: 6.0.2
version: 6.0.2
framer-motion:
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:
specifier: 4.0.2
version: 4.0.2
@ -34,7 +31,7 @@ importers:
version: 4.17.21
next:
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:
specifier: 18.3.1
version: 18.3.1
@ -54,6 +51,9 @@ importers:
specifier: 4.0.0
version: 4.0.0
devDependencies:
'@types/lodash':
specifier: 4.14.196
version: 4.14.196
'@types/node':
specifier: 18.19.0
version: 18.19.0
@ -70,8 +70,8 @@ importers:
specifier: 14.0.1
version: 14.0.1(eslint@8.56.0)(typescript@5.3.2)
prettier:
specifier: 3.1.0
version: 3.1.0
specifier: 3.3.3
version: 3.3.3
typescript:
specifier: 5.3.2
version: 5.3.2
@ -2100,8 +2100,8 @@ packages:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
prettier@3.1.0:
resolution: {integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==}
prettier@3.3.3:
resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==}
engines: {node: '>=14'}
hasBin: true
@ -2634,69 +2634,69 @@ snapshots:
'@babel/helper-validator-identifier': 7.22.20
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:
'@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-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/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/transition': 2.1.0(framer-motion@10.17.6)(react@18.3.1)
framer-motion: 10.17.6(react-dom@18.3.1)(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-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))(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:
'@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/shared-utils': 2.0.5
'@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2)(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/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(@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/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:
'@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-context': 2.1.0(react@18.3.1)
'@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
'@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:
'@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/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
'@chakra-ui/breakpoint-utils@2.0.8':
dependencies:
'@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:
'@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/shared-utils': 2.0.5
'@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2)(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/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(@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)':
dependencies:
'@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
'@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:
'@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-types': 2.0.7(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-update-effect': 2.1.0(react@18.3.1)
'@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/visually-hidden': 2.2.0(@chakra-ui/system@2.6.2)(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(@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
react: 18.3.1
@ -2716,10 +2716,10 @@ snapshots:
'@chakra-ui/shared-utils': 2.0.5
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:
'@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(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/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(@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/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)
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:
'@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
'@chakra-ui/counter@2.1.0(react@18.3.1)':
@ -2739,7 +2739,7 @@ snapshots:
'@chakra-ui/shared-utils': 2.0.5
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:
'@emotion/react': 11.11.4(@types/react@18.3.3)(react@18.3.1)
react: 18.3.1
@ -2752,7 +2752,7 @@ snapshots:
'@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:
'@chakra-ui/react-context': 2.1.0(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-update-effect': 2.1.0(react@18.3.1)
'@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
'@chakra-ui/event-utils@2.0.8': {}
@ -2776,14 +2776,14 @@ snapshots:
transitivePeerDependencies:
- '@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:
'@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-types': 2.0.7(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/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
'@chakra-ui/hooks@2.2.1(react@18.3.1)':
@ -2794,38 +2794,38 @@ snapshots:
copy-to-clipboard: 3.3.3
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:
'@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
'@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:
'@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1)
'@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
'@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:
'@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/react-children-utils': 2.0.6(react@18.3.1)
'@chakra-ui/react-context': 2.1.0(react@18.3.1)
'@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
'@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:
'@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/react-children-utils': 2.0.6(react@18.3.1)
'@chakra-ui/react-context': 2.1.0(react@18.3.1)
'@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
'@chakra-ui/lazy-utils@2.0.5': {}
@ -2834,15 +2834,15 @@ snapshots:
dependencies:
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:
'@chakra-ui/breakpoint-utils': 2.0.8
'@chakra-ui/react-env': 3.1.0(react@18.3.1)
'@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
'@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:
'@chakra-ui/clickable': 2.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-update-effect': 2.1.0(react@18.3.1)
'@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/transition': 2.1.0(framer-motion@10.17.6)(react@18.3.1)
framer-motion: 10.17.6(react-dom@18.3.1)(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-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))(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:
'@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/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-types': 2.0.7(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/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1)
'@chakra-ui/transition': 2.1.0(framer-motion@10.17.6)(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-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
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-dom: 18.3.1(react@18.3.1)
react-remove-scroll: 2.5.6(@types/react@18.3.3)(react@18.3.1)
transitivePeerDependencies:
- '@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:
'@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/icon': 3.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(@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-types': 2.0.7(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-update-effect': 2.1.0(react@18.3.1)
'@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
'@chakra-ui/number-utils@2.0.7': {}
'@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:
'@chakra-ui/descendant': 3.1.0(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-merge-refs': 2.1.0(react@18.3.1)
'@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
'@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:
'@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/popper': 3.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-merge-refs': 2.1.0(react@18.3.1)
'@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)
framer-motion: 10.17.6(react-dom@18.3.1)(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))(react@18.3.1)
react: 18.3.1
'@chakra-ui/popper@3.1.0(react@18.3.1)':
@ -2938,39 +2938,39 @@ snapshots:
'@popperjs/core': 2.11.8
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:
'@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)
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:
'@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
'@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:
'@chakra-ui/css-reset': 2.3.0(@emotion/react@11.11.4)(react@18.3.1)
'@chakra-ui/portal': 2.1.0(react-dom@18.3.1)(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))(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
'@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-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:
'@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-types': 2.0.7(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/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
react: 18.3.1
@ -3081,92 +3081,92 @@ snapshots:
'@chakra-ui/utils': 2.0.15
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:
'@chakra-ui/accordion': 2.3.1(@chakra-ui/system@2.6.2)(framer-motion@10.17.6)(react@18.3.1)
'@chakra-ui/alert': 2.2.2(@chakra-ui/system@2.6.2)(react@18.3.1)
'@chakra-ui/avatar': 2.3.0(@chakra-ui/system@2.6.2)(react@18.3.1)
'@chakra-ui/breadcrumb': 2.2.0(@chakra-ui/system@2.6.2)(react@18.3.1)
'@chakra-ui/button': 2.1.0(@chakra-ui/system@2.6.2)(react@18.3.1)
'@chakra-ui/card': 2.2.0(@chakra-ui/system@2.6.2)(react@18.3.1)
'@chakra-ui/checkbox': 2.3.2(@chakra-ui/system@2.6.2)(react@18.3.1)
'@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2)(react@18.3.1)
'@chakra-ui/control-box': 2.1.0(@chakra-ui/system@2.6.2)(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(@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(@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(@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(@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(@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(@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(@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(@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/css-reset': 2.3.0(@emotion/react@11.11.4)(react@18.3.1)
'@chakra-ui/editable': 3.1.0(@chakra-ui/system@2.6.2)(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(@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/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/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.3.1)
'@chakra-ui/image': 2.1.0(@chakra-ui/system@2.6.2)(react@18.3.1)
'@chakra-ui/input': 2.1.2(@chakra-ui/system@2.6.2)(react@18.3.1)
'@chakra-ui/layout': 2.3.1(@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(@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(@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(@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/media-query': 3.3.0(@chakra-ui/system@2.6.2)(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/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/number-input': 2.1.2(@chakra-ui/system@2.6.2)(react@18.3.1)
'@chakra-ui/pin-input': 2.1.0(@chakra-ui/system@2.6.2)(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/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(@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(@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(@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(@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(@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/portal': 2.1.0(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/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/radio': 2.1.2(@chakra-ui/system@2.6.2)(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(@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(@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(@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/select': 2.1.2(@chakra-ui/system@2.6.2)(react@18.3.1)
'@chakra-ui/skeleton': 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)(react@18.3.1)
'@chakra-ui/slider': 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)(react@18.3.1)
'@chakra-ui/stat': 2.1.1(@chakra-ui/system@2.6.2)(react@18.3.1)
'@chakra-ui/stepper': 2.3.1(@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(@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(@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(@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(@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(@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(@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/switch': 2.1.2(@chakra-ui/system@2.6.2)(framer-motion@10.17.6)(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/table': 2.1.0(@chakra-ui/system@2.6.2)(react@18.3.1)
'@chakra-ui/tabs': 3.0.0(@chakra-ui/system@2.6.2)(react@18.3.1)
'@chakra-ui/tag': 3.1.1(@chakra-ui/system@2.6.2)(react@18.3.1)
'@chakra-ui/textarea': 2.1.2(@chakra-ui/system@2.6.2)(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(@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(@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(@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(@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(@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-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/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/transition': 2.1.0(framer-motion@10.17.6)(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(@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-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@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/styled': 11.11.5(@emotion/react@11.11.4)(@types/react@18.3.3)(react@18.3.1)
framer-motion: 10.17.6(react-dom@18.3.1)(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))(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
transitivePeerDependencies:
- '@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:
'@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/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
'@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:
'@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/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
'@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:
'@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
'@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:
'@chakra-ui/number-utils': 2.0.7
'@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-size': 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
'@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:
'@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
'@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:
'@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/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
'@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:
'@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/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
'@chakra-ui/styled-system@2.9.2':
@ -3209,15 +3209,15 @@ snapshots:
csstype: 3.1.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:
'@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/system': 2.6.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1)
framer-motion: 10.17.6(react-dom@18.3.1)(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))(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:
'@chakra-ui/color-mode': 2.2.0(react@18.3.1)
'@chakra-ui/object-utils': 2.1.0
@ -3226,18 +3226,18 @@ snapshots:
'@chakra-ui/theme-utils': 2.0.21
'@chakra-ui/utils': 2.0.15
'@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-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:
'@chakra-ui/react-context': 2.1.0(react@18.3.1)
'@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
'@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:
'@chakra-ui/clickable': 2.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-safe-layout-effect': 2.1.0(react@18.3.1)
'@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
'@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:
'@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/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
'@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:
'@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/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
'@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/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:
'@chakra-ui/alert': 2.2.2(@chakra-ui/system@2.6.2)(react@18.3.1)
'@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2)(react@18.3.1)
'@chakra-ui/portal': 2.1.0(react-dom@18.3.1)(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(@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))(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-update-effect': 2.1.0(react@18.3.1)
'@chakra-ui/shared-utils': 2.0.5
'@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)
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-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:
'@chakra-ui/dom-utils': 2.1.0
'@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-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-merge-refs': 2.1.0(react@18.3.1)
'@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)
framer-motion: 10.17.6(react-dom@18.3.1)(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))(react@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:
'@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
'@chakra-ui/utils@2.0.15':
@ -3330,9 +3330,9 @@ snapshots:
framesync: 6.1.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:
'@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
'@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/utils': 1.2.1
'@emotion/weak-memoize': 0.3.1
'@types/react': 18.3.3
hoist-non-react-statics: 3.3.2
react: 18.3.1
optionalDependencies:
'@types/react': 18.3.3
'@emotion/serialize@1.1.4':
dependencies:
@ -3396,7 +3397,7 @@ snapshots:
'@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:
'@babel/runtime': 7.22.6
'@emotion/babel-plugin': 11.11.0
@ -3405,8 +3406,9 @@ snapshots:
'@emotion/serialize': 1.1.4
'@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.1)
'@emotion/utils': 1.2.1
'@types/react': 18.3.3
react: 18.3.1
optionalDependencies:
'@types/react': 18.3.3
'@emotion/unitless@0.8.1': {}
@ -3574,6 +3576,7 @@ snapshots:
'@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.2)
debug: 4.3.4
eslint: 8.56.0
optionalDependencies:
typescript: 5.3.2
transitivePeerDependencies:
- supports-color
@ -3594,6 +3597,7 @@ snapshots:
is-glob: 4.0.3
semver: 7.5.4
tsutils: 3.21.0(typescript@5.3.2)
optionalDependencies:
typescript: 5.3.2
transitivePeerDependencies:
- supports-color
@ -4040,11 +4044,12 @@ snapshots:
'@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@5.3.2)
eslint: 8.56.0
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-plugin-import: 2.28.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.5.5)(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@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-react: 7.33.2(eslint@8.56.0)
eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0)
optionalDependencies:
typescript: 5.3.2
transitivePeerDependencies:
- eslint-import-resolver-webpack
@ -4058,13 +4063,13 @@ snapshots:
transitivePeerDependencies:
- 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:
debug: 4.3.4
enhanced-resolve: 5.15.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-plugin-import: 2.28.1(@typescript-eslint/parser@5.62.0)(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@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
globby: 13.2.2
is-core-module: 2.13.0
@ -4076,19 +4081,19 @@ snapshots:
- eslint-import-resolver-webpack
- 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:
'@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@5.3.2)
debug: 3.2.7
optionalDependencies:
'@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@5.3.2)
eslint: 8.56.0
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:
- 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:
'@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@5.3.2)
array-includes: 3.1.6
array.prototype.findlastindex: 1.2.3
array.prototype.flat: 1.3.1
@ -4097,7 +4102,7 @@ snapshots:
doctrine: 2.1.0
eslint: 8.56.0
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
is-core-module: 2.13.0
is-glob: 4.0.3
@ -4107,6 +4112,8 @@ snapshots:
object.values: 1.1.6
semver: 6.3.1
tsconfig-paths: 3.14.2
optionalDependencies:
'@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@5.3.2)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
@ -4305,13 +4312,13 @@ snapshots:
dependencies:
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:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
tslib: 2.6.2
optionalDependencies:
'@emotion/is-prop-valid': 0.8.8
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
framesync@6.1.2:
dependencies:
@ -5137,7 +5144,7 @@ snapshots:
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:
'@next/env': 14.2.4
'@swc/helpers': 0.5.5
@ -5301,7 +5308,7 @@ snapshots:
prelude-ls@1.2.1: {}
prettier@3.1.0: {}
prettier@3.3.3: {}
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):
dependencies:
'@babel/runtime': 7.22.6
'@types/react': 18.3.3
focus-lock: 0.11.6
prop-types: 15.8.1
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-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):
dependencies:
@ -5368,28 +5376,31 @@ snapshots:
react-remove-scroll-bar@2.3.4(@types/react@18.3.3)(react@18.3.1):
dependencies:
'@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
optionalDependencies:
'@types/react': 18.3.3
react-remove-scroll@2.5.6(@types/react@18.3.3)(react@18.3.1):
dependencies:
'@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)
tslib: 2.6.2
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)
optionalDependencies:
'@types/react': 18.3.3
react-style-singleton@2.2.1(@types/react@18.3.3)(react@18.3.1):
dependencies:
'@types/react': 18.3.3
get-nonce: 1.0.1
invariant: 2.2.4
react: 18.3.1
tslib: 2.6.2
optionalDependencies:
'@types/react': 18.3.3
react@18.3.1:
dependencies:
@ -5789,16 +5800,18 @@ snapshots:
use-callback-ref@1.3.0(@types/react@18.3.3)(react@18.3.1):
dependencies:
'@types/react': 18.3.3
react: 18.3.1
tslib: 2.6.2
optionalDependencies:
'@types/react': 18.3.3
use-sidecar@1.1.2(@types/react@18.3.3)(react@18.3.1):
dependencies:
'@types/react': 18.3.3
detect-node-es: 1.1.0
react: 18.3.1
tslib: 2.6.2
optionalDependencies:
'@types/react': 18.3.3
util-deprecate@1.0.2: {}

@ -2,15 +2,13 @@
"_comment": "This version doesn't matter, it's just to allow importing from other repos.",
"name": "coder",
"version": "0.0.0",
"packageManager": "pnpm@9.7.1+sha512.faf344af2d6ca65c4c5c8c2224ea77a81a5e8859cbc4e06b1511ddce2f0151512431dd19e6aff31f2c6a8f5f2aced9bd2273e1fed7dd4de1868984059d2c4247",
"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"
},
"devDependencies": {
"prettier": "3.0.0"
},
"dependencies": {
"exec": "^0.2.1"
},
"packageManager": "pnpm@8.14.0+sha1.bb42032ff80dba5f9245bc1b03470d2fa0b7fb2f"
"prettier": "3.3.3"
}
}

21
pnpm-lock.yaml generated

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

@ -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

@ -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: {}

@ -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

@ -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

@ -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."
}
}
}
}
}
}
}

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

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

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

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

@ -1,10 +1,10 @@
import http from "node:http";
import type { BrowserContext, Page } from "@playwright/test";
import http from "http";
import { coderPort, gitAuth } from "./constants";
export const beforeCoderTest = async (page: Page) => {
// 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) => {
if (!isApiCall(request.url())) {

@ -132,7 +132,7 @@ export const seventhParameter: RichParameter = {
// It helps to avoid cross-test interference when user-auto-fill triggers on
// the same parameter name.
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 };
};

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

@ -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 { waitUntilUrlIsNotResponding } from "./helpers";
@ -28,10 +28,7 @@ export const startWorkspaceProxy = async (
return cp;
};
export const stopWorkspaceProxy = async (
cp: ChildProcess,
goRun: boolean = true,
) => {
export const stopWorkspaceProxy = async (cp: ChildProcess, goRun = true) => {
exec(goRun ? `pkill -P ${cp.pid}` : `kill ${cp.pid}`, (error) => {
if (error) {
throw new Error(`exec error: ${JSON.stringify(error)}`);

@ -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 */
import type {
FullConfig,
Suite,
TestCase,
TestResult,
FullResult,
Reporter,
Suite,
TestCase,
TestError,
TestResult,
} from "@playwright/test/reporter";
import * as fs from "fs/promises";
import type { Writable } from "stream";
import { API } from "api/api";
import { coderdPProfPort, enterpriseLicense } from "./constants";

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

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

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

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

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

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

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

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

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

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

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

@ -1,5 +1,5 @@
import { randomUUID } from "node:crypto";
import { test } from "@playwright/test";
import { randomUUID } from "crypto";
import {
createTemplate,
createWorkspace,
@ -16,7 +16,7 @@ const agentVersion = "v2.12.1";
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.
const token = randomUUID();

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

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

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

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

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

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

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

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

@ -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,
},
};

@ -49,21 +49,6 @@ module.exports = {
"^@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: [
// included files

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

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

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

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

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

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

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

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

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

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

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

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

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

@ -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) => {
return {

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

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

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

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

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

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

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

@ -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 {
QueryClient,
UseMutationOptions,
UseQueryOptions,
} 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 { getAuthorizationKey } from "./authCheck";
import { cachedQuery } from "./util";

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

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

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

File diff suppressed because it is too large Load Diff

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

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

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

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

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

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

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

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

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

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

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

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

@ -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 IconButton from "@mui/material/Button";
import Tooltip from "@mui/material/Tooltip";
import { forwardRef, type ReactNode } from "react";
import { useClipboard } from "hooks/useClipboard";
import { type ReactNode, forwardRef } from "react";
import { FileCopyIcon } from "../Icons/FileCopyIcon";
interface CopyButtonProps {

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

@ -1,5 +1,5 @@
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 { DurationField } from "./DurationField";

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

@ -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 Button from "@mui/material/Button";
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 { CopyButton } from "components/CopyButton/CopyButton";
import { CoderIcon } from "components/Icons/CoderIcon";
import { Loader } from "components/Loader/Loader";
import { Margins } from "components/Margins/Margins";
import { Stack } from "components/Stack/Stack";
import { type FC, useEffect, useState } from "react";
import { Helmet } from "react-helmet-async";
import { getStaticBuildInfo } from "utils/buildInfo";
const fetchDynamicallyImportedModuleError =
@ -71,8 +71,8 @@ export const RuntimeErrorState: FC<RuntimeErrorStateProps> = ({ error }) => {
["**Version**", coderVersion ?? "-- Set version --"].join(
"\n",
),
["**Path**", "`" + location.pathname + "`"].join("\n"),
["**Error**", "```\n" + error.stack + "\n```"].join("\n"),
["**Path**", `\`${location.pathname}\``].join("\n"),
["**Error**", `\`\`\`\n${error.stack}\n\`\`\``].join("\n"),
].join("\n\n"),
)}`}
target="_blank"

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

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

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

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

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

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

@ -7,8 +7,6 @@ import Menu from "@mui/material/Menu";
import MenuItem from "@mui/material/MenuItem";
import Skeleton, { type SkeletonProps } from "@mui/material/Skeleton";
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 {
getValidationErrorMessage,
hasError,
@ -17,6 +15,8 @@ import {
import { InputGroup } from "components/InputGroup/InputGroup";
import { SearchField } from "components/SearchField/SearchField";
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 = {
name: string;

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

@ -1,15 +1,15 @@
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 { Stack } from "components/Stack/Stack";
import {
type ComponentProps,
type FC,
type HTMLProps,
type ReactNode,
createContext,
forwardRef,
useContext,
} from "react";
import {
FormFooter as BaseFormFooter,
type FormFooterProps,

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

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