336 lines
18 KiB
JSON
336 lines
18 KiB
JSON
{
|
|
"name": "toolctrl-boilerplate",
|
|
"version": "1.7.0",
|
|
"private": true,
|
|
"packageManager": "pnpm@10.33.0",
|
|
"sideEffects": false,
|
|
"type": "module",
|
|
"pnpm": {
|
|
"onlyBuiltDependencies": [
|
|
"@prisma/client",
|
|
"@prisma/engines",
|
|
"better-sqlite3",
|
|
"esbuild",
|
|
"prisma",
|
|
"sharp"
|
|
],
|
|
"ignoredBuiltDependencies": [
|
|
"core-js",
|
|
"cypress",
|
|
"msgpackr-extract"
|
|
],
|
|
"overrides": {
|
|
"highlight.js": "^11.11.1"
|
|
},
|
|
"patchedDependencies": {
|
|
"@react-router/dev@7.11.0": "patches/@react-router__dev@7.11.0.patch"
|
|
}
|
|
},
|
|
"scripts": {
|
|
"dev": "pnpm --filter @toolctrl/web dev",
|
|
"env:pull": "sops -d secrets/dev.sops.env > .env && echo 'Wrote ./.env from secrets/dev.sops.env'",
|
|
"env:edit": "sops secrets/dev.sops.env",
|
|
"build": "pnpm --filter @toolctrl/db prisma:generate && pnpm --filter @toolctrl/db build && pnpm --filter @toolctrl/web build",
|
|
"build:ci": "pnpm run build",
|
|
"sbom": "node scripts/generate-sbom.mjs",
|
|
"subframe:sync": "npx -y @subframe/cli@latest sync --all",
|
|
"lint": "eslint --max-warnings=0 --ext .tsx,.ts .",
|
|
"test": "TOOLCTRL_CORE_TESTS_ONLY=1 node scripts/vitest-cli-compat.mjs run apps/web/app/ scripts tools/api-inventory/scan-api-routes.test.ts packages/db/src/*boundary.test.ts packages/create-toolctrl/src/create.test.js",
|
|
"test:packages": "node scripts/verify-package-test-scripts.mjs && pnpm --filter './packages/*' --filter '!@toolctrl/foundation' --filter '!@toolctrl/view-models' --filter '!@toolctrl/ui-app' --filter '!@toolctrl/ui-subframe' --filter '!@toolctrl/ui-mock' --if-present test",
|
|
"test:mobile": "pnpm --filter @toolctrl/mobile test",
|
|
"test:foundation": "vitest run packages/foundation/src packages/view-models/src packages/ui-app/src packages/ui-subframe/src packages/ui-mock/src",
|
|
"verify:ci-baseline": "node scripts/verify-ci-baseline.mjs",
|
|
"verify:env-drift": "node --import tsx scripts/check-env-drift.mjs",
|
|
"verify:health-baseline": "node scripts/verify-health-baseline.mjs",
|
|
"verify:api-inventory": "tsx scripts/check-api-inventory.ts && pnpm exec vitest run tools/api-inventory/scan-api-routes.test.ts apps/api/src/route-access-inventory.test.ts apps/api/src/route-access-inventory-doc.test.ts apps/web/app/modules/api/services/ApiSpecsService.test.ts",
|
|
"verify:i18n": "tsx scripts/i18n-check.ts && node scripts/verify-hardcoded-strings.mjs && eslint --max-warnings=0 --ext .tsx,.ts packages/ui-app/src packages/ui-subframe/src packages/ui-mock/src",
|
|
"verify:phase-c-boundaries": "node scripts/verify-phase-c-boundaries.mjs",
|
|
"verify:ui-visual": "tsx scripts/verify-ui-mock-visual.ts",
|
|
"verify:ui-hot-swap": "tsx scripts/verify-ui-hot-swap.ts",
|
|
"test:hot-swap": "pnpm exec vitest run scripts/verify-ui-hot-swap.test.ts && pnpm run verify:ui-hot-swap",
|
|
"verify:tenant-isolation-report": "tsx scripts/tenant-isolation-report.ts --check",
|
|
"verify:sidebar-routes": "pnpm exec vitest run apps/web/app/application/sidebar/AdminSidebar.test.tsx apps/web/app/application/sidebar/AppSidebar.test.tsx apps/web/app/components/layouts/sidebars/shadcn/app-sidebar.test.tsx apps/web/app/routes/admin/admin-route-targets.test.ts apps/web/app/routes.test.ts",
|
|
"verify:github-ci-workflow": "node scripts/verify-github-ci-workflow.mjs",
|
|
"verify:gitea-ci-workflow": "node scripts/verify-gitea-ci-workflow.mjs",
|
|
"verify:workflow-outbox-native": "pnpm exec vitest run apps/worker/src/outbox/event-router.test.ts apps/worker/src/jobs/workflow-trigger.test.ts apps/worker/src/jobs/workflow-trigger-bootstrap.test.ts apps/worker/src/jobs/workflow-trigger-boundary.test.ts apps/worker/src/jobs/workflow-trigger-executor-factory.test.ts apps/worker/src/jobs/workflow-trigger-native-executor.test.ts apps/worker/src/jobs/workflow-trigger-store.test.ts apps/worker/src/health.test.ts apps/worker/src/index.test.ts packages/foundation/src/workflows.test.ts apps/web/app/modules/workflowEngine/routes/workflow-engine/workflow-producer-inventory.test.ts",
|
|
"verify:plugin-runtime-live": "node scripts/verify-plugin-runtime-live.mjs",
|
|
"verify:db-migrate-status": "node scripts/verify-db-migrate-status.mjs",
|
|
"verify:db-migrate-status:staging": "bash scripts/verify-db-migrate-status-staging.sh",
|
|
"verify:openapi-security": "tsx scripts/openapi-guard.ts",
|
|
"verify:deploy-workflow": "node scripts/verify-gitea-deploy-workflow.mjs",
|
|
"verify:deploy-readiness": "node scripts/verify-deploy-readiness.mjs",
|
|
"verify:docker-baseline": "node scripts/verify-docker-baseline.mjs",
|
|
"verify:docker-non-root": "node scripts/verify-docker-non-root.mjs",
|
|
"verify:bundle-size": "node scripts/verify-bundle-size.mjs",
|
|
"verify:route-inventory": "node scripts/verify-route-inventory.mjs",
|
|
"verify:source-health": "node scripts/verify-source-health.mjs",
|
|
"verify:eslint-baseline": "node scripts/verify-eslint-baseline.mjs",
|
|
"verify:a11y-baseline": "node scripts/verify-a11y-baseline.mjs",
|
|
"verify:secrets": "node scripts/verify-secrets.mjs",
|
|
"verify:test-density": "node scripts/verify-test-density.mjs",
|
|
"verify:test-coverage": "node scripts/verify-test-coverage.mjs",
|
|
"test:coverage": "node scripts/vitest-cli-compat.mjs run --coverage apps/web/app/ scripts tools/api-inventory/scan-api-routes.test.ts packages/db/src/*boundary.test.ts packages/create-toolctrl/src/create.test.js",
|
|
"coverage:badge": "node scripts/coverage-summary.mjs",
|
|
"verify:a11y-coverage": "node scripts/verify-a11y-coverage.mjs",
|
|
"verify:color-contrast": "node scripts/verify-color-contrast.mjs",
|
|
"test:a11y": "pnpm exec vitest run apps/web/app/components/ui/button.a11y.test.tsx apps/web/app/components/ui/errors/ErrorPage.a11y.test.tsx apps/web/app/components/ui/*.axe.test.tsx apps/web/app/components/core/SkipToContent.test.tsx apps/web/app/components/aceternity/HoverEffect.a11y.test.tsx apps/web/app/components/ui/lists/ViewToggle.a11y.test.tsx apps/web/app/components/ui/lists/ViewToggleWithUrl.a11y.test.tsx apps/web/app/components/ui/tabs/TabsWithIcons.a11y.test.tsx scripts/verify-color-contrast.test.mjs",
|
|
"verify:production-seed-artifact": "node scripts/verify-production-seed-artifact.mjs",
|
|
"verify:docker-runtime-smoke": "bash scripts/docker-web-runtime-smoke.sh toolctrl-web:smoke",
|
|
"verify:docker-api-runtime-smoke": "bash scripts/docker-api-runtime-smoke.sh toolctrl-api:smoke",
|
|
"verify:docker-worker-runtime-smoke": "bash scripts/docker-worker-runtime-smoke.sh toolctrl-worker:smoke",
|
|
"verify:auth-api-body-baseline": "node scripts/verify-auth-api-body-baseline.mjs",
|
|
"verify:api-auth-routing-baseline": "node scripts/verify-api-auth-routing-baseline.mjs",
|
|
"verify:api-auth-enforced-baseline": "node scripts/verify-api-auth-enforced-baseline.mjs",
|
|
"verify:mfa-scope-baseline": "node scripts/verify-mfa-scope-baseline.mjs",
|
|
"verify:impersonation-scope-baseline": "node scripts/verify-impersonation-scope-baseline.mjs",
|
|
"verify:api-auth-hardening-baseline": "node scripts/verify-api-auth-hardening-baseline.mjs",
|
|
"verify:transactional-mail-provider-baseline": "node scripts/verify-transactional-mail-provider-baseline.mjs",
|
|
"verify:db-boundary-baseline": "node scripts/verify-db-boundary-baseline.mjs",
|
|
"verify:observability-console-baseline": "node scripts/verify-observability-console-baseline.mjs",
|
|
"verify:permissions-audit-baseline": "node scripts/verify-permissions-audit-baseline.mjs",
|
|
"verify:audit-cascade-guard": "node scripts/verify-audit-cascade-guard.mjs",
|
|
"verify:permission-matrix": "node scripts/verify-permission-matrix.mjs",
|
|
"verify:billing-boundary-baseline": "node scripts/verify-billing-boundary-baseline.mjs",
|
|
"verify:role-permission-baseline": "node scripts/verify-role-permission-baseline.mjs",
|
|
"verify:notification-boundary-baseline": "node scripts/verify-notification-boundary-baseline.mjs",
|
|
"verify:realtime-boundary-baseline": "node scripts/verify-realtime-boundary-baseline.mjs",
|
|
"verify:storage-boundary-baseline": "node scripts/verify-storage-boundary-baseline.mjs",
|
|
"verify:export-boundary-baseline": "node scripts/verify-export-boundary-baseline.mjs",
|
|
"verify:import-boundary-baseline": "node scripts/verify-import-boundary-baseline.mjs",
|
|
"verify:security-gdpr-docs": "node scripts/verify-security-gdpr-docs.mjs",
|
|
"verify:host-aware-url-baseline": "node scripts/verify-host-aware-url-baseline.mjs",
|
|
"verify:theme-error-state-baseline": "node scripts/verify-theme-error-state-baseline.mjs",
|
|
"verify:i18n-hardcoded-baseline": "node scripts/verify-i18n-hardcoded-baseline.mjs",
|
|
"verify:hardcoded-strings": "node scripts/verify-hardcoded-strings.mjs",
|
|
"verify:tenant-auth-baseline": "node scripts/verify-tenant-auth-baseline.mjs",
|
|
"verify:onboarding-flow": "node scripts/verify-onboarding-flow.mjs",
|
|
"verify:platform-admin-dashboard-baseline": "node scripts/verify-platform-admin-dashboard-baseline.mjs",
|
|
"verify:settings-api-onboarding-baseline": "node scripts/verify-settings-api-onboarding-baseline.mjs",
|
|
"verify:health-ci-quality-baseline": "node scripts/verify-health-ci-quality-baseline.mjs",
|
|
"verify:feature-manifest-baseline": "node scripts/verify-feature-manifest-baseline.mjs",
|
|
"verify:docs-inventory-baseline": "node scripts/verify-docs-inventory-baseline.mjs",
|
|
"verify:readiness-docs-baseline": "node scripts/verify-readiness-docs-baseline.mjs",
|
|
"verify:porting-docs-baseline": "node scripts/verify-porting-docs-baseline.mjs",
|
|
"verify:production-docs-baseline": "node scripts/verify-production-docs-baseline.mjs",
|
|
"verify:release-docs-baseline": "node scripts/verify-release-docs-baseline.mjs",
|
|
"verify:release-docs": "node scripts/verify-release-docs.mjs",
|
|
"verify:staging-live-uat-readiness": "node scripts/verify-staging-live-uat-readiness.mjs",
|
|
"verify:production-docs": "node scripts/verify-production-docs.mjs",
|
|
"verify:docs-links": "tsx scripts/docs-link-check.ts",
|
|
"verify:core-build-without-plugins-smoke": "node scripts/verify-core-build-without-plugins-smoke.mjs",
|
|
"verify:removed-modules": "tsx scripts/scan-removed-modules.ts",
|
|
"verify:load": "node scripts/run-load-tests.mjs",
|
|
"typecheck": "pnpm --filter @toolctrl/web typecheck",
|
|
"prettier": "prettier --write '**/*.{ts,tsx}'",
|
|
"start": "pnpm --filter @toolctrl/web start",
|
|
"db:generate": "pnpm --filter @toolctrl/db prisma:generate",
|
|
"db:migrate:deploy": "pnpm --filter @toolctrl/db prisma:migrate:deploy",
|
|
"seed": "pnpm --filter @toolctrl/db seed",
|
|
"seed:e2e-readiness": "tsx scripts/seed-e2e-readiness.ts",
|
|
"seed:prod": "NODE_ENV=production pnpm --filter @toolctrl/db seed",
|
|
"permissions:sync": "pnpm --filter @toolctrl/db permissions:sync",
|
|
"manifest:new": "node scripts/create-feature-manifest.mjs",
|
|
"migrate:api-keys": "tsx scripts/migrate-api-keys.ts",
|
|
"verify:licenses": "node scripts/verify-licenses.mjs",
|
|
"verify:lighthouse": "node scripts/run-lighthouse.mjs",
|
|
"prepare": "node -e \"process.exit(process.env.CI ? 0 : 1)\" || lefthook install || true",
|
|
"verify:e2e-a11y": "node scripts/run-playwright-a11y.mjs",
|
|
"verify:e2e-mutating-readiness:local": "REQUIRE_E2E_A11Y=1 REQUIRE_AUTH_E2E=1 REQUIRE_E2E_READINESS=1 REQUIRE_E2E_MUTATING_READINESS=1 E2E_A11Y_STRICT=1 E2E_BROWSER_MATRIX=1 E2E_ALLOW_WORKFLOW_RUN=1 E2E_ALLOW_REGISTRATION_CREATE=1 E2E_ALLOW_ACCOUNT_CREATE=1 E2E_ALLOW_NO_TENANT_ACCOUNT_CREATE=1 E2E_ALLOW_PLUGIN_LIFECYCLE_MUTATION=1 E2E_ALLOW_PLUGIN_SETTINGS_WRITE=1 pnpm run verify:e2e-a11y",
|
|
"verify:e2e-mutating-readiness:worker-local": "E2E_REQUIRE_WORKFLOW_OUTBOX_DRAIN=1 pnpm run verify:e2e-mutating-readiness:local"
|
|
},
|
|
"dependencies": {
|
|
"@epic-web/cachified": "^4.0.0",
|
|
"@headlessui/react": "^2.2.0",
|
|
"@headlessui/tailwindcss": "^0.2.2",
|
|
"@hello-pangea/dnd": "^18.0.1",
|
|
"@heroicons/react": "^2.2.0",
|
|
"@hocuspocus/provider": "4.0.0",
|
|
"@modelcontextprotocol/sdk": "1.22.0",
|
|
"@monaco-editor/react": "^4.6.0",
|
|
"@popperjs/core": "^2.11.8",
|
|
"@prisma/adapter-pg": "7.8.0",
|
|
"@prisma/client": "7.8.0",
|
|
"@radix-ui/react-accordion": "^1.2.3",
|
|
"@radix-ui/react-alert-dialog": "^1.1.6",
|
|
"@radix-ui/react-aspect-ratio": "^1.1.2",
|
|
"@radix-ui/react-avatar": "^1.1.10",
|
|
"@radix-ui/react-checkbox": "^1.3.2",
|
|
"@radix-ui/react-collapsible": "^1.1.12",
|
|
"@radix-ui/react-context-menu": "^2.2.6",
|
|
"@radix-ui/react-dialog": "^1.1.15",
|
|
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
|
"@radix-ui/react-hover-card": "^1.1.15",
|
|
"@radix-ui/react-icons": "^1.3.2",
|
|
"@radix-ui/react-label": "^2.1.7",
|
|
"@radix-ui/react-popover": "^1.1.15",
|
|
"@radix-ui/react-progress": "^1.1.8",
|
|
"@radix-ui/react-radio-group": "^1.3.7",
|
|
"@radix-ui/react-scroll-area": "^1.2.10",
|
|
"@radix-ui/react-select": "^2.2.6",
|
|
"@radix-ui/react-separator": "^1.1.8",
|
|
"@radix-ui/react-slider": "^1.3.5",
|
|
"@radix-ui/react-slot": "^1.2.4",
|
|
"@radix-ui/react-switch": "^1.2.5",
|
|
"@radix-ui/react-tabs": "^1.1.3",
|
|
"@radix-ui/react-toast": "^1.2.6",
|
|
"@radix-ui/react-toggle": "^1.1.2",
|
|
"@radix-ui/react-toggle-group": "^1.1.2",
|
|
"@radix-ui/react-tooltip": "^1.2.8",
|
|
"@radix-ui/react-use-controllable-state": "^1.2.2",
|
|
"@react-router/node": "7.11.0",
|
|
"@react-router/remix-config-routes-adapter": "^0.0.0-nightly-bf7ecb711-20240911",
|
|
"@sindresorhus/slugify": "^2.2.1",
|
|
"@tiptap/core": "^2.11.5",
|
|
"@tiptap/extension-collaboration": "2.11.5",
|
|
"@tiptap/extension-collaboration-cursor": "2.11.5",
|
|
"@tiptap/extension-color": "^2.11.5",
|
|
"@tiptap/extension-highlight": "^2.11.5",
|
|
"@tiptap/extension-horizontal-rule": "^2.11.5",
|
|
"@tiptap/extension-image": "^2.11.5",
|
|
"@tiptap/extension-link": "^2.11.5",
|
|
"@tiptap/extension-placeholder": "^2.0.3",
|
|
"@tiptap/extension-text-style": "^2.11.5",
|
|
"@tiptap/extension-underline": "^2.11.5",
|
|
"@tiptap/pm": "^2.11.5",
|
|
"@tiptap/react": "^2.11.5",
|
|
"@tiptap/starter-kit": "^2.11.5",
|
|
"@tiptap/suggestion": "^2.11.5",
|
|
"@toolctrl/brand": "workspace:*",
|
|
"@toolctrl/config": "workspace:*",
|
|
"@toolctrl/db": "workspace:*",
|
|
"@toolctrl/entitlements": "workspace:*",
|
|
"@toolctrl/i18n": "workspace:*",
|
|
"@toolctrl/logger": "workspace:*",
|
|
"@toolctrl/mail": "workspace:*",
|
|
"@toolctrl/queue": "workspace:*",
|
|
"@toolctrl/storage": "workspace:*",
|
|
"@toolctrl/ui": "workspace:*",
|
|
"@toolctrl/url": "workspace:*",
|
|
"@xyflow/react": "^12.10.0",
|
|
"ajv": "^8.12.0",
|
|
"bcryptjs": "^2.4.3",
|
|
"bullmq": "^5.76.5",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"cmdk": "^1.1.1",
|
|
"company-email-validator": "^1.0.7",
|
|
"dagre": "^0.8.5",
|
|
"date-fns": "^3.6.0",
|
|
"date-fns-tz": "^3.2.0",
|
|
"decimal.js": "^10.4.3",
|
|
"dotenv": "^16.6.1",
|
|
"embla-carousel-react": "^8.6.0",
|
|
"framer-motion": "^11.14.4",
|
|
"handlebars": "^4.7.8",
|
|
"highlight.js": "^11.9.0",
|
|
"html-to-text": "^9.0.5",
|
|
"i18next": "^23.16.3",
|
|
"i18next-browser-languagedetector": "^7.1.0",
|
|
"i18next-fs-backend": "^2.2.0",
|
|
"i18next-http-backend": "^2.2.2",
|
|
"immer": "^11.1.3",
|
|
"input-otp": "^1.4.2",
|
|
"is-ip": "^3.1.0",
|
|
"isbot": "^3.7.0",
|
|
"jsonwebtoken": "^9.0.0",
|
|
"katex": "0.16.27",
|
|
"lru-cache": "^10.1.0",
|
|
"lucide-react": "^0.482.0",
|
|
"mailchecker": "^6.0.1",
|
|
"motion": "^12.23.26",
|
|
"nanoid": "^3.3.11",
|
|
"numeral": "^2.0.6",
|
|
"otpauth": "^9.5.1",
|
|
"pg": "^8.20.0",
|
|
"pino": "^9.14.0",
|
|
"platform": "^1.3.6",
|
|
"prisma": "7.8.0",
|
|
"qrcode.react": "^4.2.0",
|
|
"radix-ui": "^1.4.2",
|
|
"react": "19.2.3",
|
|
"react-colorful": "^5.6.1",
|
|
"react-day-picker": "^9.7.0",
|
|
"react-dnd": "^16.0.1",
|
|
"react-dnd-html5-backend": "^16.0.1",
|
|
"react-dom": "19.2.3",
|
|
"react-hook-form": "^7.54.2",
|
|
"react-hot-toast": "^2.4.1",
|
|
"react-i18next": "^15.1.0",
|
|
"react-resizable-panels": "^2.1.7",
|
|
"react-router": "7.11.0",
|
|
"react-sortablejs": "^6.1.4",
|
|
"react-syntax-highlighter": "^15.6.6",
|
|
"react-use-measure": "^2.1.7",
|
|
"recharts": "^2.15.3",
|
|
"remix-i18next": "^7.0.1",
|
|
"sonner": "^1.7.4",
|
|
"spin-delay": "^1.1.0",
|
|
"stripe": "^19.1.0",
|
|
"swr": "^2.2.0",
|
|
"tailwind-merge": "^3.0.2",
|
|
"tiny-invariant": "^1.3.1",
|
|
"tippy.js": "^6.3.7",
|
|
"tokenlens": "^1.3.1",
|
|
"tsx": "^4.6.2",
|
|
"use-debounce": "^9.0.3",
|
|
"use-stick-to-bottom": "^1.1.1",
|
|
"validator": "13.15.26",
|
|
"vaul": "^1.1.2",
|
|
"y-prosemirror": "1.3.7",
|
|
"y-protocols": "1.0.6",
|
|
"yjs": "13.6.30",
|
|
"zod": "^3.25.72",
|
|
"zustand": "^5.0.6"
|
|
},
|
|
"devDependencies": {
|
|
"@axe-core/playwright": "^4.10.0",
|
|
"@playwright/test": "1.59.1",
|
|
"@react-router/dev": "7.11.0",
|
|
"@tailwindcss/aspect-ratio": "^0.4.2",
|
|
"@tailwindcss/forms": "^0.5.10",
|
|
"@tailwindcss/postcss": "^4.1.12",
|
|
"@tailwindcss/typography": "^0.5.9",
|
|
"@tailwindcss/vite": "4.2.4",
|
|
"@testing-library/dom": "^10.4.1",
|
|
"@testing-library/jest-dom": "^6.9.1",
|
|
"@testing-library/react": "^16.3.2",
|
|
"@types/bcryptjs": "^2.4.2",
|
|
"@types/dagre": "^0.7.52",
|
|
"@types/html-to-text": "^9.0.1",
|
|
"@types/jsonwebtoken": "^9.0.6",
|
|
"@types/katex": "0.16.7",
|
|
"@types/marked": "^4.0.3",
|
|
"@types/numeral": "^2.0.2",
|
|
"@types/pg": "^8.20.0",
|
|
"@types/platform": "^1.3.4",
|
|
"@types/react": "19.2.7",
|
|
"@types/react-dom": "19.2.3",
|
|
"@types/react-syntax-highlighter": "^15.5.13",
|
|
"@types/validator": "13.15.10",
|
|
"@typescript-eslint/eslint-plugin": "^8.59.2",
|
|
"@typescript-eslint/parser": "^8.59.2",
|
|
"@vitest/coverage-v8": "^3.2.4",
|
|
"axe-core": "^4.11.4",
|
|
"esbuild": "0.27.7",
|
|
"eslint": "^8.54.0",
|
|
"eslint-plugin-import": "^2.32.0",
|
|
"eslint-plugin-jsx-a11y": "^6.10.2",
|
|
"eslint-plugin-react-hooks": "^7.1.1",
|
|
"jsdom": "^26.1.0",
|
|
"jsonc-eslint-parser": "^3.1.0",
|
|
"lefthook": "^1.7.0",
|
|
"markdownlint-cli": "^0.48.0",
|
|
"minimatch": "^10.0.1",
|
|
"playwright": "1.59.1",
|
|
"postcss": "^8.4.32",
|
|
"prettier": "^3.5.3",
|
|
"prettier-plugin-tailwindcss": "^0.6.14",
|
|
"tailwindcss": "^4.1.12",
|
|
"tailwindcss-animate": "^1.0.7",
|
|
"typescript": "^5.3.2",
|
|
"vite": "7.3.0",
|
|
"vite-tsconfig-paths": "^4.2.2",
|
|
"vitest": "^3.2.4"
|
|
}
|
|
}
|