{"version":3,"file":"state.js","names":[],"sources":["esm/vite/state.js"],"sourcesContent":["import { compile } from \"@tailwindcss/node\";\nimport { Scanner } from \"@tailwindcss/oxide\";\nimport {\n  createGrammarConfigView\n} from \"@tamagui/style-grammar/runtime\";\nimport { classifyCandidate } from \"@tamagui/style-grammar/tooling\";\nimport { readFile, realpath } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nconst TAILWIND_VERSION = \"4.3.0\";\nconst TAILWIND_VIRTUAL_ID = \"virtual:tamagui-tailwind.css\";\nconst TAILWIND_RESOLVED_ID = `\\0${TAILWIND_VIRTUAL_ID}`;\nfunction wrapWithTamaguiLayer(css) {\n  return `@layer tamagui {\n${css}\n}`;\n}\nfunction isTamaguiCoreResetCSS(id) {\n  const normalizedId = id.split(\"?\", 1)[0].replace(/\\\\/g, \"/\");\n  return normalizedId.endsWith(\"/@tamagui/core/reset.css\") || normalizedId.endsWith(\"/code/core/core/reset.css\");\n}\nconst TAILWIND_INPUT = `@layer tamagui, theme, utilities;\n@import \"tailwindcss/theme.css\" layer(theme);\n@import \"tailwindcss/utilities.css\" layer(utilities);`;\nfunction extensionForFile(id) {\n  return path.extname(id.split(\"?\", 1)[0]).slice(1) || \"html\";\n}\nasync function assertHostTailwind(root) {\n  const requireFromRoot = createRequire(path.join(root, \"package.json\"));\n  let packagePath;\n  try {\n    packagePath = requireFromRoot.resolve(\"tailwindcss/package.json\");\n  } catch {\n    throw new Error(\n      `[tamagui] @tamagui/tailwind/vite requires tailwindcss@${TAILWIND_VERSION} in the app. Install it with \\`bun add -D tailwindcss@${TAILWIND_VERSION}\\` (resolved from ${root}).`\n    );\n  }\n  const packageJSON = JSON.parse(await readFile(packagePath, \"utf8\"));\n  if (packageJSON.version !== TAILWIND_VERSION) {\n    throw new Error(\n      `[tamagui] @tamagui/tailwind/vite requires tailwindcss@${TAILWIND_VERSION}, but ${packageJSON.version || \"an unknown version\"} was resolved from ${packagePath}. Align the app dependency before starting Vite.`\n    );\n  }\n}\nfunction createTailwindScannerState() {\n  let root = \"\";\n  let generation = -1;\n  let enabled = false;\n  let scanner = null;\n  let compiler = null;\n  let grammarConfig = createGrammarConfigView({});\n  let candidatesByFile = /* @__PURE__ */ new Map();\n  let compiledCandidates = /* @__PURE__ */ new Set();\n  let addDependency = () => {\n  };\n  let css = \"\";\n  function clear() {\n    root = \"\";\n    generation = -1;\n    enabled = false;\n    scanner = null;\n    compiler = null;\n    grammarConfig = createGrammarConfigView({});\n    candidatesByFile = /* @__PURE__ */ new Map();\n    compiledCandidates = /* @__PURE__ */ new Set();\n    addDependency = () => {\n    };\n    css = \"\";\n  }\n  async function configure(nextRoot, nextGeneration, config, onDependency, onSourceGlob = () => {\n  }) {\n    if (!config) {\n      clear();\n      generation = nextGeneration;\n      return false;\n    }\n    if (compiler && scanner && enabled && generation === nextGeneration && root === nextRoot) {\n      return true;\n    }\n    await assertHostTailwind(nextRoot);\n    root = nextRoot;\n    generation = nextGeneration;\n    enabled = true;\n    grammarConfig = createGrammarConfigView(config);\n    addDependency = onDependency;\n    scanner = new Scanner({\n      sources: [\n        { base: root, pattern: \"**/*\", negated: false },\n        { base: root, pattern: \"node_modules/**\", negated: true },\n        { base: root, pattern: \".git/**\", negated: true },\n        { base: root, pattern: \".vite/**\", negated: true },\n        { base: root, pattern: \"dist/**\", negated: true },\n        { base: root, pattern: \"build/**\", negated: true },\n        { base: root, pattern: \"coverage/**\", negated: true }\n      ]\n    });\n    compiler = await createCompiler();\n    scanner.scan();\n    registerScannerSources(scanner, onDependency, onSourceGlob);\n    candidatesByFile = /* @__PURE__ */ new Map();\n    await Promise.all(\n      scanner.files.map(async (file) => {\n        try {\n          const source = await readFile(file, \"utf8\");\n          candidatesByFile.set(\n            await normalizeSourcePath(file),\n            candidatesForSource(scanner, file, source)\n          );\n        } catch {\n        }\n      })\n    );\n    await rebuild();\n    return true;\n  }\n  async function createCompiler() {\n    return compile(TAILWIND_INPUT, {\n      base: root,\n      onDependency: addDependency\n    });\n  }\n  async function rebuild() {\n    if (!compiler) return false;\n    const allCandidates = /* @__PURE__ */ new Set();\n    for (const candidates of candidatesByFile.values()) {\n      for (const candidate of candidates) allCandidates.add(candidate);\n    }\n    const passthrough = [...allCandidates].filter(\n      (candidate) => classifyCandidate(candidate, grammarConfig).kind === \"passthrough\"\n    ).sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n    const nextCandidates = new Set(passthrough);\n    const removedCandidate = [...compiledCandidates].some(\n      (candidate) => !nextCandidates.has(candidate)\n    );\n    if (removedCandidate) {\n      compiler = await createCompiler();\n    }\n    const nextCSS = compiler.build(passthrough);\n    compiledCandidates = nextCandidates;\n    if (nextCSS === css) return false;\n    css = nextCSS;\n    return true;\n  }\n  async function scanSource(id, source) {\n    if (!enabled || !scanner) return false;\n    candidatesByFile.set(\n      await normalizeSourcePath(id),\n      candidatesForSource(scanner, id, source)\n    );\n    return rebuild();\n  }\n  async function removeSource(id) {\n    if (!candidatesByFile.delete(await normalizeSourcePath(id))) return false;\n    return rebuild();\n  }\n  return {\n    clear,\n    configure,\n    removeSource,\n    scanSource,\n    get enabled() {\n      return enabled;\n    },\n    get css() {\n      return css;\n    },\n    get candidateCount() {\n      return compiledCandidates.size;\n    }\n  };\n}\nasync function updateTailwindForWatchChange(state, id, event, configure) {\n  if (!await configure()) return false;\n  if (event === \"delete\") {\n    return state.removeSource(id);\n  }\n  try {\n    return state.scanSource(id, await readFile(id, \"utf8\"));\n  } catch {\n    return state.removeSource(id);\n  }\n}\nfunction registerScannerSources(scanner, onDependency, onSourceGlob) {\n  for (const file of scanner.files) {\n    onDependency(file);\n  }\n  for (const { base, pattern } of scanner.globs) {\n    onSourceGlob(path.join(base, pattern));\n  }\n}\nasync function normalizeSourcePath(id) {\n  const cleanId = path.resolve(id.split(\"?\", 1)[0]);\n  try {\n    return await realpath(cleanId);\n  } catch {\n    try {\n      return path.join(await realpath(path.dirname(cleanId)), path.basename(cleanId));\n    } catch {\n      return cleanId;\n    }\n  }\n}\nfunction candidatesForSource(scanner, id, source) {\n  return new Set(\n    scanner.getCandidatesWithPositions({\n      content: source,\n      extension: extensionForFile(id)\n    }).map(({ candidate }) => candidate)\n  );\n}\nexport {\n  TAILWIND_RESOLVED_ID,\n  TAILWIND_VERSION,\n  TAILWIND_VIRTUAL_ID,\n  createTailwindScannerState,\n  isTamaguiCoreResetCSS,\n  updateTailwindForWatchChange,\n  wrapWithTamaguiLayer\n};\n//# sourceMappingURL=state.js.map\n"],"mappings":";;;;;;;;;AASA,MAAM,mBAAmB;AACzB,MAAM,sBAAsB;AAC5B,MAAM,uBAAuB,KAAK;AAClC,SAAS,qBAAqB,KAAK;CACjC,OAAO;EACP,IAAI;;AAEN;AACA,SAAS,sBAAsB,IAAI;CACjC,MAAM,eAAe,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,OAAO,GAAG;CAC3D,OAAO,aAAa,SAAS,0BAA0B,KAAK,aAAa,SAAS,2BAA2B;AAC/G;AACA,MAAM,iBAAiB;;;AAGvB,SAAS,iBAAiB,IAAI;CAC5B,OAAO,KAAK,QAAQ,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK;AACvD;AACA,eAAe,mBAAmB,MAAM;CACtC,MAAM,kBAAkB,cAAc,KAAK,KAAK,MAAM,cAAc,CAAC;CACrE,IAAI;CACJ,IAAI;EACF,cAAc,gBAAgB,QAAQ,0BAA0B;CAClE,QAAQ;EACN,MAAM,IAAI,MACR,yDAAyD,iBAAiB,wDAAwD,iBAAiB,oBAAoB,KAAK,GAC9K;CACF;CACA,MAAM,cAAc,KAAK,MAAM,MAAM,SAAS,aAAa,MAAM,CAAC;CAClE,IAAI,YAAY,qBAA8B;EAC5C,MAAM,IAAI,MACR,yDAAyD,iBAAiB,QAAQ,YAAY,WAAW,qBAAqB,qBAAqB,YAAY,iDACjK;CACF;AACF;AACA,SAAS,6BAA6B;CACpC,IAAI,OAAO;CACX,IAAI,aAAa,CAAC;CAClB,IAAI,UAAU;CACd,IAAI,UAAU;CACd,IAAI,WAAW;CACf,IAAI,gBAAgB,wBAAwB,CAAC,CAAC;CAC9C,IAAI,mCAAmC,IAAI,IAAI;CAC/C,IAAI,qCAAqC,IAAI,IAAI;CACjD,IAAI,sBAAsB,CAC1B;CACA,IAAI,MAAM;CACV,SAAS,QAAQ;EACf,OAAO;EACP,aAAa,CAAC;EACd,UAAU;EACV,UAAU;EACV,WAAW;EACX,gBAAgB,wBAAwB,CAAC,CAAC;EAC1C,mCAAmC,IAAI,IAAI;EAC3C,qCAAqC,IAAI,IAAI;EAC7C,sBAAsB,CACtB;EACA,MAAM;CACR;CACA,eAAe,UAAU,UAAU,gBAAgB,QAAQ,cAAc,qBAAqB,CAC9F,GAAG;EACD,IAAI,CAAC,QAAQ;GACX,MAAM;GACN,aAAa;GACb,OAAO;EACT;EACA,IAAI,YAAY,WAAW,WAAW,eAAe,kBAAkB,SAAS,UAAU;GACxF,OAAO;EACT;EACA,MAAM,mBAAmB,QAAQ;EACjC,OAAO;EACP,aAAa;EACb,UAAU;EACV,gBAAgB,wBAAwB,MAAM;EAC9C,gBAAgB;EAChB,UAAU,IAAI,QAAQ,EACpB,SAAS;GACP;IAAE,MAAM;IAAM,SAAS;IAAQ,SAAS;GAAM;GAC9C;IAAE,MAAM;IAAM,SAAS;IAAmB,SAAS;GAAK;GACxD;IAAE,MAAM;IAAM,SAAS;IAAW,SAAS;GAAK;GAChD;IAAE,MAAM;IAAM,SAAS;IAAY,SAAS;GAAK;GACjD;IAAE,MAAM;IAAM,SAAS;IAAW,SAAS;GAAK;GAChD;IAAE,MAAM;IAAM,SAAS;IAAY,SAAS;GAAK;GACjD;IAAE,MAAM;IAAM,SAAS;IAAe,SAAS;GAAK;EACtD,EACF,CAAC;EACD,WAAW,MAAM,eAAe;EAChC,QAAQ,KAAK;EACb,uBAAuB,SAAS,cAAc,YAAY;EAC1D,mCAAmC,IAAI,IAAI;EAC3C,MAAM,QAAQ,IACZ,QAAQ,MAAM,IAAI,OAAO,SAAS;GAChC,IAAI;IACF,MAAM,SAAS,MAAM,SAAS,MAAM,MAAM;IAC1C,iBAAiB,IACf,MAAM,oBAAoB,IAAI,GAC9B,oBAAoB,SAAS,MAAM,MAAM,CAC3C;GACF,QAAQ,CACR;EACF,CAAC,CACH;EACA,MAAM,QAAQ;EACd,OAAO;CACT;CACA,eAAe,iBAAiB;EAC9B,OAAO,QAAQ,gBAAgB;GAC7B,MAAM;GACN,cAAc;EAChB,CAAC;CACH;CACA,eAAe,UAAU;EACvB,IAAI,CAAC,UAAU,OAAO;EACtB,MAAM,gCAAgC,IAAI,IAAI;EAC9C,KAAK,MAAM,cAAc,iBAAiB,OAAO,GAAG;GAClD,KAAK,MAAM,aAAa,YAAY,cAAc,IAAI,SAAS;EACjE;EACA,MAAM,cAAc,CAAC,GAAG,aAAa,CAAC,CAAC,QACpC,cAAc,kBAAkB,WAAW,aAAa,CAAC,CAAC,SAAS,aACtE,CAAC,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC;EAC3C,MAAM,iBAAiB,IAAI,IAAI,WAAW;EAC1C,MAAM,mBAAmB,CAAC,GAAG,kBAAkB,CAAC,CAAC,MAC9C,cAAc,CAAC,eAAe,IAAI,SAAS,CAC9C;EACA,IAAI,kBAAkB;GACpB,WAAW,MAAM,eAAe;EAClC;EACA,MAAM,UAAU,SAAS,MAAM,WAAW;EAC1C,qBAAqB;EACrB,IAAI,YAAY,KAAK,OAAO;EAC5B,MAAM;EACN,OAAO;CACT;CACA,eAAe,WAAW,IAAI,QAAQ;EACpC,IAAI,CAAC,WAAW,CAAC,SAAS,OAAO;EACjC,iBAAiB,IACf,MAAM,oBAAoB,EAAE,GAC5B,oBAAoB,SAAS,IAAI,MAAM,CACzC;EACA,OAAO,QAAQ;CACjB;CACA,eAAe,aAAa,IAAI;EAC9B,IAAI,CAAC,iBAAiB,OAAO,MAAM,oBAAoB,EAAE,CAAC,GAAG,OAAO;EACpE,OAAO,QAAQ;CACjB;CACA,OAAO;EACL;EACA;EACA;EACA;EACA,IAAI,UAAU;GACZ,OAAO;EACT;EACA,IAAI,MAAM;GACR,OAAO;EACT;EACA,IAAI,iBAAiB;GACnB,OAAO,mBAAmB;EAC5B;CACF;AACF;AACA,eAAe,6BAA6B,OAAO,IAAI,OAAO,WAAW;CACvE,IAAI,CAAC,MAAM,UAAU,GAAG,OAAO;CAC/B,IAAI,UAAU,UAAU;EACtB,OAAO,MAAM,aAAa,EAAE;CAC9B;CACA,IAAI;EACF,OAAO,MAAM,WAAW,IAAI,MAAM,SAAS,IAAI,MAAM,CAAC;CACxD,QAAQ;EACN,OAAO,MAAM,aAAa,EAAE;CAC9B;AACF;AACA,SAAS,uBAAuB,SAAS,cAAc,cAAc;CACnE,KAAK,MAAM,QAAQ,QAAQ,OAAO;EAChC,aAAa,IAAI;CACnB;CACA,KAAK,MAAM,EAAE,MAAM,aAAa,QAAQ,OAAO;EAC7C,aAAa,KAAK,KAAK,MAAM,OAAO,CAAC;CACvC;AACF;AACA,eAAe,oBAAoB,IAAI;CACrC,MAAM,UAAU,KAAK,QAAQ,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,EAAE;CAChD,IAAI;EACF,OAAO,MAAM,SAAS,OAAO;CAC/B,QAAQ;EACN,IAAI;GACF,OAAO,KAAK,KAAK,MAAM,SAAS,KAAK,QAAQ,OAAO,CAAC,GAAG,KAAK,SAAS,OAAO,CAAC;EAChF,QAAQ;GACN,OAAO;EACT;CACF;AACF;AACA,SAAS,oBAAoB,SAAS,IAAI,QAAQ;CAChD,OAAO,IAAI,IACT,QAAQ,2BAA2B;EACjC,SAAS;EACT,WAAW,iBAAiB,EAAE;CAChC,CAAC,CAAC,CAAC,KAAK,EAAE,gBAAgB,SAAS,CACrC;AACF"}