@tamagui/static 1.0.0-alpha.0

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.
Files changed (76) hide show
  1. package/README.md +21 -0
  2. package/dist/constants.js +10 -0
  3. package/dist/constants.js.map +7 -0
  4. package/dist/extractor/accessSafe.js +11 -0
  5. package/dist/extractor/accessSafe.js.map +7 -0
  6. package/dist/extractor/babelParse.js +30 -0
  7. package/dist/extractor/babelParse.js.map +7 -0
  8. package/dist/extractor/buildClassName.js +40 -0
  9. package/dist/extractor/buildClassName.js.map +7 -0
  10. package/dist/extractor/createEvaluator.js +51 -0
  11. package/dist/extractor/createEvaluator.js.map +7 -0
  12. package/dist/extractor/createExtractor.js +801 -0
  13. package/dist/extractor/createExtractor.js.map +7 -0
  14. package/dist/extractor/ensureImportingConcat.js +24 -0
  15. package/dist/extractor/ensureImportingConcat.js.map +7 -0
  16. package/dist/extractor/evaluateAstNode.js +94 -0
  17. package/dist/extractor/evaluateAstNode.js.map +7 -0
  18. package/dist/extractor/extractHelpers.js +92 -0
  19. package/dist/extractor/extractHelpers.js.map +7 -0
  20. package/dist/extractor/extractMediaStyle.js +151 -0
  21. package/dist/extractor/extractMediaStyle.js.map +7 -0
  22. package/dist/extractor/extractToClassNames.js +243 -0
  23. package/dist/extractor/extractToClassNames.js.map +7 -0
  24. package/dist/extractor/findTopmostFunction.js +23 -0
  25. package/dist/extractor/findTopmostFunction.js.map +7 -0
  26. package/dist/extractor/generatedUid.js +28 -0
  27. package/dist/extractor/generatedUid.js.map +7 -0
  28. package/dist/extractor/getPropValueFromAttributes.js +49 -0
  29. package/dist/extractor/getPropValueFromAttributes.js.map +7 -0
  30. package/dist/extractor/getSourceModule.js +69 -0
  31. package/dist/extractor/getSourceModule.js.map +7 -0
  32. package/dist/extractor/getStaticBindingsForScope.js +128 -0
  33. package/dist/extractor/getStaticBindingsForScope.js.map +7 -0
  34. package/dist/extractor/hoistClassNames.js +44 -0
  35. package/dist/extractor/hoistClassNames.js.map +7 -0
  36. package/dist/extractor/literalToAst.js +34 -0
  37. package/dist/extractor/literalToAst.js.map +7 -0
  38. package/dist/extractor/loadTamagui.js +41 -0
  39. package/dist/extractor/loadTamagui.js.map +7 -0
  40. package/dist/extractor/normalizeTernaries.js +52 -0
  41. package/dist/extractor/normalizeTernaries.js.map +7 -0
  42. package/dist/extractor/removeUnusedHooks.js +78 -0
  43. package/dist/extractor/removeUnusedHooks.js.map +7 -0
  44. package/dist/index.cjs +2079 -0
  45. package/dist/index.cjs.map +7 -0
  46. package/dist/index.js +14 -0
  47. package/dist/index.js.map +7 -0
  48. package/dist/patchReactNativeWeb.js +92 -0
  49. package/dist/patchReactNativeWeb.js.map +7 -0
  50. package/dist/types.js +1 -0
  51. package/dist/types.js.map +7 -0
  52. package/package.json +72 -0
  53. package/src/constants.ts +10 -0
  54. package/src/extractor/accessSafe.ts +18 -0
  55. package/src/extractor/babelParse.ts +27 -0
  56. package/src/extractor/buildClassName.ts +61 -0
  57. package/src/extractor/createEvaluator.ts +68 -0
  58. package/src/extractor/createExtractor.ts +1113 -0
  59. package/src/extractor/ensureImportingConcat.ts +33 -0
  60. package/src/extractor/evaluateAstNode.ts +121 -0
  61. package/src/extractor/extractHelpers.ts +93 -0
  62. package/src/extractor/extractMediaStyle.ts +191 -0
  63. package/src/extractor/extractToClassNames.ts +337 -0
  64. package/src/extractor/findTopmostFunction.ts +22 -0
  65. package/src/extractor/generatedUid.ts +43 -0
  66. package/src/extractor/getPropValueFromAttributes.ts +92 -0
  67. package/src/extractor/getSourceModule.ts +101 -0
  68. package/src/extractor/getStaticBindingsForScope.ts +173 -0
  69. package/src/extractor/hoistClassNames.ts +45 -0
  70. package/src/extractor/literalToAst.ts +32 -0
  71. package/src/extractor/loadTamagui.ts +61 -0
  72. package/src/extractor/normalizeTernaries.ts +60 -0
  73. package/src/extractor/removeUnusedHooks.ts +76 -0
  74. package/src/index.ts +9 -0
  75. package/src/patchReactNativeWeb.ts +107 -0
  76. package/src/types.ts +80 -0
package/README.md ADDED
@@ -0,0 +1,21 @@
1
+ - onPress extraction
2
+ - bug with props after spread not applying, make them deopt:
3
+ - <YStack {...baseStyle} cursor="default" /> wont be right rn
4
+ - have seen bugs with <Spacer flex /> and <YStack fullscreen />
5
+ - make pressStyle override hoverStyle always
6
+ - activeStyle may be desirable...
7
+ - <Image /> // harder than seems RN does some werid stuff with cover/etc
8
+ - space
9
+ - SmallButton good example case of constant
10
+ - hoverStyle/pressStyle (spread + constant too - TagButton, DishView)
11
+ - final step is hoverStyle={{ color: x, ...parent.hoverStyle, }}
12
+ - pass in config to be able to create static extracted easily within web
13
+ - OverlayLinkButton
14
+ - SmallCircleButton case spreads
15
+ - Circle, EmojiButton, LinearGradient, VoteButton
16
+ - LinkButton - getting this to just extract styles would be big
17
+ - just needs to tell compiler _never_ to go to just <div />
18
+ - onPressIn/onPressOut etc can all be converted to inline functions still as divs (HomeAutocompleteBackground, SearchLocationButton, etc)
19
+ - // TODO WHY SCALE NOT WORKING???
20
+ - Link - can maybe fully extract, if we can just run the actual component and then return the results???
21
+ - CSS variables for color!
@@ -0,0 +1,10 @@
1
+ import findCacheDir from "find-cache-dir";
2
+ const CSS_FILE_NAME = "__snack.css";
3
+ const MEDIA_SEP = "_";
4
+ const cacheDir = findCacheDir({ name: "tamagui", create: true });
5
+ export {
6
+ CSS_FILE_NAME,
7
+ MEDIA_SEP,
8
+ cacheDir
9
+ };
10
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/constants.ts"],
4
+ "sourcesContent": ["import findCacheDir from 'find-cache-dir'\n\nexport const CSS_FILE_NAME = '__snack.css'\n\n// ENSURE THIS ISNT THE SAME AS THE SEPARATOR USED FOR STYLE KEYS\n// SEE matching one in concatClassName\nexport const MEDIA_SEP = '_'\n\n// ensure cache dir\nexport const cacheDir = findCacheDir({ name: 'tamagui', create: true })\n"],
5
+ "mappings": "AAAA;AAEO,MAAM,gBAAgB;AAItB,MAAM,YAAY;AAGlB,MAAM,WAAW,aAAa,EAAE,MAAM,WAAW,QAAQ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,11 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import * as t from "@babel/types";
4
+ function accessSafe(obj, member) {
5
+ return t.logicalExpression("&&", t.logicalExpression("&&", t.binaryExpression("===", t.unaryExpression("typeof", obj), t.stringLiteral("object")), t.binaryExpression("!==", obj, t.nullLiteral())), t.memberExpression(obj, t.identifier(member), false));
6
+ }
7
+ __name(accessSafe, "accessSafe");
8
+ export {
9
+ accessSafe
10
+ };
11
+ //# sourceMappingURL=accessSafe.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/extractor/accessSafe.ts"],
4
+ "sourcesContent": ["import * as t from '@babel/types'\n\n// accessSafe wraps memberExpressions in object/null checks\n// TODO: inject this as a function? this gets pretty repetitive\nexport function accessSafe(obj: t.Expression, member: string): t.LogicalExpression {\n return t.logicalExpression(\n '&&',\n t.logicalExpression(\n '&&',\n // typeof obj === 'object\n t.binaryExpression('===', t.unaryExpression('typeof', obj), t.stringLiteral('object')),\n // obj !== null\n t.binaryExpression('!==', obj, t.nullLiteral())\n ),\n // obj.member\n t.memberExpression(obj, t.identifier(member), false)\n )\n}\n"],
5
+ "mappings": ";;AAAA;AAIO,oBAAoB,KAAmB,QAAqC;AACjF,SAAO,EAAE,kBACP,MACA,EAAE,kBACA,MAEA,EAAE,iBAAiB,OAAO,EAAE,gBAAgB,UAAU,MAAM,EAAE,cAAc,YAE5E,EAAE,iBAAiB,OAAO,KAAK,EAAE,iBAGnC,EAAE,iBAAiB,KAAK,EAAE,WAAW,SAAS;AAAA;AAXlC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,30 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import * as babelParser from "@babel/parser";
4
+ const parserOptions = Object.freeze({
5
+ plugins: [
6
+ "asyncGenerators",
7
+ "classProperties",
8
+ "dynamicImport",
9
+ "functionBind",
10
+ "jsx",
11
+ "numericSeparator",
12
+ "objectRestSpread",
13
+ "optionalCatchBinding",
14
+ "decorators-legacy",
15
+ "typescript",
16
+ "optionalChaining",
17
+ "nullishCoalescingOperator"
18
+ ],
19
+ sourceType: "module"
20
+ });
21
+ const parser = babelParser.parse.bind(babelParser);
22
+ function babelParse(code) {
23
+ return parser(code.toString(), parserOptions);
24
+ }
25
+ __name(babelParse, "babelParse");
26
+ export {
27
+ babelParse,
28
+ parserOptions
29
+ };
30
+ //# sourceMappingURL=babelParse.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/extractor/babelParse.ts"],
4
+ "sourcesContent": ["import * as babelParser from '@babel/parser'\n\nexport const parserOptions: babelParser.ParserOptions = Object.freeze({\n plugins: [\n 'asyncGenerators',\n 'classProperties',\n 'dynamicImport',\n 'functionBind',\n 'jsx',\n 'numericSeparator',\n 'objectRestSpread',\n 'optionalCatchBinding',\n 'decorators-legacy',\n 'typescript',\n 'optionalChaining',\n 'nullishCoalescingOperator',\n // 'objectRestSpread',\n // 'dynamicImport'\n ],\n sourceType: 'module',\n})\n\nconst parser = babelParser.parse.bind(babelParser)\n\nexport function babelParse(code: string | Buffer): any {\n return parser(code.toString(), parserOptions)\n}\n"],
5
+ "mappings": ";;AAAA;AAEO,MAAM,gBAA2C,OAAO,OAAO;AAAA,EACpE,SAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,EAIF,YAAY;AAAA;AAGd,MAAM,SAAS,YAAY,MAAM,KAAK;AAE/B,oBAAoB,MAA4B;AACrD,SAAO,OAAO,KAAK,YAAY;AAAA;AADjB;",
6
+ "names": []
7
+ }
@@ -0,0 +1,40 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import * as t from "@babel/types";
4
+ function buildClassName(classNameObjects) {
5
+ return classNameObjects.reduce((acc, val) => {
6
+ if (acc == null) {
7
+ if (t.isConditionalExpression(val) || t.isStringLiteral(val) || t.isNumericLiteral(val)) {
8
+ return val;
9
+ }
10
+ return t.logicalExpression("||", val, t.stringLiteral(""));
11
+ }
12
+ let inner;
13
+ if (t.isStringLiteral(val)) {
14
+ if (t.isStringLiteral(acc)) {
15
+ return t.stringLiteral(`${acc.value} ${val.value}`);
16
+ }
17
+ inner = t.stringLiteral(` ${val.value}`);
18
+ } else if (t.isLiteral(val)) {
19
+ inner = t.binaryExpression("+", t.stringLiteral(" "), val);
20
+ } else if (t.isConditionalExpression(val) || t.isBinaryExpression(val)) {
21
+ if (t.isStringLiteral(acc)) {
22
+ return t.binaryExpression("+", t.stringLiteral(`${acc.value} `), val);
23
+ }
24
+ inner = t.binaryExpression("+", t.stringLiteral(" "), val);
25
+ } else if (t.isIdentifier(val) || t.isMemberExpression(val)) {
26
+ inner = t.conditionalExpression(val, t.binaryExpression("+", t.stringLiteral(" "), val), t.stringLiteral(""));
27
+ } else {
28
+ if (t.isStringLiteral(acc)) {
29
+ return t.binaryExpression("+", t.stringLiteral(`${acc.value} `), t.logicalExpression("||", val, t.stringLiteral("")));
30
+ }
31
+ inner = t.binaryExpression("+", t.stringLiteral(" "), t.logicalExpression("||", val, t.stringLiteral("")));
32
+ }
33
+ return t.binaryExpression("+", acc, inner);
34
+ }, null);
35
+ }
36
+ __name(buildClassName, "buildClassName");
37
+ export {
38
+ buildClassName
39
+ };
40
+ //# sourceMappingURL=buildClassName.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/extractor/buildClassName.ts"],
4
+ "sourcesContent": ["import * as t from '@babel/types'\n\nimport { ClassNameObject } from '../types'\n\nexport function buildClassName(\n classNameObjects: ClassNameObject[]\n): t.Expression | t.StringLiteral | null {\n return classNameObjects.reduce<t.Expression | null>((acc, val) => {\n if (acc == null) {\n if (\n // pass conditional expressions through\n t.isConditionalExpression(val) ||\n // pass non-null literals through\n t.isStringLiteral(val) ||\n t.isNumericLiteral(val)\n ) {\n return val\n }\n return t.logicalExpression('||', val, t.stringLiteral(''))\n }\n\n let inner: t.Expression\n if (t.isStringLiteral(val)) {\n if (t.isStringLiteral(acc)) {\n // join adjacent string literals\n return t.stringLiteral(`${acc.value} ${val.value}`)\n }\n inner = t.stringLiteral(` ${val.value}`)\n } else if (t.isLiteral(val)) {\n inner = t.binaryExpression('+', t.stringLiteral(' '), val)\n } else if (t.isConditionalExpression(val) || t.isBinaryExpression(val)) {\n if (t.isStringLiteral(acc)) {\n return t.binaryExpression('+', t.stringLiteral(`${acc.value} `), val)\n }\n inner = t.binaryExpression('+', t.stringLiteral(' '), val)\n } else if (t.isIdentifier(val) || t.isMemberExpression(val)) {\n // identifiers and member expressions make for reasonable ternaries\n inner = t.conditionalExpression(\n val,\n t.binaryExpression('+', t.stringLiteral(' '), val),\n t.stringLiteral('')\n )\n } else {\n if (t.isStringLiteral(acc)) {\n return t.binaryExpression(\n '+',\n t.stringLiteral(`${acc.value} `),\n t.logicalExpression('||', val, t.stringLiteral(''))\n )\n }\n // use a logical expression for more complex prop values\n inner = t.binaryExpression(\n '+',\n t.stringLiteral(' '),\n t.logicalExpression('||', val, t.stringLiteral(''))\n )\n }\n\n return t.binaryExpression('+', acc, inner)\n }, null)\n}\n"],
5
+ "mappings": ";;AAAA;AAIO,wBACL,kBACuC;AACvC,SAAO,iBAAiB,OAA4B,CAAC,KAAK,QAAQ;AAChE,QAAI,OAAO,MAAM;AACf,UAEE,EAAE,wBAAwB,QAE1B,EAAE,gBAAgB,QAClB,EAAE,iBAAiB,MACnB;AACA,eAAO;AAAA;AAET,aAAO,EAAE,kBAAkB,MAAM,KAAK,EAAE,cAAc;AAAA;AAGxD,QAAI;AACJ,QAAI,EAAE,gBAAgB,MAAM;AAC1B,UAAI,EAAE,gBAAgB,MAAM;AAE1B,eAAO,EAAE,cAAc,GAAG,IAAI,SAAS,IAAI;AAAA;AAE7C,cAAQ,EAAE,cAAc,IAAI,IAAI;AAAA,eACvB,EAAE,UAAU,MAAM;AAC3B,cAAQ,EAAE,iBAAiB,KAAK,EAAE,cAAc,MAAM;AAAA,eAC7C,EAAE,wBAAwB,QAAQ,EAAE,mBAAmB,MAAM;AACtE,UAAI,EAAE,gBAAgB,MAAM;AAC1B,eAAO,EAAE,iBAAiB,KAAK,EAAE,cAAc,GAAG,IAAI,WAAW;AAAA;AAEnE,cAAQ,EAAE,iBAAiB,KAAK,EAAE,cAAc,MAAM;AAAA,eAC7C,EAAE,aAAa,QAAQ,EAAE,mBAAmB,MAAM;AAE3D,cAAQ,EAAE,sBACR,KACA,EAAE,iBAAiB,KAAK,EAAE,cAAc,MAAM,MAC9C,EAAE,cAAc;AAAA,WAEb;AACL,UAAI,EAAE,gBAAgB,MAAM;AAC1B,eAAO,EAAE,iBACP,KACA,EAAE,cAAc,GAAG,IAAI,WACvB,EAAE,kBAAkB,MAAM,KAAK,EAAE,cAAc;AAAA;AAInD,cAAQ,EAAE,iBACR,KACA,EAAE,cAAc,MAChB,EAAE,kBAAkB,MAAM,KAAK,EAAE,cAAc;AAAA;AAInD,WAAO,EAAE,iBAAiB,KAAK,KAAK;AAAA,KACnC;AAAA;AAvDW;",
6
+ "names": []
7
+ }
@@ -0,0 +1,51 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import vm from "vm";
4
+ import generate from "@babel/generator";
5
+ import * as t from "@babel/types";
6
+ import { FAILED_EVAL } from "./createExtractor";
7
+ import { evaluateAstNode } from "./evaluateAstNode";
8
+ import { isValidThemeHook } from "./extractHelpers";
9
+ function createEvaluator({
10
+ tamaguiConfig,
11
+ staticNamespace,
12
+ sourcePath,
13
+ traversePath,
14
+ shouldPrintDebug
15
+ }) {
16
+ const evalFn = /* @__PURE__ */ __name((n) => {
17
+ if (t.isMemberExpression(n) && t.isIdentifier(n.property) && isValidThemeHook(traversePath, n, sourcePath)) {
18
+ const key = n.property.name;
19
+ if (shouldPrintDebug) {
20
+ console.log(" > found theme prop", key);
21
+ }
22
+ console.log("SHOULD FIND THEME (NESTED NOW)", key);
23
+ return `var(--${key})`;
24
+ }
25
+ if (t.isIdentifier(n) && staticNamespace.hasOwnProperty(n.name)) {
26
+ return staticNamespace[n.name];
27
+ }
28
+ const evalContext = vm.createContext(staticNamespace);
29
+ const code = `(${generate(n).code})`;
30
+ return vm.runInContext(code, evalContext);
31
+ }, "evalFn");
32
+ return (n) => {
33
+ return evaluateAstNode(n, evalFn);
34
+ };
35
+ }
36
+ __name(createEvaluator, "createEvaluator");
37
+ function createSafeEvaluator(attemptEval) {
38
+ return (n) => {
39
+ try {
40
+ return attemptEval(n);
41
+ } catch (err) {
42
+ return FAILED_EVAL;
43
+ }
44
+ };
45
+ }
46
+ __name(createSafeEvaluator, "createSafeEvaluator");
47
+ export {
48
+ createEvaluator,
49
+ createSafeEvaluator
50
+ };
51
+ //# sourceMappingURL=createEvaluator.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/extractor/createEvaluator.ts"],
4
+ "sourcesContent": ["import vm from 'vm'\n\nimport generate from '@babel/generator'\nimport { NodePath } from '@babel/traverse'\nimport * as t from '@babel/types'\nimport type { TamaguiConfig } from '@tamagui/core'\n\nimport { FAILED_EVAL } from './createExtractor'\nimport { evaluateAstNode } from './evaluateAstNode'\nimport { isValidThemeHook } from './extractHelpers'\n\nexport function createEvaluator({\n tamaguiConfig,\n staticNamespace,\n sourcePath,\n traversePath,\n shouldPrintDebug,\n}: {\n tamaguiConfig: TamaguiConfig\n staticNamespace: Record<string, any>\n sourcePath: string\n traversePath: NodePath<t.JSXElement>\n shouldPrintDebug: boolean\n}) {\n // called when evaluateAstNode encounters a dynamic-looking prop\n const evalFn = (n: t.Node) => {\n // themes\n if (\n t.isMemberExpression(n) &&\n t.isIdentifier(n.property) &&\n isValidThemeHook(traversePath, n, sourcePath)\n ) {\n const key = n.property.name\n if (shouldPrintDebug) {\n console.log(' > found theme prop', key)\n }\n console.log('SHOULD FIND THEME (NESTED NOW)', key) // tamaguiConfig.themes)\n // if (!themeKeys.has(key)) {\n // throw new Error(` > accessing non-existent theme key: ${key}`)\n // }\n return `var(--${key})`\n }\n // variable\n if (t.isIdentifier(n) && staticNamespace.hasOwnProperty(n.name)) {\n return staticNamespace[n.name]\n }\n const evalContext = vm.createContext(staticNamespace)\n const code = `(${generate(n as any).code})`\n // if (shouldPrintDebug) {\n // console.log('evaluating', { n, code, evalContext })\n // }\n return vm.runInContext(code, evalContext)\n }\n\n return (n: t.Node) => {\n return evaluateAstNode(n, evalFn)\n }\n}\n\nexport function createSafeEvaluator(attemptEval: (n: t.Node) => any) {\n return (n: t.Node) => {\n try {\n return attemptEval(n)\n } catch (err) {\n return FAILED_EVAL\n }\n }\n}\n"],
5
+ "mappings": ";;AAAA;AAEA;AAEA;AAGA;AACA;AACA;AAEO,yBAAyB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,GAOC;AAED,QAAM,SAAS,wBAAC,MAAc;AAE5B,QACE,EAAE,mBAAmB,MACrB,EAAE,aAAa,EAAE,aACjB,iBAAiB,cAAc,GAAG,aAClC;AACA,YAAM,MAAM,EAAE,SAAS;AACvB,UAAI,kBAAkB;AACpB,gBAAQ,IAAI,0BAA0B;AAAA;AAExC,cAAQ,IAAI,kCAAkC;AAI9C,aAAO,SAAS;AAAA;AAGlB,QAAI,EAAE,aAAa,MAAM,gBAAgB,eAAe,EAAE,OAAO;AAC/D,aAAO,gBAAgB,EAAE;AAAA;AAE3B,UAAM,cAAc,GAAG,cAAc;AACrC,UAAM,OAAO,IAAI,SAAS,GAAU;AAIpC,WAAO,GAAG,aAAa,MAAM;AAAA,KA1BhB;AA6Bf,SAAO,CAAC,MAAc;AACpB,WAAO,gBAAgB,GAAG;AAAA;AAAA;AA5Cd;AAgDT,6BAA6B,aAAiC;AACnE,SAAO,CAAC,MAAc;AACpB,QAAI;AACF,aAAO,YAAY;AAAA,aACZ,KAAP;AACA,aAAO;AAAA;AAAA;AAAA;AALG;",
6
+ "names": []
7
+ }