{
  "name": "@nannier/canvas",
  "version": "4.4.0",
  "description": "Universal React Native UI kit: one component API renders natively on iOS, Android, and web.",
  "license": "MIT",
  "packageManager": "bun@1.4.0",
  "homepage": "https://canvas.nannier.com/",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/bnannier/canvas.git"
  },
  "bugs": {
    "url": "https://github.com/bnannier/canvas/issues"
  },
  "keywords": [
    "react-native",
    "react-native-web",
    "ui-kit",
    "component-library",
    "design-system",
    "ios",
    "android",
    "web",
    "universal",
    "cross-platform",
    "liquid-glass",
    "material-design",
    "accessibility",
    "design-tokens",
    "expo",
    "ai",
    "agent-skills",
    "codex",
    "claude-code"
  ],
  "main": "./dist/index.js",
  "module": "./dist/index.js",
  "types": "./dist/index.d.ts",
  "exports": {
    ".": {
      "types": "./dist/index.d.ts",
      "react-native": "./dist/native/index.js",
      "default": "./dist/index.js"
    },
    "./styles/*": "./styles/*",
    "./package.json": "./package.json"
  },
  "files": [
    "dist",
    "styles",
    "android/build.gradle",
    "android/src/main",
    "expo-module.config.json",
    "CHANGELOG.md",
    "DESIGN.md",
    "USAGE.md",
    "consumer",
    "docs/public/ai",
    "docs/public/llms.txt",
    "docs/public/llms-full.txt",
    "docs/public/agents.md"
  ],
  "sideEffects": [
    "*.css"
  ],
  "scripts": {
    "prepare": "node -e \"if (require('node:fs').existsSync('.husky/install.mjs')) import('./.husky/install.mjs')\"",
    "typecheck": "tsc --noEmit && tsc --noEmit -p tools/tsconfig.json && tsc --noEmit -p tools/axes/tsconfig.json",
    "typecheck:e2e": "tsc --noEmit -p e2e/tsconfig.json",
    "lint": "eslint .",
    "build": "rm -rf dist && tsc -p tsconfig.build.json && bun scripts/build-native.ts",
    "dev": "bun scripts/dev.ts",
    "verify-package": "bun scripts/verify-package.ts",
    "prepublishOnly": "node tools/licensegen/generate.mjs && bun run agent-docs:gen && bun run consumer:gen && bun run build && bun run verify-package",
    "test": "bun test --timeout 20000 ./test ./tools",
    "e2e": "playwright test",
    "e2e:ui": "playwright test --ui",
    "e2e:pixels": "E2E_STRICT_PIXEL_DIGESTS=1 playwright test --project=visual",
    "e2e:update": "E2E_UPDATE_DIGESTS=reviewed playwright test --project=visual --workers=1",
    "e2e:serve": "bun e2e/support/serve-dist.ts --root docs/dist --port 4173 --headers --https",
    "validate-tokens": "bun scripts/validate-tokens.ts",
    "tokens:css": "bun tools/v4/derive-css.ts",
    "tokens:css:check": "bun tools/v4/derive-css.ts --check",
    "v4:specs": "bun tools/v4/derive-detail-specs.ts",
    "v4:specs:check": "bun tools/v4/derive-detail-specs.ts --check",
    "tokens:inks": "bun tools/v4/derive-inks.ts",
    "tokens:inks:check": "bun tools/v4/derive-inks.ts --check",
    "check-size": "bun scripts/check-size.ts",
    "check:interactions": "bun scripts/check-interaction-coverage.ts",
    "check:materials": "bun scripts/check-material-coverage.ts",
    "check:api": "bun scripts/check-public-api.ts",
    "axes:record": "bun --preload ./tools/rnw-preload.ts tools/axes/record.ts",
    "audit:checklists": "bun tools/audit/checklists.ts --write",
    "audit:checklists:check": "bun tools/audit/checklists.ts --check",
    "audit:status": "bun tools/audit/status.ts",
    "audit:native": "bun tools/audit/native/run.ts",
    "audit:native:build": "bun tools/audit/native/build.ts",
    "audit:web": "bun tools/audit/run-web.ts",
    "audit:analyze": "bun tools/audit/analyze.ts",
    "audit:calibrate": "bun tools/audit/calibrate.ts",
    "audit:sheets": "bun tools/audit/sheets.ts",
    "audit:index": "bun tools/audit/index.ts",
    "audit:prune": "bun tools/audit/prune.ts",
    "audit:turn": "bun tools/audit/turn.ts",
    "check:docs-components": "bun scripts/check-docs-components.ts",
    "check-parity": "bun scripts/check-handoff-parity.ts",
    "check-parity:check": "bun scripts/check-handoff-parity.ts --check",
    "looks": "bun scripts/capture-looks.ts",
    "changeset": "changeset",
    "version-packages": "changeset version",
    "release": "node scripts/release.mjs publish",
    "designmd:gen": "bun tools/designmd/generate.ts",
    "designmd:gen:check": "bun tools/designmd/generate.ts --check",
    "docs:gen": "bun tools/docgen/generate.ts",
    "geomap:gen": "bun tools/geomapgen/generate.ts",
    "icons:gen": "bun tools/icongen/generate.ts",
    "favicon:gen": "bun tools/favicongen/generate.ts",
    "appicon:gen": "bun tools/appicongen/generate.ts",
    "privacy:gen": "bun tools/privacygen/generate.ts",
    "privacy:gen:check": "bun tools/privacygen/generate.ts --check",
    "og:gen": "bun tools/oggen/generate.ts",
    "avatars:gen": "node tools/avatargen/generate.mjs",
    "license:gen": "node tools/licensegen/generate.mjs",
    "raster:gen": "bun tools/rastergen/generate.ts",
    "raster:gen:check": "bun tools/rastergen/generate.ts --check",
    "docs:gen:check": "bun tools/docgen/generate.ts --check",
    "notices:scan": "bun tools/noticegen/scan.ts",
    "notices:gen": "bun tools/noticegen/generate.ts",
    "notices:gen:check": "bun tools/noticegen/generate.ts --check",
    "verify-native-consumer": "node scripts/verify-native-consumer.mjs",
    "verify-consumer-support": "node scripts/verify-consumer-support.mjs",
    "ci:local": "node scripts/ci-local.mjs",
    "agent-docs:gen": "bun tools/agent-docs/generate.ts",
    "agent-docs:gen:check": "bun tools/agent-docs/generate.ts --check",
    "consumer:gen": "node tools/consumer/generate.mjs",
    "consumer:gen:check": "node tools/consumer/generate.mjs --check"
  },
  "publishConfig": {
    "registry": "https://registry.npmjs.org",
    "access": "public"
  },
  "peerDependencies": {
    "expo-blur": "*",
    "expo-clipboard": "*",
    "expo-glass-effect": "*",
    "expo-modules-core": "*",
    "expo-video": "*",
    "react": ">=18",
    "react-native": ">=0.74",
    "react-native-qrcode-svg": ">=6",
    "react-native-safe-area-context": ">=4",
    "react-native-svg": ">=15.8.0"
  },
  "peerDependenciesMeta": {
    "expo-blur": {
      "optional": true
    },
    "expo-clipboard": {
      "optional": true
    },
    "expo-glass-effect": {
      "optional": true
    },
    "expo-modules-core": {
      "optional": true
    },
    "expo-video": {
      "optional": true
    },
    "react-native-qrcode-svg": {
      "optional": true
    },
    "react-native-safe-area-context": {
      "optional": true
    }
  },
  "devDependencies": {
    "@axe-core/playwright": "^4.13.0",
    "@babel/parser": "^7.29.7",
    "@babel/traverse": "^7.29.7",
    "@changesets/cli": "^2.31.0",
    "@happy-dom/global-registrator": "^20.10.6",
    "@playwright/test": "1.64.0-alpha-2026-09-25",
    "@react-native/babel-preset": "0.86.0",
    "@react-native/metro-config": "0.86.0",
    "@testing-library/dom": "^10.4.1",
    "@testing-library/react": "^16.3.2",
    "@types/node": "^25.9.3",
    "@types/react": "^19.2.16",
    "@types/topojson-client": "^3.1.5",
    "@types/topojson-specification": "^1.0.5",
    "esbuild": "0.28.2",
    "eslint": "^9",
    "eslint-plugin-react": "^7.37.5",
    "eslint-plugin-react-hooks": "^7.1.1",
    "expo-blur": "~57.0.2",
    "expo-glass-effect": "~57.0.1",
    "expo-video": "~57.0.2",
    "happy-dom": "^20.10.6",
    "husky": "^9.1.7",
    "lucide-static": "^1.24.0",
    "metro": "0.84.5",
    "playwright": "1.64.0-alpha-2026-09-25",
    "react": "^19.2.7",
    "react-dom": "^19.2.7",
    "react-native": "^0.86.0",
    "react-native-qrcode-svg": "^6.3.21",
    "react-native-svg": "^15.15.5",
    "react-native-web": "^0.21.2",
    "sharp": "^0.35.0",
    "topojson-client": "^3.1.0",
    "typescript": "^5.8.3",
    "typescript-eslint": "^8.64.0",
    "world-atlas": "^2.0.2",
    "yaml": "^2.9.0"
  },
  "overrides": {
    "playwright-core": "1.64.0-alpha-2026-09-25"
  },
  "react-native": "./dist/native/index.js",
  "bin": {
    "canvas": "./consumer/cli.mjs"
  }
}
