@tamagui/static 1.0.1-beta.61 → 1.0.1-beta.64

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -43,7 +43,7 @@ function extractMediaStyle(ternary, jsxPath, tamaguiConfig, sourcePath, importan
43
43
  const screenStr = negate ? "not all" : "screen";
44
44
  const mediaQuery = `${screenStr} and ${mediaSelector}`;
45
45
  const precendencePrefix = mediaKeyPrecendence[key];
46
- const styleInner = style.rules[0].replace(style.identifier, identifier);
46
+ const styleInner = style.rules.map((rule) => rule.replace(style.identifier, identifier)).join(";");
47
47
  let styleRule = "";
48
48
  if (styleInner.includes("@media")) {
49
49
  styleRule = styleInner.replace("{", ` and ${mediaQuery} {`);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/extractor/extractMediaStyle.ts"],
4
- "sourcesContent": ["import { NodePath } from '@babel/traverse'\nimport * as t from '@babel/types'\nimport { TamaguiInternalConfig, getStylesAtomic, mediaObjectToString } from '@tamagui/core-node'\nimport { ViewStyle } from 'react-native'\n\nimport { MEDIA_SEP } from '../constants'\nimport { StyleObject, Ternary } from '../types'\nimport { isInsideTamagui, isPresent } from './extractHelpers'\n\nexport function extractMediaStyle(\n ternary: Ternary,\n jsxPath: NodePath<t.JSXElement>,\n tamaguiConfig: TamaguiInternalConfig,\n sourcePath: string,\n importance = 0,\n shouldPrintDebug: boolean | 'verbose' = false\n) {\n const mt = getMediaQueryTernary(ternary, jsxPath, sourcePath)\n if (!mt) {\n return null\n }\n const { key } = mt\n const mq = tamaguiConfig.media[key]\n if (!mq) {\n console.error(`Media query \"${key}\" not found: ${Object.keys(tamaguiConfig.media)}`)\n return null\n }\n const getStyleObj = (styleObj: ViewStyle | null, negate = false) => {\n return styleObj ? { styleObj, negate } : null\n }\n const styleOpts = [\n getStyleObj(ternary.consequent, false),\n getStyleObj(ternary.alternate, true),\n ].filter(isPresent)\n if (shouldPrintDebug && !styleOpts.length) {\n console.log(' media query, no styles?')\n return null\n }\n // for now order first strongest\n const mediaKeys = Object.keys(tamaguiConfig.media)\n const mediaKeyPrecendence = mediaKeys.reduce((acc, cur, i) => {\n acc[cur] = new Array(importance + 1).fill(':root').join('')\n return acc\n }, {})\n let mediaStyles: StyleObject[] = []\n for (const { styleObj, negate } of styleOpts) {\n const styles = getStylesAtomic(styleObj)\n const singleMediaStyles = styles.map((style) => {\n const negKey = negate ? '0' : ''\n const ogPrefix = style.identifier.slice(0, style.identifier.indexOf('-') + 1)\n // adds an extra separator before and after to detect later in concatClassName\n // so it goes from: \"_f-[hash]\"\n // to: \"_f-_sm0_[hash]\" or \"_f-_sm_[hash]\"\n const identifier = `${style.identifier.replace(\n ogPrefix,\n `${ogPrefix}${MEDIA_SEP}${key}${negKey}${MEDIA_SEP}`\n )}`\n const className = `.${identifier}`\n const mediaSelector = mediaObjectToString(tamaguiConfig.media[key])\n const screenStr = negate ? 'not all' : 'screen'\n const mediaQuery = `${screenStr} and ${mediaSelector}`\n const precendencePrefix = mediaKeyPrecendence[key]\n const styleInner = style.rules[0].replace(style.identifier, identifier)\n // combines media queries if they already exist\n let styleRule = ''\n if (styleInner.includes('@media')) {\n // combine\n styleRule = styleInner.replace('{', ` and ${mediaQuery} {`)\n } else {\n styleRule = `@media ${mediaQuery} { ${precendencePrefix} ${styleInner} }`\n }\n return {\n ...style,\n identifier,\n className,\n rules: [styleRule],\n }\n })\n if (shouldPrintDebug === 'verbose') {\n // prettier-ignore\n console.log(' media styles:', importance, styleObj, singleMediaStyles.map(x => x.identifier).join(', '))\n }\n // add to output\n mediaStyles = [...mediaStyles, ...singleMediaStyles]\n }\n // filter out\n ternary.remove()\n return { mediaStyles, ternaryWithoutMedia: mt.ternaryWithoutMedia }\n}\n\nfunction getMediaQueryTernary(\n ternary: Ternary,\n jsxPath: NodePath<t.JSXElement>,\n sourcePath: string\n): null | {\n key: string\n bindingName: string\n ternaryWithoutMedia: Ternary | null\n} {\n // this handles unwrapping logical && media query ternarys\n // first, unwrap if it has media logicalExpression\n if (t.isLogicalExpression(ternary.test) && ternary.test.operator === '&&') {\n // *should* be normalized to always be on left side\n const mediaLeft = getMediaInfoFromExpression(\n ternary.test.left,\n jsxPath,\n sourcePath,\n ternary.inlineMediaQuery\n )\n if (mediaLeft) {\n return {\n ...mediaLeft,\n ternaryWithoutMedia: {\n ...ternary,\n test: ternary.test.right,\n },\n }\n }\n }\n // const media = useMedia()\n // ... media.sm\n const result = getMediaInfoFromExpression(\n ternary.test,\n jsxPath,\n sourcePath,\n ternary.inlineMediaQuery\n )\n if (result) {\n return {\n ...result,\n ternaryWithoutMedia: null,\n }\n }\n return null\n}\n\nfunction getMediaInfoFromExpression(\n test: t.Expression,\n jsxPath: NodePath<t.JSXElement>,\n sourcePath: string,\n inlineMediaQuery?: string\n) {\n if (inlineMediaQuery) {\n return {\n key: inlineMediaQuery,\n bindingName: inlineMediaQuery,\n }\n }\n if (t.isMemberExpression(test) && t.isIdentifier(test.object) && t.isIdentifier(test.property)) {\n const name = test.object['name']\n const key = test.property['name']\n const bindings = jsxPath.scope.getAllBindings()\n const binding = bindings[name]\n if (!binding) return false\n const bindingNode = binding.path?.node\n if (!t.isVariableDeclarator(bindingNode) || !bindingNode.init) return false\n if (!isValidMediaCall(jsxPath, bindingNode.init, sourcePath)) return false\n return { key, bindingName: name }\n }\n if (t.isIdentifier(test)) {\n const key = test.name\n const node = jsxPath.scope.getBinding(test.name)?.path?.node\n if (!t.isVariableDeclarator(node)) return false\n if (!node.init || !isValidMediaCall(jsxPath, node.init, sourcePath)) return false\n return { key, bindingName: key }\n }\n return null\n}\n\nexport function isValidMediaCall(\n jsxPath: NodePath<t.JSXElement>,\n init: t.Expression,\n sourcePath: string\n) {\n if (!t.isCallExpression(init)) return false\n if (!t.isIdentifier(init.callee)) return false\n // TODO could support renaming useMedia by looking up import first\n if (init.callee.name !== 'useMedia') return false\n const bindings = jsxPath.scope.getAllBindings()\n const mediaBinding = bindings['useMedia']\n if (!mediaBinding) return false\n const useMediaImport = mediaBinding.path.parent\n if (!t.isImportDeclaration(useMediaImport)) return false\n if (useMediaImport.source.value !== 'tamagui') {\n if (!isInsideTamagui(sourcePath)) {\n return false\n }\n }\n return true\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { NodePath } from '@babel/traverse'\nimport * as t from '@babel/types'\nimport { TamaguiInternalConfig, getStylesAtomic, mediaObjectToString } from '@tamagui/core-node'\nimport { ViewStyle } from 'react-native'\n\nimport { MEDIA_SEP } from '../constants'\nimport { StyleObject, Ternary } from '../types'\nimport { isInsideTamagui, isPresent } from './extractHelpers'\n\nexport function extractMediaStyle(\n ternary: Ternary,\n jsxPath: NodePath<t.JSXElement>,\n tamaguiConfig: TamaguiInternalConfig,\n sourcePath: string,\n importance = 0,\n shouldPrintDebug: boolean | 'verbose' = false\n) {\n const mt = getMediaQueryTernary(ternary, jsxPath, sourcePath)\n if (!mt) {\n return null\n }\n const { key } = mt\n const mq = tamaguiConfig.media[key]\n if (!mq) {\n console.error(`Media query \"${key}\" not found: ${Object.keys(tamaguiConfig.media)}`)\n return null\n }\n const getStyleObj = (styleObj: ViewStyle | null, negate = false) => {\n return styleObj ? { styleObj, negate } : null\n }\n const styleOpts = [\n getStyleObj(ternary.consequent, false),\n getStyleObj(ternary.alternate, true),\n ].filter(isPresent)\n if (shouldPrintDebug && !styleOpts.length) {\n console.log(' media query, no styles?')\n return null\n }\n // for now order first strongest\n const mediaKeys = Object.keys(tamaguiConfig.media)\n const mediaKeyPrecendence = mediaKeys.reduce((acc, cur, i) => {\n acc[cur] = new Array(importance + 1).fill(':root').join('')\n return acc\n }, {})\n let mediaStyles: StyleObject[] = []\n for (const { styleObj, negate } of styleOpts) {\n const styles = getStylesAtomic(styleObj)\n const singleMediaStyles = styles.map((style) => {\n const negKey = negate ? '0' : ''\n const ogPrefix = style.identifier.slice(0, style.identifier.indexOf('-') + 1)\n // adds an extra separator before and after to detect later in concatClassName\n // so it goes from: \"_f-[hash]\"\n // to: \"_f-_sm0_[hash]\" or \"_f-_sm_[hash]\"\n const identifier = `${style.identifier.replace(\n ogPrefix,\n `${ogPrefix}${MEDIA_SEP}${key}${negKey}${MEDIA_SEP}`\n )}`\n const className = `.${identifier}`\n const mediaSelector = mediaObjectToString(tamaguiConfig.media[key])\n const screenStr = negate ? 'not all' : 'screen'\n const mediaQuery = `${screenStr} and ${mediaSelector}`\n const precendencePrefix = mediaKeyPrecendence[key]\n const styleInner = style.rules\n .map((rule) => rule.replace(style.identifier, identifier))\n .join(';')\n // combines media queries if they already exist\n let styleRule = ''\n if (styleInner.includes('@media')) {\n // combine\n styleRule = styleInner.replace('{', ` and ${mediaQuery} {`)\n } else {\n styleRule = `@media ${mediaQuery} { ${precendencePrefix} ${styleInner} }`\n }\n return {\n ...style,\n identifier,\n className,\n rules: [styleRule],\n }\n })\n if (shouldPrintDebug === 'verbose') {\n // prettier-ignore\n console.log(' media styles:', importance, styleObj, singleMediaStyles.map(x => x.identifier).join(', '))\n }\n // add to output\n mediaStyles = [...mediaStyles, ...singleMediaStyles]\n }\n // filter out\n ternary.remove()\n return { mediaStyles, ternaryWithoutMedia: mt.ternaryWithoutMedia }\n}\n\nfunction getMediaQueryTernary(\n ternary: Ternary,\n jsxPath: NodePath<t.JSXElement>,\n sourcePath: string\n): null | {\n key: string\n bindingName: string\n ternaryWithoutMedia: Ternary | null\n} {\n // this handles unwrapping logical && media query ternarys\n // first, unwrap if it has media logicalExpression\n if (t.isLogicalExpression(ternary.test) && ternary.test.operator === '&&') {\n // *should* be normalized to always be on left side\n const mediaLeft = getMediaInfoFromExpression(\n ternary.test.left,\n jsxPath,\n sourcePath,\n ternary.inlineMediaQuery\n )\n if (mediaLeft) {\n return {\n ...mediaLeft,\n ternaryWithoutMedia: {\n ...ternary,\n test: ternary.test.right,\n },\n }\n }\n }\n // const media = useMedia()\n // ... media.sm\n const result = getMediaInfoFromExpression(\n ternary.test,\n jsxPath,\n sourcePath,\n ternary.inlineMediaQuery\n )\n if (result) {\n return {\n ...result,\n ternaryWithoutMedia: null,\n }\n }\n return null\n}\n\nfunction getMediaInfoFromExpression(\n test: t.Expression,\n jsxPath: NodePath<t.JSXElement>,\n sourcePath: string,\n inlineMediaQuery?: string\n) {\n if (inlineMediaQuery) {\n return {\n key: inlineMediaQuery,\n bindingName: inlineMediaQuery,\n }\n }\n if (t.isMemberExpression(test) && t.isIdentifier(test.object) && t.isIdentifier(test.property)) {\n const name = test.object['name']\n const key = test.property['name']\n const bindings = jsxPath.scope.getAllBindings()\n const binding = bindings[name]\n if (!binding) return false\n const bindingNode = binding.path?.node\n if (!t.isVariableDeclarator(bindingNode) || !bindingNode.init) return false\n if (!isValidMediaCall(jsxPath, bindingNode.init, sourcePath)) return false\n return { key, bindingName: name }\n }\n if (t.isIdentifier(test)) {\n const key = test.name\n const node = jsxPath.scope.getBinding(test.name)?.path?.node\n if (!t.isVariableDeclarator(node)) return false\n if (!node.init || !isValidMediaCall(jsxPath, node.init, sourcePath)) return false\n return { key, bindingName: key }\n }\n return null\n}\n\nexport function isValidMediaCall(\n jsxPath: NodePath<t.JSXElement>,\n init: t.Expression,\n sourcePath: string\n) {\n if (!t.isCallExpression(init)) return false\n if (!t.isIdentifier(init.callee)) return false\n // TODO could support renaming useMedia by looking up import first\n if (init.callee.name !== 'useMedia') return false\n const bindings = jsxPath.scope.getAllBindings()\n const mediaBinding = bindings['useMedia']\n if (!mediaBinding) return false\n const useMediaImport = mediaBinding.path.parent\n if (!t.isImportDeclaration(useMediaImport)) return false\n if (useMediaImport.source.value !== 'tamagui') {\n if (!isInsideTamagui(sourcePath)) {\n return false\n }\n }\n return true\n}\n"],
5
+ "mappings": ";;AACA;AACA;AAGA;AAEA;AAEO,2BACL,SACA,SACA,eACA,YACA,aAAa,GACb,mBAAwC,OACxC;AACA,QAAM,KAAK,qBAAqB,SAAS,SAAS,UAAU;AAC5D,MAAI,CAAC,IAAI;AACP,WAAO;AAAA,EACT;AACA,QAAM,EAAE,QAAQ;AAChB,QAAM,KAAK,cAAc,MAAM;AAC/B,MAAI,CAAC,IAAI;AACP,YAAQ,MAAM,gBAAgB,mBAAmB,OAAO,KAAK,cAAc,KAAK,GAAG;AACnF,WAAO;AAAA,EACT;AACA,QAAM,cAAc,wBAAC,UAA4B,SAAS,UAAU;AAClE,WAAO,WAAW,EAAE,UAAU,OAAO,IAAI;AAAA,EAC3C,GAFoB;AAGpB,QAAM,YAAY;AAAA,IAChB,YAAY,QAAQ,YAAY,KAAK;AAAA,IACrC,YAAY,QAAQ,WAAW,IAAI;AAAA,EACrC,EAAE,OAAO,SAAS;AAClB,MAAI,oBAAoB,CAAC,UAAU,QAAQ;AACzC,YAAQ,IAAI,2BAA2B;AACvC,WAAO;AAAA,EACT;AAEA,QAAM,YAAY,OAAO,KAAK,cAAc,KAAK;AACjD,QAAM,sBAAsB,UAAU,OAAO,CAAC,KAAK,KAAK,MAAM;AAC5D,QAAI,OAAO,IAAI,MAAM,aAAa,CAAC,EAAE,KAAK,OAAO,EAAE,KAAK,EAAE;AAC1D,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AACL,MAAI,cAA6B,CAAC;AAClC,aAAW,EAAE,UAAU,YAAY,WAAW;AAC5C,UAAM,SAAS,gBAAgB,QAAQ;AACvC,UAAM,oBAAoB,OAAO,IAAI,CAAC,UAAU;AAC9C,YAAM,SAAS,SAAS,MAAM;AAC9B,YAAM,WAAW,MAAM,WAAW,MAAM,GAAG,MAAM,WAAW,QAAQ,GAAG,IAAI,CAAC;AAI5E,YAAM,aAAa,GAAG,MAAM,WAAW,QACrC,UACA,GAAG,WAAW,YAAY,MAAM,SAAS,WAC3C;AACA,YAAM,YAAY,IAAI;AACtB,YAAM,gBAAgB,oBAAoB,cAAc,MAAM,IAAI;AAClE,YAAM,YAAY,SAAS,YAAY;AACvC,YAAM,aAAa,GAAG,iBAAiB;AACvC,YAAM,oBAAoB,oBAAoB;AAC9C,YAAM,aAAa,MAAM,MACtB,IAAI,CAAC,SAAS,KAAK,QAAQ,MAAM,YAAY,UAAU,CAAC,EACxD,KAAK,GAAG;AAEX,UAAI,YAAY;AAChB,UAAI,WAAW,SAAS,QAAQ,GAAG;AAEjC,oBAAY,WAAW,QAAQ,KAAK,QAAQ,cAAc;AAAA,MAC5D,OAAO;AACL,oBAAY,UAAU,gBAAgB,qBAAqB;AAAA,MAC7D;AACA,aAAO;AAAA,QACL,GAAG;AAAA,QACH;AAAA,QACA;AAAA,QACA,OAAO,CAAC,SAAS;AAAA,MACnB;AAAA,IACF,CAAC;AACD,QAAI,qBAAqB,WAAW;AAElC,cAAQ,IAAI,mBAAmB,YAAY,UAAU,kBAAkB,IAAI,OAAK,EAAE,UAAU,EAAE,KAAK,IAAI,CAAC;AAAA,IAC1G;AAEA,kBAAc,CAAC,GAAG,aAAa,GAAG,iBAAiB;AAAA,EACrD;AAEA,UAAQ,OAAO;AACf,SAAO,EAAE,aAAa,qBAAqB,GAAG,oBAAoB;AACpE;AAjFgB;AAmFhB,8BACE,SACA,SACA,YAKA;AAGA,MAAI,EAAE,oBAAoB,QAAQ,IAAI,KAAK,QAAQ,KAAK,aAAa,MAAM;AAEzE,UAAM,YAAY,2BAChB,QAAQ,KAAK,MACb,SACA,YACA,QAAQ,gBACV;AACA,QAAI,WAAW;AACb,aAAO;AAAA,QACL,GAAG;AAAA,QACH,qBAAqB;AAAA,UACnB,GAAG;AAAA,UACH,MAAM,QAAQ,KAAK;AAAA,QACrB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,QAAM,SAAS,2BACb,QAAQ,MACR,SACA,YACA,QAAQ,gBACV;AACA,MAAI,QAAQ;AACV,WAAO;AAAA,MACL,GAAG;AAAA,MACH,qBAAqB;AAAA,IACvB;AAAA,EACF;AACA,SAAO;AACT;AA5CS;AA8CT,oCACE,MACA,SACA,YACA,kBACA;AA/IF;AAgJE,MAAI,kBAAkB;AACpB,WAAO;AAAA,MACL,KAAK;AAAA,MACL,aAAa;AAAA,IACf;AAAA,EACF;AACA,MAAI,EAAE,mBAAmB,IAAI,KAAK,EAAE,aAAa,KAAK,MAAM,KAAK,EAAE,aAAa,KAAK,QAAQ,GAAG;AAC9F,UAAM,OAAO,KAAK,OAAO;AACzB,UAAM,MAAM,KAAK,SAAS;AAC1B,UAAM,WAAW,QAAQ,MAAM,eAAe;AAC9C,UAAM,UAAU,SAAS;AACzB,QAAI,CAAC;AAAS,aAAO;AACrB,UAAM,cAAc,cAAQ,SAAR,mBAAc;AAClC,QAAI,CAAC,EAAE,qBAAqB,WAAW,KAAK,CAAC,YAAY;AAAM,aAAO;AACtE,QAAI,CAAC,iBAAiB,SAAS,YAAY,MAAM,UAAU;AAAG,aAAO;AACrE,WAAO,EAAE,KAAK,aAAa,KAAK;AAAA,EAClC;AACA,MAAI,EAAE,aAAa,IAAI,GAAG;AACxB,UAAM,MAAM,KAAK;AACjB,UAAM,OAAO,oBAAQ,MAAM,WAAW,KAAK,IAAI,MAAlC,mBAAqC,SAArC,mBAA2C;AACxD,QAAI,CAAC,EAAE,qBAAqB,IAAI;AAAG,aAAO;AAC1C,QAAI,CAAC,KAAK,QAAQ,CAAC,iBAAiB,SAAS,KAAK,MAAM,UAAU;AAAG,aAAO;AAC5E,WAAO,EAAE,KAAK,aAAa,IAAI;AAAA,EACjC;AACA,SAAO;AACT;AA/BS;AAiCF,0BACL,SACA,MACA,YACA;AACA,MAAI,CAAC,EAAE,iBAAiB,IAAI;AAAG,WAAO;AACtC,MAAI,CAAC,EAAE,aAAa,KAAK,MAAM;AAAG,WAAO;AAEzC,MAAI,KAAK,OAAO,SAAS;AAAY,WAAO;AAC5C,QAAM,WAAW,QAAQ,MAAM,eAAe;AAC9C,QAAM,eAAe,SAAS;AAC9B,MAAI,CAAC;AAAc,WAAO;AAC1B,QAAM,iBAAiB,aAAa,KAAK;AACzC,MAAI,CAAC,EAAE,oBAAoB,cAAc;AAAG,WAAO;AACnD,MAAI,eAAe,OAAO,UAAU,WAAW;AAC7C,QAAI,CAAC,gBAAgB,UAAU,GAAG;AAChC,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AApBgB;",
6
6
  "names": []
7
7
  }
@@ -4,6 +4,7 @@ import vm from "vm";
4
4
  import generate from "@babel/generator";
5
5
  import * as t from "@babel/types";
6
6
  import { createCSSVariable } from "@tamagui/core-node";
7
+ import esbuild from "esbuild";
7
8
  import { FAILED_EVAL } from "../constants";
8
9
  import { evaluateAstNode } from "./evaluateAstNode";
9
10
  import { isValidThemeHook } from "./extractHelpers";
@@ -27,7 +28,11 @@ function createEvaluator({
27
28
  return staticNamespace[n.name];
28
29
  }
29
30
  const evalContext = vm.createContext(staticNamespace);
30
- const code = `(${generate(n).code})`;
31
+ const codeWithTypescriptAnnotations = `(${generate(n).code})`;
32
+ const code = esbuild.transformSync(codeWithTypescriptAnnotations, { loader: "tsx" }).code.replace(/;\n$/, "");
33
+ if (shouldPrintDebug) {
34
+ console.log("evaluating", code);
35
+ }
31
36
  return vm.runInContext(code, evalContext);
32
37
  }, "evalFn");
33
38
  return (n) => {
@@ -4,6 +4,7 @@ import { relative } from "path";
4
4
  import traverse from "@babel/traverse";
5
5
  import * as t from "@babel/types";
6
6
  import {
7
+ expandStyles,
7
8
  getSplitStyles,
8
9
  mediaQueryConfig,
9
10
  normalizeStyleObject,
@@ -342,7 +343,7 @@ function createExtractor() {
342
343
  let keys = [name];
343
344
  let out = null;
344
345
  if (staticConfig.propMapper) {
345
- out = staticConfig.propMapper(name, styleValue, defaultTheme, staticConfig.defaultProps, { resolveVariablesAs: "auto" });
346
+ out = staticConfig.propMapper(name, styleValue, defaultTheme, staticConfig.defaultProps, { resolveVariablesAs: "auto" }, void 0, shouldPrintDebug);
346
347
  if (out) {
347
348
  if (!Array.isArray(out)) {
348
349
  console.warn(`Error expected array but got`, out);
@@ -371,7 +372,7 @@ function createExtractor() {
371
372
  attr: path.node
372
373
  };
373
374
  }
374
- if (validHTMLAttributes[key]) {
375
+ if (validHTMLAttributes[key] || key.startsWith("aria-") || key.startsWith("data-")) {
375
376
  return attr;
376
377
  }
377
378
  if (shouldPrintDebug) {
@@ -780,6 +781,7 @@ function createExtractor() {
780
781
  console.log("Error extracting attribute", err.message, err.stack);
781
782
  console.log("node", path.node);
782
783
  }
784
+ inlined.set(`${Math.random()}`, "spread");
783
785
  return {
784
786
  type: "attr",
785
787
  value: path.node
@@ -994,35 +996,47 @@ function createExtractor() {
994
996
  press: false,
995
997
  pressIn: false
996
998
  };
997
- const completeStaticProps = Object.keys(attrs).reduce((acc, index) => {
998
- const cur = attrs[index];
999
+ let foundStaticProps = {};
1000
+ for (const key in attrs) {
1001
+ const cur = attrs[key];
999
1002
  if (cur.type === "style") {
1000
1003
  normalizeStyleObject(cur.value);
1001
- Object.assign(acc, cur.value);
1004
+ foundStaticProps = {
1005
+ ...foundStaticProps,
1006
+ ...expandStyles(cur.value)
1007
+ };
1008
+ continue;
1002
1009
  }
1003
1010
  if (cur.type === "attr") {
1004
1011
  if (t.isJSXSpreadAttribute(cur.value)) {
1005
- return acc;
1012
+ continue;
1006
1013
  }
1007
1014
  if (!t.isJSXIdentifier(cur.value.name)) {
1008
- return acc;
1015
+ continue;
1009
1016
  }
1010
- const key = cur.value.name.name;
1017
+ const key2 = cur.value.name.name;
1011
1018
  const value = attemptEvalSafe(cur.value.value || t.booleanLiteral(true));
1012
- if (value === FAILED_EVAL) {
1013
- return acc;
1019
+ if (value !== FAILED_EVAL) {
1020
+ foundStaticProps = {
1021
+ ...foundStaticProps,
1022
+ [key2]: value
1023
+ };
1014
1024
  }
1015
- acc[key] = value;
1016
1025
  }
1017
- return acc;
1018
- }, {});
1019
- const completeProps = {
1020
- ...staticConfig.defaultProps,
1021
- ...completeStaticProps
1022
- };
1026
+ }
1027
+ const completeProps = {};
1028
+ for (const key in staticConfig.defaultProps) {
1029
+ if (!(key in foundStaticProps)) {
1030
+ completeProps[key] = staticConfig.defaultProps[key];
1031
+ }
1032
+ }
1033
+ for (const key in foundStaticProps) {
1034
+ completeProps[key] = foundStaticProps[key];
1035
+ }
1023
1036
  if (shouldPrintDebug) {
1024
1037
  console.log(" - attrs (combined \u{1F500}): \n", logLines(attrs.map(attrStr).join(", ")));
1025
1038
  console.log(" - defaultProps: \n", logLines(objToStr(staticConfig.defaultProps)));
1039
+ console.log(" - foundStaticProps: \n", logLines(objToStr(foundStaticProps)));
1026
1040
  console.log(" - completeProps: \n", logLines(objToStr(completeProps)));
1027
1041
  }
1028
1042
  const getStyles = /* @__PURE__ */ __name((props2, debugName = "") => {
@@ -1044,7 +1058,7 @@ function createExtractor() {
1044
1058
  const out = getSplitStyles(props2, staticConfig, defaultTheme, {
1045
1059
  ...state,
1046
1060
  fallbackProps: completeProps
1047
- });
1061
+ }, void 0, props2["debug"]);
1048
1062
  const outStyle = {
1049
1063
  ...out.style,
1050
1064
  ...out.pseudos
@@ -1068,7 +1082,7 @@ function createExtractor() {
1068
1082
  if (!completeStyles) {
1069
1083
  throw new Error(`Impossible, no styles`);
1070
1084
  }
1071
- const addInitialStyleKeys = shouldFlatten ? difference(Object.keys(completeStyles), Object.keys(completeStaticProps)) : [];
1085
+ const addInitialStyleKeys = shouldFlatten ? difference(Object.keys(completeStyles), Object.keys(foundStaticProps)) : [];
1072
1086
  if (addInitialStyleKeys.length) {
1073
1087
  const toAdd = pick(completeStyles, ...addInitialStyleKeys);
1074
1088
  const firstGroup = attrs.find((x) => x.type === "style");
@@ -1084,14 +1098,11 @@ function createExtractor() {
1084
1098
  }
1085
1099
  if (shouldPrintDebug) {
1086
1100
  console.log(" -- addInitialStyleKeys", addInitialStyleKeys.join(", "), { shouldFlatten });
1087
- console.log(" -- completeStaticProps:\n", logLines(objToStr(completeStaticProps)));
1088
1101
  console.log(" -- completeStyles:\n", logLines(objToStr(completeStyles)));
1089
1102
  }
1090
1103
  let getStyleError = null;
1091
1104
  for (const attr of attrs) {
1092
1105
  try {
1093
- if (shouldPrintDebug)
1094
- console.log(" *", attrStr(attr));
1095
1106
  switch (attr.type) {
1096
1107
  case "ternary":
1097
1108
  const a = getStyles(attr.value.alternate, "ternary.alternate");
@@ -1105,7 +1116,7 @@ function createExtractor() {
1105
1116
  continue;
1106
1117
  case "style":
1107
1118
  if (shouldPrintDebug)
1108
- console.log(" * styles in", logLines(objToStr(attr.value)));
1119
+ console.log(" * styles in", attr.value);
1109
1120
  const styles = getStyles(attr.value, "style");
1110
1121
  if (shouldPrintDebug)
1111
1122
  console.log(" * styles out", logLines(objToStr(styles)));
@@ -1118,6 +1129,9 @@ function createExtractor() {
1118
1129
  getStyleError = err;
1119
1130
  }
1120
1131
  }
1132
+ if (shouldPrintDebug) {
1133
+ console.log(" - attrs (ternaries/combined):\n", logLines(attrs.map(attrStr).join(", ")));
1134
+ }
1121
1135
  tm.mark("jsx-element-styles", shouldPrintDebug === "verbose");
1122
1136
  if (getStyleError) {
1123
1137
  console.log(" \u26A0\uFE0F postprocessing error, deopt", getStyleError);
@@ -43,7 +43,7 @@ function extractMediaStyle(ternary, jsxPath, tamaguiConfig, sourcePath, importan
43
43
  const screenStr = negate ? "not all" : "screen";
44
44
  const mediaQuery = `${screenStr} and ${mediaSelector}`;
45
45
  const precendencePrefix = mediaKeyPrecendence[key];
46
- const styleInner = style.rules[0].replace(style.identifier, identifier);
46
+ const styleInner = style.rules.map((rule) => rule.replace(style.identifier, identifier)).join(";");
47
47
  let styleRule = "";
48
48
  if (styleInner.includes("@media")) {
49
49
  styleRule = styleInner.replace("{", ` and ${mediaQuery} {`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/static",
3
- "version": "1.0.1-beta.61",
3
+ "version": "1.0.1-beta.64",
4
4
  "source": "src/index.ts",
5
5
  "types": "./types/index.d.ts",
6
6
  "main": "dist/cjs",
@@ -36,11 +36,11 @@
36
36
  "@babel/parser": "^7.15.7",
37
37
  "@babel/traverse": "^7.15.4",
38
38
  "@expo/match-media": "^0.3.0",
39
- "@tamagui/build": "^1.0.1-beta.61",
40
- "@tamagui/core-node": "^1.0.1-beta.61",
41
- "@tamagui/fake-react-native": "^1.0.1-beta.61",
42
- "@tamagui/helpers": "^1.0.1-beta.61",
43
- "@tamagui/proxy-worm": "^1.0.1-beta.61",
39
+ "@tamagui/build": "^1.0.1-beta.64",
40
+ "@tamagui/core-node": "^1.0.1-beta.64",
41
+ "@tamagui/fake-react-native": "^1.0.1-beta.64",
42
+ "@tamagui/helpers": "^1.0.1-beta.64",
43
+ "@tamagui/proxy-worm": "^1.0.1-beta.64",
44
44
  "babel-literal-to-ast": "^2.1.0",
45
45
  "esbuild": "^0.14.36",
46
46
  "esbuild-register": "^3.3.2",
@@ -48,7 +48,7 @@
48
48
  "fs-extra": "^9.1.0",
49
49
  "invariant": "^2.2.4",
50
50
  "lodash": "^4.17.21",
51
- "tamagui": "^1.0.1-beta.61"
51
+ "tamagui": "^1.0.1-beta.64"
52
52
  },
53
53
  "devDependencies": {
54
54
  "@babel/plugin-syntax-typescript": "^7.14.5",
@@ -5,6 +5,7 @@ import { NodePath } from '@babel/traverse'
5
5
  import * as t from '@babel/types'
6
6
  import type { TamaguiConfig } from '@tamagui/core'
7
7
  import { createCSSVariable } from '@tamagui/core-node'
8
+ import esbuild from 'esbuild'
8
9
 
9
10
  import { FAILED_EVAL } from '../constants'
10
11
  import { evaluateAstNode } from './evaluateAstNode'
@@ -46,10 +47,14 @@ export function createEvaluator({
46
47
  return staticNamespace[n.name]
47
48
  }
48
49
  const evalContext = vm.createContext(staticNamespace)
49
- const code = `(${generate(n as any).code})`
50
- // if (shouldPrintDebug) {
51
- // console.log('evaluating', { n, code, evalContext })
52
- // }
50
+ const codeWithTypescriptAnnotations = `(${generate(n as any).code})`
51
+ const code = esbuild
52
+ .transformSync(codeWithTypescriptAnnotations, { loader: 'tsx' })
53
+ .code.replace(/;\n$/, '')
54
+
55
+ if (shouldPrintDebug) {
56
+ console.log('evaluating', code)
57
+ }
53
58
  return vm.runInContext(code, evalContext)
54
59
  }
55
60
 
@@ -6,6 +6,7 @@ import {
6
6
  PseudoStyles,
7
7
  StaticConfigParsed,
8
8
  TamaguiInternalConfig,
9
+ expandStyles,
9
10
  getSplitStyles,
10
11
  mediaQueryConfig,
11
12
  normalizeStyleObject,
@@ -538,6 +539,8 @@ export function createExtractor() {
538
539
  console.log('Error extracting attribute', err.message, err.stack)
539
540
  console.log('node', path.node)
540
541
  }
542
+ // dont flatten if we run into error
543
+ inlined.set(`${Math.random()}`, 'spread')
541
544
  return {
542
545
  type: 'attr',
543
546
  value: path.node,
@@ -735,7 +738,9 @@ export function createExtractor() {
735
738
  styleValue,
736
739
  defaultTheme,
737
740
  staticConfig.defaultProps,
738
- { resolveVariablesAs: 'auto' }
741
+ { resolveVariablesAs: 'auto' },
742
+ undefined,
743
+ shouldPrintDebug
739
744
  )
740
745
  if (out) {
741
746
  if (!Array.isArray(out)) {
@@ -769,7 +774,11 @@ export function createExtractor() {
769
774
  attr: path.node,
770
775
  } as const
771
776
  }
772
- if (validHTMLAttributes[key]) {
777
+ if (
778
+ validHTMLAttributes[key] ||
779
+ key.startsWith('aria-') ||
780
+ key.startsWith('data-')
781
+ ) {
773
782
  return attr
774
783
  }
775
784
  if (shouldPrintDebug) {
@@ -1404,38 +1413,52 @@ export function createExtractor() {
1404
1413
  }
1405
1414
 
1406
1415
  // evaluates all static attributes into a simple object
1407
- const completeStaticProps = Object.keys(attrs).reduce((acc, index) => {
1408
- const cur = attrs[index] as ExtractedAttr
1416
+ let foundStaticProps = {}
1417
+ for (const key in attrs) {
1418
+ const cur = attrs[key]
1409
1419
  if (cur.type === 'style') {
1410
1420
  normalizeStyleObject(cur.value)
1411
- Object.assign(acc, cur.value)
1421
+ foundStaticProps = {
1422
+ ...foundStaticProps,
1423
+ ...expandStyles(cur.value),
1424
+ }
1425
+ continue
1412
1426
  }
1413
1427
  if (cur.type === 'attr') {
1414
1428
  if (t.isJSXSpreadAttribute(cur.value)) {
1415
- return acc
1429
+ continue
1416
1430
  }
1417
1431
  if (!t.isJSXIdentifier(cur.value.name)) {
1418
- return acc
1432
+ continue
1419
1433
  }
1420
1434
  const key = cur.value.name.name
1421
1435
  // undefined = boolean true
1422
1436
  const value = attemptEvalSafe(cur.value.value || t.booleanLiteral(true))
1423
- if (value === FAILED_EVAL) {
1424
- return acc
1437
+ if (value !== FAILED_EVAL) {
1438
+ foundStaticProps = {
1439
+ ...foundStaticProps,
1440
+ [key]: value,
1441
+ }
1425
1442
  }
1426
- acc[key] = value
1427
1443
  }
1428
- return acc
1429
- }, {})
1444
+ }
1430
1445
 
1431
- const completeProps = {
1432
- ...staticConfig.defaultProps,
1433
- ...completeStaticProps,
1446
+ // must preserve exact order
1447
+ const completeProps = {}
1448
+ for (const key in staticConfig.defaultProps) {
1449
+ if (!(key in foundStaticProps)) {
1450
+ completeProps[key] = staticConfig.defaultProps[key]
1451
+ }
1452
+ }
1453
+ for (const key in foundStaticProps) {
1454
+ completeProps[key] = foundStaticProps[key]
1434
1455
  }
1435
1456
 
1436
1457
  if (shouldPrintDebug) {
1437
1458
  console.log(' - attrs (combined 🔀): \n', logLines(attrs.map(attrStr).join(', ')))
1438
1459
  console.log(' - defaultProps: \n', logLines(objToStr(staticConfig.defaultProps)))
1460
+ // prettier-ignore
1461
+ console.log(' - foundStaticProps: \n', logLines(objToStr(foundStaticProps)))
1439
1462
  console.log(' - completeProps: \n', logLines(objToStr(completeProps)))
1440
1463
  }
1441
1464
 
@@ -1454,10 +1477,17 @@ export function createExtractor() {
1454
1477
  }
1455
1478
  }
1456
1479
  try {
1457
- const out = getSplitStyles(props, staticConfig, defaultTheme, {
1458
- ...state,
1459
- fallbackProps: completeProps,
1460
- })
1480
+ const out = getSplitStyles(
1481
+ props,
1482
+ staticConfig,
1483
+ defaultTheme,
1484
+ {
1485
+ ...state,
1486
+ fallbackProps: completeProps,
1487
+ },
1488
+ undefined,
1489
+ props['debug']
1490
+ )
1461
1491
  const outStyle = {
1462
1492
  ...out.style,
1463
1493
  ...out.pseudos,
@@ -1503,7 +1533,7 @@ export function createExtractor() {
1503
1533
 
1504
1534
  // any extra styles added in postprocess should be added to first group as they wont be overriden
1505
1535
  const addInitialStyleKeys = shouldFlatten
1506
- ? difference(Object.keys(completeStyles), Object.keys(completeStaticProps))
1536
+ ? difference(Object.keys(completeStyles), Object.keys(foundStaticProps))
1507
1537
  : []
1508
1538
 
1509
1539
  if (addInitialStyleKeys.length) {
@@ -1525,8 +1555,6 @@ export function createExtractor() {
1525
1555
  // prettier-ignore
1526
1556
  console.log(' -- addInitialStyleKeys', addInitialStyleKeys.join(', '), { shouldFlatten })
1527
1557
  // prettier-ignore
1528
- console.log(' -- completeStaticProps:\n', logLines(objToStr(completeStaticProps)))
1529
- // prettier-ignore
1530
1558
  console.log(' -- completeStyles:\n', logLines(objToStr(completeStyles)))
1531
1559
  }
1532
1560
 
@@ -1535,7 +1563,6 @@ export function createExtractor() {
1535
1563
  // fix up ternaries, combine final style values
1536
1564
  for (const attr of attrs) {
1537
1565
  try {
1538
- if (shouldPrintDebug) console.log(' *', attrStr(attr))
1539
1566
  switch (attr.type) {
1540
1567
  case 'ternary':
1541
1568
  const a = getStyles(attr.value.alternate, 'ternary.alternate')
@@ -1545,8 +1572,7 @@ export function createExtractor() {
1545
1572
  if (shouldPrintDebug) console.log(' => tern ', attrStr(attr))
1546
1573
  continue
1547
1574
  case 'style':
1548
- // prettier-ignore
1549
- if (shouldPrintDebug) console.log(' * styles in', logLines(objToStr(attr.value)))
1575
+ if (shouldPrintDebug) console.log(' * styles in', attr.value)
1550
1576
  // expand variants and such
1551
1577
  // get the keys we need
1552
1578
  const styles = getStyles(attr.value, 'style')
@@ -1567,6 +1593,11 @@ export function createExtractor() {
1567
1593
  }
1568
1594
  }
1569
1595
 
1596
+ if (shouldPrintDebug) {
1597
+ // prettier-ignore
1598
+ console.log(' - attrs (ternaries/combined):\n', logLines(attrs.map(attrStr).join(', ')))
1599
+ }
1600
+
1570
1601
  tm.mark('jsx-element-styles', shouldPrintDebug === 'verbose')
1571
1602
 
1572
1603
  if (getStyleError) {
@@ -60,7 +60,9 @@ export function extractMediaStyle(
60
60
  const screenStr = negate ? 'not all' : 'screen'
61
61
  const mediaQuery = `${screenStr} and ${mediaSelector}`
62
62
  const precendencePrefix = mediaKeyPrecendence[key]
63
- const styleInner = style.rules[0].replace(style.identifier, identifier)
63
+ const styleInner = style.rules
64
+ .map((rule) => rule.replace(style.identifier, identifier))
65
+ .join(';')
64
66
  // combines media queries if they already exist
65
67
  let styleRule = ''
66
68
  if (styleInner.includes('@media')) {
@@ -1 +1 @@
1
- {"version":3,"file":"createEvaluator.d.ts","sourceRoot":"","sources":["../../src/extractor/createEvaluator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC1C,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AACjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAOlD,wBAAgB,eAAe,CAAC,EAC9B,aAAa,EACb,eAAe,EACf,UAAU,EACV,YAAY,EACZ,gBAAgB,GACjB,EAAE;IACD,aAAa,EAAE,aAAa,CAAA;IAC5B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACpC,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;IACpC,gBAAgB,EAAE,OAAO,GAAG,SAAS,CAAA;CACtC,OA+BY,MAAM,SAGlB;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,GAAG,OACtD,MAAM,SAOlB"}
1
+ {"version":3,"file":"createEvaluator.d.ts","sourceRoot":"","sources":["../../src/extractor/createEvaluator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC1C,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AACjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAQlD,wBAAgB,eAAe,CAAC,EAC9B,aAAa,EACb,eAAe,EACf,UAAU,EACV,YAAY,EACZ,gBAAgB,GACjB,EAAE;IACD,aAAa,EAAE,aAAa,CAAA;IAC5B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACpC,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;IACpC,gBAAgB,EAAE,OAAO,GAAG,SAAS,CAAA;CACtC,OAmCY,MAAM,SAGlB;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,GAAG,OACtD,MAAM,SAOlB"}
@@ -1 +1 @@
1
- {"version":3,"file":"createExtractor.d.ts","sourceRoot":"","sources":["../../src/extractor/createExtractor.ts"],"names":[],"mappings":"AAEA,OAAiB,EAAE,QAAQ,EAAW,MAAM,iBAAiB,CAAA;AAC7D,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AACjC,OAAO,EAGL,qBAAqB,EAQtB,MAAM,oBAAoB,CAAA;AAK3B,OAAO,EAIL,mBAAmB,EAEpB,MAAM,UAAU,CAAA;AAqCjB,oBAAY,SAAS,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAA;AAI1D,wBAAgB,eAAe;;;;;;;;;;;;;;wBAqBb,SAAS,EAAE,OAAO,CAAC,GAAG,MAAM,0PAkBrC,mBAAmB;;;;;;EAqjD3B"}
1
+ {"version":3,"file":"createExtractor.d.ts","sourceRoot":"","sources":["../../src/extractor/createExtractor.ts"],"names":[],"mappings":"AAEA,OAAiB,EAAE,QAAQ,EAAW,MAAM,iBAAiB,CAAA;AAC7D,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AACjC,OAAO,EAGL,qBAAqB,EAStB,MAAM,oBAAoB,CAAA;AAK3B,OAAO,EAIL,mBAAmB,EAEpB,MAAM,UAAU,CAAA;AAqCjB,oBAAY,SAAS,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAA;AAI1D,wBAAgB,eAAe;;;;;;;;;;;;;;wBAqBb,SAAS,EAAE,OAAO,CAAC,GAAG,MAAM,0PAkBrC,mBAAmB;;;;;;EAmlD3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"extractMediaStyle.d.ts","sourceRoot":"","sources":["../../src/extractor/extractMediaStyle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC1C,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AACjC,OAAO,EAAE,qBAAqB,EAAwC,MAAM,oBAAoB,CAAA;AAIhG,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAG/C,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,EAC/B,aAAa,EAAE,qBAAqB,EACpC,UAAU,EAAE,MAAM,EAClB,UAAU,SAAI,EACd,gBAAgB,GAAE,OAAO,GAAG,SAAiB;;;SAyE9C;AAiFD,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,EAC/B,IAAI,EAAE,CAAC,CAAC,UAAU,EAClB,UAAU,EAAE,MAAM,WAiBnB"}
1
+ {"version":3,"file":"extractMediaStyle.d.ts","sourceRoot":"","sources":["../../src/extractor/extractMediaStyle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC1C,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AACjC,OAAO,EAAE,qBAAqB,EAAwC,MAAM,oBAAoB,CAAA;AAIhG,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAG/C,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,EAC/B,aAAa,EAAE,qBAAqB,EACpC,UAAU,EAAE,MAAM,EAClB,UAAU,SAAI,EACd,gBAAgB,GAAE,OAAO,GAAG,SAAiB;;;SA2E9C;AAiFD,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,EAC/B,IAAI,EAAE,CAAC,CAAC,UAAU,EAClB,UAAU,EAAE,MAAM,WAiBnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"extractToClassNames.d.ts","sourceRoot":"","sources":["../../src/extractor/extractToClassNames.ts"],"names":[],"mappings":";AAKA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AAKjC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAGvC,OAAO,EAAgC,cAAc,EAAW,MAAM,UAAU,CAAA;AAGhF,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAiB7C,oBAAY,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,CAAC,CAAC,IAAI,CAAA;IACX,GAAG,EAAE,GAAG,CAAA;CACT,CAAA;AAED,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,SAAS,EACT,MAAM,EACN,UAAU,EACV,OAAO,EACP,gBAAgB,EAChB,aAAa,EACb,QAAQ,EACR,OAAO,GACR,EAAE;IACD,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,SAAS,CAAA;IACpB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,cAAc,CAAA;IACvB,gBAAgB,EAAE,OAAO,GAAG,SAAS,CAAA;IACrC,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,GAAG,iBAAiB,GAAG,IAAI,CAyY3B"}
1
+ {"version":3,"file":"extractToClassNames.d.ts","sourceRoot":"","sources":["../../src/extractor/extractToClassNames.ts"],"names":[],"mappings":";AAKA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AAKjC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAGvC,OAAO,EAAgC,cAAc,EAAW,MAAM,UAAU,CAAA;AAGhF,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAiB7C,oBAAY,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,CAAC,CAAC,IAAI,CAAA;IACX,GAAG,EAAE,GAAG,CAAA;CACT,CAAA;AAED,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,SAAS,EACT,MAAM,EACN,UAAU,EACV,OAAO,EACP,gBAAgB,EAChB,aAAa,EACb,QAAQ,EACR,OAAO,GACR,EAAE;IACD,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,SAAS,CAAA;IACpB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,cAAc,CAAA;IACvB,gBAAgB,EAAE,OAAO,GAAG,SAAS,CAAA;IACrC,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,GAAG,iBAAiB,GAAG,IAAI,CA4W3B"}