Files
supabase/apps/studio/package.json
T
Ivan VasilovandClaude Opus 4.7 72f57dde89 chore: migrate remaining opacity utilities to slash syntax
Finishes the `*-opacity-*` → slash-modifier conversion that the
`@tailwindcss/upgrade` tool couldn't complete because the paired
color/opacity classes weren't always adjacent (intervening tokens,
variant prefixes, or absent base color).

Mechanical same-line paired rewrites (perl):
  bg-{color} bg-opacity-N           → bg-{color}/N
  bg-opacity-N bg-{color}           → bg-{color}/N   (reversed order)
  bg bg-opacity-N                   → bg/N           (bare `bg` alias)
  (analogous for border-, ring-, divide-)

Hand-edited ambiguous stragglers:

- Rewrote `{variant}:{prefix}-opacity-N` to `{variant}:{prefix}-{base-color}/N`
  where a base color was present on the same element (TriggerSheet,
  ExitSurveyModal, UpgradeModal, DeleteProjectModal, CommandMenu,
  MultiSelectDeprecated).
- Dropped no-op `bg-opacity-100` / `hover:bg-opacity-100` where the
  companion rule already implied full opacity (BillingChangeBadge,
  SupportAccessToggle, MobileNavigationBar, Announcement/Badge,
  LWAnnouncement, Button link variant).
- Rewrote `hover:border-opacity-30` paired with a later base color to
  `hover:border-foreground-muted/30` in Announcement/Badge.
- Reworked ComputeBadge state-open styles: `group-data-[state=open]:
  bg-opacity-20` / `ring-2/20` (invalid) → `group-data-[state=open]:
  bg-{color}/20 ring-{color}/20` mapped per `smallCompute` branch.
- Migrated `defaultTheme.ts` badge theme: dropped `bg-opacity-10` from
  base, applied `/10` to each color variant's bg. Deleted dead `utils`
  block (declared but never referenced/exported). Fixed stray `bg-200`
  typo → `bg-gray-200/10`.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> (+16 squashed commits)
Squashed commits:
[3f18aa64d5] chore(packages/marketing): run @tailwindcss/upgrade v4 codemods

Automated output from `pnpm dlx @tailwindcss/upgrade --force` executed
within `packages/marketing/`, using the same temporary
`_upgrade-entry.css` pattern. Spurious tailwindcss dep addition was
reverted.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
[dfd9039173] chore(packages/dev-tools): run @tailwindcss/upgrade v4 codemods

Automated output from `pnpm dlx @tailwindcss/upgrade --force` executed
within `packages/dev-tools/`, using the same temporary `_upgrade-entry.css`
pattern as the other shared packages. The spurious tailwindcss dep
addition was reverted — this package is a consumer, not a Tailwind
owner.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
[f815ff2905] chore(packages/ui-patterns): run @tailwindcss/upgrade v4 codemods

Automated output from `pnpm dlx @tailwindcss/upgrade --force` executed
within `packages/ui-patterns/`. Same temporary `_upgrade-entry.css`
pattern as the `packages/ui` run — added to give the tool a CSS entry
to scan templates against, removed before committing.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
[999168249a] chore(packages/ui): run @tailwindcss/upgrade v4 codemods

Automated output from `pnpm dlx @tailwindcss/upgrade --force` executed
within `packages/ui/`. A temporary `_upgrade-entry.css` was added during
the run (with `@import "tailwindcss"` + `@config` bridge to the shared
config) so the tool could discover a CSS entry and drive template
migration across `src/**/*.tsx`; it's removed before committing.

Per-app upgrade runs skip `packages/ui` as "outside repository", so this
is the only way to cover it without running the tool at the workspace
root.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
[32cdf2253a] chore(ui-library): run @tailwindcss/upgrade v4 codemods

Automated output from `pnpm dlx @tailwindcss/upgrade --force` executed
within `apps/ui-library/`. Also bundles minor `pnpm-lock.yaml` churn
(peer-dep reshuffling triggered by the tool's install pass).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
[bf54bac2f1] chore(lite-studio): run @tailwindcss/upgrade v4 codemods

Automated output from `pnpm dlx @tailwindcss/upgrade --force` executed
within `apps/lite-studio/`. The first attempt failed on an unknown
utility (`text-foreground-light`) because `typography.css` loaded its
own Tailwind context without access to the shared plugin. After
switching to `@reference './app.css'` (the same pattern used in
`apps/studio/styles/typography.css`), the tool ran cleanly.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
[e7373cf938] chore(www): run @tailwindcss/upgrade v4 codemods

Automated output from `pnpm dlx @tailwindcss/upgrade --force` executed
within `apps/www/`. Also:

- Bumps `apps/www/package.json` tailwindcss from `^3.4.1` to `^4.2.4`
  (www had an explicit dep rather than the catalog reference).
- Fixes a double-slash path glitch the tool emitted in
  `apps/www/styles/index.css` (`@config '..//tailwind.config.js'` →
  `@config '../tailwind.config.js'`).
- `pnpm-lock.yaml` bundled here as it reflects cumulative dep changes
  from www plus the earlier `apps/learn` addition.

The tool warned that `apps/www/postcss.config.js` contains dynamic
JavaScript and was not auto-migrated — that file needs a manual pass
in a follow-up.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
[9fcbb5f28c] chore(studio): run @tailwindcss/upgrade v4 codemods

Automated output from `pnpm dlx @tailwindcss/upgrade --force` executed
within `apps/studio/`. Biggest diff of any single app.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
[e77b3b9a27] chore(learn): run @tailwindcss/upgrade v4 codemods

Automated output from `pnpm dlx @tailwindcss/upgrade --force` executed
within `apps/learn/`. Also adds `tailwindcss: ^4.2.4` to the app's
package.json (the upgrade tool injects this when the app didn't
previously declare tailwindcss directly).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
[5ad834d688] chore(docs): run @tailwindcss/upgrade v4 codemods

Automated output from `pnpm dlx @tailwindcss/upgrade --force` executed
within `apps/docs/`.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
[f3101bf306] chore(design-system): run @tailwindcss/upgrade v4 codemods

Automated output from `pnpm dlx @tailwindcss/upgrade --force` executed
within `apps/design-system/`. Handles deprecated-class renames, `@apply`
prefix-bang → suffix-bang syntax, gradient utility renames, and related
v4-aware rewrites. Only files under `apps/design-system/` are touched;
shared packages are skipped by the tool when run from a single app.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
[f60e5d01d1] chore: pin tailwindcss to 4.2.4 in all package.json files

Replace `"tailwindcss": "catalog:"` and `"@tailwindcss/postcss": "catalog:"`
with explicit `4.2.4` pins so `@tailwindcss/upgrade` can run without a
catalog-vs-node_modules version mismatch.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
[0676c22a12] chore: rename deprecated Tailwind utility classes

Apply the non-opacity class renames from Tailwind v3.4 → v4, across all
source files (`*.tsx`, `*.ts`, `*.jsx`, `*.js`, `*.css`, `*.mdx`),
excluding `examples/` and the vendored `apps/studio/public/monaco-editor`
bundle.

- `flex-grow` → `grow`
- `flex-shrink` → `shrink`
- `overflow-ellipsis` → `text-ellipsis`
- `shadow-sm` → `shadow-xs`
- `rounded-sm` → `rounded-xs`
- `blur-sm` → `blur-xs`
- `outline-none` → `outline-hidden` (preserves v3's accessibility-friendly
  behavior; v4's `outline-none` now means `outline-style: none` only)

CSS property syntax (`flex-grow: 1;`, `outline: none;`, etc.) was
protected with a negative lookahead for `\s*:` so raw CSS is untouched.

Opacity utilities (`bg-opacity-*`, `border-opacity-*`, `ring-opacity-*`,
`divide-opacity-*`) and `ring` → `ring-3` are context-dependent and are
deferred to a follow-up commit.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
[3d8e96069e] Bunch of fixes.
[9dadccf323] Migrate studio.

Co-authored-by: Copilot <copilot@github.com>
[9e706b3092] chore(config): bump Tailwind to v4 via @config bridge

- Bump catalog `tailwindcss` from 3.4.1 to 4.2.3 and add
  `@tailwindcss/postcss` 4.2.3.
- Swap shared PostCSS config to `@tailwindcss/postcss` and drop
  `tailwindcss/nesting` (v4 handles nesting internally via Lightning
  CSS).
- Replace `@tailwind base/components/utilities` with
  `@import "tailwindcss"` + `@config "../../packages/config/tailwind.config.js"`
  in the 10 app-level CSS entry files (studio, www, docs, design-system,
  ui-library, learn, lite-studio). Skips `examples/*` which aren't part
  of the monorepo build.
- Remove `<alpha-value>` placeholders from
  `packages/config/tailwind.config.js` (4 occurrences) and from
  `apps/www/tailwind.config.js` (purple-sos color scale, 9 occurrences).
  Trade-off: opacity modifiers like `bg-studio/50` no longer work for
  these theme colors — they're used with static classes today.
- Remove `@tailwindcss/container-queries` — it's built into v4. Dropped
  from `apps/studio`, `apps/design-system`, `apps/docs` package.jsons and
  their Tailwind configs.

Custom plugins (`hit-area`, `motion-safe-transition`), `tailwindcss-radix`,
`@mertasan/tailwindcss-variables`, and `tailwindcss-animate` are kept
as-is; the v3-style `plugin()` / `matchUtilities()` / `addVariant()` APIs
still work under v4. Swapping `hit-area` to the v4-native CSS `@utility`
version and replacing `tailwindcss-radix` with native `data-[state=*]:`
variants is deferred to follow-up PRs.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-04 14:19:37 +02:00

209 lines
7.7 KiB
JSON

{
"name": "studio",
"version": "0.0.9",
"private": true,
"type": "module",
"scripts": {
"preinstall": "npx only-allow pnpm",
"predev": "node scripts/clean-turbopack-cache.mjs",
"dev": "next dev -p ${STUDIO_PORT:-8082}",
"build": "next build && if [ \"$SKIP_ASSET_UPLOAD\" != \"1\" ]; then ./../../scripts/upload-static-assets.sh; fi",
"start": "next start -p 8082",
"lint": "eslint .",
"lint:ratchet": "tsx scripts/ratchet-eslint-rules.ts --rule react-hooks/exhaustive-deps --rule import/no-anonymous-default-export --rule @tanstack/query/exhaustive-deps --rule @typescript-eslint/no-explicit-any --rule no-restricted-imports --rule no-restricted-exports --rule react/no-unstable-nested-components",
"lint:ratchet:type-checks": "tsx scripts/ratchet-eslint-rules.ts --rule studio/require-safe-sql-fragment --eslint-args \"--config eslint.type-checks.config.cjs .\"",
"clean": "rimraf node_modules tsconfig.tsbuildinfo .next .turbo",
"test": "vitest --run --coverage",
"test:watch": "vitest watch",
"test:ui": "vitest --ui",
"test:update": "vitest --run --update",
"test:ci": "vitest --run --coverage",
"test:report": "open coverage/lcov-report/index.html",
"deploy:staging": "VERCEL_ORG_ID=team_E6KJ1W561hMTjon1QSwOh0WO VERCEL_PROJECT_ID=QmcmhbiAtCMFTAHCuGgQscNbke4TzgWULECctNcKmxWCoT vercel --prod -A .vercel/staging.json",
"pretypecheck": "next typegen",
"typecheck": "tsc --noEmit",
"build:deno-types": "tsx scripts/deno-types.ts",
"build:graphql-types": "tsx scripts/download-graphql-schema.mts && pnpm graphql-codegen --config scripts/codegen.ts",
"build:graphql-types:watch": "pnpm graphql-codegen --config scripts/codegen.ts --watch",
"evals:setup": "cp node_modules/libpg-query/wasm/libpg-query.wasm evals/libpg-query.wasm",
"evals:run": "braintrust eval --no-send-logs evals/assistant.eval.ts",
"evals:upload": "braintrust eval evals/assistant.eval.ts",
"scorers:deploy": "IS_BRAINTRUST_PUSH=true braintrust push evals/scorer-online.ts"
},
"dependencies": {
"@ai-sdk/amazon-bedrock": "^4.0.81",
"@ai-sdk/mcp": "^1.0.25",
"@ai-sdk/openai": "^3.0.41",
"@ai-sdk/provider": "^3.0.8",
"@ai-sdk/provider-utils": "^4.0.19",
"@ai-sdk/react": "^3.0.118",
"@aws-sdk/credential-providers": "^3.830.0",
"@dagrejs/dagre": "^1.0.4",
"@dnd-kit/core": "^6.1.0",
"@dnd-kit/modifiers": "^9.0.0",
"@dnd-kit/sortable": "^8.0.0",
"@dnd-kit/utilities": "^3.2.2",
"@graphiql/react": "^0.37.3",
"@graphiql/toolkit": "^0.11.3",
"@hcaptcha/react-hcaptcha": "^1.12.0",
"@heroicons/react": "^2.1.3",
"@hookform/resolvers": "^3.1.1",
"@mjackson/multipart-parser": "^0.10.1",
"@modelcontextprotocol/sdk": "^1.29.0",
"@monaco-editor/react": "^4.6.0",
"@next/bundle-analyzer": "16.2.3",
"@number-flow/react": "^0.3.2",
"@sentry/nextjs": "catalog:",
"@std/path": "npm:@jsr/std__path@^1.0.8",
"@stripe/react-stripe-js": "6.1.0",
"@stripe/stripe-js": "9.1.0",
"@supabase/auth-js": "catalog:",
"@supabase/mcp-server-supabase": "^0.7.0",
"@supabase/pg-meta": "workspace:*",
"@supabase/realtime-js": "catalog:",
"@supabase/shared-types": "0.1.88",
"@supabase/sql-to-rest": "^0.1.6",
"@supabase/supabase-js": "catalog:",
"@tanstack/react-hotkeys": "^0.9.1",
"@tanstack/react-query": "^5.0.0",
"@tanstack/react-query-devtools": "^5.0.0",
"@tanstack/react-table": "^8.21.3",
"@tanstack/react-virtual": "^3.13.12",
"@types/d3-geo": "^3.1.0",
"@uidotdev/usehooks": "^2.4.1",
"@vercel/functions": "^2.1.0",
"@xyflow/react": "^12.10.1",
"@zip.js/zip.js": "^2.7.29",
"ai": "^6.0.116",
"ai-commands": "workspace:*",
"awesome-debounce-promise": "^2.1.0",
"common": "workspace:*",
"common-tags": "^1.8.2",
"config": "workspace:*",
"cron-parser": "^4.9.0",
"cronstrue": "^2.50.0",
"crypto-js": "^4.2.0",
"d3-geo": "^3.1.1",
"dayjs": "^1.11.10",
"dev-tools": "workspace:*",
"file-saver": "^2.0.5",
"framer-motion": "^11.18.2",
"generate-password-browser": "^1.1.0",
"graphiql": "^5.2.2",
"html-to-image": "^1.11.13",
"http-status": "^2.1.0",
"icons": "workspace:*",
"idb": "^8.0.2",
"immutability-helper": "^3.1.1",
"ip-num": "^1.5.1",
"json-logic-js": "^2.0.2",
"lodash": "catalog:",
"lucide-react": "^0.436.0",
"markdown-table": "^3.0.3",
"memoize-one": "^5.0.1",
"mime-db": "^1.53.0",
"monaco-editor": "0.52.2",
"next": "catalog:",
"next-themes": "^0.3.0",
"nuqs": "2.7.1",
"openai": "^4.104.0",
"openapi-fetch": "0.12.4",
"papaparse": "^5.3.1",
"path-to-regexp": "^8.0.0",
"pg-minify": "^1.6.3",
"radix-ui": "catalog:",
"randombytes": "^2.1.0",
"react": "catalog:",
"react-data-grid": "7.0.0-beta.47",
"react-day-picker": "^9.11.1",
"react-dom": "catalog:",
"react-error-boundary": "^4.0.13",
"react-grid-layout": "^1.4.2",
"react-hook-form": "^7.71.2",
"react-inlinesvg": "^4.0.4",
"react-intersection-observer": "^9.5.3",
"react-markdown": "^10.1.0",
"react-resizable": "3.0.5",
"react-simple-maps": "4.0.0-beta.6",
"react-use": "^17.5.0",
"recharts": "catalog:",
"remark-gfm": "^4.0.0",
"shared-data": "workspace:*",
"sonner": "^1.5.0",
"sql-formatter": "^15.0.0",
"sqlstring": "^2.3.2",
"streamdown": "^1.3.0",
"stripe-experiment-sync": "1.0.31",
"tus-js-client": "^4.1.0",
"ui": "workspace:*",
"ui-patterns": "workspace:*",
"use-debounce": "^7.0.1",
"use-stick-to-bottom": "^1.1.1",
"uuid": "^14.0.0",
"valtio": "catalog:",
"zod": "catalog:",
"zxcvbn": "^4.4.2"
},
"devDependencies": {
"@faker-js/faker": "^9.9.0",
"@graphql-codegen/cli": "5.0.5",
"@graphql-typed-document-node/core": "^3.2.0",
"@radix-ui/react-use-escape-keydown": "^1.1.1",
"@smithy/property-provider": "^4.0.4",
"@supabase/postgres-meta": "^0.64.4",
"@testing-library/dom": "^10.0.0",
"@testing-library/jest-dom": "^6.6.0",
"@testing-library/react": "^16.0.0",
"@testing-library/user-event": "^14.0.0",
"@types/common-tags": "^1.8.1",
"@types/crypto-js": "^4.2.2",
"@types/file-saver": "^2.0.2",
"@types/json-logic-js": "^1.2.1",
"@types/lodash": "^4.14.172",
"@types/markdown-table": "^3.0.0",
"@types/mime-db": "^1.43.5",
"@types/node": "catalog:",
"@types/papaparse": "^5.3.1",
"@types/randombytes": "^2.0.3",
"@types/react": "catalog:",
"@types/react-beautiful-dnd": "^13.1.2",
"@types/react-datepicker": "^4.3.4",
"@types/react-dom": "catalog:",
"@types/react-grid-layout": "^1.3.0",
"@types/react-simple-maps": "^3.0.1",
"@types/recharts": "^1.8.23",
"@types/sqlstring": "^2.3.0",
"@types/zxcvbn": "^4.4.1",
"@typescript-eslint/utils": "8.48.0",
"@vitejs/plugin-react": "catalog:",
"@vitest/coverage-v8": "catalog:",
"@vitest/ui": "catalog:",
"api-types": "workspace:*",
"autoevals": "^0.0.132",
"braintrust": "^3.9.0",
"common": "workspace:*",
"config": "workspace:*",
"date-fns": "^2.30.0",
"eslint-config-supabase": "workspace:*",
"eslint-plugin-barrel-files": "^2.0.7",
"eslint-plugin-jsx-a11y": "^6.10.2",
"graphql-ws": "5.14.1",
"import-in-the-middle": "^2.0.0",
"jsdom-testing-mocks": "^1.13.1",
"libpg-query": "17.6.0",
"msw": "^2.3.0",
"next-router-mock": "^0.9.13",
"node-mocks-http": "^1.17.2",
"postcss": "catalog:",
"raw-loader": "^4.0.2",
"require-in-the-middle": "^8.0.0",
"tailwindcss": "4.2.4",
"tsconfig": "workspace:*",
"tsx": "catalog:",
"typescript": "catalog:",
"vite": "catalog:",
"vite-tsconfig-paths": "catalog:",
"vitest": "catalog:"
}
}