{"version":3,"sources":["../node_modules/.pnpm/tsup@5.12.9_typescript@4.9.5/node_modules/tsup/assets/cjs_shims.js","../src/yoga/yoga-prebuilt.ts","../node_modules/.pnpm/tailwindcss@3.3.1/node_modules/tailwindcss/lib/util/negateValue.js","../node_modules/.pnpm/tailwindcss@3.3.1/node_modules/tailwindcss/lib/corePluginList.js","../node_modules/.pnpm/tailwindcss@3.3.1/node_modules/tailwindcss/lib/util/configurePlugins.js","../src/vendor/twrnc/picocolors.js","../node_modules/.pnpm/tailwindcss@3.3.1/node_modules/tailwindcss/lib/util/log.js","../node_modules/.pnpm/tailwindcss@3.3.1/node_modules/tailwindcss/lib/public/colors.js","../node_modules/.pnpm/tailwindcss@3.3.1/node_modules/tailwindcss/lib/util/defaults.js","../node_modules/.pnpm/tailwindcss@3.3.1/node_modules/tailwindcss/lib/util/toPath.js","../node_modules/.pnpm/tailwindcss@3.3.1/node_modules/tailwindcss/lib/lib/sharedState.js","../node_modules/.pnpm/tailwindcss@3.3.1/node_modules/tailwindcss/lib/featureFlags.js","../node_modules/.pnpm/tailwindcss@3.3.1/node_modules/tailwindcss/lib/util/normalizeConfig.js","../node_modules/.pnpm/tailwindcss@3.3.1/node_modules/tailwindcss/lib/util/isPlainObject.js","../node_modules/.pnpm/tailwindcss@3.3.1/node_modules/tailwindcss/lib/util/cloneDeep.js","../node_modules/.pnpm/tailwindcss@3.3.1/node_modules/tailwindcss/lib/util/escapeCommas.js","../node_modules/.pnpm/color-name@1.1.4/node_modules/color-name/index.js","../node_modules/.pnpm/tailwindcss@3.3.1/node_modules/tailwindcss/lib/util/color.js","../node_modules/.pnpm/tailwindcss@3.3.1/node_modules/tailwindcss/lib/util/withAlphaVariable.js","../node_modules/.pnpm/tailwindcss@3.3.1/node_modules/tailwindcss/lib/util/splitAtTopLevelOnly.js","../node_modules/.pnpm/tailwindcss@3.3.1/node_modules/tailwindcss/lib/util/parseBoxShadowValue.js","../node_modules/.pnpm/tailwindcss@3.3.1/node_modules/tailwindcss/lib/util/dataTypes.js","../node_modules/.pnpm/tailwindcss@3.3.1/node_modules/tailwindcss/lib/util/validateFormalSyntax.js","../node_modules/.pnpm/tailwindcss@3.3.1/node_modules/tailwindcss/lib/util/pluginUtils.js","../node_modules/.pnpm/tailwindcss@3.3.1/node_modules/tailwindcss/lib/util/toColorValue.js","../node_modules/.pnpm/tailwindcss@3.3.1/node_modules/tailwindcss/lib/util/resolveConfig.js","../node_modules/.pnpm/tailwindcss@3.3.1/node_modules/tailwindcss/stubs/config.full.js","../node_modules/.pnpm/tailwindcss@3.3.1/node_modules/tailwindcss/lib/util/getAllConfigs.js","../node_modules/.pnpm/tailwindcss@3.3.1/node_modules/tailwindcss/lib/public/resolve-config.js","../node_modules/.pnpm/tailwindcss@3.3.1/node_modules/tailwindcss/resolveConfig.js","../src/index.ts","../src/satori.ts","../src/yoga/index.ts","../src/layout.ts","../src/utils.ts","../src/vendor/parse-css-dimension/index.js","../src/handler/index.ts","../src/handler/presets.ts","../src/handler/inheritable.ts","../src/handler/expand.ts","../src/transform-origin.ts","../src/handler/image.ts","../src/text.ts","../src/builder/text.ts","../src/builder/transform.ts","../src/builder/shadow.ts","../src/builder/text-decoration.ts","../src/builder/rect.ts","../src/builder/background-image.ts","../src/vendor/gradient-parser/index.js","../src/builder/border-radius.ts","../src/builder/overflow.ts","../src/builder/content-mask.ts","../src/builder/border.ts","../src/language.ts","../src/font.ts","../src/builder/svg.ts","../src/handler/tailwind.ts","../node_modules/.pnpm/twrnc@3.6.0/node_modules/twrnc/dist/esm/create.js","../node_modules/.pnpm/twrnc@3.6.0/node_modules/twrnc/dist/esm/cache.js","../node_modules/.pnpm/twrnc@3.6.0/node_modules/twrnc/dist/esm/styles.js","../node_modules/.pnpm/twrnc@3.6.0/node_modules/twrnc/dist/esm/helpers.js","../node_modules/.pnpm/twrnc@3.6.0/node_modules/twrnc/dist/esm/types.js","../node_modules/.pnpm/twrnc@3.6.0/node_modules/twrnc/dist/esm/ClassParser.js","../node_modules/.pnpm/twrnc@3.6.0/node_modules/twrnc/dist/esm/resolve/font-size.js","../node_modules/.pnpm/twrnc@3.6.0/node_modules/twrnc/dist/esm/resolve/line-height.js","../node_modules/.pnpm/twrnc@3.6.0/node_modules/twrnc/dist/esm/resolve/spacing.js","../node_modules/.pnpm/twrnc@3.6.0/node_modules/twrnc/dist/esm/screens.js","../node_modules/.pnpm/twrnc@3.6.0/node_modules/twrnc/dist/esm/resolve/font-family.js","../node_modules/.pnpm/twrnc@3.6.0/node_modules/twrnc/dist/esm/resolve/color.js","../node_modules/.pnpm/twrnc@3.6.0/node_modules/twrnc/dist/esm/resolve/borders.js","../node_modules/.pnpm/twrnc@3.6.0/node_modules/twrnc/dist/esm/resolve/inset.js","../node_modules/.pnpm/twrnc@3.6.0/node_modules/twrnc/dist/esm/resolve/flex.js","../node_modules/.pnpm/twrnc@3.6.0/node_modules/twrnc/dist/esm/resolve/width-height.js","../node_modules/.pnpm/twrnc@3.6.0/node_modules/twrnc/dist/esm/resolve/letter-spacing.js","../node_modules/.pnpm/twrnc@3.6.0/node_modules/twrnc/dist/esm/resolve/opacity.js","../node_modules/.pnpm/twrnc@3.6.0/node_modules/twrnc/dist/esm/resolve/shadow.js","../node_modules/.pnpm/twrnc@3.6.0/node_modules/twrnc/dist/esm/parse-inputs.js","../node_modules/.pnpm/twrnc@3.6.0/node_modules/twrnc/dist/esm/plugin.js"],"sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () =>\n  typeof document === 'undefined'\n    ? new URL('file:' + __filename).href\n    : (document.currentScript && document.currentScript.src) ||\n      new URL('main.js', document.baseURI).href\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","export async function getYogaModule() {\r\n  const { default: initYoga } = await import('yoga-wasm-web/asm')\r\n  return initYoga()\r\n}\r\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"default\", {\n    enumerable: true,\n    get: ()=>negateValue\n});\nfunction negateValue(value) {\n    value = `${value}`;\n    if (value === \"0\") {\n        return \"0\";\n    }\n    // Flip sign of numbers\n    if (/^[+-]?(\\d+|\\d*\\.\\d+)(e[+-]?\\d+)?(%|\\w+)?$/.test(value)) {\n        return value.replace(/^[+-]?/, (sign)=>sign === \"-\" ? \"\" : \"-\");\n    }\n    // What functions we support negating numeric values for\n    // var() isn't inherently a numeric function but we support it anyway\n    // The trigonometric functions are omitted because you'll need to use calc(…) with them _anyway_\n    // to produce generally useful results and that will be covered already\n    let numericFunctions = [\n        \"var\",\n        \"calc\",\n        \"min\",\n        \"max\",\n        \"clamp\"\n    ];\n    for (const fn of numericFunctions){\n        if (value.includes(`${fn}(`)) {\n            return `calc(${value} * -1)`;\n        }\n    }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"default\", {\n    enumerable: true,\n    get: ()=>_default\n});\nconst _default = [\n    \"preflight\",\n    \"container\",\n    \"accessibility\",\n    \"pointerEvents\",\n    \"visibility\",\n    \"position\",\n    \"inset\",\n    \"isolation\",\n    \"zIndex\",\n    \"order\",\n    \"gridColumn\",\n    \"gridColumnStart\",\n    \"gridColumnEnd\",\n    \"gridRow\",\n    \"gridRowStart\",\n    \"gridRowEnd\",\n    \"float\",\n    \"clear\",\n    \"margin\",\n    \"boxSizing\",\n    \"lineClamp\",\n    \"display\",\n    \"aspectRatio\",\n    \"height\",\n    \"maxHeight\",\n    \"minHeight\",\n    \"width\",\n    \"minWidth\",\n    \"maxWidth\",\n    \"flex\",\n    \"flexShrink\",\n    \"flexGrow\",\n    \"flexBasis\",\n    \"tableLayout\",\n    \"captionSide\",\n    \"borderCollapse\",\n    \"borderSpacing\",\n    \"transformOrigin\",\n    \"translate\",\n    \"rotate\",\n    \"skew\",\n    \"scale\",\n    \"transform\",\n    \"animation\",\n    \"cursor\",\n    \"touchAction\",\n    \"userSelect\",\n    \"resize\",\n    \"scrollSnapType\",\n    \"scrollSnapAlign\",\n    \"scrollSnapStop\",\n    \"scrollMargin\",\n    \"scrollPadding\",\n    \"listStylePosition\",\n    \"listStyleType\",\n    \"listStyleImage\",\n    \"appearance\",\n    \"columns\",\n    \"breakBefore\",\n    \"breakInside\",\n    \"breakAfter\",\n    \"gridAutoColumns\",\n    \"gridAutoFlow\",\n    \"gridAutoRows\",\n    \"gridTemplateColumns\",\n    \"gridTemplateRows\",\n    \"flexDirection\",\n    \"flexWrap\",\n    \"placeContent\",\n    \"placeItems\",\n    \"alignContent\",\n    \"alignItems\",\n    \"justifyContent\",\n    \"justifyItems\",\n    \"gap\",\n    \"space\",\n    \"divideWidth\",\n    \"divideStyle\",\n    \"divideColor\",\n    \"divideOpacity\",\n    \"placeSelf\",\n    \"alignSelf\",\n    \"justifySelf\",\n    \"overflow\",\n    \"overscrollBehavior\",\n    \"scrollBehavior\",\n    \"textOverflow\",\n    \"hyphens\",\n    \"whitespace\",\n    \"wordBreak\",\n    \"borderRadius\",\n    \"borderWidth\",\n    \"borderStyle\",\n    \"borderColor\",\n    \"borderOpacity\",\n    \"backgroundColor\",\n    \"backgroundOpacity\",\n    \"backgroundImage\",\n    \"gradientColorStops\",\n    \"boxDecorationBreak\",\n    \"backgroundSize\",\n    \"backgroundAttachment\",\n    \"backgroundClip\",\n    \"backgroundPosition\",\n    \"backgroundRepeat\",\n    \"backgroundOrigin\",\n    \"fill\",\n    \"stroke\",\n    \"strokeWidth\",\n    \"objectFit\",\n    \"objectPosition\",\n    \"padding\",\n    \"textAlign\",\n    \"textIndent\",\n    \"verticalAlign\",\n    \"fontFamily\",\n    \"fontSize\",\n    \"fontWeight\",\n    \"textTransform\",\n    \"fontStyle\",\n    \"fontVariantNumeric\",\n    \"lineHeight\",\n    \"letterSpacing\",\n    \"textColor\",\n    \"textOpacity\",\n    \"textDecoration\",\n    \"textDecorationColor\",\n    \"textDecorationStyle\",\n    \"textDecorationThickness\",\n    \"textUnderlineOffset\",\n    \"fontSmoothing\",\n    \"placeholderColor\",\n    \"placeholderOpacity\",\n    \"caretColor\",\n    \"accentColor\",\n    \"opacity\",\n    \"backgroundBlendMode\",\n    \"mixBlendMode\",\n    \"boxShadow\",\n    \"boxShadowColor\",\n    \"outlineStyle\",\n    \"outlineWidth\",\n    \"outlineOffset\",\n    \"outlineColor\",\n    \"ringWidth\",\n    \"ringColor\",\n    \"ringOpacity\",\n    \"ringOffsetWidth\",\n    \"ringOffsetColor\",\n    \"blur\",\n    \"brightness\",\n    \"contrast\",\n    \"dropShadow\",\n    \"grayscale\",\n    \"hueRotate\",\n    \"invert\",\n    \"saturate\",\n    \"sepia\",\n    \"filter\",\n    \"backdropBlur\",\n    \"backdropBrightness\",\n    \"backdropContrast\",\n    \"backdropGrayscale\",\n    \"backdropHueRotate\",\n    \"backdropInvert\",\n    \"backdropOpacity\",\n    \"backdropSaturate\",\n    \"backdropSepia\",\n    \"backdropFilter\",\n    \"transitionProperty\",\n    \"transitionDelay\",\n    \"transitionDuration\",\n    \"transitionTimingFunction\",\n    \"willChange\",\n    \"content\"\n];\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"default\", {\n    enumerable: true,\n    get: ()=>_default\n});\nfunction _default(pluginConfig, plugins) {\n    if (pluginConfig === undefined) {\n        return plugins;\n    }\n    const pluginNames = Array.isArray(pluginConfig) ? pluginConfig : [\n        ...new Set(plugins.filter((pluginName)=>{\n            return pluginConfig !== false && pluginConfig[pluginName] !== false;\n        }).concat(Object.keys(pluginConfig).filter((pluginName)=>{\n            return pluginConfig[pluginName] !== false;\n        })))\n    ];\n    return pluginNames;\n}\n","export default {\r\n  yellow: (s) => s,\r\n}\r\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    dim: ()=>dim,\n    default: ()=>_default\n});\nconst _picocolors = /*#__PURE__*/ _interopRequireDefault(require(\"picocolors\"));\nfunction _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\nlet alreadyShown = new Set();\nfunction log(type, messages, key) {\n    if (typeof process !== \"undefined\" && process.env.JEST_WORKER_ID) return;\n    if (key && alreadyShown.has(key)) return;\n    if (key) alreadyShown.add(key);\n    console.warn(\"\");\n    messages.forEach((message)=>console.warn(type, \"-\", message));\n}\nfunction dim(input) {\n    return _picocolors.default.dim(input);\n}\nconst _default = {\n    info (key, messages) {\n        log(_picocolors.default.bold(_picocolors.default.cyan(\"info\")), ...Array.isArray(key) ? [\n            key\n        ] : [\n            messages,\n            key\n        ]);\n    },\n    warn (key, messages) {\n        log(_picocolors.default.bold(_picocolors.default.yellow(\"warn\")), ...Array.isArray(key) ? [\n            key\n        ] : [\n            messages,\n            key\n        ]);\n    },\n    risk (key, messages) {\n        log(_picocolors.default.bold(_picocolors.default.magenta(\"risk\")), ...Array.isArray(key) ? [\n            key\n        ] : [\n            messages,\n            key\n        ]);\n    }\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"default\", {\n    enumerable: true,\n    get: ()=>_default\n});\nconst _log = /*#__PURE__*/ _interopRequireDefault(require(\"../util/log\"));\nfunction _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\nfunction warn({ version , from , to  }) {\n    _log.default.warn(`${from}-color-renamed`, [\n        `As of Tailwind CSS ${version}, \\`${from}\\` has been renamed to \\`${to}\\`.`,\n        \"Update your configuration file to silence this warning.\"\n    ]);\n}\nconst _default = {\n    inherit: \"inherit\",\n    current: \"currentColor\",\n    transparent: \"transparent\",\n    black: \"#000\",\n    white: \"#fff\",\n    slate: {\n        50: \"#f8fafc\",\n        100: \"#f1f5f9\",\n        200: \"#e2e8f0\",\n        300: \"#cbd5e1\",\n        400: \"#94a3b8\",\n        500: \"#64748b\",\n        600: \"#475569\",\n        700: \"#334155\",\n        800: \"#1e293b\",\n        900: \"#0f172a\",\n        950: \"#020617\"\n    },\n    gray: {\n        50: \"#f9fafb\",\n        100: \"#f3f4f6\",\n        200: \"#e5e7eb\",\n        300: \"#d1d5db\",\n        400: \"#9ca3af\",\n        500: \"#6b7280\",\n        600: \"#4b5563\",\n        700: \"#374151\",\n        800: \"#1f2937\",\n        900: \"#111827\",\n        950: \"#030712\"\n    },\n    zinc: {\n        50: \"#fafafa\",\n        100: \"#f4f4f5\",\n        200: \"#e4e4e7\",\n        300: \"#d4d4d8\",\n        400: \"#a1a1aa\",\n        500: \"#71717a\",\n        600: \"#52525b\",\n        700: \"#3f3f46\",\n        800: \"#27272a\",\n        900: \"#18181b\",\n        950: \"#09090b\"\n    },\n    neutral: {\n        50: \"#fafafa\",\n        100: \"#f5f5f5\",\n        200: \"#e5e5e5\",\n        300: \"#d4d4d4\",\n        400: \"#a3a3a3\",\n        500: \"#737373\",\n        600: \"#525252\",\n        700: \"#404040\",\n        800: \"#262626\",\n        900: \"#171717\",\n        950: \"#0a0a0a\"\n    },\n    stone: {\n        50: \"#fafaf9\",\n        100: \"#f5f5f4\",\n        200: \"#e7e5e4\",\n        300: \"#d6d3d1\",\n        400: \"#a8a29e\",\n        500: \"#78716c\",\n        600: \"#57534e\",\n        700: \"#44403c\",\n        800: \"#292524\",\n        900: \"#1c1917\",\n        950: \"#0c0a09\"\n    },\n    red: {\n        50: \"#fef2f2\",\n        100: \"#fee2e2\",\n        200: \"#fecaca\",\n        300: \"#fca5a5\",\n        400: \"#f87171\",\n        500: \"#ef4444\",\n        600: \"#dc2626\",\n        700: \"#b91c1c\",\n        800: \"#991b1b\",\n        900: \"#7f1d1d\",\n        950: \"#450a0a\"\n    },\n    orange: {\n        50: \"#fff7ed\",\n        100: \"#ffedd5\",\n        200: \"#fed7aa\",\n        300: \"#fdba74\",\n        400: \"#fb923c\",\n        500: \"#f97316\",\n        600: \"#ea580c\",\n        700: \"#c2410c\",\n        800: \"#9a3412\",\n        900: \"#7c2d12\",\n        950: \"#431407\"\n    },\n    amber: {\n        50: \"#fffbeb\",\n        100: \"#fef3c7\",\n        200: \"#fde68a\",\n        300: \"#fcd34d\",\n        400: \"#fbbf24\",\n        500: \"#f59e0b\",\n        600: \"#d97706\",\n        700: \"#b45309\",\n        800: \"#92400e\",\n        900: \"#78350f\",\n        950: \"#451a03\"\n    },\n    yellow: {\n        50: \"#fefce8\",\n        100: \"#fef9c3\",\n        200: \"#fef08a\",\n        300: \"#fde047\",\n        400: \"#facc15\",\n        500: \"#eab308\",\n        600: \"#ca8a04\",\n        700: \"#a16207\",\n        800: \"#854d0e\",\n        900: \"#713f12\",\n        950: \"#422006\"\n    },\n    lime: {\n        50: \"#f7fee7\",\n        100: \"#ecfccb\",\n        200: \"#d9f99d\",\n        300: \"#bef264\",\n        400: \"#a3e635\",\n        500: \"#84cc16\",\n        600: \"#65a30d\",\n        700: \"#4d7c0f\",\n        800: \"#3f6212\",\n        900: \"#365314\",\n        950: \"#1a2e05\"\n    },\n    green: {\n        50: \"#f0fdf4\",\n        100: \"#dcfce7\",\n        200: \"#bbf7d0\",\n        300: \"#86efac\",\n        400: \"#4ade80\",\n        500: \"#22c55e\",\n        600: \"#16a34a\",\n        700: \"#15803d\",\n        800: \"#166534\",\n        900: \"#14532d\",\n        950: \"#052e16\"\n    },\n    emerald: {\n        50: \"#ecfdf5\",\n        100: \"#d1fae5\",\n        200: \"#a7f3d0\",\n        300: \"#6ee7b7\",\n        400: \"#34d399\",\n        500: \"#10b981\",\n        600: \"#059669\",\n        700: \"#047857\",\n        800: \"#065f46\",\n        900: \"#064e3b\",\n        950: \"#022c22\"\n    },\n    teal: {\n        50: \"#f0fdfa\",\n        100: \"#ccfbf1\",\n        200: \"#99f6e4\",\n        300: \"#5eead4\",\n        400: \"#2dd4bf\",\n        500: \"#14b8a6\",\n        600: \"#0d9488\",\n        700: \"#0f766e\",\n        800: \"#115e59\",\n        900: \"#134e4a\",\n        950: \"#042f2e\"\n    },\n    cyan: {\n        50: \"#ecfeff\",\n        100: \"#cffafe\",\n        200: \"#a5f3fc\",\n        300: \"#67e8f9\",\n        400: \"#22d3ee\",\n        500: \"#06b6d4\",\n        600: \"#0891b2\",\n        700: \"#0e7490\",\n        800: \"#155e75\",\n        900: \"#164e63\",\n        950: \"#083344\"\n    },\n    sky: {\n        50: \"#f0f9ff\",\n        100: \"#e0f2fe\",\n        200: \"#bae6fd\",\n        300: \"#7dd3fc\",\n        400: \"#38bdf8\",\n        500: \"#0ea5e9\",\n        600: \"#0284c7\",\n        700: \"#0369a1\",\n        800: \"#075985\",\n        900: \"#0c4a6e\",\n        950: \"#082f49\"\n    },\n    blue: {\n        50: \"#eff6ff\",\n        100: \"#dbeafe\",\n        200: \"#bfdbfe\",\n        300: \"#93c5fd\",\n        400: \"#60a5fa\",\n        500: \"#3b82f6\",\n        600: \"#2563eb\",\n        700: \"#1d4ed8\",\n        800: \"#1e40af\",\n        900: \"#1e3a8a\",\n        950: \"#172554\"\n    },\n    indigo: {\n        50: \"#eef2ff\",\n        100: \"#e0e7ff\",\n        200: \"#c7d2fe\",\n        300: \"#a5b4fc\",\n        400: \"#818cf8\",\n        500: \"#6366f1\",\n        600: \"#4f46e5\",\n        700: \"#4338ca\",\n        800: \"#3730a3\",\n        900: \"#312e81\",\n        950: \"#1e1b4b\"\n    },\n    violet: {\n        50: \"#f5f3ff\",\n        100: \"#ede9fe\",\n        200: \"#ddd6fe\",\n        300: \"#c4b5fd\",\n        400: \"#a78bfa\",\n        500: \"#8b5cf6\",\n        600: \"#7c3aed\",\n        700: \"#6d28d9\",\n        800: \"#5b21b6\",\n        900: \"#4c1d95\",\n        950: \"#2e1065\"\n    },\n    purple: {\n        50: \"#faf5ff\",\n        100: \"#f3e8ff\",\n        200: \"#e9d5ff\",\n        300: \"#d8b4fe\",\n        400: \"#c084fc\",\n        500: \"#a855f7\",\n        600: \"#9333ea\",\n        700: \"#7e22ce\",\n        800: \"#6b21a8\",\n        900: \"#581c87\",\n        950: \"#3b0764\"\n    },\n    fuchsia: {\n        50: \"#fdf4ff\",\n        100: \"#fae8ff\",\n        200: \"#f5d0fe\",\n        300: \"#f0abfc\",\n        400: \"#e879f9\",\n        500: \"#d946ef\",\n        600: \"#c026d3\",\n        700: \"#a21caf\",\n        800: \"#86198f\",\n        900: \"#701a75\",\n        950: \"#4a044e\"\n    },\n    pink: {\n        50: \"#fdf2f8\",\n        100: \"#fce7f3\",\n        200: \"#fbcfe8\",\n        300: \"#f9a8d4\",\n        400: \"#f472b6\",\n        500: \"#ec4899\",\n        600: \"#db2777\",\n        700: \"#be185d\",\n        800: \"#9d174d\",\n        900: \"#831843\",\n        950: \"#500724\"\n    },\n    rose: {\n        50: \"#fff1f2\",\n        100: \"#ffe4e6\",\n        200: \"#fecdd3\",\n        300: \"#fda4af\",\n        400: \"#fb7185\",\n        500: \"#f43f5e\",\n        600: \"#e11d48\",\n        700: \"#be123c\",\n        800: \"#9f1239\",\n        900: \"#881337\",\n        950: \"#4c0519\"\n    },\n    get lightBlue () {\n        warn({\n            version: \"v2.2\",\n            from: \"lightBlue\",\n            to: \"sky\"\n        });\n        return this.sky;\n    },\n    get warmGray () {\n        warn({\n            version: \"v3.0\",\n            from: \"warmGray\",\n            to: \"stone\"\n        });\n        return this.stone;\n    },\n    get trueGray () {\n        warn({\n            version: \"v3.0\",\n            from: \"trueGray\",\n            to: \"neutral\"\n        });\n        return this.neutral;\n    },\n    get coolGray () {\n        warn({\n            version: \"v3.0\",\n            from: \"coolGray\",\n            to: \"gray\"\n        });\n        return this.gray;\n    },\n    get blueGray () {\n        warn({\n            version: \"v3.0\",\n            from: \"blueGray\",\n            to: \"slate\"\n        });\n        return this.slate;\n    }\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"defaults\", {\n    enumerable: true,\n    get: ()=>defaults\n});\nfunction defaults(target, ...sources) {\n    for (let source of sources){\n        for(let k in source){\n            var _target_hasOwnProperty;\n            if (!(target === null || target === void 0 ? void 0 : (_target_hasOwnProperty = target.hasOwnProperty) === null || _target_hasOwnProperty === void 0 ? void 0 : _target_hasOwnProperty.call(target, k))) {\n                target[k] = source[k];\n            }\n        }\n        for (let k1 of Object.getOwnPropertySymbols(source)){\n            var _target_hasOwnProperty1;\n            if (!(target === null || target === void 0 ? void 0 : (_target_hasOwnProperty1 = target.hasOwnProperty) === null || _target_hasOwnProperty1 === void 0 ? void 0 : _target_hasOwnProperty1.call(target, k1))) {\n                target[k1] = source[k1];\n            }\n        }\n    }\n    return target;\n}\n","/**\n * Parse a path string into an array of path segments.\n *\n * Square bracket notation `a[b]` may be used to \"escape\" dots that would otherwise be interpreted as path separators.\n *\n * Example:\n * a -> ['a']\n * a.b.c -> ['a', 'b', 'c']\n * a[b].c -> ['a', 'b', 'c']\n * a[b.c].e.f -> ['a', 'b.c', 'e', 'f']\n * a[b][c][d] -> ['a', 'b', 'c', 'd']\n *\n * @param {string|string[]} path\n **/ \"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"toPath\", {\n    enumerable: true,\n    get: ()=>toPath\n});\nfunction toPath(path) {\n    if (Array.isArray(path)) return path;\n    let openBrackets = path.split(\"[\").length - 1;\n    let closedBrackets = path.split(\"]\").length - 1;\n    if (openBrackets !== closedBrackets) {\n        throw new Error(`Path is invalid. Has unbalanced brackets: ${path}`);\n    }\n    return path.split(/\\.(?![^\\[]*\\])|[\\[\\]]/g).filter(Boolean);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    env: ()=>env,\n    contextMap: ()=>contextMap,\n    configContextMap: ()=>configContextMap,\n    contextSourcesMap: ()=>contextSourcesMap,\n    sourceHashMap: ()=>sourceHashMap,\n    NOT_ON_DEMAND: ()=>NOT_ON_DEMAND,\n    NONE: ()=>NONE,\n    resolveDebug: ()=>resolveDebug\n});\nconst _packageJson = /*#__PURE__*/ _interopRequireDefault(require(\"../../package.json\"));\nfunction _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\nlet OXIDE_DEFAULT_ENABLED = _packageJson.default.tailwindcss.engine === \"oxide\";\nconst env = typeof process !== \"undefined\" ? {\n    NODE_ENV: process.env.NODE_ENV,\n    DEBUG: resolveDebug(process.env.DEBUG),\n    ENGINE: _packageJson.default.tailwindcss.engine,\n    OXIDE: resolveBoolean(process.env.OXIDE, OXIDE_DEFAULT_ENABLED)\n} : {\n    NODE_ENV: \"production\",\n    DEBUG: false,\n    ENGINE: _packageJson.default.tailwindcss.engine,\n    OXIDE: OXIDE_DEFAULT_ENABLED\n};\nconst contextMap = new Map();\nconst configContextMap = new Map();\nconst contextSourcesMap = new Map();\nconst sourceHashMap = new Map();\nconst NOT_ON_DEMAND = new String(\"*\");\nconst NONE = Symbol(\"__NONE__\");\nfunction resolveBoolean(value, defaultValue) {\n    if (value === undefined) {\n        return defaultValue;\n    }\n    if (value === \"0\" || value === \"false\") {\n        return false;\n    }\n    return true;\n}\nfunction resolveDebug(debug) {\n    if (debug === undefined) {\n        return false;\n    }\n    // Environment variables are strings, so convert to boolean\n    if (debug === \"true\" || debug === \"1\") {\n        return true;\n    }\n    if (debug === \"false\" || debug === \"0\") {\n        return false;\n    }\n    // Keep the debug convention into account:\n    // DEBUG=* -> This enables all debug modes\n    // DEBUG=projectA,projectB,projectC -> This enables debug for projectA, projectB and projectC\n    // DEBUG=projectA:* -> This enables all debug modes for projectA (if you have sub-types)\n    // DEBUG=projectA,-projectB -> This enables debug for projectA and explicitly disables it for projectB\n    if (debug === \"*\") {\n        return true;\n    }\n    let debuggers = debug.split(\",\").map((d)=>d.split(\":\")[0]);\n    // Ignoring tailwindcss\n    if (debuggers.includes(\"-tailwindcss\")) {\n        return false;\n    }\n    // Including tailwindcss\n    if (debuggers.includes(\"tailwindcss\")) {\n        return true;\n    }\n    return false;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    flagEnabled: ()=>flagEnabled,\n    issueFlagNotices: ()=>issueFlagNotices,\n    default: ()=>_default\n});\nconst _picocolors = /*#__PURE__*/ _interopRequireDefault(require(\"picocolors\"));\nconst _log = /*#__PURE__*/ _interopRequireDefault(require(\"./util/log\"));\nconst _sharedState = require(\"./lib/sharedState\");\nfunction _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\nlet defaults = {\n    optimizeUniversalDefaults: false,\n    generalizedModifiers: true,\n    get disableColorOpacityUtilitiesByDefault () {\n        return _sharedState.env.OXIDE;\n    },\n    get relativeContentPathsByDefault () {\n        return _sharedState.env.OXIDE;\n    }\n};\nlet featureFlags = {\n    future: [\n        \"hoverOnlyWhenSupported\",\n        \"respectDefaultRingColorOpacity\",\n        \"disableColorOpacityUtilitiesByDefault\",\n        \"relativeContentPathsByDefault\"\n    ],\n    experimental: [\n        \"optimizeUniversalDefaults\",\n        \"generalizedModifiers\"\n    ]\n};\nfunction flagEnabled(config, flag) {\n    if (featureFlags.future.includes(flag)) {\n        var _config_future;\n        var _config_future_flag, _ref;\n        return config.future === \"all\" || ((_ref = (_config_future_flag = config === null || config === void 0 ? void 0 : (_config_future = config.future) === null || _config_future === void 0 ? void 0 : _config_future[flag]) !== null && _config_future_flag !== void 0 ? _config_future_flag : defaults[flag]) !== null && _ref !== void 0 ? _ref : false);\n    }\n    if (featureFlags.experimental.includes(flag)) {\n        var _config_experimental;\n        var _config_experimental_flag, _ref1;\n        return config.experimental === \"all\" || ((_ref1 = (_config_experimental_flag = config === null || config === void 0 ? void 0 : (_config_experimental = config.experimental) === null || _config_experimental === void 0 ? void 0 : _config_experimental[flag]) !== null && _config_experimental_flag !== void 0 ? _config_experimental_flag : defaults[flag]) !== null && _ref1 !== void 0 ? _ref1 : false);\n    }\n    return false;\n}\nfunction experimentalFlagsEnabled(config) {\n    if (config.experimental === \"all\") {\n        return featureFlags.experimental;\n    }\n    var _config_experimental;\n    return Object.keys((_config_experimental = config === null || config === void 0 ? void 0 : config.experimental) !== null && _config_experimental !== void 0 ? _config_experimental : {}).filter((flag)=>featureFlags.experimental.includes(flag) && config.experimental[flag]);\n}\nfunction issueFlagNotices(config) {\n    if (process.env.JEST_WORKER_ID !== undefined) {\n        return;\n    }\n    if (experimentalFlagsEnabled(config).length > 0) {\n        let changes = experimentalFlagsEnabled(config).map((s)=>_picocolors.default.yellow(s)).join(\", \");\n        _log.default.warn(\"experimental-flags-enabled\", [\n            `You have enabled experimental features: ${changes}`,\n            \"Experimental features in Tailwind CSS are not covered by semver, may introduce breaking changes, and can change at any time.\"\n        ]);\n    }\n}\nconst _default = featureFlags;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"normalizeConfig\", {\n    enumerable: true,\n    get: ()=>normalizeConfig\n});\nconst _featureFlags = require(\"../featureFlags\");\nconst _log = /*#__PURE__*/ _interopRequireWildcard(require(\"./log\"));\nfunction _getRequireWildcardCache(nodeInterop) {\n    if (typeof WeakMap !== \"function\") return null;\n    var cacheBabelInterop = new WeakMap();\n    var cacheNodeInterop = new WeakMap();\n    return (_getRequireWildcardCache = function(nodeInterop) {\n        return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n    })(nodeInterop);\n}\nfunction _interopRequireWildcard(obj, nodeInterop) {\n    if (!nodeInterop && obj && obj.__esModule) {\n        return obj;\n    }\n    if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") {\n        return {\n            default: obj\n        };\n    }\n    var cache = _getRequireWildcardCache(nodeInterop);\n    if (cache && cache.has(obj)) {\n        return cache.get(obj);\n    }\n    var newObj = {};\n    var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n    for(var key in obj){\n        if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n            var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n            if (desc && (desc.get || desc.set)) {\n                Object.defineProperty(newObj, key, desc);\n            } else {\n                newObj[key] = obj[key];\n            }\n        }\n    }\n    newObj.default = obj;\n    if (cache) {\n        cache.set(obj, newObj);\n    }\n    return newObj;\n}\nfunction normalizeConfig(config) {\n    // Quick structure validation\n    /**\n   * type FilePath = string\n   * type RawFile = { raw: string, extension?: string }\n   * type ExtractorFn = (content: string) => Array<string>\n   * type TransformerFn = (content: string) => string\n   *\n   * type Content =\n   *   | Array<FilePath | RawFile>\n   *   | {\n   *       files: Array<FilePath | RawFile>,\n   *       extract?: ExtractorFn | { [extension: string]: ExtractorFn }\n   *       transform?: TransformerFn | { [extension: string]: TransformerFn }\n   *   }\n   */ let valid = (()=>{\n        // `config.purge` should not exist anymore\n        if (config.purge) {\n            return false;\n        }\n        // `config.content` should exist\n        if (!config.content) {\n            return false;\n        }\n        // `config.content` should be an object or an array\n        if (!Array.isArray(config.content) && !(typeof config.content === \"object\" && config.content !== null)) {\n            return false;\n        }\n        // When `config.content` is an array, it should consist of FilePaths or RawFiles\n        if (Array.isArray(config.content)) {\n            return config.content.every((path)=>{\n                // `path` can be a string\n                if (typeof path === \"string\") return true;\n                // `path` can be an object { raw: string, extension?: string }\n                // `raw` must be a string\n                if (typeof (path === null || path === void 0 ? void 0 : path.raw) !== \"string\") return false;\n                // `extension` (if provided) should also be a string\n                if ((path === null || path === void 0 ? void 0 : path.extension) && typeof (path === null || path === void 0 ? void 0 : path.extension) !== \"string\") {\n                    return false;\n                }\n                return true;\n            });\n        }\n        // When `config.content` is an object\n        if (typeof config.content === \"object\" && config.content !== null) {\n            // Only `files`, `relative`, `extract`, and `transform` can exist in `config.content`\n            if (Object.keys(config.content).some((key)=>![\n                    \"files\",\n                    \"relative\",\n                    \"extract\",\n                    \"transform\"\n                ].includes(key))) {\n                return false;\n            }\n            // `config.content.files` should exist of FilePaths or RawFiles\n            if (Array.isArray(config.content.files)) {\n                if (!config.content.files.every((path)=>{\n                    // `path` can be a string\n                    if (typeof path === \"string\") return true;\n                    // `path` can be an object { raw: string, extension?: string }\n                    // `raw` must be a string\n                    if (typeof (path === null || path === void 0 ? void 0 : path.raw) !== \"string\") return false;\n                    // `extension` (if provided) should also be a string\n                    if ((path === null || path === void 0 ? void 0 : path.extension) && typeof (path === null || path === void 0 ? void 0 : path.extension) !== \"string\") {\n                        return false;\n                    }\n                    return true;\n                })) {\n                    return false;\n                }\n                // `config.content.extract` is optional, and can be a Function or a Record<String, Function>\n                if (typeof config.content.extract === \"object\") {\n                    for (let value of Object.values(config.content.extract)){\n                        if (typeof value !== \"function\") {\n                            return false;\n                        }\n                    }\n                } else if (!(config.content.extract === undefined || typeof config.content.extract === \"function\")) {\n                    return false;\n                }\n                // `config.content.transform` is optional, and can be a Function or a Record<String, Function>\n                if (typeof config.content.transform === \"object\") {\n                    for (let value1 of Object.values(config.content.transform)){\n                        if (typeof value1 !== \"function\") {\n                            return false;\n                        }\n                    }\n                } else if (!(config.content.transform === undefined || typeof config.content.transform === \"function\")) {\n                    return false;\n                }\n                // `config.content.relative` is optional and can be a boolean\n                if (typeof config.content.relative !== \"boolean\" && typeof config.content.relative !== \"undefined\") {\n                    return false;\n                }\n            }\n            return true;\n        }\n        return false;\n    })();\n    if (!valid) {\n        _log.default.warn(\"purge-deprecation\", [\n            \"The `purge`/`content` options have changed in Tailwind CSS v3.0.\",\n            \"Update your configuration file to eliminate this warning.\",\n            \"https://tailwindcss.com/docs/upgrade-guide#configure-content-sources\"\n        ]);\n    }\n    // Normalize the `safelist`\n    config.safelist = (()=>{\n        var _purge_options;\n        let { content , purge , safelist  } = config;\n        if (Array.isArray(safelist)) return safelist;\n        if (Array.isArray(content === null || content === void 0 ? void 0 : content.safelist)) return content.safelist;\n        if (Array.isArray(purge === null || purge === void 0 ? void 0 : purge.safelist)) return purge.safelist;\n        if (Array.isArray(purge === null || purge === void 0 ? void 0 : (_purge_options = purge.options) === null || _purge_options === void 0 ? void 0 : _purge_options.safelist)) return purge.options.safelist;\n        return [];\n    })();\n    // Normalize the `blocklist`\n    config.blocklist = (()=>{\n        let { blocklist  } = config;\n        if (Array.isArray(blocklist)) {\n            if (blocklist.every((item)=>typeof item === \"string\")) {\n                return blocklist;\n            }\n            _log.default.warn(\"blocklist-invalid\", [\n                \"The `blocklist` option must be an array of strings.\",\n                \"https://tailwindcss.com/docs/content-configuration#discarding-classes\"\n            ]);\n        }\n        return [];\n    })();\n    // Normalize prefix option\n    if (typeof config.prefix === \"function\") {\n        _log.default.warn(\"prefix-function\", [\n            \"As of Tailwind CSS v3.0, `prefix` cannot be a function.\",\n            \"Update `prefix` in your configuration to be a string to eliminate this warning.\",\n            \"https://tailwindcss.com/docs/upgrade-guide#prefix-cannot-be-a-function\"\n        ]);\n        config.prefix = \"\";\n    } else {\n        var _config_prefix;\n        config.prefix = (_config_prefix = config.prefix) !== null && _config_prefix !== void 0 ? _config_prefix : \"\";\n    }\n    // Normalize the `content`\n    config.content = {\n        relative: (()=>{\n            let { content  } = config;\n            if (content === null || content === void 0 ? void 0 : content.relative) {\n                return content.relative;\n            }\n            return (0, _featureFlags.flagEnabled)(config, \"relativeContentPathsByDefault\");\n        })(),\n        files: (()=>{\n            let { content , purge  } = config;\n            if (Array.isArray(purge)) return purge;\n            if (Array.isArray(purge === null || purge === void 0 ? void 0 : purge.content)) return purge.content;\n            if (Array.isArray(content)) return content;\n            if (Array.isArray(content === null || content === void 0 ? void 0 : content.content)) return content.content;\n            if (Array.isArray(content === null || content === void 0 ? void 0 : content.files)) return content.files;\n            return [];\n        })(),\n        extract: (()=>{\n            let extract = (()=>{\n                var _config_purge, _config_content, _config_purge1, _config_purge_extract, _config_content1, _config_content_extract, _config_purge2, _config_purge_options, _config_content2, _config_content_options;\n                if ((_config_purge = config.purge) === null || _config_purge === void 0 ? void 0 : _config_purge.extract) return config.purge.extract;\n                if ((_config_content = config.content) === null || _config_content === void 0 ? void 0 : _config_content.extract) return config.content.extract;\n                if ((_config_purge1 = config.purge) === null || _config_purge1 === void 0 ? void 0 : (_config_purge_extract = _config_purge1.extract) === null || _config_purge_extract === void 0 ? void 0 : _config_purge_extract.DEFAULT) return config.purge.extract.DEFAULT;\n                if ((_config_content1 = config.content) === null || _config_content1 === void 0 ? void 0 : (_config_content_extract = _config_content1.extract) === null || _config_content_extract === void 0 ? void 0 : _config_content_extract.DEFAULT) return config.content.extract.DEFAULT;\n                if ((_config_purge2 = config.purge) === null || _config_purge2 === void 0 ? void 0 : (_config_purge_options = _config_purge2.options) === null || _config_purge_options === void 0 ? void 0 : _config_purge_options.extractors) return config.purge.options.extractors;\n                if ((_config_content2 = config.content) === null || _config_content2 === void 0 ? void 0 : (_config_content_options = _config_content2.options) === null || _config_content_options === void 0 ? void 0 : _config_content_options.extractors) return config.content.options.extractors;\n                return {};\n            })();\n            let extractors = {};\n            let defaultExtractor = (()=>{\n                var _config_purge, _config_purge_options, _config_content, _config_content_options;\n                if ((_config_purge = config.purge) === null || _config_purge === void 0 ? void 0 : (_config_purge_options = _config_purge.options) === null || _config_purge_options === void 0 ? void 0 : _config_purge_options.defaultExtractor) {\n                    return config.purge.options.defaultExtractor;\n                }\n                if ((_config_content = config.content) === null || _config_content === void 0 ? void 0 : (_config_content_options = _config_content.options) === null || _config_content_options === void 0 ? void 0 : _config_content_options.defaultExtractor) {\n                    return config.content.options.defaultExtractor;\n                }\n                return undefined;\n            })();\n            if (defaultExtractor !== undefined) {\n                extractors.DEFAULT = defaultExtractor;\n            }\n            // Functions\n            if (typeof extract === \"function\") {\n                extractors.DEFAULT = extract;\n            } else if (Array.isArray(extract)) {\n                for (let { extensions , extractor  } of extract !== null && extract !== void 0 ? extract : []){\n                    for (let extension of extensions){\n                        extractors[extension] = extractor;\n                    }\n                }\n            } else if (typeof extract === \"object\" && extract !== null) {\n                Object.assign(extractors, extract);\n            }\n            return extractors;\n        })(),\n        transform: (()=>{\n            let transform = (()=>{\n                var _config_purge, _config_content, _config_purge1, _config_purge_transform, _config_content1, _config_content_transform;\n                if ((_config_purge = config.purge) === null || _config_purge === void 0 ? void 0 : _config_purge.transform) return config.purge.transform;\n                if ((_config_content = config.content) === null || _config_content === void 0 ? void 0 : _config_content.transform) return config.content.transform;\n                if ((_config_purge1 = config.purge) === null || _config_purge1 === void 0 ? void 0 : (_config_purge_transform = _config_purge1.transform) === null || _config_purge_transform === void 0 ? void 0 : _config_purge_transform.DEFAULT) return config.purge.transform.DEFAULT;\n                if ((_config_content1 = config.content) === null || _config_content1 === void 0 ? void 0 : (_config_content_transform = _config_content1.transform) === null || _config_content_transform === void 0 ? void 0 : _config_content_transform.DEFAULT) return config.content.transform.DEFAULT;\n                return {};\n            })();\n            let transformers = {};\n            if (typeof transform === \"function\") {\n                transformers.DEFAULT = transform;\n            }\n            if (typeof transform === \"object\" && transform !== null) {\n                Object.assign(transformers, transform);\n            }\n            return transformers;\n        })()\n    };\n    // Validate globs to prevent bogus globs.\n    // E.g.: `./src/*.{html}` is invalid, the `{html}` should just be `html`\n    for (let file of config.content.files){\n        if (typeof file === \"string\" && /{([^,]*?)}/g.test(file)) {\n            _log.default.warn(\"invalid-glob-braces\", [\n                `The glob pattern ${(0, _log.dim)(file)} in your Tailwind CSS configuration is invalid.`,\n                `Update it to ${(0, _log.dim)(file.replace(/{([^,]*?)}/g, \"$1\"))} to silence this warning.`\n            ]);\n            break;\n        }\n    }\n    return config;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"default\", {\n    enumerable: true,\n    get: ()=>isPlainObject\n});\nfunction isPlainObject(value) {\n    if (Object.prototype.toString.call(value) !== \"[object Object]\") {\n        return false;\n    }\n    const prototype = Object.getPrototypeOf(value);\n    return prototype === null || prototype === Object.prototype;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"cloneDeep\", {\n    enumerable: true,\n    get: ()=>cloneDeep\n});\nfunction cloneDeep(value) {\n    if (Array.isArray(value)) {\n        return value.map((child)=>cloneDeep(child));\n    }\n    if (typeof value === \"object\" && value !== null) {\n        return Object.fromEntries(Object.entries(value).map(([k, v])=>[\n                k,\n                cloneDeep(v)\n            ]));\n    }\n    return value;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"default\", {\n    enumerable: true,\n    get: ()=>escapeCommas\n});\nfunction escapeCommas(className) {\n    return className.replace(/\\\\,/g, \"\\\\2c \");\n}\n","'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    parseColor: ()=>parseColor,\n    formatColor: ()=>formatColor\n});\nconst _colorName = /*#__PURE__*/ _interopRequireDefault(require(\"color-name\"));\nfunction _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\nlet HEX = /^#([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})?$/i;\nlet SHORT_HEX = /^#([a-f\\d])([a-f\\d])([a-f\\d])([a-f\\d])?$/i;\nlet VALUE = /(?:\\d+|\\d*\\.\\d+)%?/;\nlet SEP = /(?:\\s*,\\s*|\\s+)/;\nlet ALPHA_SEP = /\\s*[,/]\\s*/;\nlet CUSTOM_PROPERTY = /var\\(--(?:[^ )]*?)\\)/;\nlet RGB = new RegExp(`^(rgba?)\\\\(\\\\s*(${VALUE.source}|${CUSTOM_PROPERTY.source})(?:${SEP.source}(${VALUE.source}|${CUSTOM_PROPERTY.source}))?(?:${SEP.source}(${VALUE.source}|${CUSTOM_PROPERTY.source}))?(?:${ALPHA_SEP.source}(${VALUE.source}|${CUSTOM_PROPERTY.source}))?\\\\s*\\\\)$`);\nlet HSL = new RegExp(`^(hsla?)\\\\(\\\\s*((?:${VALUE.source})(?:deg|rad|grad|turn)?|${CUSTOM_PROPERTY.source})(?:${SEP.source}(${VALUE.source}|${CUSTOM_PROPERTY.source}))?(?:${SEP.source}(${VALUE.source}|${CUSTOM_PROPERTY.source}))?(?:${ALPHA_SEP.source}(${VALUE.source}|${CUSTOM_PROPERTY.source}))?\\\\s*\\\\)$`);\nfunction parseColor(value, { loose =false  } = {}) {\n    var _match_, _match__toString;\n    if (typeof value !== \"string\") {\n        return null;\n    }\n    value = value.trim();\n    if (value === \"transparent\") {\n        return {\n            mode: \"rgb\",\n            color: [\n                \"0\",\n                \"0\",\n                \"0\"\n            ],\n            alpha: \"0\"\n        };\n    }\n    if (value in _colorName.default) {\n        return {\n            mode: \"rgb\",\n            color: _colorName.default[value].map((v)=>v.toString())\n        };\n    }\n    let hex = value.replace(SHORT_HEX, (_, r, g, b, a)=>[\n            \"#\",\n            r,\n            r,\n            g,\n            g,\n            b,\n            b,\n            a ? a + a : \"\"\n        ].join(\"\")).match(HEX);\n    if (hex !== null) {\n        return {\n            mode: \"rgb\",\n            color: [\n                parseInt(hex[1], 16),\n                parseInt(hex[2], 16),\n                parseInt(hex[3], 16)\n            ].map((v)=>v.toString()),\n            alpha: hex[4] ? (parseInt(hex[4], 16) / 255).toString() : undefined\n        };\n    }\n    var _value_match;\n    let match = (_value_match = value.match(RGB)) !== null && _value_match !== void 0 ? _value_match : value.match(HSL);\n    if (match === null) {\n        return null;\n    }\n    let color = [\n        match[2],\n        match[3],\n        match[4]\n    ].filter(Boolean).map((v)=>v.toString());\n    // rgba(var(--my-color), 0.1)\n    // hsla(var(--my-color), 0.1)\n    if (color.length === 2 && color[0].startsWith(\"var(\")) {\n        return {\n            mode: match[1],\n            color: [\n                color[0]\n            ],\n            alpha: color[1]\n        };\n    }\n    if (!loose && color.length !== 3) {\n        return null;\n    }\n    if (color.length < 3 && !color.some((part)=>/^var\\(.*?\\)$/.test(part))) {\n        return null;\n    }\n    return {\n        mode: match[1],\n        color,\n        alpha: (_match_ = match[5]) === null || _match_ === void 0 ? void 0 : (_match__toString = _match_.toString) === null || _match__toString === void 0 ? void 0 : _match__toString.call(_match_)\n    };\n}\nfunction formatColor({ mode , color , alpha  }) {\n    let hasAlpha = alpha !== undefined;\n    if (mode === \"rgba\" || mode === \"hsla\") {\n        return `${mode}(${color.join(\", \")}${hasAlpha ? `, ${alpha}` : \"\"})`;\n    }\n    return `${mode}(${color.join(\" \")}${hasAlpha ? ` / ${alpha}` : \"\"})`;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    withAlphaValue: ()=>withAlphaValue,\n    default: ()=>withAlphaVariable\n});\nconst _color = require(\"./color\");\nfunction withAlphaValue(color, alphaValue, defaultValue) {\n    if (typeof color === \"function\") {\n        return color({\n            opacityValue: alphaValue\n        });\n    }\n    let parsed = (0, _color.parseColor)(color, {\n        loose: true\n    });\n    if (parsed === null) {\n        return defaultValue;\n    }\n    return (0, _color.formatColor)({\n        ...parsed,\n        alpha: alphaValue\n    });\n}\nfunction withAlphaVariable({ color , property , variable  }) {\n    let properties = [].concat(property);\n    if (typeof color === \"function\") {\n        return {\n            [variable]: \"1\",\n            ...Object.fromEntries(properties.map((p)=>{\n                return [\n                    p,\n                    color({\n                        opacityVariable: variable,\n                        opacityValue: `var(${variable})`\n                    })\n                ];\n            }))\n        };\n    }\n    const parsed = (0, _color.parseColor)(color);\n    if (parsed === null) {\n        return Object.fromEntries(properties.map((p)=>[\n                p,\n                color\n            ]));\n    }\n    if (parsed.alpha !== undefined) {\n        // Has an alpha value, return color as-is\n        return Object.fromEntries(properties.map((p)=>[\n                p,\n                color\n            ]));\n    }\n    return {\n        [variable]: \"1\",\n        ...Object.fromEntries(properties.map((p)=>{\n            return [\n                p,\n                (0, _color.formatColor)({\n                    ...parsed,\n                    alpha: `var(${variable})`\n                })\n            ];\n        }))\n    };\n}\n","/**\n * This splits a string on a top-level character.\n *\n * Regex doesn't support recursion (at least not the JS-flavored version).\n * So we have to use a tiny state machine to keep track of paren placement.\n *\n * Expected behavior using commas:\n * var(--a, 0 0 1px rgb(0, 0, 0)), 0 0 1px rgb(0, 0, 0)\n *       ─┬─             ┬  ┬    ┬\n *        x              x  x    ╰──────── Split because top-level\n *        ╰──────────────┴──┴───────────── Ignored b/c inside >= 1 levels of parens\n *\n * @param {string} input\n * @param {string} separator\n */ \"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"splitAtTopLevelOnly\", {\n    enumerable: true,\n    get: ()=>splitAtTopLevelOnly\n});\nfunction splitAtTopLevelOnly(input, separator) {\n    let stack = [];\n    let parts = [];\n    let lastPos = 0;\n    let isEscaped = false;\n    for(let idx = 0; idx < input.length; idx++){\n        let char = input[idx];\n        if (stack.length === 0 && char === separator[0] && !isEscaped) {\n            if (separator.length === 1 || input.slice(idx, idx + separator.length) === separator) {\n                parts.push(input.slice(lastPos, idx));\n                lastPos = idx + separator.length;\n            }\n        }\n        if (isEscaped) {\n            isEscaped = false;\n        } else if (char === \"\\\\\") {\n            isEscaped = true;\n        }\n        if (char === \"(\" || char === \"[\" || char === \"{\") {\n            stack.push(char);\n        } else if (char === \")\" && stack[stack.length - 1] === \"(\" || char === \"]\" && stack[stack.length - 1] === \"[\" || char === \"}\" && stack[stack.length - 1] === \"{\") {\n            stack.pop();\n        }\n    }\n    parts.push(input.slice(lastPos));\n    return parts;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    parseBoxShadowValue: ()=>parseBoxShadowValue,\n    formatBoxShadowValue: ()=>formatBoxShadowValue\n});\nconst _splitAtTopLevelOnly = require(\"./splitAtTopLevelOnly\");\nlet KEYWORDS = new Set([\n    \"inset\",\n    \"inherit\",\n    \"initial\",\n    \"revert\",\n    \"unset\"\n]);\nlet SPACE = /\\ +(?![^(]*\\))/g // Similar to the one above, but with spaces instead.\n;\nlet LENGTH = /^-?(\\d+|\\.\\d+)(.*?)$/g;\nfunction parseBoxShadowValue(input) {\n    let shadows = (0, _splitAtTopLevelOnly.splitAtTopLevelOnly)(input, \",\");\n    return shadows.map((shadow)=>{\n        let value = shadow.trim();\n        let result = {\n            raw: value\n        };\n        let parts = value.split(SPACE);\n        let seen = new Set();\n        for (let part of parts){\n            // Reset index, since the regex is stateful.\n            LENGTH.lastIndex = 0;\n            // Keyword\n            if (!seen.has(\"KEYWORD\") && KEYWORDS.has(part)) {\n                result.keyword = part;\n                seen.add(\"KEYWORD\");\n            } else if (LENGTH.test(part)) {\n                if (!seen.has(\"X\")) {\n                    result.x = part;\n                    seen.add(\"X\");\n                } else if (!seen.has(\"Y\")) {\n                    result.y = part;\n                    seen.add(\"Y\");\n                } else if (!seen.has(\"BLUR\")) {\n                    result.blur = part;\n                    seen.add(\"BLUR\");\n                } else if (!seen.has(\"SPREAD\")) {\n                    result.spread = part;\n                    seen.add(\"SPREAD\");\n                }\n            } else {\n                if (!result.color) {\n                    result.color = part;\n                } else {\n                    if (!result.unknown) result.unknown = [];\n                    result.unknown.push(part);\n                }\n            }\n        }\n        // Check if valid\n        result.valid = result.x !== undefined && result.y !== undefined;\n        return result;\n    });\n}\nfunction formatBoxShadowValue(shadows) {\n    return shadows.map((shadow)=>{\n        if (!shadow.valid) {\n            return shadow.raw;\n        }\n        return [\n            shadow.keyword,\n            shadow.x,\n            shadow.y,\n            shadow.blur,\n            shadow.spread,\n            shadow.color\n        ].filter(Boolean).join(\" \");\n    }).join(\", \");\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    normalize: ()=>normalize,\n    url: ()=>url,\n    number: ()=>number,\n    percentage: ()=>percentage,\n    length: ()=>length,\n    lineWidth: ()=>lineWidth,\n    shadow: ()=>shadow,\n    color: ()=>color,\n    image: ()=>image,\n    gradient: ()=>gradient,\n    position: ()=>position,\n    familyName: ()=>familyName,\n    genericName: ()=>genericName,\n    absoluteSize: ()=>absoluteSize,\n    relativeSize: ()=>relativeSize\n});\nconst _color = require(\"./color\");\nconst _parseBoxShadowValue = require(\"./parseBoxShadowValue\");\nconst _splitAtTopLevelOnly = require(\"./splitAtTopLevelOnly\");\nlet cssFunctions = [\n    \"min\",\n    \"max\",\n    \"clamp\",\n    \"calc\"\n];\n// Ref: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Types\nfunction isCSSFunction(value) {\n    return cssFunctions.some((fn)=>new RegExp(`^${fn}\\\\(.*\\\\)`).test(value));\n}\nconst placeholder = \"--tw-placeholder\";\nconst placeholderRe = new RegExp(placeholder, \"g\");\nfunction normalize(value, isRoot = true) {\n    if (value.startsWith(\"--\")) {\n        return `var(${value})`;\n    }\n    // Keep raw strings if it starts with `url(`\n    if (value.includes(\"url(\")) {\n        return value.split(/(url\\(.*?\\))/g).filter(Boolean).map((part)=>{\n            if (/^url\\(.*?\\)$/.test(part)) {\n                return part;\n            }\n            return normalize(part, false);\n        }).join(\"\");\n    }\n    // Convert `_` to ` `, except for escaped underscores `\\_`\n    value = value.replace(/([^\\\\])_+/g, (fullMatch, characterBefore)=>characterBefore + \" \".repeat(fullMatch.length - 1)).replace(/^_/g, \" \").replace(/\\\\_/g, \"_\");\n    // Remove leftover whitespace\n    if (isRoot) {\n        value = value.trim();\n    }\n    // Add spaces around operators inside math functions like calc() that do not follow an operator\n    // or '('.\n    value = value.replace(/(calc|min|max|clamp)\\(.+\\)/g, (match)=>{\n        let vars = [];\n        return match.replace(/var\\((--.+?)[,)]/g, (match, g1)=>{\n            vars.push(g1);\n            return match.replace(g1, placeholder);\n        }).replace(/(-?\\d*\\.?\\d(?!\\b-\\d.+[,)](?![^+\\-/*])\\D)(?:%|[a-z]+)?|\\))([+\\-/*])/g, \"$1 $2 \").replace(placeholderRe, ()=>vars.shift());\n    });\n    return value;\n}\nfunction url(value) {\n    return value.startsWith(\"url(\");\n}\nfunction number(value) {\n    return !isNaN(Number(value)) || isCSSFunction(value);\n}\nfunction percentage(value) {\n    return value.endsWith(\"%\") && number(value.slice(0, -1)) || isCSSFunction(value);\n}\n// Please refer to MDN when updating this list:\n// https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Values_and_units\n// https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Container_Queries#container_query_length_units\nlet lengthUnits = [\n    \"cm\",\n    \"mm\",\n    \"Q\",\n    \"in\",\n    \"pc\",\n    \"pt\",\n    \"px\",\n    \"em\",\n    \"ex\",\n    \"ch\",\n    \"rem\",\n    \"lh\",\n    \"rlh\",\n    \"vw\",\n    \"vh\",\n    \"vmin\",\n    \"vmax\",\n    \"vb\",\n    \"vi\",\n    \"svw\",\n    \"svh\",\n    \"lvw\",\n    \"lvh\",\n    \"dvw\",\n    \"dvh\",\n    \"cqw\",\n    \"cqh\",\n    \"cqi\",\n    \"cqb\",\n    \"cqmin\",\n    \"cqmax\"\n];\nlet lengthUnitsPattern = `(?:${lengthUnits.join(\"|\")})`;\nfunction length(value) {\n    return value === \"0\" || new RegExp(`^[+-]?[0-9]*\\.?[0-9]+(?:[eE][+-]?[0-9]+)?${lengthUnitsPattern}$`).test(value) || isCSSFunction(value);\n}\nlet lineWidths = new Set([\n    \"thin\",\n    \"medium\",\n    \"thick\"\n]);\nfunction lineWidth(value) {\n    return lineWidths.has(value);\n}\nfunction shadow(value) {\n    let parsedShadows = (0, _parseBoxShadowValue.parseBoxShadowValue)(normalize(value));\n    for (let parsedShadow of parsedShadows){\n        if (!parsedShadow.valid) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction color(value) {\n    let colors = 0;\n    let result = (0, _splitAtTopLevelOnly.splitAtTopLevelOnly)(value, \"_\").every((part)=>{\n        part = normalize(part);\n        if (part.startsWith(\"var(\")) return true;\n        if ((0, _color.parseColor)(part, {\n            loose: true\n        }) !== null) return colors++, true;\n        return false;\n    });\n    if (!result) return false;\n    return colors > 0;\n}\nfunction image(value) {\n    let images = 0;\n    let result = (0, _splitAtTopLevelOnly.splitAtTopLevelOnly)(value, \",\").every((part)=>{\n        part = normalize(part);\n        if (part.startsWith(\"var(\")) return true;\n        if (url(part) || gradient(part) || [\n            \"element(\",\n            \"image(\",\n            \"cross-fade(\",\n            \"image-set(\"\n        ].some((fn)=>part.startsWith(fn))) {\n            images++;\n            return true;\n        }\n        return false;\n    });\n    if (!result) return false;\n    return images > 0;\n}\nlet gradientTypes = new Set([\n    \"linear-gradient\",\n    \"radial-gradient\",\n    \"repeating-linear-gradient\",\n    \"repeating-radial-gradient\",\n    \"conic-gradient\"\n]);\nfunction gradient(value) {\n    value = normalize(value);\n    for (let type of gradientTypes){\n        if (value.startsWith(`${type}(`)) {\n            return true;\n        }\n    }\n    return false;\n}\nlet validPositions = new Set([\n    \"center\",\n    \"top\",\n    \"right\",\n    \"bottom\",\n    \"left\"\n]);\nfunction position(value) {\n    let positions = 0;\n    let result = (0, _splitAtTopLevelOnly.splitAtTopLevelOnly)(value, \"_\").every((part)=>{\n        part = normalize(part);\n        if (part.startsWith(\"var(\")) return true;\n        if (validPositions.has(part) || length(part) || percentage(part)) {\n            positions++;\n            return true;\n        }\n        return false;\n    });\n    if (!result) return false;\n    return positions > 0;\n}\nfunction familyName(value) {\n    let fonts = 0;\n    let result = (0, _splitAtTopLevelOnly.splitAtTopLevelOnly)(value, \",\").every((part)=>{\n        part = normalize(part);\n        if (part.startsWith(\"var(\")) return true;\n        // If it contains spaces, then it should be quoted\n        if (part.includes(\" \")) {\n            if (!/(['\"])([^\"']+)\\1/g.test(part)) {\n                return false;\n            }\n        }\n        // If it starts with a number, it's invalid\n        if (/^\\d/g.test(part)) {\n            return false;\n        }\n        fonts++;\n        return true;\n    });\n    if (!result) return false;\n    return fonts > 0;\n}\nlet genericNames = new Set([\n    \"serif\",\n    \"sans-serif\",\n    \"monospace\",\n    \"cursive\",\n    \"fantasy\",\n    \"system-ui\",\n    \"ui-serif\",\n    \"ui-sans-serif\",\n    \"ui-monospace\",\n    \"ui-rounded\",\n    \"math\",\n    \"emoji\",\n    \"fangsong\"\n]);\nfunction genericName(value) {\n    return genericNames.has(value);\n}\nlet absoluteSizes = new Set([\n    \"xx-small\",\n    \"x-small\",\n    \"small\",\n    \"medium\",\n    \"large\",\n    \"x-large\",\n    \"x-large\",\n    \"xxx-large\"\n]);\nfunction absoluteSize(value) {\n    return absoluteSizes.has(value);\n}\nlet relativeSizes = new Set([\n    \"larger\",\n    \"smaller\"\n]);\nfunction relativeSize(value) {\n    return relativeSizes.has(value);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"backgroundSize\", {\n    enumerable: true,\n    get: ()=>backgroundSize\n});\nconst _dataTypes = require(\"./dataTypes\");\nconst _splitAtTopLevelOnly = require(\"./splitAtTopLevelOnly\");\nfunction backgroundSize(value) {\n    let keywordValues = [\n        \"cover\",\n        \"contain\"\n    ];\n    // the <length-percentage> type will probably be a css function\n    // so we have to use `splitAtTopLevelOnly`\n    return (0, _splitAtTopLevelOnly.splitAtTopLevelOnly)(value, \",\").every((part)=>{\n        let sizes = (0, _splitAtTopLevelOnly.splitAtTopLevelOnly)(part, \"_\").filter(Boolean);\n        if (sizes.length === 1 && keywordValues.includes(sizes[0])) return true;\n        if (sizes.length !== 1 && sizes.length !== 2) return false;\n        return sizes.every((size)=>(0, _dataTypes.length)(size) || (0, _dataTypes.percentage)(size) || size === \"auto\");\n    });\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    updateAllClasses: ()=>updateAllClasses,\n    asValue: ()=>asValue,\n    parseColorFormat: ()=>parseColorFormat,\n    asColor: ()=>asColor,\n    asLookupValue: ()=>asLookupValue,\n    typeMap: ()=>typeMap,\n    coerceValue: ()=>coerceValue,\n    getMatchingTypes: ()=>getMatchingTypes\n});\nconst _escapeCommas = /*#__PURE__*/ _interopRequireDefault(require(\"./escapeCommas\"));\nconst _withAlphaVariable = require(\"./withAlphaVariable\");\nconst _dataTypes = require(\"./dataTypes\");\nconst _negateValue = /*#__PURE__*/ _interopRequireDefault(require(\"./negateValue\"));\nconst _validateFormalSyntax = require(\"./validateFormalSyntax\");\nconst _featureFlagsJs = require(\"../featureFlags.js\");\nfunction _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\nfunction updateAllClasses(selectors, updateClass) {\n    selectors.walkClasses((sel)=>{\n        sel.value = updateClass(sel.value);\n        if (sel.raws && sel.raws.value) {\n            sel.raws.value = (0, _escapeCommas.default)(sel.raws.value);\n        }\n    });\n}\nfunction resolveArbitraryValue(modifier, validate) {\n    if (!isArbitraryValue(modifier)) {\n        return undefined;\n    }\n    let value = modifier.slice(1, -1);\n    if (!validate(value)) {\n        return undefined;\n    }\n    return (0, _dataTypes.normalize)(value);\n}\nfunction asNegativeValue(modifier, lookup = {}, validate) {\n    let positiveValue = lookup[modifier];\n    if (positiveValue !== undefined) {\n        return (0, _negateValue.default)(positiveValue);\n    }\n    if (isArbitraryValue(modifier)) {\n        let resolved = resolveArbitraryValue(modifier, validate);\n        if (resolved === undefined) {\n            return undefined;\n        }\n        return (0, _negateValue.default)(resolved);\n    }\n}\nfunction asValue(modifier, options = {}, { validate =()=>true  } = {}) {\n    var _options_values;\n    let value = (_options_values = options.values) === null || _options_values === void 0 ? void 0 : _options_values[modifier];\n    if (value !== undefined) {\n        return value;\n    }\n    if (options.supportsNegativeValues && modifier.startsWith(\"-\")) {\n        return asNegativeValue(modifier.slice(1), options.values, validate);\n    }\n    return resolveArbitraryValue(modifier, validate);\n}\nfunction isArbitraryValue(input) {\n    return input.startsWith(\"[\") && input.endsWith(\"]\");\n}\nfunction splitUtilityModifier(modifier) {\n    let slashIdx = modifier.lastIndexOf(\"/\");\n    if (slashIdx === -1 || slashIdx === modifier.length - 1) {\n        return [\n            modifier,\n            undefined\n        ];\n    }\n    let arbitrary = isArbitraryValue(modifier);\n    // The modifier could be of the form `[foo]/[bar]`\n    // We want to handle this case properly\n    // without affecting `[foo/bar]`\n    if (arbitrary && !modifier.includes(\"]/[\")) {\n        return [\n            modifier,\n            undefined\n        ];\n    }\n    return [\n        modifier.slice(0, slashIdx),\n        modifier.slice(slashIdx + 1)\n    ];\n}\nfunction parseColorFormat(value) {\n    if (typeof value === \"string\" && value.includes(\"<alpha-value>\")) {\n        let oldValue = value;\n        return ({ opacityValue =1  })=>oldValue.replace(\"<alpha-value>\", opacityValue);\n    }\n    return value;\n}\nfunction unwrapArbitraryModifier(modifier) {\n    modifier = modifier.slice(1, -1);\n    if (modifier.startsWith(\"--\")) {\n        modifier = `var(${modifier})`;\n    }\n    return modifier;\n}\nfunction asColor(modifier, options = {}, { tailwindConfig ={}  } = {}) {\n    var _options_values;\n    if (((_options_values = options.values) === null || _options_values === void 0 ? void 0 : _options_values[modifier]) !== undefined) {\n        var _options_values1;\n        return parseColorFormat((_options_values1 = options.values) === null || _options_values1 === void 0 ? void 0 : _options_values1[modifier]);\n    }\n    // TODO: Hoist this up to getMatchingTypes or something\n    // We do this here because we need the alpha value (if any)\n    let [color, alpha] = splitUtilityModifier(modifier);\n    if (alpha !== undefined) {\n        var _options_values2, _tailwindConfig_theme, _tailwindConfig_theme_opacity;\n        var _options_values_color;\n        let normalizedColor = (_options_values_color = (_options_values2 = options.values) === null || _options_values2 === void 0 ? void 0 : _options_values2[color]) !== null && _options_values_color !== void 0 ? _options_values_color : isArbitraryValue(color) ? color.slice(1, -1) : undefined;\n        if (normalizedColor === undefined) {\n            return undefined;\n        }\n        normalizedColor = parseColorFormat(normalizedColor);\n        if (isArbitraryValue(alpha)) {\n            return (0, _withAlphaVariable.withAlphaValue)(normalizedColor, unwrapArbitraryModifier(alpha));\n        }\n        if (((_tailwindConfig_theme = tailwindConfig.theme) === null || _tailwindConfig_theme === void 0 ? void 0 : (_tailwindConfig_theme_opacity = _tailwindConfig_theme.opacity) === null || _tailwindConfig_theme_opacity === void 0 ? void 0 : _tailwindConfig_theme_opacity[alpha]) === undefined) {\n            return undefined;\n        }\n        return (0, _withAlphaVariable.withAlphaValue)(normalizedColor, tailwindConfig.theme.opacity[alpha]);\n    }\n    return asValue(modifier, options, {\n        validate: _dataTypes.color\n    });\n}\nfunction asLookupValue(modifier, options = {}) {\n    var _options_values;\n    return (_options_values = options.values) === null || _options_values === void 0 ? void 0 : _options_values[modifier];\n}\nfunction guess(validate) {\n    return (modifier, options)=>{\n        return asValue(modifier, options, {\n            validate\n        });\n    };\n}\nlet typeMap = {\n    any: asValue,\n    color: asColor,\n    url: guess(_dataTypes.url),\n    image: guess(_dataTypes.image),\n    length: guess(_dataTypes.length),\n    percentage: guess(_dataTypes.percentage),\n    position: guess(_dataTypes.position),\n    lookup: asLookupValue,\n    \"generic-name\": guess(_dataTypes.genericName),\n    \"family-name\": guess(_dataTypes.familyName),\n    number: guess(_dataTypes.number),\n    \"line-width\": guess(_dataTypes.lineWidth),\n    \"absolute-size\": guess(_dataTypes.absoluteSize),\n    \"relative-size\": guess(_dataTypes.relativeSize),\n    shadow: guess(_dataTypes.shadow),\n    size: guess(_validateFormalSyntax.backgroundSize)\n};\nlet supportedTypes = Object.keys(typeMap);\nfunction splitAtFirst(input, delim) {\n    let idx = input.indexOf(delim);\n    if (idx === -1) return [\n        undefined,\n        input\n    ];\n    return [\n        input.slice(0, idx),\n        input.slice(idx + 1)\n    ];\n}\nfunction coerceValue(types, modifier, options, tailwindConfig) {\n    if (options.values && modifier in options.values) {\n        for (let { type  } of types !== null && types !== void 0 ? types : []){\n            let result = typeMap[type](modifier, options, {\n                tailwindConfig\n            });\n            if (result === undefined) {\n                continue;\n            }\n            return [\n                result,\n                type,\n                null\n            ];\n        }\n    }\n    if (isArbitraryValue(modifier)) {\n        let arbitraryValue = modifier.slice(1, -1);\n        let [explicitType, value] = splitAtFirst(arbitraryValue, \":\");\n        // It could be that this resolves to `url(https` which is not a valid\n        // identifier. We currently only support \"simple\" words with dashes or\n        // underscores. E.g.: family-name\n        if (!/^[\\w-_]+$/g.test(explicitType)) {\n            value = arbitraryValue;\n        } else if (explicitType !== undefined && !supportedTypes.includes(explicitType)) {\n            return [];\n        }\n        if (value.length > 0 && supportedTypes.includes(explicitType)) {\n            return [\n                asValue(`[${value}]`, options),\n                explicitType,\n                null\n            ];\n        }\n    }\n    let matches = getMatchingTypes(types, modifier, options, tailwindConfig);\n    // Find first matching type\n    for (let match of matches){\n        return match;\n    }\n    return [];\n}\nfunction* getMatchingTypes(types, rawModifier, options, tailwindConfig) {\n    let modifiersEnabled = (0, _featureFlagsJs.flagEnabled)(tailwindConfig, \"generalizedModifiers\");\n    let [modifier, utilityModifier] = splitUtilityModifier(rawModifier);\n    let canUseUtilityModifier = modifiersEnabled && options.modifiers != null && (options.modifiers === \"any\" || typeof options.modifiers === \"object\" && (utilityModifier && isArbitraryValue(utilityModifier) || utilityModifier in options.modifiers));\n    if (!canUseUtilityModifier) {\n        modifier = rawModifier;\n        utilityModifier = undefined;\n    }\n    if (utilityModifier !== undefined && modifier === \"\") {\n        modifier = \"DEFAULT\";\n    }\n    // Check the full value first\n    // TODO: Move to asValue… somehow\n    if (utilityModifier !== undefined) {\n        if (typeof options.modifiers === \"object\") {\n            var _options_modifiers;\n            var _options_modifiers_utilityModifier;\n            let configValue = (_options_modifiers_utilityModifier = (_options_modifiers = options.modifiers) === null || _options_modifiers === void 0 ? void 0 : _options_modifiers[utilityModifier]) !== null && _options_modifiers_utilityModifier !== void 0 ? _options_modifiers_utilityModifier : null;\n            if (configValue !== null) {\n                utilityModifier = configValue;\n            } else if (isArbitraryValue(utilityModifier)) {\n                utilityModifier = unwrapArbitraryModifier(utilityModifier);\n            }\n        }\n    }\n    for (let { type  } of types !== null && types !== void 0 ? types : []){\n        let result = typeMap[type](modifier, options, {\n            tailwindConfig\n        });\n        if (result === undefined) {\n            continue;\n        }\n        yield [\n            result,\n            type,\n            utilityModifier !== null && utilityModifier !== void 0 ? utilityModifier : null\n        ];\n    }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"default\", {\n    enumerable: true,\n    get: ()=>toColorValue\n});\nfunction toColorValue(maybeFunction) {\n    return typeof maybeFunction === \"function\" ? maybeFunction({}) : maybeFunction;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"default\", {\n    enumerable: true,\n    get: ()=>resolveConfig\n});\nconst _negateValue = /*#__PURE__*/ _interopRequireDefault(require(\"./negateValue\"));\nconst _corePluginList = /*#__PURE__*/ _interopRequireDefault(require(\"../corePluginList\"));\nconst _configurePlugins = /*#__PURE__*/ _interopRequireDefault(require(\"./configurePlugins\"));\nconst _colors = /*#__PURE__*/ _interopRequireDefault(require(\"../public/colors\"));\nconst _defaults = require(\"./defaults\");\nconst _toPath = require(\"./toPath\");\nconst _normalizeConfig = require(\"./normalizeConfig\");\nconst _isPlainObject = /*#__PURE__*/ _interopRequireDefault(require(\"./isPlainObject\"));\nconst _cloneDeep = require(\"./cloneDeep\");\nconst _pluginUtils = require(\"./pluginUtils\");\nconst _withAlphaVariable = require(\"./withAlphaVariable\");\nconst _toColorValue = /*#__PURE__*/ _interopRequireDefault(require(\"./toColorValue\"));\nfunction _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\nfunction isFunction(input) {\n    return typeof input === \"function\";\n}\nfunction mergeWith(target, ...sources) {\n    let customizer = sources.pop();\n    for (let source of sources){\n        for(let k in source){\n            let merged = customizer(target[k], source[k]);\n            if (merged === undefined) {\n                if ((0, _isPlainObject.default)(target[k]) && (0, _isPlainObject.default)(source[k])) {\n                    target[k] = mergeWith({}, target[k], source[k], customizer);\n                } else {\n                    target[k] = source[k];\n                }\n            } else {\n                target[k] = merged;\n            }\n        }\n    }\n    return target;\n}\nconst configUtils = {\n    colors: _colors.default,\n    negative (scale) {\n        // TODO: Log that this function isn't really needed anymore?\n        return Object.keys(scale).filter((key)=>scale[key] !== \"0\").reduce((negativeScale, key)=>{\n            let negativeValue = (0, _negateValue.default)(scale[key]);\n            if (negativeValue !== undefined) {\n                negativeScale[`-${key}`] = negativeValue;\n            }\n            return negativeScale;\n        }, {});\n    },\n    breakpoints (screens) {\n        return Object.keys(screens).filter((key)=>typeof screens[key] === \"string\").reduce((breakpoints, key)=>({\n                ...breakpoints,\n                [`screen-${key}`]: screens[key]\n            }), {});\n    }\n};\nfunction value(valueToResolve, ...args) {\n    return isFunction(valueToResolve) ? valueToResolve(...args) : valueToResolve;\n}\nfunction collectExtends(items) {\n    return items.reduce((merged, { extend  })=>{\n        return mergeWith(merged, extend, (mergedValue, extendValue)=>{\n            if (mergedValue === undefined) {\n                return [\n                    extendValue\n                ];\n            }\n            if (Array.isArray(mergedValue)) {\n                return [\n                    extendValue,\n                    ...mergedValue\n                ];\n            }\n            return [\n                extendValue,\n                mergedValue\n            ];\n        });\n    }, {});\n}\nfunction mergeThemes(themes) {\n    return {\n        ...themes.reduce((merged, theme)=>(0, _defaults.defaults)(merged, theme), {}),\n        // In order to resolve n config objects, we combine all of their `extend` properties\n        // into arrays instead of objects so they aren't overridden.\n        extend: collectExtends(themes)\n    };\n}\nfunction mergeExtensionCustomizer(merged, value) {\n    // When we have an array of objects, we do want to merge it\n    if (Array.isArray(merged) && (0, _isPlainObject.default)(merged[0])) {\n        return merged.concat(value);\n    }\n    // When the incoming value is an array, and the existing config is an object, prepend the existing object\n    if (Array.isArray(value) && (0, _isPlainObject.default)(value[0]) && (0, _isPlainObject.default)(merged)) {\n        return [\n            merged,\n            ...value\n        ];\n    }\n    // Override arrays (for example for font-families, box-shadows, ...)\n    if (Array.isArray(value)) {\n        return value;\n    }\n    // Execute default behaviour\n    return undefined;\n}\nfunction mergeExtensions({ extend , ...theme }) {\n    return mergeWith(theme, extend, (themeValue, extensions)=>{\n        // The `extend` property is an array, so we need to check if it contains any functions\n        if (!isFunction(themeValue) && !extensions.some(isFunction)) {\n            return mergeWith({}, themeValue, ...extensions, mergeExtensionCustomizer);\n        }\n        return (resolveThemePath, utils)=>mergeWith({}, ...[\n                themeValue,\n                ...extensions\n            ].map((e)=>value(e, resolveThemePath, utils)), mergeExtensionCustomizer);\n    });\n}\n/**\n *\n * @param {string} key\n * @return {Iterable<string[] & {alpha: string | undefined}>}\n */ function* toPaths(key) {\n    let path = (0, _toPath.toPath)(key);\n    if (path.length === 0) {\n        return;\n    }\n    yield path;\n    if (Array.isArray(key)) {\n        return;\n    }\n    let pattern = /^(.*?)\\s*\\/\\s*([^/]+)$/;\n    let matches = key.match(pattern);\n    if (matches !== null) {\n        let [, prefix, alpha] = matches;\n        let newPath = (0, _toPath.toPath)(prefix);\n        newPath.alpha = alpha;\n        yield newPath;\n    }\n}\nfunction resolveFunctionKeys(object) {\n    // theme('colors.red.500 / 0.5') -> ['colors', 'red', '500 / 0', '5]\n    const resolvePath = (key, defaultValue)=>{\n        for (const path of toPaths(key)){\n            let index = 0;\n            let val = object;\n            while(val !== undefined && val !== null && index < path.length){\n                val = val[path[index++]];\n                let shouldResolveAsFn = isFunction(val) && (path.alpha === undefined || index <= path.length - 1);\n                val = shouldResolveAsFn ? val(resolvePath, configUtils) : val;\n            }\n            if (val !== undefined) {\n                if (path.alpha !== undefined) {\n                    let normalized = (0, _pluginUtils.parseColorFormat)(val);\n                    return (0, _withAlphaVariable.withAlphaValue)(normalized, path.alpha, (0, _toColorValue.default)(normalized));\n                }\n                if ((0, _isPlainObject.default)(val)) {\n                    return (0, _cloneDeep.cloneDeep)(val);\n                }\n                return val;\n            }\n        }\n        return defaultValue;\n    };\n    Object.assign(resolvePath, {\n        theme: resolvePath,\n        ...configUtils\n    });\n    return Object.keys(object).reduce((resolved, key)=>{\n        resolved[key] = isFunction(object[key]) ? object[key](resolvePath, configUtils) : object[key];\n        return resolved;\n    }, {});\n}\nfunction extractPluginConfigs(configs) {\n    let allConfigs = [];\n    configs.forEach((config)=>{\n        allConfigs = [\n            ...allConfigs,\n            config\n        ];\n        var _config_plugins;\n        const plugins = (_config_plugins = config === null || config === void 0 ? void 0 : config.plugins) !== null && _config_plugins !== void 0 ? _config_plugins : [];\n        if (plugins.length === 0) {\n            return;\n        }\n        plugins.forEach((plugin)=>{\n            if (plugin.__isOptionsFunction) {\n                plugin = plugin();\n            }\n            var _plugin_config;\n            allConfigs = [\n                ...allConfigs,\n                ...extractPluginConfigs([\n                    (_plugin_config = plugin === null || plugin === void 0 ? void 0 : plugin.config) !== null && _plugin_config !== void 0 ? _plugin_config : {}\n                ])\n            ];\n        });\n    });\n    return allConfigs;\n}\nfunction resolveCorePlugins(corePluginConfigs) {\n    const result = [\n        ...corePluginConfigs\n    ].reduceRight((resolved, corePluginConfig)=>{\n        if (isFunction(corePluginConfig)) {\n            return corePluginConfig({\n                corePlugins: resolved\n            });\n        }\n        return (0, _configurePlugins.default)(corePluginConfig, resolved);\n    }, _corePluginList.default);\n    return result;\n}\nfunction resolvePluginLists(pluginLists) {\n    const result = [\n        ...pluginLists\n    ].reduceRight((resolved, pluginList)=>{\n        return [\n            ...resolved,\n            ...pluginList\n        ];\n    }, []);\n    return result;\n}\nfunction resolveConfig(configs) {\n    let allConfigs = [\n        ...extractPluginConfigs(configs),\n        {\n            prefix: \"\",\n            important: false,\n            separator: \":\"\n        }\n    ];\n    var _t_theme, _c_plugins;\n    return (0, _normalizeConfig.normalizeConfig)((0, _defaults.defaults)({\n        theme: resolveFunctionKeys(mergeExtensions(mergeThemes(allConfigs.map((t)=>{\n            return (_t_theme = t === null || t === void 0 ? void 0 : t.theme) !== null && _t_theme !== void 0 ? _t_theme : {};\n        })))),\n        corePlugins: resolveCorePlugins(allConfigs.map((c)=>c.corePlugins)),\n        plugins: resolvePluginLists(configs.map((c)=>{\n            return (_c_plugins = c === null || c === void 0 ? void 0 : c.plugins) !== null && _c_plugins !== void 0 ? _c_plugins : [];\n        }))\n    }, ...allConfigs));\n}\n","module.exports = {\n  content: [],\n  presets: [],\n  darkMode: 'media', // or 'class'\n  theme: {\n    accentColor: ({ theme }) => ({\n      ...theme('colors'),\n      auto: 'auto',\n    }),\n    animation: {\n      none: 'none',\n      spin: 'spin 1s linear infinite',\n      ping: 'ping 1s cubic-bezier(0, 0, 0.2, 1) infinite',\n      pulse: 'pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite',\n      bounce: 'bounce 1s infinite',\n    },\n    aria: {\n      checked: 'checked=\"true\"',\n      disabled: 'disabled=\"true\"',\n      expanded: 'expanded=\"true\"',\n      hidden: 'hidden=\"true\"',\n      pressed: 'pressed=\"true\"',\n      readonly: 'readonly=\"true\"',\n      required: 'required=\"true\"',\n      selected: 'selected=\"true\"',\n    },\n    aspectRatio: {\n      auto: 'auto',\n      square: '1 / 1',\n      video: '16 / 9',\n    },\n    backdropBlur: ({ theme }) => theme('blur'),\n    backdropBrightness: ({ theme }) => theme('brightness'),\n    backdropContrast: ({ theme }) => theme('contrast'),\n    backdropGrayscale: ({ theme }) => theme('grayscale'),\n    backdropHueRotate: ({ theme }) => theme('hueRotate'),\n    backdropInvert: ({ theme }) => theme('invert'),\n    backdropOpacity: ({ theme }) => theme('opacity'),\n    backdropSaturate: ({ theme }) => theme('saturate'),\n    backdropSepia: ({ theme }) => theme('sepia'),\n    backgroundColor: ({ theme }) => theme('colors'),\n    backgroundImage: {\n      none: 'none',\n      'gradient-to-t': 'linear-gradient(to top, var(--tw-gradient-stops))',\n      'gradient-to-tr': 'linear-gradient(to top right, var(--tw-gradient-stops))',\n      'gradient-to-r': 'linear-gradient(to right, var(--tw-gradient-stops))',\n      'gradient-to-br': 'linear-gradient(to bottom right, var(--tw-gradient-stops))',\n      'gradient-to-b': 'linear-gradient(to bottom, var(--tw-gradient-stops))',\n      'gradient-to-bl': 'linear-gradient(to bottom left, var(--tw-gradient-stops))',\n      'gradient-to-l': 'linear-gradient(to left, var(--tw-gradient-stops))',\n      'gradient-to-tl': 'linear-gradient(to top left, var(--tw-gradient-stops))',\n    },\n    backgroundOpacity: ({ theme }) => theme('opacity'),\n    backgroundPosition: {\n      bottom: 'bottom',\n      center: 'center',\n      left: 'left',\n      'left-bottom': 'left bottom',\n      'left-top': 'left top',\n      right: 'right',\n      'right-bottom': 'right bottom',\n      'right-top': 'right top',\n      top: 'top',\n    },\n    backgroundSize: {\n      auto: 'auto',\n      cover: 'cover',\n      contain: 'contain',\n    },\n    blur: {\n      0: '0',\n      none: '0',\n      sm: '4px',\n      DEFAULT: '8px',\n      md: '12px',\n      lg: '16px',\n      xl: '24px',\n      '2xl': '40px',\n      '3xl': '64px',\n    },\n    borderColor: ({ theme }) => ({\n      ...theme('colors'),\n      DEFAULT: theme('colors.gray.200', 'currentColor'),\n    }),\n    borderOpacity: ({ theme }) => theme('opacity'),\n    borderRadius: {\n      none: '0px',\n      sm: '0.125rem',\n      DEFAULT: '0.25rem',\n      md: '0.375rem',\n      lg: '0.5rem',\n      xl: '0.75rem',\n      '2xl': '1rem',\n      '3xl': '1.5rem',\n      full: '9999px',\n    },\n    borderSpacing: ({ theme }) => ({\n      ...theme('spacing'),\n    }),\n    borderWidth: {\n      DEFAULT: '1px',\n      0: '0px',\n      2: '2px',\n      4: '4px',\n      8: '8px',\n    },\n    boxShadow: {\n      sm: '0 1px 2px 0 rgb(0 0 0 / 0.05)',\n      DEFAULT: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',\n      md: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',\n      lg: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',\n      xl: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n      '2xl': '0 25px 50px -12px rgb(0 0 0 / 0.25)',\n      inner: 'inset 0 2px 4px 0 rgb(0 0 0 / 0.05)',\n      none: 'none',\n    },\n    boxShadowColor: ({ theme }) => theme('colors'),\n    brightness: {\n      0: '0',\n      50: '.5',\n      75: '.75',\n      90: '.9',\n      95: '.95',\n      100: '1',\n      105: '1.05',\n      110: '1.1',\n      125: '1.25',\n      150: '1.5',\n      200: '2',\n    },\n    caretColor: ({ theme }) => theme('colors'),\n    colors: ({ colors }) => ({\n      inherit: colors.inherit,\n      current: colors.current,\n      transparent: colors.transparent,\n      black: colors.black,\n      white: colors.white,\n      slate: colors.slate,\n      gray: colors.gray,\n      zinc: colors.zinc,\n      neutral: colors.neutral,\n      stone: colors.stone,\n      red: colors.red,\n      orange: colors.orange,\n      amber: colors.amber,\n      yellow: colors.yellow,\n      lime: colors.lime,\n      green: colors.green,\n      emerald: colors.emerald,\n      teal: colors.teal,\n      cyan: colors.cyan,\n      sky: colors.sky,\n      blue: colors.blue,\n      indigo: colors.indigo,\n      violet: colors.violet,\n      purple: colors.purple,\n      fuchsia: colors.fuchsia,\n      pink: colors.pink,\n      rose: colors.rose,\n    }),\n    columns: {\n      auto: 'auto',\n      1: '1',\n      2: '2',\n      3: '3',\n      4: '4',\n      5: '5',\n      6: '6',\n      7: '7',\n      8: '8',\n      9: '9',\n      10: '10',\n      11: '11',\n      12: '12',\n      '3xs': '16rem',\n      '2xs': '18rem',\n      xs: '20rem',\n      sm: '24rem',\n      md: '28rem',\n      lg: '32rem',\n      xl: '36rem',\n      '2xl': '42rem',\n      '3xl': '48rem',\n      '4xl': '56rem',\n      '5xl': '64rem',\n      '6xl': '72rem',\n      '7xl': '80rem',\n    },\n    container: {},\n    content: {\n      none: 'none',\n    },\n    contrast: {\n      0: '0',\n      50: '.5',\n      75: '.75',\n      100: '1',\n      125: '1.25',\n      150: '1.5',\n      200: '2',\n    },\n    cursor: {\n      auto: 'auto',\n      default: 'default',\n      pointer: 'pointer',\n      wait: 'wait',\n      text: 'text',\n      move: 'move',\n      help: 'help',\n      'not-allowed': 'not-allowed',\n      none: 'none',\n      'context-menu': 'context-menu',\n      progress: 'progress',\n      cell: 'cell',\n      crosshair: 'crosshair',\n      'vertical-text': 'vertical-text',\n      alias: 'alias',\n      copy: 'copy',\n      'no-drop': 'no-drop',\n      grab: 'grab',\n      grabbing: 'grabbing',\n      'all-scroll': 'all-scroll',\n      'col-resize': 'col-resize',\n      'row-resize': 'row-resize',\n      'n-resize': 'n-resize',\n      'e-resize': 'e-resize',\n      's-resize': 's-resize',\n      'w-resize': 'w-resize',\n      'ne-resize': 'ne-resize',\n      'nw-resize': 'nw-resize',\n      'se-resize': 'se-resize',\n      'sw-resize': 'sw-resize',\n      'ew-resize': 'ew-resize',\n      'ns-resize': 'ns-resize',\n      'nesw-resize': 'nesw-resize',\n      'nwse-resize': 'nwse-resize',\n      'zoom-in': 'zoom-in',\n      'zoom-out': 'zoom-out',\n    },\n    divideColor: ({ theme }) => theme('borderColor'),\n    divideOpacity: ({ theme }) => theme('borderOpacity'),\n    divideWidth: ({ theme }) => theme('borderWidth'),\n    dropShadow: {\n      sm: '0 1px 1px rgb(0 0 0 / 0.05)',\n      DEFAULT: ['0 1px 2px rgb(0 0 0 / 0.1)', '0 1px 1px rgb(0 0 0 / 0.06)'],\n      md: ['0 4px 3px rgb(0 0 0 / 0.07)', '0 2px 2px rgb(0 0 0 / 0.06)'],\n      lg: ['0 10px 8px rgb(0 0 0 / 0.04)', '0 4px 3px rgb(0 0 0 / 0.1)'],\n      xl: ['0 20px 13px rgb(0 0 0 / 0.03)', '0 8px 5px rgb(0 0 0 / 0.08)'],\n      '2xl': '0 25px 25px rgb(0 0 0 / 0.15)',\n      none: '0 0 #0000',\n    },\n    fill: ({ theme }) => ({\n      none: 'none',\n      ...theme('colors'),\n    }),\n    flex: {\n      1: '1 1 0%',\n      auto: '1 1 auto',\n      initial: '0 1 auto',\n      none: 'none',\n    },\n    flexBasis: ({ theme }) => ({\n      auto: 'auto',\n      ...theme('spacing'),\n      '1/2': '50%',\n      '1/3': '33.333333%',\n      '2/3': '66.666667%',\n      '1/4': '25%',\n      '2/4': '50%',\n      '3/4': '75%',\n      '1/5': '20%',\n      '2/5': '40%',\n      '3/5': '60%',\n      '4/5': '80%',\n      '1/6': '16.666667%',\n      '2/6': '33.333333%',\n      '3/6': '50%',\n      '4/6': '66.666667%',\n      '5/6': '83.333333%',\n      '1/12': '8.333333%',\n      '2/12': '16.666667%',\n      '3/12': '25%',\n      '4/12': '33.333333%',\n      '5/12': '41.666667%',\n      '6/12': '50%',\n      '7/12': '58.333333%',\n      '8/12': '66.666667%',\n      '9/12': '75%',\n      '10/12': '83.333333%',\n      '11/12': '91.666667%',\n      full: '100%',\n    }),\n    flexGrow: {\n      0: '0',\n      DEFAULT: '1',\n    },\n    flexShrink: {\n      0: '0',\n      DEFAULT: '1',\n    },\n    fontFamily: {\n      sans: [\n        'ui-sans-serif',\n        'system-ui',\n        '-apple-system',\n        'BlinkMacSystemFont',\n        '\"Segoe UI\"',\n        'Roboto',\n        '\"Helvetica Neue\"',\n        'Arial',\n        '\"Noto Sans\"',\n        'sans-serif',\n        '\"Apple Color Emoji\"',\n        '\"Segoe UI Emoji\"',\n        '\"Segoe UI Symbol\"',\n        '\"Noto Color Emoji\"',\n      ],\n      serif: ['ui-serif', 'Georgia', 'Cambria', '\"Times New Roman\"', 'Times', 'serif'],\n      mono: [\n        'ui-monospace',\n        'SFMono-Regular',\n        'Menlo',\n        'Monaco',\n        'Consolas',\n        '\"Liberation Mono\"',\n        '\"Courier New\"',\n        'monospace',\n      ],\n    },\n    fontSize: {\n      xs: ['0.75rem', { lineHeight: '1rem' }],\n      sm: ['0.875rem', { lineHeight: '1.25rem' }],\n      base: ['1rem', { lineHeight: '1.5rem' }],\n      lg: ['1.125rem', { lineHeight: '1.75rem' }],\n      xl: ['1.25rem', { lineHeight: '1.75rem' }],\n      '2xl': ['1.5rem', { lineHeight: '2rem' }],\n      '3xl': ['1.875rem', { lineHeight: '2.25rem' }],\n      '4xl': ['2.25rem', { lineHeight: '2.5rem' }],\n      '5xl': ['3rem', { lineHeight: '1' }],\n      '6xl': ['3.75rem', { lineHeight: '1' }],\n      '7xl': ['4.5rem', { lineHeight: '1' }],\n      '8xl': ['6rem', { lineHeight: '1' }],\n      '9xl': ['8rem', { lineHeight: '1' }],\n    },\n    fontWeight: {\n      thin: '100',\n      extralight: '200',\n      light: '300',\n      normal: '400',\n      medium: '500',\n      semibold: '600',\n      bold: '700',\n      extrabold: '800',\n      black: '900',\n    },\n    gap: ({ theme }) => theme('spacing'),\n    gradientColorStops: ({ theme }) => theme('colors'),\n    gradientColorStopPositions: {\n      '0%': '0%',\n      '5%': '5%',\n      '10%': '10%',\n      '15%': '15%',\n      '20%': '20%',\n      '25%': '25%',\n      '30%': '30%',\n      '35%': '35%',\n      '40%': '40%',\n      '45%': '45%',\n      '50%': '50%',\n      '55%': '55%',\n      '60%': '60%',\n      '65%': '65%',\n      '70%': '70%',\n      '75%': '75%',\n      '80%': '80%',\n      '85%': '85%',\n      '90%': '90%',\n      '95%': '95%',\n      '100%': '100%',\n    },\n    grayscale: {\n      0: '0',\n      DEFAULT: '100%',\n    },\n    gridAutoColumns: {\n      auto: 'auto',\n      min: 'min-content',\n      max: 'max-content',\n      fr: 'minmax(0, 1fr)',\n    },\n    gridAutoRows: {\n      auto: 'auto',\n      min: 'min-content',\n      max: 'max-content',\n      fr: 'minmax(0, 1fr)',\n    },\n    gridColumn: {\n      auto: 'auto',\n      'span-1': 'span 1 / span 1',\n      'span-2': 'span 2 / span 2',\n      'span-3': 'span 3 / span 3',\n      'span-4': 'span 4 / span 4',\n      'span-5': 'span 5 / span 5',\n      'span-6': 'span 6 / span 6',\n      'span-7': 'span 7 / span 7',\n      'span-8': 'span 8 / span 8',\n      'span-9': 'span 9 / span 9',\n      'span-10': 'span 10 / span 10',\n      'span-11': 'span 11 / span 11',\n      'span-12': 'span 12 / span 12',\n      'span-full': '1 / -1',\n    },\n    gridColumnEnd: {\n      auto: 'auto',\n      1: '1',\n      2: '2',\n      3: '3',\n      4: '4',\n      5: '5',\n      6: '6',\n      7: '7',\n      8: '8',\n      9: '9',\n      10: '10',\n      11: '11',\n      12: '12',\n      13: '13',\n    },\n    gridColumnStart: {\n      auto: 'auto',\n      1: '1',\n      2: '2',\n      3: '3',\n      4: '4',\n      5: '5',\n      6: '6',\n      7: '7',\n      8: '8',\n      9: '9',\n      10: '10',\n      11: '11',\n      12: '12',\n      13: '13',\n    },\n    gridRow: {\n      auto: 'auto',\n      'span-1': 'span 1 / span 1',\n      'span-2': 'span 2 / span 2',\n      'span-3': 'span 3 / span 3',\n      'span-4': 'span 4 / span 4',\n      'span-5': 'span 5 / span 5',\n      'span-6': 'span 6 / span 6',\n      'span-full': '1 / -1',\n    },\n    gridRowEnd: {\n      auto: 'auto',\n      1: '1',\n      2: '2',\n      3: '3',\n      4: '4',\n      5: '5',\n      6: '6',\n      7: '7',\n    },\n    gridRowStart: {\n      auto: 'auto',\n      1: '1',\n      2: '2',\n      3: '3',\n      4: '4',\n      5: '5',\n      6: '6',\n      7: '7',\n    },\n    gridTemplateColumns: {\n      none: 'none',\n      1: 'repeat(1, minmax(0, 1fr))',\n      2: 'repeat(2, minmax(0, 1fr))',\n      3: 'repeat(3, minmax(0, 1fr))',\n      4: 'repeat(4, minmax(0, 1fr))',\n      5: 'repeat(5, minmax(0, 1fr))',\n      6: 'repeat(6, minmax(0, 1fr))',\n      7: 'repeat(7, minmax(0, 1fr))',\n      8: 'repeat(8, minmax(0, 1fr))',\n      9: 'repeat(9, minmax(0, 1fr))',\n      10: 'repeat(10, minmax(0, 1fr))',\n      11: 'repeat(11, minmax(0, 1fr))',\n      12: 'repeat(12, minmax(0, 1fr))',\n    },\n    gridTemplateRows: {\n      none: 'none',\n      1: 'repeat(1, minmax(0, 1fr))',\n      2: 'repeat(2, minmax(0, 1fr))',\n      3: 'repeat(3, minmax(0, 1fr))',\n      4: 'repeat(4, minmax(0, 1fr))',\n      5: 'repeat(5, minmax(0, 1fr))',\n      6: 'repeat(6, minmax(0, 1fr))',\n    },\n    height: ({ theme }) => ({\n      auto: 'auto',\n      ...theme('spacing'),\n      '1/2': '50%',\n      '1/3': '33.333333%',\n      '2/3': '66.666667%',\n      '1/4': '25%',\n      '2/4': '50%',\n      '3/4': '75%',\n      '1/5': '20%',\n      '2/5': '40%',\n      '3/5': '60%',\n      '4/5': '80%',\n      '1/6': '16.666667%',\n      '2/6': '33.333333%',\n      '3/6': '50%',\n      '4/6': '66.666667%',\n      '5/6': '83.333333%',\n      full: '100%',\n      screen: '100vh',\n      min: 'min-content',\n      max: 'max-content',\n      fit: 'fit-content',\n    }),\n    hueRotate: {\n      0: '0deg',\n      15: '15deg',\n      30: '30deg',\n      60: '60deg',\n      90: '90deg',\n      180: '180deg',\n    },\n    inset: ({ theme }) => ({\n      auto: 'auto',\n      ...theme('spacing'),\n      '1/2': '50%',\n      '1/3': '33.333333%',\n      '2/3': '66.666667%',\n      '1/4': '25%',\n      '2/4': '50%',\n      '3/4': '75%',\n      full: '100%',\n    }),\n    invert: {\n      0: '0',\n      DEFAULT: '100%',\n    },\n    keyframes: {\n      spin: {\n        to: {\n          transform: 'rotate(360deg)',\n        },\n      },\n      ping: {\n        '75%, 100%': {\n          transform: 'scale(2)',\n          opacity: '0',\n        },\n      },\n      pulse: {\n        '50%': {\n          opacity: '.5',\n        },\n      },\n      bounce: {\n        '0%, 100%': {\n          transform: 'translateY(-25%)',\n          animationTimingFunction: 'cubic-bezier(0.8,0,1,1)',\n        },\n        '50%': {\n          transform: 'none',\n          animationTimingFunction: 'cubic-bezier(0,0,0.2,1)',\n        },\n      },\n    },\n    letterSpacing: {\n      tighter: '-0.05em',\n      tight: '-0.025em',\n      normal: '0em',\n      wide: '0.025em',\n      wider: '0.05em',\n      widest: '0.1em',\n    },\n    lineHeight: {\n      none: '1',\n      tight: '1.25',\n      snug: '1.375',\n      normal: '1.5',\n      relaxed: '1.625',\n      loose: '2',\n      3: '.75rem',\n      4: '1rem',\n      5: '1.25rem',\n      6: '1.5rem',\n      7: '1.75rem',\n      8: '2rem',\n      9: '2.25rem',\n      10: '2.5rem',\n    },\n    listStyleType: {\n      none: 'none',\n      disc: 'disc',\n      decimal: 'decimal',\n    },\n    listStyleImage: {\n      none: 'none',\n    },\n    margin: ({ theme }) => ({\n      auto: 'auto',\n      ...theme('spacing'),\n    }),\n    lineClamp: {\n      1: '1',\n      2: '2',\n      3: '3',\n      4: '4',\n      5: '5',\n      6: '6',\n    },\n    maxHeight: ({ theme }) => ({\n      ...theme('spacing'),\n      none: 'none',\n      full: '100%',\n      screen: '100vh',\n      min: 'min-content',\n      max: 'max-content',\n      fit: 'fit-content',\n    }),\n    maxWidth: ({ theme, breakpoints }) => ({\n      none: 'none',\n      0: '0rem',\n      xs: '20rem',\n      sm: '24rem',\n      md: '28rem',\n      lg: '32rem',\n      xl: '36rem',\n      '2xl': '42rem',\n      '3xl': '48rem',\n      '4xl': '56rem',\n      '5xl': '64rem',\n      '6xl': '72rem',\n      '7xl': '80rem',\n      full: '100%',\n      min: 'min-content',\n      max: 'max-content',\n      fit: 'fit-content',\n      prose: '65ch',\n      ...breakpoints(theme('screens')),\n    }),\n    minHeight: {\n      0: '0px',\n      full: '100%',\n      screen: '100vh',\n      min: 'min-content',\n      max: 'max-content',\n      fit: 'fit-content',\n    },\n    minWidth: {\n      0: '0px',\n      full: '100%',\n      min: 'min-content',\n      max: 'max-content',\n      fit: 'fit-content',\n    },\n    objectPosition: {\n      bottom: 'bottom',\n      center: 'center',\n      left: 'left',\n      'left-bottom': 'left bottom',\n      'left-top': 'left top',\n      right: 'right',\n      'right-bottom': 'right bottom',\n      'right-top': 'right top',\n      top: 'top',\n    },\n    opacity: {\n      0: '0',\n      5: '0.05',\n      10: '0.1',\n      20: '0.2',\n      25: '0.25',\n      30: '0.3',\n      40: '0.4',\n      50: '0.5',\n      60: '0.6',\n      70: '0.7',\n      75: '0.75',\n      80: '0.8',\n      90: '0.9',\n      95: '0.95',\n      100: '1',\n    },\n    order: {\n      first: '-9999',\n      last: '9999',\n      none: '0',\n      1: '1',\n      2: '2',\n      3: '3',\n      4: '4',\n      5: '5',\n      6: '6',\n      7: '7',\n      8: '8',\n      9: '9',\n      10: '10',\n      11: '11',\n      12: '12',\n    },\n    outlineColor: ({ theme }) => theme('colors'),\n    outlineOffset: {\n      0: '0px',\n      1: '1px',\n      2: '2px',\n      4: '4px',\n      8: '8px',\n    },\n    outlineWidth: {\n      0: '0px',\n      1: '1px',\n      2: '2px',\n      4: '4px',\n      8: '8px',\n    },\n    padding: ({ theme }) => theme('spacing'),\n    placeholderColor: ({ theme }) => theme('colors'),\n    placeholderOpacity: ({ theme }) => theme('opacity'),\n    ringColor: ({ theme }) => ({\n      DEFAULT: theme('colors.blue.500', '#3b82f6'),\n      ...theme('colors'),\n    }),\n    ringOffsetColor: ({ theme }) => theme('colors'),\n    ringOffsetWidth: {\n      0: '0px',\n      1: '1px',\n      2: '2px',\n      4: '4px',\n      8: '8px',\n    },\n    ringOpacity: ({ theme }) => ({\n      DEFAULT: '0.5',\n      ...theme('opacity'),\n    }),\n    ringWidth: {\n      DEFAULT: '3px',\n      0: '0px',\n      1: '1px',\n      2: '2px',\n      4: '4px',\n      8: '8px',\n    },\n    rotate: {\n      0: '0deg',\n      1: '1deg',\n      2: '2deg',\n      3: '3deg',\n      6: '6deg',\n      12: '12deg',\n      45: '45deg',\n      90: '90deg',\n      180: '180deg',\n    },\n    saturate: {\n      0: '0',\n      50: '.5',\n      100: '1',\n      150: '1.5',\n      200: '2',\n    },\n    scale: {\n      0: '0',\n      50: '.5',\n      75: '.75',\n      90: '.9',\n      95: '.95',\n      100: '1',\n      105: '1.05',\n      110: '1.1',\n      125: '1.25',\n      150: '1.5',\n    },\n    screens: {\n      sm: '640px',\n      md: '768px',\n      lg: '1024px',\n      xl: '1280px',\n      '2xl': '1536px',\n    },\n    scrollMargin: ({ theme }) => ({\n      ...theme('spacing'),\n    }),\n    scrollPadding: ({ theme }) => theme('spacing'),\n    sepia: {\n      0: '0',\n      DEFAULT: '100%',\n    },\n    skew: {\n      0: '0deg',\n      1: '1deg',\n      2: '2deg',\n      3: '3deg',\n      6: '6deg',\n      12: '12deg',\n    },\n    space: ({ theme }) => ({\n      ...theme('spacing'),\n    }),\n    spacing: {\n      px: '1px',\n      0: '0px',\n      0.5: '0.125rem',\n      1: '0.25rem',\n      1.5: '0.375rem',\n      2: '0.5rem',\n      2.5: '0.625rem',\n      3: '0.75rem',\n      3.5: '0.875rem',\n      4: '1rem',\n      5: '1.25rem',\n      6: '1.5rem',\n      7: '1.75rem',\n      8: '2rem',\n      9: '2.25rem',\n      10: '2.5rem',\n      11: '2.75rem',\n      12: '3rem',\n      14: '3.5rem',\n      16: '4rem',\n      20: '5rem',\n      24: '6rem',\n      28: '7rem',\n      32: '8rem',\n      36: '9rem',\n      40: '10rem',\n      44: '11rem',\n      48: '12rem',\n      52: '13rem',\n      56: '14rem',\n      60: '15rem',\n      64: '16rem',\n      72: '18rem',\n      80: '20rem',\n      96: '24rem',\n    },\n    stroke: ({ theme }) => ({\n      none: 'none',\n      ...theme('colors'),\n    }),\n    strokeWidth: {\n      0: '0',\n      1: '1',\n      2: '2',\n    },\n    supports: {},\n    data: {},\n    textColor: ({ theme }) => theme('colors'),\n    textDecorationColor: ({ theme }) => theme('colors'),\n    textDecorationThickness: {\n      auto: 'auto',\n      'from-font': 'from-font',\n      0: '0px',\n      1: '1px',\n      2: '2px',\n      4: '4px',\n      8: '8px',\n    },\n    textIndent: ({ theme }) => ({\n      ...theme('spacing'),\n    }),\n    textOpacity: ({ theme }) => theme('opacity'),\n    textUnderlineOffset: {\n      auto: 'auto',\n      0: '0px',\n      1: '1px',\n      2: '2px',\n      4: '4px',\n      8: '8px',\n    },\n    transformOrigin: {\n      center: 'center',\n      top: 'top',\n      'top-right': 'top right',\n      right: 'right',\n      'bottom-right': 'bottom right',\n      bottom: 'bottom',\n      'bottom-left': 'bottom left',\n      left: 'left',\n      'top-left': 'top left',\n    },\n    transitionDelay: {\n      0: '0s',\n      75: '75ms',\n      100: '100ms',\n      150: '150ms',\n      200: '200ms',\n      300: '300ms',\n      500: '500ms',\n      700: '700ms',\n      1000: '1000ms',\n    },\n    transitionDuration: {\n      DEFAULT: '150ms',\n      0: '0s',\n      75: '75ms',\n      100: '100ms',\n      150: '150ms',\n      200: '200ms',\n      300: '300ms',\n      500: '500ms',\n      700: '700ms',\n      1000: '1000ms',\n    },\n    transitionProperty: {\n      none: 'none',\n      all: 'all',\n      DEFAULT:\n        'color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter',\n      colors: 'color, background-color, border-color, text-decoration-color, fill, stroke',\n      opacity: 'opacity',\n      shadow: 'box-shadow',\n      transform: 'transform',\n    },\n    transitionTimingFunction: {\n      DEFAULT: 'cubic-bezier(0.4, 0, 0.2, 1)',\n      linear: 'linear',\n      in: 'cubic-bezier(0.4, 0, 1, 1)',\n      out: 'cubic-bezier(0, 0, 0.2, 1)',\n      'in-out': 'cubic-bezier(0.4, 0, 0.2, 1)',\n    },\n    translate: ({ theme }) => ({\n      ...theme('spacing'),\n      '1/2': '50%',\n      '1/3': '33.333333%',\n      '2/3': '66.666667%',\n      '1/4': '25%',\n      '2/4': '50%',\n      '3/4': '75%',\n      full: '100%',\n    }),\n    width: ({ theme }) => ({\n      auto: 'auto',\n      ...theme('spacing'),\n      '1/2': '50%',\n      '1/3': '33.333333%',\n      '2/3': '66.666667%',\n      '1/4': '25%',\n      '2/4': '50%',\n      '3/4': '75%',\n      '1/5': '20%',\n      '2/5': '40%',\n      '3/5': '60%',\n      '4/5': '80%',\n      '1/6': '16.666667%',\n      '2/6': '33.333333%',\n      '3/6': '50%',\n      '4/6': '66.666667%',\n      '5/6': '83.333333%',\n      '1/12': '8.333333%',\n      '2/12': '16.666667%',\n      '3/12': '25%',\n      '4/12': '33.333333%',\n      '5/12': '41.666667%',\n      '6/12': '50%',\n      '7/12': '58.333333%',\n      '8/12': '66.666667%',\n      '9/12': '75%',\n      '10/12': '83.333333%',\n      '11/12': '91.666667%',\n      full: '100%',\n      screen: '100vw',\n      min: 'min-content',\n      max: 'max-content',\n      fit: 'fit-content',\n    }),\n    willChange: {\n      auto: 'auto',\n      scroll: 'scroll-position',\n      contents: 'contents',\n      transform: 'transform',\n    },\n    zIndex: {\n      auto: 'auto',\n      0: '0',\n      10: '10',\n      20: '20',\n      30: '30',\n      40: '40',\n      50: '50',\n    },\n  },\n  plugins: [],\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"default\", {\n    enumerable: true,\n    get: ()=>getAllConfigs\n});\nconst _configFullJs = /*#__PURE__*/ _interopRequireDefault(require(\"../../stubs/config.full.js\"));\nconst _featureFlags = require(\"../featureFlags\");\nfunction _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\nfunction getAllConfigs(config) {\n    var _config_presets;\n    const configs = ((_config_presets = config === null || config === void 0 ? void 0 : config.presets) !== null && _config_presets !== void 0 ? _config_presets : [\n        _configFullJs.default\n    ]).slice().reverse().flatMap((preset)=>getAllConfigs(typeof preset === \"function\" ? preset() : preset));\n    const features = {\n        // Add experimental configs here...\n        respectDefaultRingColorOpacity: {\n            theme: {\n                ringColor: ({ theme  })=>({\n                        DEFAULT: \"#3b82f67f\",\n                        ...theme(\"colors\")\n                    })\n            }\n        },\n        disableColorOpacityUtilitiesByDefault: {\n            corePlugins: {\n                backgroundOpacity: false,\n                borderOpacity: false,\n                divideOpacity: false,\n                placeholderOpacity: false,\n                ringOpacity: false,\n                textOpacity: false\n            }\n        }\n    };\n    const experimentals = Object.keys(features).filter((feature)=>(0, _featureFlags.flagEnabled)(config, feature)).map((feature)=>features[feature]);\n    return [\n        config,\n        ...experimentals,\n        ...configs\n    ];\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"default\", {\n    enumerable: true,\n    get: ()=>resolveConfig\n});\nconst _resolveConfig = /*#__PURE__*/ _interopRequireDefault(require(\"../util/resolveConfig\"));\nconst _getAllConfigs = /*#__PURE__*/ _interopRequireDefault(require(\"../util/getAllConfigs\"));\nfunction _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\nfunction resolveConfig(...configs) {\n    let [, ...defaultConfigs] = (0, _getAllConfigs.default)(configs[0]);\n    return (0, _resolveConfig.default)([\n        ...configs,\n        ...defaultConfigs\n    ]);\n}\n","let resolveConfig = require('./lib/public/resolve-config')\nmodule.exports = (resolveConfig.__esModule ? resolveConfig : { default: resolveConfig }).default\n","export type {\r\n  FontOptions as Font,\r\n  Weight as FontWeight,\r\n  Style as FontStyle,\r\n} from './font.js'\r\nexport type { Locale } from './language.js'\r\n\r\nexport * from './satori.js'\r\nexport { default as satori } from './satori.js'\r\n","import type { ReactNode } from 'react'\r\nimport type { TwConfig } from 'twrnc'\r\n\r\nimport getYoga, { init } from './yoga/index.js'\r\nimport layout from './layout.js'\r\nimport FontLoader, { FontOptions } from './font.js'\r\nimport svg from './builder/svg.js'\r\nimport { segment } from './utils.js'\r\nimport { detectLanguageCode, LangCode, Locale } from './language.js'\r\nimport getTw from './handler/tailwind.js'\r\n\r\n// We don't need to initialize the opentype instances every time.\r\nconst fontCache = new WeakMap()\r\n\r\nexport type SatoriOptions = (\r\n  | {\r\n      width: number\r\n      height: number\r\n    }\r\n  | {\r\n      width: number\r\n    }\r\n  | {\r\n      height: number\r\n    }\r\n) & {\r\n  fonts: FontOptions[]\r\n  embedFont?: boolean\r\n  debug?: boolean\r\n  graphemeImages?: Record<string, string>\r\n  loadAdditionalAsset?: (\r\n    languageCode: string,\r\n    segment: string\r\n  ) => Promise<FontOptions | string | undefined>\r\n  tailwindConfig?: TwConfig\r\n}\r\n\r\nexport { init }\r\n\r\nexport default async function satori(\r\n  element: ReactNode,\r\n  options: SatoriOptions\r\n): Promise<string> {\r\n  const Yoga = await getYoga()\r\n  if (!Yoga || !Yoga.Node) {\r\n    throw new Error(\r\n      'Satori is not initialized: expect `yoga` to be loaded, got ' + Yoga\r\n    )\r\n  }\r\n  options.fonts = options.fonts || []\r\n\r\n  let font: FontLoader\r\n  if (fontCache.has(options.fonts)) {\r\n    font = fontCache.get(options.fonts)\r\n  } else {\r\n    fontCache.set(options.fonts, (font = new FontLoader(options.fonts)))\r\n  }\r\n\r\n  const definedWidth = 'width' in options ? options.width : undefined\r\n  const definedHeight = 'height' in options ? options.height : undefined\r\n\r\n  const root = Yoga.Node.create()\r\n  if (definedWidth) root.setWidth(definedWidth)\r\n  if (definedHeight) root.setHeight(definedHeight)\r\n  root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW)\r\n  root.setFlexWrap(Yoga.WRAP_WRAP)\r\n  root.setAlignContent(Yoga.ALIGN_AUTO)\r\n  root.setAlignItems(Yoga.ALIGN_FLEX_START)\r\n  root.setJustifyContent(Yoga.JUSTIFY_FLEX_START)\r\n  root.setOverflow(Yoga.OVERFLOW_HIDDEN)\r\n\r\n  const graphemeImages = { ...options.graphemeImages }\r\n  // Some Chinese characters have different glyphs in Chinese and\r\n  // Japanese, but their Unicode is the same. If the user needs to display\r\n  // the Chinese and Japanese characters simultaneously correctly, the user\r\n  // needs to download the Chinese and Japanese fonts, respectively.\r\n  // Assuming that the user has downloaded the corresponding Japanese font,\r\n  // to let the program realize that the font has not been downloaded in Chinese,\r\n  // we need to prohibit Japanese as the fallback when executing `engine.has`.\r\n  //\r\n  // This causes a problem. Consider a scenario where we need to display Chinese\r\n  // correctly under tags with `lang=\"ja\"` set. `engine.has` will repeatedly treat\r\n  // the Chinese as missing font because we have removed the Chinese as a fallback.\r\n  // To address this situation, we may need to add `processedWordsMissingFont`\r\n  const processedWordsMissingFonts = new Set()\r\n\r\n  const handler = layout(element, {\r\n    id: 'id',\r\n    parentStyle: {},\r\n    inheritedStyle: {\r\n      fontSize: 16,\r\n      fontWeight: 'normal',\r\n      fontFamily: 'serif',\r\n      fontStyle: 'normal',\r\n      lineHeight: 1.2,\r\n      color: 'black',\r\n      opacity: 1,\r\n      whiteSpace: 'normal',\r\n\r\n      // Special style properties:\r\n      _viewportWidth: definedWidth,\r\n      _viewportHeight: definedHeight,\r\n    },\r\n    parent: root,\r\n    font,\r\n    embedFont: options.embedFont,\r\n    debug: options.debug,\r\n    graphemeImages,\r\n    canLoadAdditionalAssets: !!options.loadAdditionalAsset,\r\n    getTwStyles: (tw, style) => {\r\n      const twToStyles = getTw({\r\n        width: definedWidth,\r\n        height: definedHeight,\r\n        config: options.tailwindConfig,\r\n      })\r\n      const twStyles = { ...twToStyles([tw] as any) }\r\n      if (typeof twStyles.lineHeight === 'number') {\r\n        twStyles.lineHeight =\r\n          twStyles.lineHeight / (+twStyles.fontSize || style.fontSize || 16)\r\n      }\r\n      if (twStyles.shadowColor && twStyles.boxShadow) {\r\n        twStyles.boxShadow = (twStyles.boxShadow as string).replace(\r\n          /rgba?\\([^)]+\\)/,\r\n          twStyles.shadowColor as string\r\n        )\r\n      }\r\n      return twStyles\r\n    },\r\n  })\r\n\r\n  const segmentsMissingFont = (await handler.next()).value as {\r\n    word: string\r\n    locale?: Locale\r\n  }[]\r\n\r\n  if (options.loadAdditionalAsset) {\r\n    if (segmentsMissingFont.length) {\r\n      const languageCodes = convertToLanguageCodes(segmentsMissingFont)\r\n      const fonts: FontOptions[] = []\r\n      const images: Record<string, string> = {}\r\n\r\n      await Promise.all(\r\n        Object.entries(languageCodes).flatMap(([code, segments]) =>\r\n          segments.map((_segment) => {\r\n            const key = `${code}_${_segment}`\r\n            if (processedWordsMissingFonts.has(key)) {\r\n              return null\r\n            }\r\n            processedWordsMissingFonts.add(key)\r\n            return options.loadAdditionalAsset(code, _segment).then((asset) => {\r\n              if (typeof asset === 'string') {\r\n                images[_segment] = asset\r\n              } else if (asset) {\r\n                fonts.push(asset)\r\n              }\r\n            })\r\n          })\r\n        )\r\n      )\r\n\r\n      // Directly mutate the font provider and the grapheme map.\r\n      font.addFonts(fonts)\r\n      Object.assign(graphemeImages, images)\r\n    }\r\n  }\r\n\r\n  await handler.next()\r\n  root.calculateLayout(definedWidth, definedHeight, Yoga.DIRECTION_LTR)\r\n\r\n  const content = (await handler.next([0, 0])).value as string\r\n\r\n  const computedWidth = root.getComputedWidth()\r\n  const computedHeight = root.getComputedHeight()\r\n\r\n  root.freeRecursive()\r\n\r\n  return svg({ width: computedWidth, height: computedHeight, content })\r\n}\r\n\r\nfunction convertToLanguageCodes(\r\n  segmentsMissingFont: { word: string; locale?: Locale }[]\r\n): Partial<Record<LangCode, string[]>> {\r\n  const languageCodes = {}\r\n  let wordsByCode = {}\r\n\r\n  for (let { word, locale } of segmentsMissingFont) {\r\n    const code = detectLanguageCode(word, locale)\r\n    wordsByCode[code] = wordsByCode[code] || ''\r\n    wordsByCode[code] += word\r\n  }\r\n\r\n  Object.keys(wordsByCode).forEach((code: LangCode) => {\r\n    languageCodes[code] = languageCodes[code] || []\r\n    if (code === 'emoji') {\r\n      languageCodes[code].push(\r\n        ...unique(segment(wordsByCode[code], 'grapheme'))\r\n      )\r\n    } else {\r\n      languageCodes[code][0] = languageCodes[code][0] || ''\r\n      languageCodes[code][0] += unique(\r\n        segment(\r\n          wordsByCode[code],\r\n          'grapheme',\r\n          code === 'unknown' ? undefined : code\r\n        )\r\n      ).join('')\r\n    }\r\n  })\r\n\r\n  return languageCodes\r\n}\r\n\r\nfunction unique<T>(arr: T[]): T[] {\r\n  return Array.from(new Set(arr))\r\n}\r\n","import type { Yoga } from 'yoga-wasm-web'\r\n\r\nlet yogaInstance: Yoga\r\n\r\nexport function init(yoga: Yoga) {\r\n  yogaInstance = yoga\r\n}\r\n\r\nlet initializationPromise = null\r\n\r\nexport default async function getYoga(): Promise<Yoga> {\r\n  if (yogaInstance) return yogaInstance\r\n\r\n  if (initializationPromise) {\r\n    await initializationPromise\r\n    return yogaInstance\r\n  }\r\n\r\n  initializationPromise = import('@yoga')\r\n    .then((mod) => mod.getYogaModule())\r\n    .then((yoga) => (yogaInstance = yoga))\r\n\r\n  await initializationPromise\r\n  initializationPromise = null\r\n\r\n  return yogaInstance\r\n}\r\n","/**\r\n * This module is used to calculate the layout of the current sub-tree.\r\n */\r\n\r\nimport type { ReactNode } from 'react'\r\nimport type { Node as YogaNode } from 'yoga-wasm-web'\r\n\r\nimport getYoga from './yoga/index.js'\r\nimport {\r\n  isReactElement,\r\n  isClass,\r\n  buildXMLString,\r\n  SVGNodeToImage,\r\n  normalizeChildren,\r\n  hasDangerouslySetInnerHTMLProp,\r\n} from './utils.js'\r\nimport handler from './handler/index.js'\r\nimport FontLoader from './font.js'\r\nimport layoutText from './text.js'\r\nimport rect from './builder/rect.js'\r\nimport { Locale, normalizeLocale } from './language.js'\r\n\r\nexport interface LayoutContext {\r\n  id: string\r\n  parentStyle: Record<string, number | string>\r\n  inheritedStyle: Record<string, number | string>\r\n  isInheritingTransform?: boolean\r\n  parent: YogaNode\r\n  font: FontLoader\r\n  embedFont: boolean\r\n  debug?: boolean\r\n  graphemeImages?: Record<string, string>\r\n  canLoadAdditionalAssets: boolean\r\n  locale?: Locale\r\n  getTwStyles: (tw: string, style: any) => any\r\n}\r\n\r\nexport default async function* layout(\r\n  element: ReactNode,\r\n  context: LayoutContext\r\n): AsyncGenerator<\r\n  { word: string; locale?: string }[],\r\n  string,\r\n  [number, number]\r\n> {\r\n  const Yoga = await getYoga()\r\n  const {\r\n    id,\r\n    inheritedStyle,\r\n    parent,\r\n    font,\r\n    debug,\r\n    locale,\r\n    embedFont = true,\r\n    graphemeImages,\r\n    canLoadAdditionalAssets,\r\n    getTwStyles,\r\n  } = context\r\n\r\n  // 1. Pre-process the node.\r\n  if (element === null || typeof element === 'undefined') {\r\n    yield\r\n    yield\r\n    return ''\r\n  }\r\n\r\n  // Not a normal element.\r\n  if (!isReactElement(element) || typeof element.type === 'function') {\r\n    let iter: ReturnType<typeof layout>\r\n\r\n    if (!isReactElement(element)) {\r\n      // Process as text node.\r\n      iter = layoutText(String(element), context)\r\n      yield (await iter.next()).value as { word: string; locale?: Locale }[]\r\n    } else {\r\n      if (isClass(element.type as Function)) {\r\n        throw new Error('Class component is not supported.')\r\n      }\r\n      // If it's a custom component, Satori strictly requires it to be pure,\r\n      // stateless, and not relying on any React APIs such as hooks or suspense.\r\n      // So we can safely evaluate it to render. Otherwise, an error will be\r\n      // thrown by React.\r\n      iter = layout((element.type as Function)(element.props), context)\r\n      yield (await iter.next()).value as { word: string; locale?: string }[]\r\n    }\r\n\r\n    await iter.next()\r\n    const offset = yield\r\n    return (await iter.next(offset)).value as string\r\n  }\r\n\r\n  // Process as element.\r\n  const { type, props } = element\r\n  if (props && hasDangerouslySetInnerHTMLProp(props)) {\r\n    throw new Error(\r\n      'dangerouslySetInnerHTML property is not supported. See documentation for more information https://github.com/vercel/satori#jsx.'\r\n    )\r\n  }\r\n  let { style, children, tw, lang: _newLocale = locale } = props || {}\r\n  const newLocale = normalizeLocale(_newLocale)\r\n\r\n  // Extend Tailwind styles.\r\n  if (tw) {\r\n    const twStyles = getTwStyles(tw, style)\r\n    style = Object.assign(twStyles, style)\r\n  }\r\n\r\n  const node = Yoga.Node.create()\r\n  parent.insertChild(node, parent.getChildCount())\r\n\r\n  const [computedStyle, newInheritableStyle] = await handler(\r\n    node,\r\n    type,\r\n    inheritedStyle,\r\n    style,\r\n    props\r\n  )\r\n  // Post-process styles to attach inheritable properties for Satori.\r\n\r\n  // If the element is inheriting the parent `transform`, or applying its own.\r\n  // This affects the coordinate system.\r\n  const isInheritingTransform =\r\n    computedStyle.transform === inheritedStyle.transform\r\n  if (!isInheritingTransform) {\r\n    ;(computedStyle.transform as any).__parent = inheritedStyle.transform\r\n  }\r\n\r\n  // If the element has `overflow` set to `hidden`, we need to create a clip\r\n  // path and use it in all its children.\r\n  if (computedStyle.overflow === 'hidden') {\r\n    newInheritableStyle._inheritedClipPathId = `satori_cp-${id}`\r\n    newInheritableStyle._inheritedMaskId = `satori_om-${id}`\r\n  }\r\n\r\n  // If the element has `background-clip: text` set, we need to create a clip\r\n  // path and use it in all its children.\r\n  if (computedStyle.backgroundClip === 'text') {\r\n    const mutateRefValue = { value: '' } as any\r\n    newInheritableStyle._inheritedBackgroundClipTextPath = mutateRefValue\r\n    computedStyle._inheritedBackgroundClipTextPath = mutateRefValue\r\n  }\r\n\r\n  // 2. Do layout recursively for its children.\r\n  const normalizedChildren = normalizeChildren(children)\r\n  const iterators: ReturnType<typeof layout>[] = []\r\n\r\n  let i = 0\r\n  const segmentsMissingFont: { word: string; locale?: string }[] = []\r\n  for (const child of normalizedChildren) {\r\n    const iter = layout(child, {\r\n      id: id + '-' + i++,\r\n      parentStyle: computedStyle,\r\n      inheritedStyle: newInheritableStyle,\r\n      isInheritingTransform: true,\r\n      parent: node,\r\n      font,\r\n      embedFont,\r\n      debug,\r\n      graphemeImages,\r\n      canLoadAdditionalAssets,\r\n      locale: newLocale,\r\n      getTwStyles,\r\n    })\r\n    if (canLoadAdditionalAssets) {\r\n      segmentsMissingFont.push(...(((await iter.next()).value as any) || []))\r\n    } else {\r\n      await iter.next()\r\n    }\r\n    iterators.push(iter)\r\n  }\r\n  yield segmentsMissingFont\r\n  for (const iter of iterators) await iter.next()\r\n\r\n  // 3. Post-process the node.\r\n  const [x, y] = yield\r\n  let { left, top, width, height } = node.getComputedLayout()\r\n  // Attach offset to the current node.\r\n  left += x\r\n  top += y\r\n\r\n  let childrenRenderResult = ''\r\n  let baseRenderResult = ''\r\n  let depsRenderResult = ''\r\n\r\n  // Generate the rendered markup for the current node.\r\n  if (type === 'img') {\r\n    const src = computedStyle.__src as string\r\n    baseRenderResult = await rect(\r\n      {\r\n        id,\r\n        left,\r\n        top,\r\n        width,\r\n        height,\r\n        src,\r\n        isInheritingTransform,\r\n        debug,\r\n      },\r\n      computedStyle\r\n    )\r\n  } else if (type === 'svg') {\r\n    // When entering a <svg> node, we need to convert it to a <img> with the\r\n    // SVG data URL embedded.\r\n    const currentColor = computedStyle.color as string\r\n    const src = SVGNodeToImage(element, currentColor)\r\n    baseRenderResult = await rect(\r\n      {\r\n        id,\r\n        left,\r\n        top,\r\n        width,\r\n        height,\r\n        src,\r\n        isInheritingTransform,\r\n        debug,\r\n      },\r\n      computedStyle\r\n    )\r\n  } else {\r\n    const display = style?.display\r\n    if (\r\n      type === 'div' &&\r\n      children &&\r\n      typeof children !== 'string' &&\r\n      display !== 'flex' &&\r\n      display !== 'none'\r\n    ) {\r\n      throw new Error(\r\n        `Expected <div> to have explicit \"display: flex\" or \"display: none\" if it has more than one child node.`\r\n      )\r\n    }\r\n    baseRenderResult = await rect(\r\n      { id, left, top, width, height, isInheritingTransform, debug },\r\n      computedStyle\r\n    )\r\n  }\r\n\r\n  // Generate the rendered markup for the children.\r\n  for (const iter of iterators) {\r\n    childrenRenderResult += (await iter.next([left, top])).value\r\n  }\r\n\r\n  // An extra pass to generate the special background-clip shape collected from\r\n  // children.\r\n  if (computedStyle._inheritedBackgroundClipTextPath) {\r\n    depsRenderResult += buildXMLString(\r\n      'clipPath',\r\n      {\r\n        id: `satori_bct-${id}`,\r\n        'clip-path': computedStyle._inheritedClipPathId\r\n          ? `url(#${computedStyle._inheritedClipPathId})`\r\n          : undefined,\r\n      },\r\n      (computedStyle._inheritedBackgroundClipTextPath as any).value\r\n    )\r\n  }\r\n\r\n  return depsRenderResult + baseRenderResult + childrenRenderResult\r\n}\r\n","import type { ReactNode, ReactElement } from 'react'\r\n\r\nimport CssDimension from './vendor/parse-css-dimension/index.js'\r\nimport LineBreaker from 'linebreak'\r\n\r\nexport function isReactElement(node: ReactNode): node is ReactElement {\r\n  const type = typeof node\r\n  if (\r\n    type === 'number' ||\r\n    type === 'bigint' ||\r\n    type === 'string' ||\r\n    type === 'boolean'\r\n  ) {\r\n    return false\r\n  }\r\n  return true\r\n}\r\n\r\nexport function isClass(f: Function) {\r\n  return /^class\\s/.test(f.toString())\r\n}\r\n\r\nexport function hasDangerouslySetInnerHTMLProp(props: any) {\r\n  return 'dangerouslySetInnerHTML' in props\r\n}\r\n\r\nexport function normalizeChildren(children: any) {\r\n  const flattend =\r\n    typeof children === 'undefined' ? [] : [].concat(children).flat(Infinity)\r\n\r\n  const res = []\r\n  for (let i = 0; i < flattend.length; i++) {\r\n    let value = flattend[i]\r\n    if (\r\n      typeof value === 'undefined' ||\r\n      typeof value === 'boolean' ||\r\n      value === null\r\n    ) {\r\n      continue\r\n    }\r\n    if (typeof value === 'number') {\r\n      value = String(value)\r\n    }\r\n    if (\r\n      typeof value === 'string' &&\r\n      res.length &&\r\n      typeof res[res.length - 1] === 'string'\r\n    ) {\r\n      res[res.length - 1] += value\r\n    } else {\r\n      res.push(value)\r\n    }\r\n  }\r\n  return res\r\n}\r\n\r\nexport function lengthToNumber(\r\n  length: string | number,\r\n  baseFontSize: number,\r\n  baseLength: number,\r\n  inheritedStyle: Record<string, string | number>,\r\n  percentage = false\r\n): number | undefined {\r\n  if (typeof length === 'number') return length\r\n\r\n  // Convert em and rem values to number (px), convert rad to deg.\r\n  try {\r\n    length = length.trim()\r\n\r\n    // Not length: `1px/2px`, `1px 2px`, `1px, 2px`, `calc(1px)`.\r\n    if (/[ /\\(,]/.test(length)) return\r\n\r\n    // Just a number as string: '100'\r\n    if (length === String(+length)) return +length\r\n\r\n    const parsed = new CssDimension(length)\r\n    if (parsed.type === 'length') {\r\n      switch (parsed.unit) {\r\n        case 'em':\r\n          return parsed.value * baseFontSize\r\n        case 'rem':\r\n          return parsed.value * 16\r\n        case 'vw':\r\n          return ~~(\r\n            (parsed.value * (inheritedStyle._viewportWidth as number)) /\r\n            100\r\n          )\r\n        case 'vh':\r\n          return ~~(\r\n            (parsed.value * (inheritedStyle._viewportHeight as number)) /\r\n            100\r\n          )\r\n        default:\r\n          return parsed.value\r\n      }\r\n    } else if (parsed.type === 'angle') {\r\n      switch (parsed.unit) {\r\n        case 'deg':\r\n          return parsed.value\r\n        case 'rad':\r\n          return (parsed.value * 180) / Math.PI\r\n        default:\r\n          return parsed.value\r\n      }\r\n    } else if (parsed.type === 'percentage') {\r\n      if (percentage) {\r\n        return (parsed.value / 100) * baseLength\r\n      }\r\n    }\r\n  } catch {\r\n    // Not a length unit, silently ignore.\r\n  }\r\n}\r\n\r\n// Multiplies two 2d transform matrices.\r\nexport function multiply(m1: number[], m2: number[]) {\r\n  return [\r\n    m1[0] * m2[0] + m1[2] * m2[1],\r\n    m1[1] * m2[0] + m1[3] * m2[1],\r\n    m1[0] * m2[2] + m1[2] * m2[3],\r\n    m1[1] * m2[2] + m1[3] * m2[3],\r\n    m1[0] * m2[4] + m1[2] * m2[5] + m1[4],\r\n    m1[1] * m2[4] + m1[3] * m2[5] + m1[5],\r\n  ]\r\n}\r\n\r\nexport function v(\r\n  field: string | number | undefined,\r\n  map: Record<string, any>,\r\n  fallback: any,\r\n  errorIfNotAllowedForProperty?: string\r\n) {\r\n  let value = map[field]\r\n  if (typeof value === 'undefined') {\r\n    if (errorIfNotAllowedForProperty && typeof field !== 'undefined') {\r\n      throw new Error(\r\n        `Invalid value for CSS property \"${errorIfNotAllowedForProperty}\". Allowed values: ${Object.keys(\r\n          map\r\n        )\r\n          .map((_v) => `\"${_v}\"`)\r\n          .join(' | ')}. Received: \"${field}\".`\r\n      )\r\n    }\r\n    value = fallback\r\n  }\r\n  return value\r\n}\r\n\r\nlet wordSegmenter\r\nlet graphemeSegmenter\r\n\r\n// Implementation modified from\r\n// https://github.com/niklasvh/html2canvas/blob/6521a487d78172f7179f7c973c1a3af40eb92009/src/css/layout/text.ts\r\n// https://drafts.csswg.org/css-text/#word-separator\r\nexport const wordSeparators = [\r\n  0x0020, 0x00a0, 0x1361, 0x10100, 0x10101, 0x1039, 0x1091, 0xa,\r\n].map((point) => String.fromCodePoint(point))\r\n\r\nexport function segment(\r\n  content: string,\r\n  granularity: 'word' | 'grapheme',\r\n  locale?: string\r\n): string[] {\r\n  if (!wordSegmenter || !graphemeSegmenter) {\r\n    if (!(typeof Intl !== 'undefined' && 'Segmenter' in Intl)) {\r\n      // https://caniuse.com/mdn-javascript_builtins_intl_segments\r\n      throw new Error(\r\n        'Intl.Segmenter does not exist, please use import a polyfill.'\r\n      )\r\n    }\r\n\r\n    wordSegmenter = new Intl.Segmenter(locale, { granularity: 'word' })\r\n    graphemeSegmenter = new Intl.Segmenter(locale, {\r\n      granularity: 'grapheme',\r\n    })\r\n  }\r\n\r\n  return granularity === 'word'\r\n    ? [...wordSegmenter.segment(content)].map((seg) => seg.segment)\r\n    : [...graphemeSegmenter.segment(content)].map((seg) => seg.segment)\r\n}\r\n\r\nexport function buildXMLString(\r\n  type: string,\r\n  attrs: Record<string, string | number>,\r\n  children?: string\r\n) {\r\n  let attrString = ''\r\n\r\n  for (const [k, _v] of Object.entries(attrs)) {\r\n    if (typeof _v !== 'undefined') {\r\n      attrString += ` ${k}=\"${_v}\"`\r\n    }\r\n  }\r\n\r\n  if (children) {\r\n    return `<${type}${attrString}>${children}</${type}>`\r\n  }\r\n  return `<${type}${attrString}/>`\r\n}\r\n\r\nexport function createLRU<T>(max = 20) {\r\n  const store: Map<string, T> = new Map()\r\n  function set(key: string, value: T) {\r\n    if (store.size >= max) {\r\n      const keyToDelete = store.keys().next().value\r\n      store.delete(keyToDelete)\r\n    }\r\n    store.set(key, value)\r\n  }\r\n  function get(key: string): T | undefined {\r\n    const hasKey = store.has(key)\r\n    if (!hasKey) return undefined\r\n\r\n    const entry = store.get(key)!\r\n    store.delete(key)\r\n    store.set(key, entry)\r\n    return entry\r\n  }\r\n\r\n  return {\r\n    set,\r\n    get,\r\n  }\r\n}\r\n\r\n// Based on\r\n// https://raw.githubusercontent.com/facebook/react/master/packages/react-dom/src/shared/possibleStandardNames.js\r\nconst ATTRIBUTE_MAPPING = {\r\n  accentHeight: 'accent-height',\r\n  alignmentBaseline: 'alignment-baseline',\r\n  arabicForm: 'arabic-form',\r\n  baselineShift: 'baseline-shift',\r\n  capHeight: 'cap-height',\r\n  clipPath: 'clip-path',\r\n  clipRule: 'clip-rule',\r\n  colorInterpolation: 'color-interpolation',\r\n  colorInterpolationFilters: 'color-interpolation-filters',\r\n  colorProfile: 'color-profile',\r\n  colorRendering: 'color-rendering',\r\n  dominantBaseline: 'dominant-baseline',\r\n  enableBackground: 'enable-background',\r\n  fillOpacity: 'fill-opacity',\r\n  fillRule: 'fill-rule',\r\n  floodColor: 'flood-color',\r\n  floodOpacity: 'flood-opacity',\r\n  fontFamily: 'font-family',\r\n  fontSize: 'font-size',\r\n  fontSizeAdjust: 'font-size-adjust',\r\n  fontStretch: 'font-stretch',\r\n  fontStyle: 'font-style',\r\n  fontVariant: 'font-variant',\r\n  fontWeight: 'font-weight',\r\n  glyphName: 'glyph-name',\r\n  glyphOrientationHorizontal: 'glyph-orientation-horizontal',\r\n  glyphOrientationVertical: 'glyph-orientation-vertical',\r\n  horizAdvX: 'horiz-adv-x',\r\n  horizOriginX: 'horiz-origin-x',\r\n  imageRendering: 'image-rendering',\r\n  letterSpacing: 'letter-spacing',\r\n  lightingColor: 'lighting-color',\r\n  markerEnd: 'marker-end',\r\n  markerMid: 'marker-mid',\r\n  markerStart: 'marker-start',\r\n  overlinePosition: 'overline-position',\r\n  overlineThickness: 'overline-thickness',\r\n  paintOrder: 'paint-order',\r\n  panose1: 'panose-1',\r\n  pointerEvents: 'pointer-events',\r\n  renderingIntent: 'rendering-intent',\r\n  shapeRendering: 'shape-rendering',\r\n  stopColor: 'stop-color',\r\n  stopOpacity: 'stop-opacity',\r\n  strikethroughPosition: 'strikethrough-position',\r\n  strikethroughThickness: 'strikethrough-thickness',\r\n  strokeDasharray: 'stroke-dasharray',\r\n  strokeDashoffset: 'stroke-dashoffset',\r\n  strokeLinecap: 'stroke-linecap',\r\n  strokeLinejoin: 'stroke-linejoin',\r\n  strokeMiterlimit: 'stroke-miterlimit',\r\n  strokeOpacity: 'stroke-opacity',\r\n  strokeWidth: 'stroke-width',\r\n  textAnchor: 'text-anchor',\r\n  textDecoration: 'text-decoration',\r\n  textRendering: 'text-rendering',\r\n  underlinePosition: 'underline-position',\r\n  underlineThickness: 'underline-thickness',\r\n  unicodeBidi: 'unicode-bidi',\r\n  unicodeRange: 'unicode-range',\r\n  unitsPerEm: 'units-per-em',\r\n  vAlphabetic: 'v-alphabetic',\r\n  vHanging: 'v-hanging',\r\n  vIdeographic: 'v-ideographic',\r\n  vMathematical: 'v-mathematical',\r\n  vectorEffect: 'vector-effect',\r\n  vertAdvY: 'vert-adv-y',\r\n  vertOriginX: 'vert-origin-x',\r\n  vertOriginY: 'vert-origin-y',\r\n  wordSpacing: 'word-spacing',\r\n  writingMode: 'writing-mode',\r\n  xHeight: 'x-height',\r\n  xlinkActuate: 'xlink:actuate',\r\n  xlinkArcrole: 'xlink:arcrole',\r\n  xlinkHref: 'xlink:href',\r\n  xlinkRole: 'xlink:role',\r\n  xlinkShow: 'xlink:show',\r\n  xlinkTitle: 'xlink:title',\r\n  xlinkType: 'xlink:type',\r\n  xmlBase: 'xml:base',\r\n  xmlLang: 'xml:lang',\r\n  xmlSpace: 'xml:space',\r\n  xmlnsXlink: 'xmlns:xlink',\r\n} as const\r\n\r\n// From https://github.com/yoksel/url-encoder/blob/master/src/js/script.js\r\nconst SVGSymbols = /[\\r\\n%#()<>?[\\\\\\]^`{|}\"']/g\r\n\r\nfunction translateSVGNodeToSVGString(\r\n  node: ReactElement | string | (ReactElement | string)[],\r\n  inheritedColor: string\r\n): string {\r\n  if (!node) return ''\r\n  if (Array.isArray(node)) {\r\n    return node\r\n      .map((n) => translateSVGNodeToSVGString(n, inheritedColor))\r\n      .join('')\r\n  }\r\n  if (typeof node !== 'object') return String(node)\r\n\r\n  const type = node.type\r\n  if (type === 'text') {\r\n    throw new Error(\r\n      '<text> nodes are not currently supported, please convert them to <path>'\r\n    )\r\n  }\r\n\r\n  const { children, style, ...restProps } = node.props || {}\r\n  const currentColor = style?.color || inheritedColor\r\n  return `<${type}${Object.entries(restProps)\r\n    .map(([k, _v]) => {\r\n      if (typeof _v === 'string' && _v.toLowerCase() === 'currentcolor') {\r\n        _v = currentColor\r\n      }\r\n      return ` ${ATTRIBUTE_MAPPING[k] || k}=\"${_v}\"`\r\n    })\r\n    .join('')}>${translateSVGNodeToSVGString(children, currentColor)}</${type}>`\r\n}\r\n\r\nexport function parseViewBox(viewBox?: string | null | undefined) {\r\n  return viewBox ? viewBox.split(/[, ]/).filter(Boolean).map(Number) : null\r\n}\r\n\r\nexport function SVGNodeToImage(\r\n  node: ReactElement,\r\n  inheritedColor: string\r\n): string {\r\n  let {\r\n    viewBox,\r\n    viewbox,\r\n    width,\r\n    height,\r\n    className,\r\n    style,\r\n    children,\r\n    ...restProps\r\n  } = node.props || {}\r\n\r\n  viewBox ||= viewbox\r\n\r\n  // We directly assign the xmlns attribute here to deduplicate.\r\n  restProps.xmlns = 'http://www.w3.org/2000/svg'\r\n\r\n  const currentColor = style?.color || inheritedColor\r\n  const viewBoxSize = parseViewBox(viewBox)\r\n\r\n  // ratio = height / width\r\n  const ratio = viewBoxSize ? viewBoxSize[3] / viewBoxSize[2] : null\r\n  width = width || (ratio && height) ? height / ratio : null\r\n  height = height || (ratio && width) ? width * ratio : null\r\n\r\n  restProps.width = width\r\n  restProps.height = height\r\n  if (viewBox) restProps.viewBox = viewBox\r\n\r\n  return `data:image/svg+xml;utf8,${`<svg ${Object.entries(restProps)\r\n    .map(([k, _v]) => {\r\n      if (typeof _v === 'string' && _v.toLowerCase() === 'currentcolor') {\r\n        _v = currentColor\r\n      }\r\n      return ` ${ATTRIBUTE_MAPPING[k] || k}=\"${_v}\"`\r\n    })\r\n    .join('')}>${translateSVGNodeToSVGString(\r\n    children,\r\n    currentColor\r\n  )}</svg>`.replace(SVGSymbols, encodeURIComponent)}`\r\n}\r\nexport function toString(x: unknown): string {\r\n  return Object.prototype.toString.call(x)\r\n}\r\n\r\nexport function isString(x: unknown): x is string {\r\n  return typeof x === 'string'\r\n}\r\n\r\nexport function isUndefined(x: unknown): x is undefined {\r\n  return toString(x) === '[object Undefined]'\r\n}\r\n\r\nexport function splitByBreakOpportunities(\r\n  content: string,\r\n  wordBreak: string\r\n): {\r\n  words: string[]\r\n  requiredBreaks: boolean[]\r\n} {\r\n  if (wordBreak === 'break-all') {\r\n    return { words: segment(content, 'grapheme'), requiredBreaks: [] }\r\n  }\r\n\r\n  if (wordBreak === 'keep-all') {\r\n    return { words: segment(content, 'word'), requiredBreaks: [] }\r\n  }\r\n\r\n  const breaker = new LineBreaker(content)\r\n  let last = 0\r\n  let bk = breaker.nextBreak()\r\n  const words = []\r\n  const requiredBreaks = [false]\r\n\r\n  while (bk) {\r\n    const word = content.slice(last, bk.position)\r\n    words.push(word)\r\n\r\n    if (bk.required) {\r\n      requiredBreaks.push(true)\r\n    } else {\r\n      requiredBreaks.push(false)\r\n    }\r\n\r\n    last = bk.position\r\n    bk = breaker.nextBreak()\r\n  }\r\n\r\n  return { words, requiredBreaks }\r\n}\r\n","var e=(t,r)=>()=>(r||t((r={exports:{}}).exports,r),r.exports);var u=e((k,g)=>{g.exports=[\"em\",\"ex\",\"ch\",\"rem\",\"vh\",\"vw\",\"vmin\",\"vmax\",\"px\",\"mm\",\"cm\",\"in\",\"pt\",\"pc\",\"mozmm\"]});var a=e((z,v)=>{v.exports=[\"deg\",\"grad\",\"rad\",\"turn\"]});var c=e((L,w)=>{w.exports=[\"dpi\",\"dpcm\",\"dppx\"]});var h=e(($,y)=>{y.exports=[\"Hz\",\"kHz\"]});var m=e((j,b)=>{b.exports=[\"s\",\"ms\"]});var q=u(),f=a(),p=c(),l=h(),d=m();function s(t){if(/\\.\\D?$/.test(t))throw new Error(\"The dot should be followed by a number\");if(/^[+-]{2}/.test(t))throw new Error(\"Only one leading +/- is allowed\");if(x(t)>1)throw new Error(\"Only one dot is allowed\");if(/%$/.test(t)){this.type=\"percentage\",this.value=o(t),this.unit=\"%\";return}var r=O(t);if(!r){this.type=\"number\",this.value=o(t);return}this.type=F(r),this.value=o(t.substr(0,t.length-r.length)),this.unit=r}s.prototype.valueOf=function(){return this.value};s.prototype.toString=function(){return this.value+(this.unit||\"\")};function U(t){return new s(t)}function x(t){var r=t.match(/\\./g);return r?r.length:0}function o(t){var r=parseFloat(t);if(isNaN(r))throw new Error(\"Invalid number: \"+t);return r}var E=[].concat(f,l,q,p,d);function O(t){var r=t.match(/\\D+$/),n=r&&r[0];if(n&&E.indexOf(n)===-1)throw new Error(\"Invalid unit: \"+n);return n}var D=Object.assign(i(f,\"angle\"),i(l,\"frequency\"),i(p,\"resolution\"),i(d,\"time\"));function i(t,r){return Object.fromEntries(t.map(n=>[n,r]))}function F(t){return D[t]||\"length\"}export{U as default};\r\n","/**\r\n * Handler to update the Yoga node properties with the given element type and\r\n * style. Each supported element has its own preset styles, so this function\r\n * also returns the inherited style for children of the element.\r\n */\r\n\r\nimport type { Node as YogaNode } from 'yoga-wasm-web'\r\n\r\nimport getYoga from '../yoga/index.js'\r\nimport presets from './presets.js'\r\nimport inheritable from './inheritable.js'\r\nimport expand from './expand.js'\r\nimport { lengthToNumber, parseViewBox, v } from '../utils.js'\r\nimport { resolveImageData } from './image.js'\r\n\r\ntype SatoriElement = keyof typeof presets\r\n\r\nexport default async function handler(\r\n  node: YogaNode,\r\n  type: SatoriElement | string,\r\n  inheritedStyle: Record<string, string | number>,\r\n  definedStyle: Record<string, string | number>,\r\n  props: Record<string, any>\r\n): Promise<[Record<string, string | number>, Record<string, string | number>]> {\r\n  const Yoga = await getYoga()\r\n\r\n  // Extend the default style with defined and inherited styles.\r\n  const style = {\r\n    ...inheritedStyle,\r\n    ...expand(presets[type], inheritedStyle),\r\n    ...expand(definedStyle, inheritedStyle),\r\n  }\r\n\r\n  if (type === 'img') {\r\n    let [resolvedSrc, imageWidth, imageHeight] = await resolveImageData(\r\n      props.src\r\n    )\r\n\r\n    // Cannot parse the image size (e.g. base64 data URI).\r\n    if (imageWidth === undefined && imageHeight === undefined) {\r\n      if (props.width === undefined || props.height === undefined) {\r\n        throw new Error(\r\n          'Image size cannot be determined. Please provide the width and height of the image.'\r\n        )\r\n      }\r\n      imageWidth = parseInt(props.width)\r\n      imageHeight = parseInt(props.height)\r\n    }\r\n    const r = imageHeight / imageWidth\r\n\r\n    // Before calculating the missing width or height based on the image ratio,\r\n    // we must subtract the padding and border due to how box model works.\r\n    // TODO: Ensure these are absolute length values, not relative values.\r\n    let extraHorizontal =\r\n      ((style.borderLeftWidth as number) || 0) +\r\n      ((style.borderRightWidth as number) || 0) +\r\n      ((style.paddingLeft as number) || 0) +\r\n      ((style.paddingRight as number) || 0)\r\n    let extraVertical =\r\n      ((style.borderTopWidth as number) || 0) +\r\n      ((style.borderBottomWidth as number) || 0) +\r\n      ((style.paddingTop as number) || 0) +\r\n      ((style.paddingBottom as number) || 0)\r\n\r\n    let contentBoxWidth = style.width || props.width\r\n    let contentBoxHeight = style.height || props.height\r\n\r\n    const isAbsoluteContentSize =\r\n      typeof contentBoxWidth !== 'string' &&\r\n      typeof contentBoxHeight !== 'string'\r\n\r\n    if (typeof contentBoxWidth === 'number' && isAbsoluteContentSize) {\r\n      contentBoxWidth -= extraHorizontal\r\n    }\r\n    if (typeof contentBoxHeight === 'number' && isAbsoluteContentSize) {\r\n      contentBoxHeight -= extraVertical\r\n    }\r\n\r\n    // When no content size is defined, we use the image size as the content size.\r\n    if (contentBoxWidth === undefined && contentBoxHeight === undefined) {\r\n      contentBoxWidth = imageWidth\r\n      contentBoxHeight = imageHeight\r\n    } else {\r\n      // If only one sisde is not defined, we can calculate the other one.\r\n      if (contentBoxWidth === undefined) {\r\n        if (typeof contentBoxHeight === 'number') {\r\n          contentBoxWidth = contentBoxHeight / r\r\n        } else {\r\n          // If it uses a relative value (e.g. 50%), we can rely on aspect ratio.\r\n          // Note: this doesn't work well if there are paddings or borders.\r\n          node.setAspectRatio(1 / r)\r\n        }\r\n      } else if (contentBoxHeight === undefined) {\r\n        if (typeof contentBoxWidth === 'number') {\r\n          contentBoxHeight = contentBoxWidth * r\r\n        } else {\r\n          // If it uses a relative value (e.g. 50%), we can rely on aspect ratio.\r\n          // Note: this doesn't work well if there are paddings or borders.\r\n          node.setAspectRatio(1 / r)\r\n        }\r\n      }\r\n    }\r\n\r\n    style.width = isAbsoluteContentSize\r\n      ? (contentBoxWidth as number) + extraHorizontal\r\n      : contentBoxWidth\r\n    style.height = isAbsoluteContentSize\r\n      ? (contentBoxHeight as number) + extraVertical\r\n      : contentBoxHeight\r\n    style.__src = resolvedSrc\r\n  }\r\n\r\n  if (type === 'svg') {\r\n    const viewBox = props.viewBox || props.viewbox\r\n    const viewBoxSize = parseViewBox(viewBox)\r\n    const ratio = viewBoxSize ? viewBoxSize[3] / viewBoxSize[2] : null\r\n\r\n    let { width, height } = props\r\n    if (typeof width === 'undefined' && height) {\r\n      if (ratio == null) {\r\n        width = 0\r\n      } else if (typeof height === 'string' && height.endsWith('%')) {\r\n        width = parseInt(height) / ratio + '%'\r\n      } else {\r\n        height = lengthToNumber(\r\n          height,\r\n          inheritedStyle.fontSize as number,\r\n          1,\r\n          inheritedStyle\r\n        )\r\n        width = height / ratio\r\n      }\r\n    } else if (typeof height === 'undefined' && width) {\r\n      if (ratio == null) {\r\n        width = 0\r\n      } else if (typeof width === 'string' && width.endsWith('%')) {\r\n        height = parseInt(width) * ratio + '%'\r\n      } else {\r\n        width = lengthToNumber(\r\n          width,\r\n          inheritedStyle.fontSize as number,\r\n          1,\r\n          inheritedStyle\r\n        )\r\n        height = width * ratio\r\n      }\r\n    } else {\r\n      if (typeof width !== 'undefined') {\r\n        width =\r\n          lengthToNumber(\r\n            width,\r\n            inheritedStyle.fontSize as number,\r\n            1,\r\n            inheritedStyle\r\n          ) || width\r\n      }\r\n      if (typeof height !== 'undefined') {\r\n        height =\r\n          lengthToNumber(\r\n            height,\r\n            inheritedStyle.fontSize as number,\r\n            1,\r\n            inheritedStyle\r\n          ) || height\r\n      }\r\n      width ||= viewBoxSize?.[2]\r\n      height ||= viewBoxSize?.[3]\r\n    }\r\n\r\n    if (!style.width && width) style.width = width\r\n    if (!style.height && height) style.height = height\r\n  }\r\n\r\n  // Set properties for Yoga.\r\n  node.setDisplay(\r\n    v(\r\n      style.display,\r\n      {\r\n        flex: Yoga.DISPLAY_FLEX,\r\n        none: Yoga.DISPLAY_NONE,\r\n      },\r\n      Yoga.DISPLAY_FLEX,\r\n      'display'\r\n    )\r\n  )\r\n\r\n  node.setAlignContent(\r\n    v(\r\n      style.alignContent,\r\n      {\r\n        stretch: Yoga.ALIGN_STRETCH,\r\n        center: Yoga.ALIGN_CENTER,\r\n        'flex-start': Yoga.ALIGN_FLEX_START,\r\n        'flex-end': Yoga.ALIGN_FLEX_END,\r\n        'space-between': Yoga.ALIGN_SPACE_BETWEEN,\r\n        'space-around': Yoga.ALIGN_SPACE_AROUND,\r\n        baseline: Yoga.ALIGN_BASELINE,\r\n        normal: Yoga.ALIGN_AUTO,\r\n      },\r\n      Yoga.ALIGN_AUTO,\r\n      'alignContent'\r\n    )\r\n  )\r\n\r\n  node.setAlignItems(\r\n    v(\r\n      style.alignItems,\r\n      {\r\n        stretch: Yoga.ALIGN_STRETCH,\r\n        center: Yoga.ALIGN_CENTER,\r\n        'flex-start': Yoga.ALIGN_FLEX_START,\r\n        'flex-end': Yoga.ALIGN_FLEX_END,\r\n        baseline: Yoga.ALIGN_BASELINE,\r\n        normal: Yoga.ALIGN_AUTO,\r\n      },\r\n      Yoga.ALIGN_STRETCH,\r\n      'alignItems'\r\n    )\r\n  )\r\n  node.setAlignSelf(\r\n    v(\r\n      style.alignSelf,\r\n      {\r\n        stretch: Yoga.ALIGN_STRETCH,\r\n        center: Yoga.ALIGN_CENTER,\r\n        'flex-start': Yoga.ALIGN_FLEX_START,\r\n        'flex-end': Yoga.ALIGN_FLEX_END,\r\n        baseline: Yoga.ALIGN_BASELINE,\r\n        normal: Yoga.ALIGN_AUTO,\r\n      },\r\n      Yoga.ALIGN_AUTO,\r\n      'alignSelf'\r\n    )\r\n  )\r\n  node.setJustifyContent(\r\n    v(\r\n      style.justifyContent,\r\n      {\r\n        center: Yoga.JUSTIFY_CENTER,\r\n        'flex-start': Yoga.JUSTIFY_FLEX_START,\r\n        'flex-end': Yoga.JUSTIFY_FLEX_END,\r\n        'space-between': Yoga.JUSTIFY_SPACE_BETWEEN,\r\n        'space-around': Yoga.JUSTIFY_SPACE_AROUND,\r\n      },\r\n      Yoga.JUSTIFY_FLEX_START,\r\n      'justifyContent'\r\n    )\r\n  )\r\n  // @TODO: node.setAspectRatio\r\n\r\n  node.setFlexDirection(\r\n    v(\r\n      style.flexDirection,\r\n      {\r\n        row: Yoga.FLEX_DIRECTION_ROW,\r\n        column: Yoga.FLEX_DIRECTION_COLUMN,\r\n        'row-reverse': Yoga.FLEX_DIRECTION_ROW_REVERSE,\r\n        'column-reverse': Yoga.FLEX_DIRECTION_COLUMN_REVERSE,\r\n      },\r\n      Yoga.FLEX_DIRECTION_ROW,\r\n      'flexDirection'\r\n    )\r\n  )\r\n  node.setFlexWrap(\r\n    v(\r\n      style.flexWrap,\r\n      {\r\n        wrap: Yoga.WRAP_WRAP,\r\n        nowrap: Yoga.WRAP_NO_WRAP,\r\n        'wrap-reverse': Yoga.WRAP_WRAP_REVERSE,\r\n      },\r\n      Yoga.WRAP_NO_WRAP,\r\n      'flexWrap'\r\n    )\r\n  )\r\n\r\n  if (typeof style.gap !== 'undefined') {\r\n    node.setGap(Yoga.GUTTER_ALL, style.gap as number)\r\n  }\r\n\r\n  if (typeof style.rowGap !== 'undefined') {\r\n    node.setGap(Yoga.GUTTER_ROW, style.rowGap as number)\r\n  }\r\n\r\n  if (typeof style.columnGap !== 'undefined') {\r\n    node.setGap(Yoga.GUTTER_COLUMN, style.columnGap as number)\r\n  }\r\n\r\n  // @TODO: node.setFlex\r\n\r\n  if (typeof style.flexBasis !== 'undefined') {\r\n    node.setFlexBasis(style.flexBasis)\r\n  }\r\n  node.setFlexGrow(\r\n    typeof style.flexGrow === 'undefined' ? 0 : (style.flexGrow as number)\r\n  )\r\n  node.setFlexShrink(\r\n    typeof style.flexShrink === 'undefined' ? 0 : (style.flexShrink as number)\r\n  )\r\n\r\n  if (typeof style.maxHeight !== 'undefined') {\r\n    node.setMaxHeight(style.maxHeight)\r\n  }\r\n  if (typeof style.maxWidth !== 'undefined') {\r\n    node.setMaxWidth(style.maxWidth)\r\n  }\r\n  if (typeof style.minHeight !== 'undefined') {\r\n    node.setMinHeight(style.minHeight)\r\n  }\r\n  if (typeof style.minWidth !== 'undefined') {\r\n    node.setMinWidth(style.minWidth)\r\n  }\r\n\r\n  node.setOverflow(\r\n    v(\r\n      style.overflow,\r\n      {\r\n        visible: Yoga.OVERFLOW_VISIBLE,\r\n        hidden: Yoga.OVERFLOW_HIDDEN,\r\n      },\r\n      Yoga.OVERFLOW_VISIBLE,\r\n      'overflow'\r\n    )\r\n  )\r\n\r\n  node.setMargin(Yoga.EDGE_TOP, style.marginTop || 0)\r\n  node.setMargin(Yoga.EDGE_BOTTOM, style.marginBottom || 0)\r\n  node.setMargin(Yoga.EDGE_LEFT, style.marginLeft || 0)\r\n  node.setMargin(Yoga.EDGE_RIGHT, style.marginRight || 0)\r\n\r\n  node.setBorder(Yoga.EDGE_TOP, (style.borderTopWidth as number) || 0)\r\n  node.setBorder(Yoga.EDGE_BOTTOM, (style.borderBottomWidth as number) || 0)\r\n  node.setBorder(Yoga.EDGE_LEFT, (style.borderLeftWidth as number) || 0)\r\n  node.setBorder(Yoga.EDGE_RIGHT, (style.borderRightWidth as number) || 0)\r\n\r\n  node.setPadding(Yoga.EDGE_TOP, style.paddingTop || 0)\r\n  node.setPadding(Yoga.EDGE_BOTTOM, style.paddingBottom || 0)\r\n  node.setPadding(Yoga.EDGE_LEFT, style.paddingLeft || 0)\r\n  node.setPadding(Yoga.EDGE_RIGHT, style.paddingRight || 0)\r\n\r\n  node.setPositionType(\r\n    v(\r\n      style.position,\r\n      {\r\n        absolute: Yoga.POSITION_TYPE_ABSOLUTE,\r\n        relative: Yoga.POSITION_TYPE_RELATIVE,\r\n      },\r\n      Yoga.POSITION_TYPE_RELATIVE,\r\n      'position'\r\n    )\r\n  )\r\n\r\n  if (typeof style.top !== 'undefined') {\r\n    node.setPosition(Yoga.EDGE_TOP, style.top)\r\n  }\r\n  if (typeof style.bottom !== 'undefined') {\r\n    node.setPosition(Yoga.EDGE_BOTTOM, style.bottom)\r\n  }\r\n  if (typeof style.left !== 'undefined') {\r\n    node.setPosition(Yoga.EDGE_LEFT, style.left)\r\n  }\r\n  if (typeof style.right !== 'undefined') {\r\n    node.setPosition(Yoga.EDGE_RIGHT, style.right)\r\n  }\r\n\r\n  if (typeof style.height !== 'undefined') {\r\n    node.setHeight(style.height)\r\n  } else {\r\n    node.setHeightAuto()\r\n  }\r\n  if (typeof style.width !== 'undefined') {\r\n    node.setWidth(style.width)\r\n  } else {\r\n    node.setWidthAuto()\r\n  }\r\n\r\n  return [style, inheritable(style)]\r\n}\r\n","/**\r\n * Pre-defined styles for elements. Here we hand pick some from Chromium's\r\n * default styles:\r\n * https://chromium.googlesource.com/chromium/blink/+/master/Source/core/css/html.css\r\n *\r\n * We try to only include commonly used, styling elements rather than semantic elements.\r\n */\r\n\r\nconst DEFAULT_DISPLAY = 'flex'\r\n\r\nexport default {\r\n  // Generic block-level elements\r\n  p: {\r\n    display: DEFAULT_DISPLAY,\r\n    marginTop: '1em',\r\n    marginBottom: '1em',\r\n  },\r\n  div: {\r\n    display: DEFAULT_DISPLAY,\r\n  },\r\n  blockquote: {\r\n    display: DEFAULT_DISPLAY,\r\n    marginTop: '1em',\r\n    marginBottom: '1em',\r\n    marginLeft: 40,\r\n    marginRight: 40,\r\n  },\r\n  center: {\r\n    display: DEFAULT_DISPLAY,\r\n    textAlign: 'center',\r\n  },\r\n  hr: {\r\n    display: DEFAULT_DISPLAY,\r\n    marginTop: '0.5em',\r\n    marginBottom: '0.5em',\r\n    marginLeft: 'auto',\r\n    marginRight: 'auto',\r\n    borderWidth: 1,\r\n    // We don't have `inset`\r\n    borderStyle: 'solid',\r\n  },\r\n  // Heading elements\r\n  h1: {\r\n    display: DEFAULT_DISPLAY,\r\n    fontSize: '2em',\r\n    marginTop: '0.67em',\r\n    marginBottom: '0.67em',\r\n    marginLeft: 0,\r\n    marginRight: 0,\r\n    fontWeight: 'bold',\r\n  },\r\n  h2: {\r\n    display: DEFAULT_DISPLAY,\r\n    fontSize: '1.5em',\r\n    marginTop: '0.83em',\r\n    marginBottom: '0.83em',\r\n    marginLeft: 0,\r\n    marginRight: 0,\r\n    fontWeight: 'bold',\r\n  },\r\n  h3: {\r\n    display: DEFAULT_DISPLAY,\r\n    fontSize: '1.17em',\r\n    marginTop: '1em',\r\n    marginBottom: '1em',\r\n    marginLeft: 0,\r\n    marginRight: 0,\r\n    fontWeight: 'bold',\r\n  },\r\n  h4: {\r\n    display: DEFAULT_DISPLAY,\r\n    marginTop: '1.33em',\r\n    marginBottom: '1.33em',\r\n    marginLeft: 0,\r\n    marginRight: 0,\r\n    fontWeight: 'bold',\r\n  },\r\n  h5: {\r\n    display: DEFAULT_DISPLAY,\r\n    fontSize: '0.83em',\r\n    marginTop: '1.67em',\r\n    marginBottom: '1.67em',\r\n    marginLeft: 0,\r\n    marginRight: 0,\r\n    fontWeight: 'bold',\r\n  },\r\n  h6: {\r\n    display: DEFAULT_DISPLAY,\r\n    fontSize: '0.67em',\r\n    marginTop: '2.33em',\r\n    marginBottom: '2.33em',\r\n    marginLeft: 0,\r\n    marginRight: 0,\r\n    fontWeight: 'bold',\r\n  },\r\n  // Tables\r\n  // Lists\r\n  // Form elements\r\n  // Inline elements\r\n  u: {\r\n    textDecoration: 'underline',\r\n  },\r\n  strong: {\r\n    fontWeight: 'bold',\r\n  },\r\n  b: {\r\n    fontWeight: 'bold',\r\n  },\r\n  i: {\r\n    fontStyle: 'italic',\r\n  },\r\n  em: {\r\n    fontStyle: 'italic',\r\n  },\r\n  code: {\r\n    fontFamily: 'monospace',\r\n  },\r\n  kbd: {\r\n    fontFamily: 'monospace',\r\n  },\r\n  pre: {\r\n    display: DEFAULT_DISPLAY,\r\n    fontFamily: 'monospace',\r\n    whiteSpace: 'pre',\r\n    marginTop: '1em',\r\n    marginBottom: '1em',\r\n  },\r\n  mark: {\r\n    backgroundColor: 'yellow',\r\n    color: 'black',\r\n  },\r\n  big: {\r\n    fontSize: 'larger',\r\n  },\r\n  small: {\r\n    fontSize: 'smaller',\r\n  },\r\n  s: {\r\n    textDecoration: 'line-through',\r\n  },\r\n}\r\n","const list = new Set([\r\n  'color',\r\n  'font',\r\n  'fontFamily',\r\n  'fontSize',\r\n  'fontStyle',\r\n  'fontWeight',\r\n  'letterSpacing',\r\n  'lineHeight',\r\n  'textAlign',\r\n  'textTransform',\r\n  'textShadowOffset',\r\n  'textShadowColor',\r\n  'textShadowRadius',\r\n  'textDecorationLine',\r\n  'textDecorationStyle',\r\n  'textDecorationColor',\r\n  'whiteSpace',\r\n  'transform',\r\n  'wordBreak',\r\n\r\n  // Special case: SVG doesn't apply these to children elements so we need to\r\n  // make it inheritable here.\r\n  'opacity',\r\n  'filter',\r\n\r\n  // Special properties of Satori:\r\n  '_viewportWidth',\r\n  '_viewportHeight',\r\n  '_inheritedClipPathId',\r\n  '_inheritedMaskId',\r\n  '_inheritedBackgroundClipTextPath',\r\n])\r\n\r\nexport default function inheritable(style: Record<string, any>) {\r\n  const inheritedStyle: Record<string, any> = {}\r\n  for (const prop in style) {\r\n    if (list.has(prop)) {\r\n      inheritedStyle[prop] = style[prop]\r\n    }\r\n  }\r\n  return inheritedStyle\r\n}\r\n","/**\r\n * This module expands the CSS properties to get rid of shorthands, as well as\r\n * cleaning up some properties.\r\n */\r\n\r\nimport { getPropertyName, getStylesForProperty } from 'css-to-react-native'\r\nimport { parseElementStyle } from 'css-background-parser'\r\nimport { parse as parseBoxShadow } from 'css-box-shadow'\r\n\r\nimport CssDimension from '../vendor/parse-css-dimension/index.js'\r\nimport parseTransformOrigin from '../transform-origin.js'\r\nimport { isString, lengthToNumber, v } from '../utils.js'\r\n\r\n// https://react-cn.github.io/react/tips/style-props-value-px.html\r\nconst optOutPx = new Set([\r\n  'flex',\r\n  'flexGrow',\r\n  'flexShrink',\r\n  'flexBasis',\r\n  'fontWeight',\r\n  'lineHeight',\r\n  'opacity',\r\n  'scale',\r\n  'scaleX',\r\n  'scaleY',\r\n])\r\nconst keepNumber = new Set(['lineHeight'])\r\n\r\nfunction handleFallbackColor(\r\n  prop: string,\r\n  parsed: Record<string, string>,\r\n  rawInput: string,\r\n  currentColor: string\r\n) {\r\n  if (\r\n    prop === 'textDecoration' &&\r\n    !rawInput.includes(parsed.textDecorationColor)\r\n  ) {\r\n    parsed.textDecorationColor = currentColor\r\n  }\r\n  return parsed\r\n}\r\n\r\nfunction purify(name: string, value?: string | number) {\r\n  if (typeof value === 'number') {\r\n    if (!optOutPx.has(name)) return value + 'px'\r\n    if (keepNumber.has(name)) return value\r\n    return String(value)\r\n  }\r\n  return value\r\n}\r\n\r\nfunction handleSpecialCase(\r\n  name: string,\r\n  value: string | number,\r\n  currentColor: string\r\n) {\r\n  if (name === 'lineHeight') {\r\n    return { lineHeight: purify(name, value) }\r\n  }\r\n\r\n  if (name === 'fontFamily') {\r\n    return {\r\n      fontFamily: (value as string).split(',').map((_v) => {\r\n        return _v\r\n          .trim()\r\n          .replace(/(^['\"])|(['\"]$)/g, '')\r\n          .toLocaleLowerCase()\r\n      }),\r\n    }\r\n  }\r\n\r\n  if (name === 'borderRadius') {\r\n    if (typeof value !== 'string' || !value.includes('/')) {\r\n      // Regular border radius\r\n      return\r\n    }\r\n    // Support the `border-radius: 10px / 20px` syntax.\r\n    const [horizontal, vertical] = value.split('/')\r\n    const vh = getStylesForProperty(name, horizontal, true)\r\n    const vv = getStylesForProperty(name, vertical, true)\r\n    for (const k in vh) {\r\n      vv[k] = purify(name, vh[k]) + ' ' + purify(name, vv[k])\r\n    }\r\n    return vv\r\n  }\r\n\r\n  if (/^border(Top|Right|Bottom|Left)?$/.test(name)) {\r\n    const resolved = getStylesForProperty('border', value, true)\r\n\r\n    // Border width should be default to 3px (medium) instead of 1px:\r\n    // https://w3c.github.io/csswg-drafts/css-backgrounds-3/#border-width\r\n    // Although on Chrome it will be displayed as 1.5px but let's stick to the\r\n    // spec.\r\n    if (resolved.borderWidth === 1 && !String(value).includes('1px')) {\r\n      resolved.borderWidth = 3\r\n    }\r\n\r\n    // A trick to fix `border: 1px solid` to not use `black` but the inherited\r\n    // `color` value. This is necessary because css-to-react-native automatically\r\n    // fallbacks to default color values.\r\n    if (resolved.borderColor === 'black' && !String(value).includes('black')) {\r\n      resolved.borderColor = currentColor\r\n    }\r\n\r\n    const purified = {\r\n      Width: purify(name + 'Width', resolved.borderWidth),\r\n      Style: v(\r\n        resolved.borderStyle,\r\n        {\r\n          solid: 'solid',\r\n          dashed: 'dashed',\r\n        },\r\n        'solid',\r\n        name + 'Style'\r\n      ),\r\n      Color: resolved.borderColor,\r\n    }\r\n\r\n    const full = {}\r\n    for (const k of name === 'border'\r\n      ? ['Top', 'Right', 'Bottom', 'Left']\r\n      : [name.slice(6)]) {\r\n      for (const p in purified) {\r\n        full['border' + k + p] = purified[p]\r\n      }\r\n    }\r\n    return full\r\n  }\r\n\r\n  if (name === 'boxShadow') {\r\n    if (!value) {\r\n      throw new Error('Invalid `boxShadow` value: \"' + value + '\".')\r\n    }\r\n    return {\r\n      [name]: typeof value === 'string' ? parseBoxShadow(value) : value,\r\n    }\r\n  }\r\n\r\n  if (name === 'transform') {\r\n    if (typeof value !== 'string') throw new Error('Invalid `transform` value.')\r\n    // To support percentages in transform (which is not supported in RN), we\r\n    // replace them with random symbols and then replace them back after parsing.\r\n    const symbols = {}\r\n    const replaced = value.replace(/(-?[\\d.]+%)/g, (_, _v) => {\r\n      const symbol = ~~(Math.random() * 1e9)\r\n      symbols[symbol] = _v\r\n      return symbol + 'px'\r\n    })\r\n    const parsed = getStylesForProperty('transform', replaced, true)\r\n    for (const t of parsed.transform) {\r\n      for (const k in t) {\r\n        if (symbols[t[k]]) {\r\n          t[k] = symbols[t[k]]\r\n        }\r\n      }\r\n    }\r\n    return parsed\r\n  }\r\n\r\n  if (name === 'background') {\r\n    value = value.toString().trim()\r\n    if (/^(linear-gradient|radial-gradient|url)\\(/.test(value)) {\r\n      return getStylesForProperty('backgroundImage', value, true)\r\n    }\r\n    return getStylesForProperty('background', value, true)\r\n  }\r\n\r\n  if (name === 'textShadow') {\r\n    // Handle multiple text shadows if provided.\r\n    value = value.toString().trim()\r\n    if (value.includes(',')) {\r\n      const shadows = value.split(',')\r\n      const result = {}\r\n      for (const shadow of shadows) {\r\n        const styles = getStylesForProperty('textShadow', shadow, true)\r\n        for (const k in styles) {\r\n          if (!result[k]) {\r\n            result[k] = [styles[k]]\r\n          } else {\r\n            result[k].push(styles[k])\r\n          }\r\n        }\r\n      }\r\n      return result\r\n    }\r\n  }\r\n\r\n  return\r\n}\r\n\r\nfunction getErrorHint(name: string) {\r\n  if (name === 'transform') {\r\n    return ' Only absolute lengths such as `10px` are supported.'\r\n  }\r\n  return ''\r\n}\r\n\r\nconst RGB_SLASH = /rgb\\((\\d+)\\s+(\\d+)\\s+(\\d+)\\s*\\/\\s*([\\.\\d]+)\\)/\r\nfunction normalizeColor(value: string | object) {\r\n  if (typeof value === 'string') {\r\n    if (RGB_SLASH.test(value.trim())) {\r\n      // rgb(255 122 127 / .2) -> rgba(255, 122, 127, .2)\r\n      return value.trim().replace(RGB_SLASH, (_, r, g, b, a) => {\r\n        return `rgba(${r}, ${g}, ${b}, ${a})`\r\n      })\r\n    }\r\n  }\r\n\r\n  // Recursively normalize colors in arrays and objects.\r\n  if (typeof value === 'object' && value !== null) {\r\n    for (const k in value) {\r\n      value[k] = normalizeColor(value[k])\r\n    }\r\n    return value\r\n  }\r\n\r\n  return value\r\n}\r\n\r\nexport default function expand(\r\n  style: Record<string, string | number> | undefined,\r\n  inheritedStyle: Record<string, string | number>\r\n): Record<string, string | number> {\r\n  const transformedStyle = {} as any\r\n\r\n  if (style) {\r\n    const currentColor = getCurrentColor(\r\n      style.color as string,\r\n      inheritedStyle.color as string\r\n    )\r\n\r\n    transformedStyle.color = currentColor\r\n\r\n    for (const prop in style) {\r\n      // Internal properties.\r\n      if (prop.startsWith('_')) {\r\n        transformedStyle[prop] = style[prop]\r\n        continue\r\n      }\r\n\r\n      if (prop === 'color') {\r\n        continue\r\n      }\r\n\r\n      const name = getPropertyName(prop)\r\n      const value = preprocess(style[prop], currentColor)\r\n\r\n      try {\r\n        const resolvedStyle =\r\n          handleSpecialCase(name, value, currentColor) ||\r\n          handleFallbackColor(\r\n            name,\r\n            getStylesForProperty(name, purify(name, value), true),\r\n            value as string,\r\n            currentColor\r\n          )\r\n\r\n        Object.assign(transformedStyle, resolvedStyle)\r\n      } catch (err) {\r\n        throw new Error(\r\n          err.message +\r\n            // Attach the extra information of the rule itself if it's not included in\r\n            // the error message.\r\n            (err.message.includes(value)\r\n              ? '\\n  ' + getErrorHint(name)\r\n              : `\\n  in CSS rule \\`${name}: ${value}\\`.${getErrorHint(name)}`)\r\n        )\r\n      }\r\n    }\r\n  }\r\n\r\n  // Parse background images.\r\n  if (transformedStyle.backgroundImage) {\r\n    const { backgrounds } = parseElementStyle(transformedStyle)\r\n    transformedStyle.backgroundImage = backgrounds\r\n  }\r\n\r\n  // Calculate the base font size.\r\n  let baseFontSize: number =\r\n    typeof transformedStyle.fontSize === 'number'\r\n      ? transformedStyle.fontSize\r\n      : inheritedStyle.fontSize\r\n  if (typeof baseFontSize === 'string') {\r\n    try {\r\n      const parsed = new CssDimension(baseFontSize)\r\n      switch (parsed.unit) {\r\n        case 'em':\r\n          baseFontSize = parsed.value * (inheritedStyle.fontSize as number)\r\n          break\r\n        case 'rem':\r\n          baseFontSize = parsed.value * 16\r\n          break\r\n      }\r\n    } catch (err) {\r\n      baseFontSize = 16\r\n    }\r\n  }\r\n  if (typeof transformedStyle.fontSize !== 'undefined') {\r\n    transformedStyle.fontSize = baseFontSize\r\n  }\r\n\r\n  if (transformedStyle.transformOrigin) {\r\n    transformedStyle.transformOrigin = parseTransformOrigin(\r\n      transformedStyle.transformOrigin,\r\n      baseFontSize\r\n    )\r\n  }\r\n\r\n  for (const prop in transformedStyle) {\r\n    let value = transformedStyle[prop]\r\n\r\n    // Line height needs to be relative.\r\n    if (prop === 'lineHeight') {\r\n      if (typeof value === 'string') {\r\n        value = transformedStyle[prop] =\r\n          lengthToNumber(\r\n            value,\r\n            baseFontSize,\r\n            baseFontSize,\r\n            inheritedStyle,\r\n            true\r\n          ) / baseFontSize\r\n      }\r\n    } else {\r\n      // Convert em and rem values to px (number).\r\n      if (typeof value === 'string') {\r\n        const len = lengthToNumber(\r\n          value,\r\n          baseFontSize,\r\n          baseFontSize,\r\n          inheritedStyle\r\n        )\r\n        if (typeof len !== 'undefined') transformedStyle[prop] = len\r\n        value = transformedStyle[prop]\r\n      }\r\n\r\n      if (typeof value === 'string' || typeof value === 'object') {\r\n        const color = normalizeColor(value)\r\n        if (color) transformedStyle[prop] = color\r\n        value = transformedStyle[prop]\r\n      }\r\n    }\r\n\r\n    // Inherit the opacity.\r\n    if (prop === 'opacity') {\r\n      value = transformedStyle[prop] =\r\n        value * (inheritedStyle.opacity as number)\r\n    }\r\n\r\n    if (prop === 'transform') {\r\n      const transforms = value as { [type: string]: number | string }[]\r\n\r\n      for (const transform of transforms) {\r\n        const type = Object.keys(transform)[0]\r\n        const _v = transform[type]\r\n\r\n        // Convert em, rem, vw, vh values to px (number), but keep % values.\r\n        const len =\r\n          typeof _v === 'string'\r\n            ? lengthToNumber(_v, baseFontSize, baseFontSize, inheritedStyle) ??\r\n              _v\r\n            : _v\r\n        transform[type] = len\r\n      }\r\n    }\r\n  }\r\n\r\n  return transformedStyle\r\n}\r\n\r\nfunction getCurrentColor(color: string | undefined, inheritedColor: string) {\r\n  if (color && color.toLowerCase() !== 'currentcolor') {\r\n    return color\r\n  }\r\n\r\n  return inheritedColor\r\n}\r\n\r\nfunction convertCurrentColorToActualValue(\r\n  value: string,\r\n  currentColor: string\r\n): string {\r\n  return value.replace(/currentcolor/gi, currentColor)\r\n}\r\n\r\nfunction preprocess(\r\n  value: string | number,\r\n  currentColor: string\r\n): string | number {\r\n  if (isString(value)) {\r\n    value = convertCurrentColorToActualValue(value, currentColor)\r\n  }\r\n\r\n  return value\r\n}\r\n","import valueParser from 'postcss-value-parser'\r\n\r\nimport CssDimension from './vendor/parse-css-dimension/index.js'\r\n\r\n/**\r\n * If key for each direction is missing, assume default (50%)\r\n */\r\nexport interface ParsedTransformOrigin {\r\n  /** Relative horizontal transform origin in % */\r\n  xRelative?: number\r\n  /** Relative vertical transform origin in % */\r\n  yRelative?: number\r\n  /** Absolute horizontal transform origin in pixels */\r\n  xAbsolute?: number\r\n  /** Absolute horizontal transform origin in pixels */\r\n  yAbsolute?: number\r\n}\r\n\r\ninterface ParsedUnit {\r\n  /** Relative unit in % */\r\n  relative?: number\r\n  /** Absolute unit in pixels */\r\n  absolute?: number\r\n}\r\n\r\nfunction parseUnit(word: string, baseFontSize: number): ParsedUnit {\r\n  try {\r\n    const parsed = new CssDimension(word)\r\n    switch (parsed.unit) {\r\n      case 'px':\r\n        return { absolute: parsed.value }\r\n      case 'em':\r\n        return { absolute: parsed.value * baseFontSize }\r\n      case 'rem':\r\n        return { absolute: parsed.value * 16 }\r\n      case '%':\r\n        return { relative: parsed.value }\r\n      default:\r\n        return {}\r\n    }\r\n  } catch (e) {\r\n    return {}\r\n  }\r\n}\r\n\r\nfunction handleWord(\r\n  word: string,\r\n  baseFontSize: number,\r\n  unitIsHorizontal: boolean\r\n) {\r\n  switch (word) {\r\n    case 'top':\r\n      return { yRelative: 0 }\r\n    case 'left':\r\n      return { xRelative: 0 }\r\n    case 'right':\r\n      return { xRelative: 100 }\r\n    case 'bottom':\r\n      return { yRelative: 100 }\r\n    case 'center':\r\n      return {}\r\n    default: {\r\n      const parsedUnit = parseUnit(word, baseFontSize)\r\n      return parsedUnit.absolute\r\n        ? {\r\n            [unitIsHorizontal ? 'xAbsolute' : 'yAbsolute']: parsedUnit.absolute,\r\n          }\r\n        : parsedUnit.relative\r\n        ? {\r\n            [unitIsHorizontal ? 'xRelative' : 'yRelative']: parsedUnit.relative,\r\n          }\r\n        : {}\r\n    }\r\n  }\r\n}\r\n\r\nexport default function parseTransformOrigin(\r\n  value: string | number,\r\n  baseFontSize: number\r\n): ParsedTransformOrigin {\r\n  // If it's a single value and a number, then it's horizontal\r\n  if (typeof value === 'number') {\r\n    return { xAbsolute: value }\r\n  }\r\n  let words: string[]\r\n  try {\r\n    words = valueParser(value)\r\n      .nodes.filter((node) => node.type === 'word')\r\n      .map((node) => node.value)\r\n  } catch (e) {\r\n    return {}\r\n  }\r\n\r\n  if (words.length === 1) {\r\n    // If it's a single value and a number, then it's horizontal, so\r\n    // pass `true` to `unitIsHorizontal`\r\n    return handleWord(words[0], baseFontSize, true)\r\n  } else if (words.length === 2) {\r\n    // Make words to be [horizontal, vertical]\r\n    if (\r\n      words[0] === 'top' ||\r\n      words[0] === 'bottom' ||\r\n      words[1] === 'left' ||\r\n      words[1] === 'right'\r\n    ) {\r\n      words.reverse()\r\n    }\r\n\r\n    return {\r\n      ...handleWord(words[0], baseFontSize, true),\r\n      ...handleWord(words[1], baseFontSize, false),\r\n    }\r\n  } else {\r\n    return {}\r\n  }\r\n}\r\n","/**\r\n * This module is used to fetch image from the given URL and resolve it as\r\n * base64 inlined data URI, so the toolchain can process it.\r\n * The image data will be cached in a LRU so we don't need to fetch it again\r\n * in new render processes. But to invalidate the cache the workaround is to\r\n * add a random query string to the URL.\r\n * TODO: We might want another option to disable image caching by default.\r\n */\r\n\r\nconst AVIF = 'image/avif'\r\nconst WEBP = 'image/webp'\r\nconst PNG = 'image/png'\r\nconst JPEG = 'image/jpeg'\r\nconst GIF = 'image/gif'\r\nconst SVG = 'image/svg+xml'\r\n\r\nfunction parseJPEG(buf: ArrayBuffer) {\r\n  const view = new DataView(buf)\r\n\r\n  // Skip magic bytes\r\n  let offset = 4\r\n\r\n  const len = view.byteLength\r\n  while (offset < len) {\r\n    const i = view.getUint16(offset, false)\r\n\r\n    if (i > len) {\r\n      throw new TypeError('Invalid JPEG')\r\n    }\r\n\r\n    const next = view.getUint8(i + 1 + offset)\r\n    if (next === 0xc0 || next === 0xc1 || next === 0xc2) {\r\n      return [\r\n        view.getUint16(i + 7 + offset, false),\r\n        view.getUint16(i + 5 + offset, false),\r\n      ] as [number, number]\r\n    }\r\n\r\n    // TODO: Support orientations from EXIF.\r\n\r\n    offset += i + 2\r\n  }\r\n\r\n  throw new TypeError('Invalid JPEG')\r\n}\r\n\r\nfunction parseGIF(buf: ArrayBuffer) {\r\n  const view = new Uint8Array(buf.slice(6, 10))\r\n  return [view[0] | (view[1] << 8), view[2] | (view[3] << 8)] as [\r\n    number,\r\n    number\r\n  ]\r\n}\r\n\r\nfunction parsePNG(buf: ArrayBuffer) {\r\n  const v = new DataView(buf)\r\n  return [v.getUint16(18, false), v.getUint16(22, false)] as [number, number]\r\n}\r\n\r\nimport { createLRU, parseViewBox } from '../utils.js'\r\n\r\ntype ResolvedImageData = [string, number?, number?] | readonly []\r\nconst cache = createLRU<ResolvedImageData>(100)\r\nconst inflightRequests = new Map<string, Promise<ResolvedImageData>>()\r\n\r\nconst ALLOWED_IMAGE_TYPES = [PNG, JPEG, GIF, SVG]\r\n\r\nfunction arrayBufferToBase64(buffer) {\r\n  let binary = ''\r\n  const bytes = new Uint8Array(buffer)\r\n  for (let i = 0; i < bytes.byteLength; i++) {\r\n    binary += String.fromCharCode(bytes[i])\r\n  }\r\n  return btoa(binary)\r\n}\r\n\r\nfunction base64ToArrayBuffer(base64: string): ArrayBuffer {\r\n  let binaryString = atob(base64)\r\n  let len = binaryString.length\r\n  let bytes = new Uint8Array(len)\r\n  for (let i = 0; i < len; i++) {\r\n    bytes[i] = binaryString.charCodeAt(i)\r\n  }\r\n  return bytes.buffer\r\n}\r\n\r\nfunction parseSvgImageSize(src: string, data: string) {\r\n  // Parse the SVG image size\r\n  const svgTag = data.match(/<svg[^>]*>/)[0]\r\n\r\n  const viewBoxStr = svgTag.match(/viewBox=['\"](.+)['\"]/)\r\n  let viewBox = viewBoxStr ? parseViewBox(viewBoxStr[1]) : null\r\n\r\n  const width = svgTag.match(/width=['\"](\\d*\\.\\d+|\\d+)['\"]/)\r\n  const height = svgTag.match(/height=['\"](\\d*\\.\\d+|\\d+)['\"]/)\r\n\r\n  if (!viewBox && (!width || !height)) {\r\n    throw new Error(`Failed to parse SVG from ${src}: missing \"viewBox\"`)\r\n  }\r\n\r\n  const size = viewBox ? [viewBox[2], viewBox[3]] : [+width[1], +height[1]]\r\n\r\n  const ratio = size[0] / size[1]\r\n  const imageSize: [number, number] =\r\n    width && height\r\n      ? [+width[1], +height[1]]\r\n      : width\r\n      ? [+width[1], +width[1] / ratio]\r\n      : height\r\n      ? [+height[1] * ratio, +height[1]]\r\n      : [size[0], size[1]]\r\n\r\n  return imageSize\r\n}\r\n\r\nfunction arrayBufferToDataUri(data: ArrayBuffer) {\r\n  let imageSize: [number, number]\r\n\r\n  const imageType = detectContentType(new Uint8Array(data))\r\n\r\n  switch (imageType) {\r\n    case PNG:\r\n      imageSize = parsePNG(data)\r\n      break\r\n    case GIF:\r\n      imageSize = parseGIF(data)\r\n      break\r\n    case JPEG:\r\n      imageSize = parseJPEG(data)\r\n      break\r\n  }\r\n\r\n  if (!ALLOWED_IMAGE_TYPES.includes(imageType)) {\r\n    throw new Error(`Unsupported image type: ${imageType || 'unknown'}`)\r\n  }\r\n  return [\r\n    `data:${imageType};base64,${arrayBufferToBase64(data)}`,\r\n    imageSize,\r\n  ] as const\r\n}\r\n\r\nexport async function resolveImageData(\r\n  src: string | ArrayBuffer\r\n): Promise<ResolvedImageData> {\r\n  if (!src) {\r\n    throw new Error('Image source is not provided.')\r\n  }\r\n\r\n  // ArrayBuffer\r\n  if (typeof src === 'object') {\r\n    const [newSrc, imageSize] = arrayBufferToDataUri(src)\r\n    return [newSrc, ...imageSize] as ResolvedImageData\r\n  }\r\n\r\n  if (\r\n    (src.startsWith('\"') && src.endsWith('\"')) ||\r\n    (src.startsWith(\"'\") && src.endsWith(\"'\"))\r\n  ) {\r\n    src = src.slice(1, -1)\r\n  }\r\n\r\n  if (src.startsWith('data:')) {\r\n    let decodedURI: { imageType; encodingType; dataString }\r\n\r\n    try {\r\n      decodedURI =\r\n        /data:(?<imageType>[a-z/+]+)(;(?<encodingType>base64|utf8))?,(?<dataString>.*)/g.exec(\r\n          src\r\n        ).groups as typeof decodedURI\r\n    } catch (err) {\r\n      console.warn('Image data URI resolved without size:' + src)\r\n      return [src]\r\n    }\r\n\r\n    const { imageType, encodingType, dataString } = decodedURI\r\n    if (imageType === SVG) {\r\n      const utf8Src =\r\n        encodingType === 'base64'\r\n          ? atob(dataString)\r\n          : decodeURIComponent(dataString.replace(/ /g, '%20'))\r\n      const base64Src =\r\n        encodingType === 'base64'\r\n          ? src\r\n          : `data:image/svg+xml;base64,${btoa(utf8Src)}`\r\n      let imageSize = parseSvgImageSize(src, utf8Src)\r\n      return [base64Src, ...imageSize]\r\n    } else if (encodingType === 'base64') {\r\n      let imageSize: [number, number]\r\n      const data = base64ToArrayBuffer(dataString)\r\n      switch (imageType) {\r\n        case PNG:\r\n          imageSize = parsePNG(data)\r\n          break\r\n        case GIF:\r\n          imageSize = parseGIF(data)\r\n          break\r\n        case JPEG:\r\n          imageSize = parseJPEG(data)\r\n          break\r\n      }\r\n      return [src, ...imageSize]\r\n    } else {\r\n      console.warn('Image data URI resolved without size:' + src)\r\n      return [src]\r\n    }\r\n  }\r\n\r\n  if (!globalThis.fetch) {\r\n    throw new Error('`fetch` is required to be polyfilled to load images.')\r\n  }\r\n\r\n  if (inflightRequests.has(src)) {\r\n    return inflightRequests.get(src)\r\n  }\r\n  const cached = cache.get(src)\r\n  if (cached) {\r\n    return cached\r\n  }\r\n\r\n  const url = src\r\n  const promise = fetch(url)\r\n    .then((res): Promise<string | ArrayBuffer> => {\r\n      const type = res.headers.get('content-type')\r\n\r\n      // Handle SVG specially\r\n      if (type === 'image/svg+xml' || type === 'application/svg+xml') {\r\n        return res.text()\r\n      }\r\n\r\n      return res.arrayBuffer()\r\n    })\r\n    .then((data) => {\r\n      if (typeof data === 'string') {\r\n        try {\r\n          const newSrc = `data:image/svg+xml;base64,${btoa(data)}`\r\n          // Parse the SVG image size\r\n          const imageSize = parseSvgImageSize(url, data)\r\n          return [newSrc, ...imageSize] as ResolvedImageData\r\n        } catch (e) {\r\n          throw new Error(`Failed to parse SVG image: ${e.message}`)\r\n        }\r\n      }\r\n\r\n      const [newSrc, imageSize] = arrayBufferToDataUri(data)\r\n      return [newSrc, ...imageSize] as ResolvedImageData\r\n    })\r\n    .then((result) => {\r\n      cache.set(url, result)\r\n      return result\r\n    })\r\n    .catch((err) => {\r\n      console.error(`Can't load image ${url}: ` + err.message)\r\n      return [] as const\r\n    })\r\n\r\n  inflightRequests.set(url, promise)\r\n  return promise\r\n}\r\n\r\n/**\r\n * Inspects the first few bytes of a buffer to determine if\r\n * it matches the \"magic number\" of known file signatures.\r\n * https://en.wikipedia.org/wiki/List_of_file_signatures\r\n */\r\nfunction detectContentType(buffer: Uint8Array) {\r\n  if ([0xff, 0xd8, 0xff].every((b, i) => buffer[i] === b)) {\r\n    return JPEG\r\n  }\r\n  if (\r\n    [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a].every(\r\n      (b, i) => buffer[i] === b\r\n    )\r\n  ) {\r\n    return PNG\r\n  }\r\n  if ([0x47, 0x49, 0x46, 0x38].every((b, i) => buffer[i] === b)) {\r\n    return GIF\r\n  }\r\n  if (\r\n    [0x52, 0x49, 0x46, 0x46, 0, 0, 0, 0, 0x57, 0x45, 0x42, 0x50].every(\r\n      (b, i) => !b || buffer[i] === b\r\n    )\r\n  ) {\r\n    return WEBP\r\n  }\r\n  if ([0x3c, 0x3f, 0x78, 0x6d, 0x6c].every((b, i) => buffer[i] === b)) {\r\n    return SVG\r\n  }\r\n  if (\r\n    [0, 0, 0, 0, 0x66, 0x74, 0x79, 0x70, 0x61, 0x76, 0x69, 0x66].every(\r\n      (b, i) => !b || buffer[i] === b\r\n    )\r\n  ) {\r\n    return AVIF\r\n  }\r\n  return null\r\n}\r\n","/**\r\n * This module calculates the layout of a text string. Currently the only\r\n * supported inline node is text. All other nodes are using block layout.\r\n */\r\nimport type { LayoutContext } from './layout.js'\r\nimport type { Yoga } from 'yoga-wasm-web'\r\nimport getYoga from './yoga/index.js'\r\nimport {\r\n  v,\r\n  segment,\r\n  wordSeparators,\r\n  buildXMLString,\r\n  splitByBreakOpportunities,\r\n  isUndefined,\r\n} from './utils.js'\r\nimport buildText, { container } from './builder/text.js'\r\nimport { buildDropShadow } from './builder/shadow.js'\r\nimport buildDecoration from './builder/text-decoration.js'\r\nimport { Locale } from './language.js'\r\nimport { FontEngine } from './font.js'\r\n\r\nexport default async function* buildTextNodes(\r\n  content: string,\r\n  context: LayoutContext\r\n): AsyncGenerator<{ word: string; locale?: Locale }[], string, [any, any]> {\r\n  const Yoga = await getYoga()\r\n\r\n  const {\r\n    parentStyle,\r\n    inheritedStyle,\r\n    parent,\r\n    font,\r\n    id,\r\n    isInheritingTransform,\r\n    debug,\r\n    embedFont,\r\n    graphemeImages,\r\n    locale,\r\n    canLoadAdditionalAssets,\r\n  } = context\r\n\r\n  const {\r\n    textAlign,\r\n    textOverflow,\r\n    whiteSpace,\r\n    wordBreak,\r\n    lineHeight,\r\n    textTransform,\r\n    textWrap,\r\n    fontSize,\r\n    filter: cssFilter,\r\n    _inheritedBackgroundClipTextPath,\r\n  } = parentStyle\r\n\r\n  content = processTextTransform(content, textTransform as string, locale)\r\n\r\n  const {\r\n    content: _content,\r\n    shouldCollapseWhitespace,\r\n    allowSoftWrap,\r\n  } = processWhiteSpace(content, whiteSpace as string)\r\n\r\n  const { words, requiredBreaks, allowBreakWord } = processWordBreak(\r\n    _content,\r\n    wordBreak as string\r\n  )\r\n\r\n  const textContainer = createTextContainerNode(Yoga, textAlign as string)\r\n  parent.insertChild(textContainer, parent.getChildCount())\r\n\r\n  if (isUndefined(parentStyle.flexShrink)) {\r\n    parent.setFlexShrink(1)\r\n  }\r\n\r\n  // Get the correct font according to the container style.\r\n  // https://www.w3.org/TR/CSS2/visudet.html\r\n  let engine = font.getEngine(\r\n    fontSize as number,\r\n    lineHeight as number,\r\n    parentStyle as any,\r\n    locale\r\n  )\r\n\r\n  // Yield segments that are missing a font.\r\n  const wordsMissingFont = canLoadAdditionalAssets\r\n    ? segment(content, 'grapheme').filter((word) => !engine.has(word))\r\n    : []\r\n\r\n  yield wordsMissingFont.map((word) => {\r\n    return {\r\n      word,\r\n      locale,\r\n    }\r\n  })\r\n\r\n  if (wordsMissingFont.length) {\r\n    // Reload the engine with additional fonts.\r\n    engine = font.getEngine(\r\n      fontSize as number,\r\n      lineHeight as number,\r\n      parentStyle as any,\r\n      locale\r\n    )\r\n  }\r\n\r\n  // We can cache the measured width of each word as the measure function will be\r\n  // called multiple times.\r\n  const measureWordWidth = genMeasureWordWidth(engine, parentStyle)\r\n\r\n  function isImage(s: string): boolean {\r\n    return !!(graphemeImages && graphemeImages[s])\r\n  }\r\n\r\n  function measureWithCache(segments: string[]): number {\r\n    let width = 0\r\n\r\n    for (const s of segments) {\r\n      if (isImage(s)) {\r\n        width += fontSize as number\r\n      } else {\r\n        width += measureWordWidth(s)\r\n      }\r\n    }\r\n\r\n    return width\r\n  }\r\n\r\n  const calc = (\r\n    seg: string\r\n  ): {\r\n    originWidth: number\r\n    endingSpacesWidth: number\r\n  } => {\r\n    if (seg.length === 0) {\r\n      return {\r\n        originWidth: 0,\r\n        endingSpacesWidth: 0,\r\n      }\r\n    }\r\n\r\n    const originWidth = measureWithCache(segment(seg, 'grapheme'))\r\n\r\n    const afterTrimEndWidth =\r\n      seg.trimEnd() === seg\r\n        ? originWidth\r\n        : measureWithCache(segment(seg.trimEnd(), 'grapheme'))\r\n\r\n    return {\r\n      originWidth,\r\n      endingSpacesWidth: originWidth - afterTrimEndWidth,\r\n    }\r\n  }\r\n\r\n  // Global variables used to compute the text layout.\r\n  // @TODO: Use segments instead of words to properly support kerning.\r\n  let lineWidths = []\r\n  let baselines = []\r\n  let lineSegmentNumber = []\r\n  let texts = []\r\n  let wordPositionInLayout: (null | {\r\n    x: number\r\n    y: number\r\n    width: number\r\n    line: number\r\n    lineIndex: number\r\n    isImage: boolean\r\n  })[] = []\r\n\r\n  // With the given container width, compute the text layout.\r\n  function flow(width: number) {\r\n    let lines = 0\r\n    let _currentWidth = 0\r\n    let maxWidth = 0\r\n    let lineIndex = -1\r\n    let height = 0\r\n    let currentLineHeight = 0\r\n    let currentBaselineOffset = 0\r\n\r\n    lineWidths = []\r\n    lineSegmentNumber = [0]\r\n    texts = []\r\n    wordPositionInLayout = []\r\n\r\n    // We naively implement the width calculation without proper kerning.\r\n    // @TODO: Support different writing modes.\r\n    // @TODO: Support RTL languages.\r\n    let i = 0\r\n    while (i < words.length) {\r\n      let word = words[i]\r\n      const forceBreak = requiredBreaks[i]\r\n\r\n      let w = 0\r\n      let lineEndingSpacesWidth = 0\r\n\r\n      const { originWidth, endingSpacesWidth } = calc(word)\r\n\r\n      w = originWidth\r\n      lineEndingSpacesWidth = endingSpacesWidth\r\n\r\n      // When starting a new line from an empty line, we should push one extra\r\n      // line height.\r\n      if (forceBreak && currentLineHeight === 0) {\r\n        currentLineHeight = engine.height(word)\r\n      }\r\n\r\n      const allowedToPutAtBeginning = ',.!?:-@)>]}%#'.indexOf(word[0]) < 0\r\n      const allowedToJustify = !_currentWidth\r\n\r\n      const willWrap =\r\n        i &&\r\n        allowedToPutAtBeginning &&\r\n        // When determining whether a line break is necessary, the width of the\r\n        // trailing spaces is not included in the calculation, as the end boundary\r\n        // can be closely adjacent to the last non-space character.\r\n        // e.g.\r\n        // 'aaa bbb ccc'\r\n        // When the break line happens at the end of the `bbb`, what we see looks like this\r\n        // |aaa bbb|\r\n        // |ccc    |\r\n        _currentWidth + w > width + lineEndingSpacesWidth &&\r\n        allowSoftWrap\r\n\r\n      // Need to break the word if:\r\n      // - we have break-word\r\n      // - the word is wider than the container width\r\n      // - the word will be put at the beginning of the line\r\n      const needToBreakWord =\r\n        allowBreakWord &&\r\n        w > width &&\r\n        (!_currentWidth || willWrap || forceBreak)\r\n\r\n      if (needToBreakWord) {\r\n        // Break the word into multiple segments and continue the loop.\r\n        const chars = segment(word, 'grapheme')\r\n        words.splice(i, 1, ...chars)\r\n        if (_currentWidth > 0) {\r\n          // Start a new line, spaces can be ignored.\r\n          lineWidths.push(_currentWidth)\r\n          baselines.push(currentBaselineOffset)\r\n          lines++\r\n          height += currentLineHeight\r\n          _currentWidth = 0\r\n          currentLineHeight = 0\r\n          currentBaselineOffset = 0\r\n          lineSegmentNumber.push(1)\r\n          lineIndex = -1\r\n        }\r\n        continue\r\n      }\r\n      if (forceBreak || willWrap) {\r\n        // Start a new line, spaces can be ignored.\r\n        // @TODO Lack of support for Japanese spacing\r\n        if (shouldCollapseWhitespace && word === ' ') {\r\n          w = 0\r\n        }\r\n        lineWidths.push(_currentWidth)\r\n        baselines.push(currentBaselineOffset)\r\n        lines++\r\n        height += currentLineHeight\r\n        _currentWidth = w\r\n        currentLineHeight = w ? engine.height(word) : 0\r\n        currentBaselineOffset = w ? engine.baseline(word) : 0\r\n        lineSegmentNumber.push(1)\r\n        lineIndex = -1\r\n\r\n        // If it's naturally broken, we update the max width.\r\n        // Since if there are multiple lines, the width should fit the\r\n        // container.\r\n        if (!forceBreak) {\r\n          maxWidth = Math.max(maxWidth, width)\r\n        }\r\n      } else {\r\n        // It fits into the current line.\r\n        _currentWidth += w\r\n        const glyphHeight = engine.height(word)\r\n        if (glyphHeight > currentLineHeight) {\r\n          // Use the baseline of the highest segment as the baseline of the line.\r\n          currentLineHeight = glyphHeight\r\n          currentBaselineOffset = engine.baseline(word)\r\n        }\r\n        if (allowedToJustify) {\r\n          lineSegmentNumber[lineSegmentNumber.length - 1]++\r\n        }\r\n      }\r\n\r\n      if (allowedToJustify) {\r\n        lineIndex++\r\n      }\r\n\r\n      maxWidth = Math.max(maxWidth, _currentWidth)\r\n\r\n      let x = _currentWidth - w\r\n\r\n      if (w === 0) {\r\n        wordPositionInLayout.push({\r\n          y: height,\r\n          x,\r\n          width: 0,\r\n          line: lines,\r\n          lineIndex,\r\n          isImage: false,\r\n        })\r\n      } else {\r\n        const _texts = segment(word, 'word')\r\n\r\n        for (let j = 0; j < _texts.length; j++) {\r\n          const _text = _texts[j]\r\n          let _width = 0\r\n          let _isImage = false\r\n\r\n          if (isImage(_text)) {\r\n            _width = fontSize as number\r\n            _isImage = true\r\n          } else {\r\n            _width = measureWordWidth(_text)\r\n          }\r\n\r\n          texts.push(_text)\r\n          wordPositionInLayout.push({\r\n            y: height,\r\n            x,\r\n            width: _width,\r\n            line: lines,\r\n            lineIndex,\r\n            isImage: _isImage,\r\n          })\r\n\r\n          x += _width\r\n        }\r\n      }\r\n\r\n      i++\r\n    }\r\n\r\n    if (_currentWidth) {\r\n      lines++\r\n      lineWidths.push(_currentWidth)\r\n      baselines.push(currentBaselineOffset)\r\n      height += currentLineHeight\r\n    }\r\n\r\n    // @TODO: Support `line-height`.\r\n    return { width: maxWidth, height }\r\n  }\r\n\r\n  // It's possible that the text's measured size is different from the container's\r\n  // size, because the container might have a fixed width or height or being\r\n  // expanded by its parent.\r\n  let measuredTextSize = { width: 0, height: 0 }\r\n  textContainer.setMeasureFunc((containerWidth) => {\r\n    const { width, height } = flow(containerWidth)\r\n\r\n    // When doing `text-wrap: balance`, we reflow the text multiple times\r\n    // using binary search to find the best width.\r\n    // https://www.w3.org/TR/css-text-4/#valdef-text-wrap-balance\r\n    if (textWrap === 'balance') {\r\n      let l = width / 2\r\n      let r = width\r\n      let m: number = width\r\n      while (l + 1 < r) {\r\n        m = (l + r) / 2\r\n        const { height: mHeight } = flow(m)\r\n        if (mHeight > height) {\r\n          l = m\r\n        } else {\r\n          r = m\r\n        }\r\n      }\r\n      flow(r)\r\n      measuredTextSize = { width: r, height }\r\n      return { width: r, height }\r\n    }\r\n\r\n    measuredTextSize = { width, height }\r\n    return { width, height }\r\n  })\r\n\r\n  const [x, y] = yield\r\n\r\n  let result = ''\r\n  let backgroundClipDef = ''\r\n\r\n  const clipPathId = inheritedStyle._inheritedClipPathId as string | undefined\r\n  const overflowMaskId = inheritedStyle._inheritedMaskId as number | undefined\r\n\r\n  const {\r\n    left: containerLeft,\r\n    top: containerTop,\r\n    width: containerWidth,\r\n    height: containerHeight,\r\n  } = textContainer.getComputedLayout()\r\n\r\n  const parentContainerInnerWidth =\r\n    parent.getComputedWidth() -\r\n    parent.getComputedPadding(Yoga.EDGE_LEFT) -\r\n    parent.getComputedPadding(Yoga.EDGE_RIGHT) -\r\n    parent.getComputedBorder(Yoga.EDGE_LEFT) -\r\n    parent.getComputedBorder(Yoga.EDGE_RIGHT)\r\n\r\n  // Attach offset to the current node.\r\n  const left = x + containerLeft\r\n  const top = y + containerTop\r\n\r\n  const { matrix, opacity } = container(\r\n    {\r\n      left: containerLeft,\r\n      top: containerTop,\r\n      width: containerWidth,\r\n      height: containerHeight,\r\n      isInheritingTransform,\r\n    },\r\n    parentStyle\r\n  )\r\n\r\n  let filter = ''\r\n  if (parentStyle.textShadowOffset) {\r\n    let { textShadowColor, textShadowOffset, textShadowRadius } =\r\n      parentStyle as any\r\n    if (!Array.isArray(parentStyle.textShadowOffset)) {\r\n      textShadowColor = [textShadowColor]\r\n      textShadowOffset = [textShadowOffset]\r\n      textShadowRadius = [textShadowRadius]\r\n    }\r\n\r\n    filter = buildDropShadow(\r\n      {\r\n        width: measuredTextSize.width,\r\n        height: measuredTextSize.height,\r\n        id,\r\n      },\r\n      {\r\n        shadowColor: textShadowColor,\r\n        shadowOffset: textShadowOffset,\r\n        shadowRadius: textShadowRadius,\r\n      }\r\n    )\r\n\r\n    filter = buildXMLString('defs', {}, filter)\r\n  }\r\n\r\n  let decorationShape = ''\r\n  let mergedPath = ''\r\n  let extra = ''\r\n  let skippedLine = -1\r\n  let ellipsisWidth = textOverflow === 'ellipsis' ? measureWithCache(['…']) : 0\r\n  let spaceWidth = textOverflow === 'ellipsis' ? measureWithCache([' ']) : 0\r\n  let decorationLines: Record<number, null | number[]> = {}\r\n  let wordBuffer: string | null = null\r\n  let bufferedOffset = 0\r\n\r\n  for (let i = 0; i < texts.length; i++) {\r\n    // Skip whitespace and empty characters.\r\n    const layout = wordPositionInLayout[i]\r\n\r\n    if (!layout) continue\r\n\r\n    let text = texts[i]\r\n    let path: string | null = null\r\n    let isLastDisplayedBeforeEllipsis = false\r\n\r\n    const image = graphemeImages ? graphemeImages[text] : null\r\n\r\n    let topOffset = layout.y\r\n    let leftOffset = layout.x\r\n    const width = layout.width\r\n    const line = layout.line\r\n\r\n    if (line === skippedLine) {\r\n      continue\r\n    }\r\n\r\n    // When `text-align` is `justify`, the width of the line will be adjusted.\r\n    let extendedWidth = false\r\n\r\n    if (lineWidths.length > 1) {\r\n      // Calculate alignment. Note that for Flexbox, there is only text\r\n      // alignment when the container is multi-line.\r\n      const remainingWidth = containerWidth - lineWidths[line]\r\n      if (textAlign === 'right' || textAlign === 'end') {\r\n        leftOffset += remainingWidth\r\n      } else if (textAlign === 'center') {\r\n        leftOffset += remainingWidth / 2\r\n      } else if (textAlign === 'justify') {\r\n        // Don't justify the last line.\r\n        if (line < lineWidths.length - 1) {\r\n          const segments = lineSegmentNumber[line]\r\n          const gutter = segments > 1 ? remainingWidth / (segments - 1) : 0\r\n          leftOffset += gutter * layout.lineIndex\r\n          extendedWidth = true\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!decorationLines[line]) {\r\n      decorationLines[line] = [\r\n        leftOffset,\r\n        extendedWidth ? containerWidth : lineWidths[line],\r\n      ]\r\n    }\r\n\r\n    if (textOverflow === 'ellipsis') {\r\n      if (lineWidths[line] > parentContainerInnerWidth) {\r\n        if (\r\n          layout.x + width + ellipsisWidth + spaceWidth >\r\n          parentContainerInnerWidth\r\n        ) {\r\n          const chars = segment(text, 'grapheme', locale)\r\n          let subset = ''\r\n          let resolvedWidth = 0\r\n          for (const char of chars) {\r\n            const w = layout.x + measureWithCache([subset + char])\r\n            if (\r\n              // Keep at least one character:\r\n              // > The first character or atomic inline-level element on a line\r\n              // must be clipped rather than ellipsed.\r\n              // https://drafts.csswg.org/css-overflow/#text-overflow\r\n              subset &&\r\n              w + ellipsisWidth > parentContainerInnerWidth\r\n            ) {\r\n              break\r\n            }\r\n            subset += char\r\n            resolvedWidth = w\r\n          }\r\n          text = subset + '…'\r\n          skippedLine = line\r\n          decorationLines[line][1] = resolvedWidth\r\n          isLastDisplayedBeforeEllipsis = true\r\n        }\r\n      }\r\n    }\r\n\r\n    const baselineOfLine = baselines[line]\r\n    const baselineOfWord = engine.baseline(text)\r\n    const heightOfWord = engine.height(text)\r\n    const baselineDelta = baselineOfLine - baselineOfWord\r\n\r\n    if (image) {\r\n      // For images, we remove the baseline offset.\r\n      topOffset += 0\r\n    } else if (embedFont) {\r\n      // If the current word and the next word are on the same line, we try to\r\n      // merge them together to better handle the kerning.\r\n      if (\r\n        !wordSeparators.includes(text) &&\r\n        texts[i + 1] &&\r\n        wordPositionInLayout[i + 1] &&\r\n        !wordPositionInLayout[i + 1].isImage &&\r\n        topOffset === wordPositionInLayout[i + 1].y &&\r\n        !isLastDisplayedBeforeEllipsis\r\n      ) {\r\n        if (wordBuffer === null) {\r\n          bufferedOffset = leftOffset\r\n        }\r\n        wordBuffer = wordBuffer === null ? text : wordBuffer + text\r\n        continue\r\n      }\r\n\r\n      const finalizedSegment = wordBuffer === null ? text : wordBuffer + text\r\n      const finalizedLeftOffset =\r\n        wordBuffer === null ? leftOffset : bufferedOffset\r\n      const finalizedWidth = layout.width + leftOffset - finalizedLeftOffset\r\n\r\n      path = engine.getSVG(finalizedSegment, {\r\n        ...parentStyle,\r\n        left: left + finalizedLeftOffset,\r\n        // Since we need to pass the baseline position, add the ascender to the top.\r\n        top: top + topOffset + baselineOfWord + baselineDelta,\r\n        letterSpacing: parentStyle.letterSpacing,\r\n      })\r\n\r\n      wordBuffer = null\r\n\r\n      if (debug) {\r\n        extra +=\r\n          // Glyph\r\n          buildXMLString('rect', {\r\n            x: left + finalizedLeftOffset,\r\n            y: top + topOffset + baselineDelta,\r\n            width: finalizedWidth,\r\n            height: heightOfWord,\r\n            fill: 'transparent',\r\n            stroke: '#575eff',\r\n            'stroke-width': 1,\r\n            transform: matrix ? matrix : undefined,\r\n            'clip-path': clipPathId ? `url(#${clipPathId})` : undefined,\r\n          }) +\r\n          // Baseline\r\n          buildXMLString('line', {\r\n            x1: left + leftOffset,\r\n            x2: left + leftOffset + layout.width,\r\n            y1: top + topOffset + baselineDelta + baselineOfWord,\r\n            y2: top + topOffset + baselineDelta + baselineOfWord,\r\n            stroke: '#14c000',\r\n            'stroke-width': 1,\r\n            transform: matrix ? matrix : undefined,\r\n            'clip-path': clipPathId ? `url(#${clipPathId})` : undefined,\r\n          })\r\n      }\r\n    } else {\r\n      // We need manually add the font ascender height to ensure it starts\r\n      // at the baseline because <text>'s alignment baseline is set to `hanging`\r\n      // by default and supported to change in SVG 1.1.\r\n      topOffset += baselineOfWord + baselineDelta\r\n    }\r\n\r\n    // Get the decoration shape.\r\n    if (parentStyle.textDecorationLine) {\r\n      // If it's the last word in the current line.\r\n      if (line !== wordPositionInLayout[i + 1]?.line || skippedLine === line) {\r\n        const deco = decorationLines[line]\r\n        if (deco && !deco[2]) {\r\n          decorationShape += buildDecoration(\r\n            {\r\n              left: left + deco[0],\r\n              top: top + heightOfWord * +line,\r\n              width: deco[1],\r\n              ascender: engine.baseline(text),\r\n              clipPathId,\r\n            },\r\n            parentStyle\r\n          )\r\n          deco[2] = 1\r\n        }\r\n      }\r\n    }\r\n\r\n    if (path !== null) {\r\n      mergedPath += path + ' '\r\n    } else {\r\n      const [t, shape] = buildText(\r\n        {\r\n          content: text,\r\n          filter,\r\n          id,\r\n          left: left + leftOffset,\r\n          top: top + topOffset,\r\n          width,\r\n          height: heightOfWord,\r\n          matrix,\r\n          opacity,\r\n          image,\r\n          clipPathId,\r\n          debug,\r\n          shape: !!_inheritedBackgroundClipTextPath,\r\n          decorationShape,\r\n        },\r\n        parentStyle\r\n      )\r\n      result += t\r\n      backgroundClipDef += shape\r\n      decorationShape = ''\r\n    }\r\n  }\r\n\r\n  // Embed the font as path.\r\n  if (mergedPath) {\r\n    const p =\r\n      parentStyle.color !== 'transparent' && opacity !== 0\r\n        ? buildXMLString('path', {\r\n            fill: parentStyle.color,\r\n            d: mergedPath,\r\n            transform: matrix ? matrix : undefined,\r\n            opacity: opacity !== 1 ? opacity : undefined,\r\n            'clip-path': clipPathId ? `url(#${clipPathId})` : undefined,\r\n            mask: overflowMaskId ? `url(#${overflowMaskId})` : undefined,\r\n\r\n            style: cssFilter ? `filter:${cssFilter}` : undefined,\r\n          })\r\n        : ''\r\n\r\n    if (_inheritedBackgroundClipTextPath) {\r\n      backgroundClipDef = buildXMLString('path', {\r\n        d: mergedPath,\r\n        transform: matrix ? matrix : undefined,\r\n      })\r\n    }\r\n\r\n    result +=\r\n      (filter\r\n        ? filter +\r\n          buildXMLString(\r\n            'g',\r\n            { filter: `url(#satori_s-${id})` },\r\n            p + decorationShape\r\n          )\r\n        : p + decorationShape) + extra\r\n  }\r\n\r\n  // Attach information to the parent node.\r\n  if (backgroundClipDef) {\r\n    ;(parentStyle._inheritedBackgroundClipTextPath as any).value +=\r\n      backgroundClipDef\r\n  }\r\n\r\n  return result\r\n}\r\n\r\nfunction processTextTransform(\r\n  content: string,\r\n  textTransform: string,\r\n  locale?: Locale\r\n): string {\r\n  if (textTransform === 'uppercase') {\r\n    content = content.toLocaleUpperCase(locale)\r\n  } else if (textTransform === 'lowercase') {\r\n    content = content.toLocaleLowerCase(locale)\r\n  } else if (textTransform === 'capitalize') {\r\n    content = segment(content, 'word', locale)\r\n      // For each word...\r\n      .map((word) => {\r\n        // ...split into graphemes...\r\n        return segment(word, 'grapheme', locale)\r\n          .map((grapheme, index) => {\r\n            // ...and make the first grapheme uppercase\r\n            return index === 0 ? grapheme.toLocaleUpperCase(locale) : grapheme\r\n          })\r\n          .join('')\r\n      })\r\n      .join('')\r\n  }\r\n\r\n  return content\r\n}\r\n\r\nfunction processWordBreak(content, wordBreak: string) {\r\n  const allowBreakWord = ['break-all', 'break-word'].includes(wordBreak)\r\n\r\n  const { words, requiredBreaks } = splitByBreakOpportunities(\r\n    content,\r\n    wordBreak\r\n  )\r\n\r\n  return { words, requiredBreaks, allowBreakWord }\r\n}\r\n\r\nfunction processWhiteSpace(content: string, whiteSpace: string) {\r\n  const shouldKeepLinebreak = ['pre', 'pre-wrap', 'pre-line'].includes(\r\n    whiteSpace\r\n  )\r\n\r\n  const shouldCollapseWhitespace = !['pre', 'pre-wrap'].includes(whiteSpace)\r\n\r\n  const allowSoftWrap = !['pre', 'nowrap'].includes(whiteSpace)\r\n\r\n  if (!shouldKeepLinebreak) {\r\n    content = content.replace(/\\n/g, ' ')\r\n  }\r\n\r\n  if (shouldCollapseWhitespace) {\r\n    content = content.replace(/[ ]+/g, ' ')\r\n    content = content.trim()\r\n  }\r\n\r\n  return { content, shouldCollapseWhitespace, allowSoftWrap }\r\n}\r\n\r\nfunction createTextContainerNode(\r\n  Yoga: Yoga,\r\n  textAlign: string\r\n): ReturnType<Yoga['Node']['create']> {\r\n  // Create a container node for this text fragment.\r\n  const textContainer = Yoga.Node.create()\r\n  textContainer.setAlignItems(Yoga.ALIGN_BASELINE)\r\n  textContainer.setJustifyContent(\r\n    v(\r\n      textAlign,\r\n      {\r\n        left: Yoga.JUSTIFY_FLEX_START,\r\n        right: Yoga.JUSTIFY_FLEX_END,\r\n        center: Yoga.JUSTIFY_CENTER,\r\n        justify: Yoga.JUSTIFY_SPACE_BETWEEN,\r\n        // We don't have other writing modes yet.\r\n        start: Yoga.JUSTIFY_FLEX_START,\r\n        end: Yoga.JUSTIFY_FLEX_END,\r\n      },\r\n      Yoga.JUSTIFY_FLEX_START,\r\n      'textAlign'\r\n    )\r\n  )\r\n\r\n  return textContainer\r\n}\r\n\r\nfunction genMeasureWordWidth(\r\n  engine: FontEngine,\r\n  parentStyle: any\r\n): (s: string) => number {\r\n  const wordWidthCache = new Map<string, number>()\r\n\r\n  return function measureWordWidth(s: string): number {\r\n    if (wordWidthCache.has(s)) {\r\n      return wordWidthCache.get(s)\r\n    }\r\n\r\n    const width = engine.measure(s, parentStyle)\r\n    wordWidthCache.set(s, width)\r\n\r\n    return width\r\n  }\r\n}\r\n","import type { ParsedTransformOrigin } from '../transform-origin.js'\r\nimport transform from './transform.js'\r\nimport { buildXMLString } from '../utils.js'\r\n\r\nexport function container(\r\n  {\r\n    left,\r\n    top,\r\n    width,\r\n    height,\r\n    isInheritingTransform,\r\n  }: {\r\n    left: number\r\n    top: number\r\n    width: number\r\n    height: number\r\n    isInheritingTransform: boolean\r\n  },\r\n  style: Record<string, number | string>\r\n) {\r\n  let matrix = ''\r\n  let opacity = 1\r\n\r\n  if (style.transform) {\r\n    matrix = transform(\r\n      {\r\n        left,\r\n        top,\r\n        width,\r\n        height,\r\n      },\r\n      style.transform as unknown as number[],\r\n      isInheritingTransform,\r\n      style.transformOrigin as ParsedTransformOrigin | undefined\r\n    )\r\n  }\r\n\r\n  if (style.opacity !== undefined) {\r\n    opacity = +style.opacity\r\n  }\r\n\r\n  return { matrix, opacity }\r\n}\r\n\r\nexport default function buildText(\r\n  {\r\n    id,\r\n    content,\r\n    filter,\r\n    left,\r\n    top,\r\n    width,\r\n    height,\r\n    matrix,\r\n    opacity,\r\n    image,\r\n    clipPathId,\r\n    debug,\r\n    shape,\r\n    decorationShape,\r\n  }: {\r\n    content: string\r\n    filter: string\r\n    id: string\r\n    left: number\r\n    top: number\r\n    width: number\r\n    height: number\r\n    matrix: string\r\n    opacity: number\r\n    image: string | null\r\n    clipPathId?: string\r\n    debug?: boolean\r\n    shape?: boolean\r\n    decorationShape?: string\r\n  },\r\n  style: Record<string, number | string>\r\n) {\r\n  let extra = ''\r\n  if (debug) {\r\n    extra = buildXMLString('rect', {\r\n      x: left,\r\n      y: top - height,\r\n      width,\r\n      height,\r\n      fill: 'transparent',\r\n      stroke: '#575eff',\r\n      'stroke-width': 1,\r\n      transform: matrix || undefined,\r\n      'clip-path': clipPathId ? `url(#${clipPathId})` : undefined,\r\n    })\r\n  }\r\n\r\n  // This grapheme should be rendered as an image.\r\n  if (image) {\r\n    const shapeProps = {\r\n      href: image,\r\n      x: left,\r\n      y: top,\r\n      width,\r\n      height,\r\n      transform: matrix || undefined,\r\n      'clip-path': clipPathId ? `url(#${clipPathId})` : undefined,\r\n      style: style.filter ? `filter:${style.filter}` : undefined,\r\n    }\r\n    return [\r\n      (filter ? `${filter}<g filter=\"url(#satori_s-${id})\">` : '') +\r\n        buildXMLString('image', {\r\n          ...shapeProps,\r\n          opacity: opacity !== 1 ? opacity : undefined,\r\n        }) +\r\n        (decorationShape || '') +\r\n        (filter ? '</g>' : '') +\r\n        extra,\r\n      // SVG doesn't support `<image>` as the shape.\r\n      '',\r\n    ]\r\n  }\r\n\r\n  // Do not embed the font, use <text> with the raw content instead.\r\n  const shapeProps = {\r\n    x: left,\r\n    y: top,\r\n    width,\r\n    height,\r\n    'font-weight': style.fontWeight,\r\n    'font-style': style.fontStyle,\r\n    'font-size': style.fontSize,\r\n    'font-family': style.fontFamily,\r\n    'letter-spacing': style.letterSpacing || undefined,\r\n    transform: matrix || undefined,\r\n    'clip-path': clipPathId ? `url(#${clipPathId})` : undefined,\r\n    style: style.filter ? `filter:${style.filter}` : undefined,\r\n  }\r\n  return [\r\n    (filter ? `${filter}<g filter=\"url(#satori_s-${id})\">` : '') +\r\n      buildXMLString(\r\n        'text',\r\n        {\r\n          ...shapeProps,\r\n          fill: style.color,\r\n          opacity: opacity !== 1 ? opacity : undefined,\r\n        },\r\n        content\r\n      ) +\r\n      (decorationShape || '') +\r\n      (filter ? '</g>' : '') +\r\n      extra,\r\n    shape ? buildXMLString('text', shapeProps, content) : '',\r\n  ]\r\n}\r\n","import { multiply } from '../utils.js'\r\nimport type { ParsedTransformOrigin } from '../transform-origin.js'\r\n\r\nconst baseMatrix = [1, 0, 0, 1, 0, 0]\r\n\r\n// Mutate the array in place.\r\nfunction resolveTransforms(transforms: any[], width: number, height: number) {\r\n  let matrix = [...baseMatrix]\r\n\r\n  // Handle CSS transforms To make it easier, we convert different transform\r\n  // types directly to a matrix and apply it recursively to all its children.\r\n  // Transforms are applied from right to left.\r\n  // eslint-disable-next-line @typescript-eslint/no-shadow\r\n  for (const transform of transforms) {\r\n    const type = Object.keys(transform)[0]\r\n    let v = transform[type]\r\n\r\n    // Resolve percentages based on the element's final size.\r\n    if (typeof v === 'string') {\r\n      if (type === 'translateX') {\r\n        v = (parseFloat(v) / 100) * width\r\n        // Override the original object.\r\n        transform[type] = v\r\n      } else if (type === 'translateY') {\r\n        v = (parseFloat(v) / 100) * height\r\n        transform[type] = v\r\n      } else {\r\n        throw new Error(`Invalid transform: \"${type}: ${v}\".`)\r\n      }\r\n    }\r\n\r\n    let len = v as number\r\n\r\n    const transformMatrix = [...baseMatrix]\r\n    switch (type) {\r\n      case 'translateX':\r\n        transformMatrix[4] = len\r\n        break\r\n      case 'translateY':\r\n        transformMatrix[5] = len\r\n        break\r\n      case 'scale':\r\n        transformMatrix[0] = len\r\n        transformMatrix[3] = len\r\n        break\r\n      case 'scaleX':\r\n        transformMatrix[0] = len\r\n        break\r\n      case 'scaleY':\r\n        transformMatrix[3] = len\r\n        break\r\n      case 'rotate': {\r\n        const rad = (len * Math.PI) / 180\r\n        const c = Math.cos(rad)\r\n        const s = Math.sin(rad)\r\n        transformMatrix[0] = c\r\n        transformMatrix[1] = s\r\n        transformMatrix[2] = -s\r\n        transformMatrix[3] = c\r\n        break\r\n      }\r\n      case 'skewX':\r\n        transformMatrix[2] = Math.tan((len * Math.PI) / 180)\r\n        break\r\n      case 'skewY':\r\n        transformMatrix[1] = Math.tan((len * Math.PI) / 180)\r\n        break\r\n    }\r\n    matrix = multiply(transformMatrix, matrix)\r\n  }\r\n\r\n  transforms.splice(0, transforms.length)\r\n  transforms.push(...matrix)\r\n  ;(transforms as any).__resolved = true\r\n}\r\n\r\nexport default function transform(\r\n  {\r\n    left,\r\n    top,\r\n    width,\r\n    height,\r\n  }: {\r\n    left: number\r\n    top: number\r\n    width: number\r\n    height: number\r\n  },\r\n  transforms: number[],\r\n  isInheritingTransform: boolean,\r\n  transformOrigin?: ParsedTransformOrigin\r\n) {\r\n  let result: number[]\r\n\r\n  if (!(transforms as any).__resolved) {\r\n    resolveTransforms(transforms, width, height)\r\n  }\r\n\r\n  let matrix = transforms\r\n\r\n  // Calculate the transform origin.\r\n  if (isInheritingTransform) {\r\n    result = matrix\r\n  } else {\r\n    const xOrigin =\r\n      transformOrigin?.xAbsolute ??\r\n      ((transformOrigin?.xRelative ?? 50) * width) / 100\r\n    const yOrigin =\r\n      transformOrigin?.yAbsolute ??\r\n      ((transformOrigin?.yRelative ?? 50) * height) / 100\r\n\r\n    // If this element is the transform target, we attach the origin coordinates\r\n    // to this matrix.\r\n    const x = left + xOrigin\r\n    const y = top + yOrigin\r\n\r\n    // Due to the different coordinate systems, we need to move the shape to the\r\n    // origin first, then apply the matrix, then move it back.\r\n    result = multiply(\r\n      [1, 0, 0, 1, x, y],\r\n      multiply(matrix, [1, 0, 0, 1, -x, -y])\r\n    )\r\n\r\n    // And we need to apply its parent transform if it has one.\r\n    if ((matrix as any).__parent) {\r\n      result = multiply((matrix as any).__parent, result)\r\n    }\r\n\r\n    // Mutate self.\r\n    matrix.splice(0, 6, ...result)\r\n  }\r\n\r\n  return `matrix(${result.map((v) => v.toFixed(2)).join(',')})`\r\n}\r\n","// @TODO: It seems that SVG filters are pretty expensive for resvg, PNG\r\n// generation time 10x'd when adding this filter (WASM in browser).\r\n// https://drafts.fxtf.org/filter-effects/#feGaussianBlurElement\r\n\r\nimport { buildXMLString } from '../utils.js'\r\n\r\nfunction shiftPath(path: string, dx: number, dy: number) {\r\n  return path.replace(\r\n    /([MA])([0-9.-]+),([0-9.-]+)/g,\r\n    function (_, command, x, y) {\r\n      return command + (parseFloat(x) + dx) + ',' + (parseFloat(y) + dy)\r\n    }\r\n  )\r\n}\r\n\r\n// The scale is used to make the filter area larger than the bounding box,\r\n// because usually the given measured text bounding is larger than the path\r\n// bounding.\r\n// The text bounding box is measured via the font metrics, which is not the same\r\n// as the actual content. For example, the text bounding box of \"A\" is larger\r\n// than the actual \"a\" path but they have the same font metrics.\r\n// This scale can be adjusted to prevent the filter from cutting off the text.\r\nconst SCALE = 1.1\r\n\r\nexport function buildDropShadow(\r\n  { id, width, height }: { id: string; width: number; height: number },\r\n  style: Record<string, any>\r\n) {\r\n  if (\r\n    !style.shadowColor ||\r\n    !style.shadowOffset ||\r\n    typeof style.shadowRadius === 'undefined'\r\n  ) {\r\n    return ''\r\n  }\r\n\r\n  const shadowCount = style.shadowColor.length\r\n  let effects = ''\r\n  let merge = ''\r\n\r\n  // There could be multiple shadows, we need to get the maximum bounding box\r\n  // and use `feMerge` to merge them together.\r\n  let left = 0\r\n  let right = width\r\n  let top = 0\r\n  let bottom = height\r\n  for (let i = 0; i < shadowCount; i++) {\r\n    // Expand the area for the filter to prevent it from cutting off.\r\n    const grow = (style.shadowRadius[i] * style.shadowRadius[i]) / 4\r\n    left = Math.min(style.shadowOffset[i].width - grow, left)\r\n    right = Math.max(style.shadowOffset[i].width + grow + width, right)\r\n    top = Math.min(style.shadowOffset[i].height - grow, top)\r\n    bottom = Math.max(style.shadowOffset[i].height + grow + height, bottom)\r\n\r\n    effects += buildXMLString('feDropShadow', {\r\n      dx: style.shadowOffset[i].width,\r\n      dy: style.shadowOffset[i].height,\r\n      stdDeviation:\r\n        // According to the spec, we use the half of the blur radius as the standard\r\n        // deviation for the filter.\r\n        // > the image that would be generated by applying to the shadow a Gaussian\r\n        // > blur with a standard deviation equal to half the blur radius\r\n        // > https://www.w3.org/TR/css-backgrounds-3/#shadow-blur\r\n        style.shadowRadius[i] / 2,\r\n      'flood-color': style.shadowColor[i],\r\n      'flood-opacity': 1,\r\n      ...(shadowCount > 1\r\n        ? {\r\n            in: 'SourceGraphic',\r\n            result: `satori_s-${id}-result-${i}`,\r\n          }\r\n        : {}),\r\n    })\r\n\r\n    if (shadowCount > 1) {\r\n      // Merge needs to be in reverse order.\r\n      merge =\r\n        buildXMLString('feMergeNode', {\r\n          in: `satori_s-${id}-result-${i}`,\r\n        }) + merge\r\n    }\r\n  }\r\n\r\n  return buildXMLString(\r\n    'filter',\r\n    {\r\n      id: `satori_s-${id}`,\r\n      x: ((left / width) * 100 * SCALE).toFixed(2) + '%',\r\n      y: ((top / height) * 100 * SCALE).toFixed(2) + '%',\r\n      width: (((right - left) / width) * 100 * SCALE).toFixed(2) + '%',\r\n      height: (((bottom - top) / height) * 100 * SCALE).toFixed(2) + '%',\r\n    },\r\n    effects + (merge ? buildXMLString('feMerge', {}, merge) : '')\r\n  )\r\n}\r\n\r\nexport function boxShadow(\r\n  {\r\n    width,\r\n    height,\r\n    shape,\r\n    opacity,\r\n    id,\r\n  }: {\r\n    width: number\r\n    height: number\r\n    shape: string\r\n    opacity: number\r\n    id: string\r\n  },\r\n  style: Record<string, any>\r\n) {\r\n  if (!style.boxShadow) return null\r\n\r\n  let shadow = ''\r\n  let innerShadow = ''\r\n\r\n  for (let i = style.boxShadow.length - 1; i >= 0; i--) {\r\n    let s = ''\r\n\r\n    const shadowStyle = style.boxShadow[i]\r\n\r\n    if (shadowStyle.spreadRadius && shadowStyle.inset) {\r\n      shadowStyle.spreadRadius = -shadowStyle.spreadRadius\r\n    }\r\n\r\n    // Expand the area for the filter to prevent it from cutting off.\r\n    const grow =\r\n      (shadowStyle.blurRadius * shadowStyle.blurRadius) / 4 +\r\n      (shadowStyle.spreadRadius || 0)\r\n\r\n    const left = Math.min(\r\n      -grow - (shadowStyle.inset ? shadowStyle.offsetX : 0),\r\n      0\r\n    )\r\n    const right = Math.max(\r\n      grow + width - (shadowStyle.inset ? shadowStyle.offsetX : 0),\r\n      width\r\n    )\r\n    const top = Math.min(\r\n      -grow - (shadowStyle.inset ? shadowStyle.offsetY : 0),\r\n      0\r\n    )\r\n    const bottom = Math.max(\r\n      grow + height - (shadowStyle.inset ? shadowStyle.offsetY : 0),\r\n      height\r\n    )\r\n\r\n    const sid = `satori_s-${id}-${i}`\r\n    const maskId = `satori_ms-${id}-${i}`\r\n    const shapeWithSpread = shadowStyle.spreadRadius\r\n      ? shape.replace(\r\n          'stroke-width=\"0\"',\r\n          `stroke-width=\"${shadowStyle.spreadRadius * 2}\"`\r\n        )\r\n      : shape\r\n\r\n    s += buildXMLString(\r\n      'mask',\r\n      {\r\n        id: maskId,\r\n        maskUnits: 'userSpaceOnUse',\r\n      },\r\n      buildXMLString('rect', {\r\n        x: 0,\r\n        y: 0,\r\n        width: style._viewportWidth || '100%',\r\n        height: style._viewportHeight || '100%',\r\n        fill: shadowStyle.inset ? '#000' : '#fff',\r\n      }) +\r\n        shapeWithSpread\r\n          .replace(\r\n            'fill=\"#fff\"',\r\n            shadowStyle.inset ? 'fill=\"#fff\"' : 'fill=\"#000\"'\r\n          )\r\n          .replace('stroke=\"#fff\"', '')\r\n    )\r\n\r\n    let finalShape = shapeWithSpread\r\n      .replace(/d=\"([^\"]+)\"/, (_, path) => {\r\n        return (\r\n          'd=\"' +\r\n          shiftPath(path, shadowStyle.offsetX, shadowStyle.offsetY) +\r\n          '\"'\r\n        )\r\n      })\r\n      .replace(/x=\"([^\"]+)\"/, (_, x) => {\r\n        return 'x=\"' + (parseFloat(x) + shadowStyle.offsetX) + '\"'\r\n      })\r\n      .replace(/y=\"([^\"]+)\"/, (_, y) => {\r\n        return 'y=\"' + (parseFloat(y) + shadowStyle.offsetY) + '\"'\r\n      })\r\n\r\n    // Negative spread radius, we need another mask here.\r\n    if (shadowStyle.spreadRadius && shadowStyle.spreadRadius < 0) {\r\n      s += buildXMLString(\r\n        'mask',\r\n        {\r\n          id: maskId + '-neg',\r\n          maskUnits: 'userSpaceOnUse',\r\n        },\r\n        finalShape\r\n          .replace('stroke=\"#fff\"', 'stroke=\"#000\"')\r\n          .replace(\r\n            /stroke-width=\"[^\"]+\"/,\r\n            `stroke-width=\"${-shadowStyle.spreadRadius * 2}\"`\r\n          )\r\n      )\r\n    }\r\n\r\n    if (shadowStyle.spreadRadius && shadowStyle.spreadRadius < 0) {\r\n      finalShape = buildXMLString(\r\n        'g',\r\n        {\r\n          mask: `url(#${maskId}-neg)`,\r\n        },\r\n        finalShape\r\n      )\r\n    }\r\n\r\n    s +=\r\n      buildXMLString(\r\n        'defs',\r\n        {},\r\n        buildXMLString(\r\n          'filter',\r\n          {\r\n            id: sid,\r\n            x: `${(left / width) * 100}%`,\r\n            y: `${(top / height) * 100}%`,\r\n            width: `${((right - left) / width) * 100}%`,\r\n            height: `${((bottom - top) / height) * 100}%`,\r\n          },\r\n          buildXMLString('feGaussianBlur', {\r\n            // According to the spec, we use the half of the blur radius as the standard\r\n            // deviation for the filter.\r\n            // > the image that would be generated by applying to the shadow a Gaussian\r\n            // > blur with a standard deviation equal to half the blur radius\r\n            // > https://www.w3.org/TR/css-backgrounds-3/#shadow-blur\r\n            stdDeviation: shadowStyle.blurRadius / 2,\r\n            result: 'b',\r\n          }) +\r\n            buildXMLString('feFlood', {\r\n              'flood-color': shadowStyle.color,\r\n              in: 'SourceGraphic',\r\n              result: 'f',\r\n            }) +\r\n            buildXMLString('feComposite', {\r\n              in: 'f',\r\n              in2: 'b',\r\n              operator: shadowStyle.inset ? 'out' : 'in',\r\n            })\r\n        )\r\n      ) +\r\n      buildXMLString(\r\n        'g',\r\n        {\r\n          mask: `url(#${maskId})`,\r\n          filter: `url(#${sid})`,\r\n          opacity: opacity,\r\n        },\r\n        finalShape\r\n      )\r\n\r\n    if (shadowStyle.inset) {\r\n      innerShadow += s\r\n    } else {\r\n      shadow += s\r\n    }\r\n  }\r\n\r\n  return [shadow, innerShadow]\r\n}\r\n","import { buildXMLString } from '../utils.js'\r\n\r\nexport default function buildDecoration(\r\n  {\r\n    width,\r\n    left,\r\n    top,\r\n    ascender,\r\n    clipPathId,\r\n  }: {\r\n    width: number\r\n    left: number\r\n    top: number\r\n    ascender: number\r\n    clipPathId?: string\r\n  },\r\n  style: Record<string, any>\r\n) {\r\n  const {\r\n    textDecorationColor,\r\n    textDecorationStyle,\r\n    textDecorationLine,\r\n    fontSize,\r\n  } = style\r\n  if (!textDecorationLine || textDecorationLine === 'none') return ''\r\n\r\n  // The UA should use such font-based information when choosing auto line thicknesses wherever appropriate.\r\n  // https://drafts.csswg.org/css-text-decor-4/#text-decoration-thickness\r\n  const height = Math.max(1, fontSize * 0.1)\r\n\r\n  const y =\r\n    textDecorationLine === 'line-through'\r\n      ? top + ascender * 0.5\r\n      : textDecorationLine === 'underline'\r\n      ? top + ascender * 1.1\r\n      : top\r\n\r\n  const dasharray =\r\n    textDecorationStyle === 'dashed'\r\n      ? `${height * 1.2} ${height * 2}`\r\n      : textDecorationStyle === 'dotted'\r\n      ? `0 ${height * 2}`\r\n      : undefined\r\n\r\n  return buildXMLString('line', {\r\n    x1: left,\r\n    y1: y,\r\n    x2: left + width,\r\n    y2: y,\r\n    stroke: textDecorationColor,\r\n    'stroke-width': height,\r\n    'stroke-dasharray': dasharray,\r\n    'stroke-linecap': textDecorationStyle === 'dotted' ? 'round' : 'square',\r\n    'clip-path': clipPathId ? `url(#${clipPathId})` : undefined,\r\n  })\r\n}\r\n","import type { ParsedTransformOrigin } from '../transform-origin.js'\r\n\r\nimport backgroundImage from './background-image.js'\r\nimport radius from './border-radius.js'\r\nimport { boxShadow } from './shadow.js'\r\nimport transform from './transform.js'\r\nimport overflow from './overflow.js'\r\nimport { buildXMLString } from '../utils.js'\r\nimport border, { getBorderClipPath } from './border.js'\r\n\r\nexport default async function rect(\r\n  {\r\n    id,\r\n    left,\r\n    top,\r\n    width,\r\n    height,\r\n    isInheritingTransform,\r\n    src,\r\n    debug,\r\n  }: {\r\n    id: string\r\n    left: number\r\n    top: number\r\n    width: number\r\n    height: number\r\n    isInheritingTransform: boolean\r\n    src?: string\r\n    debug?: boolean\r\n  },\r\n  style: Record<string, number | string>\r\n) {\r\n  if (style.display === 'none') return ''\r\n\r\n  const isImage = !!src\r\n\r\n  let type: 'rect' | 'path' = 'rect'\r\n  let matrix = ''\r\n  let defs = ''\r\n  let fills: string[] = []\r\n  let opacity = 1\r\n  let extra = ''\r\n\r\n  if (style.backgroundColor) {\r\n    fills.push(style.backgroundColor as string)\r\n  }\r\n\r\n  if (style.opacity !== undefined) {\r\n    opacity = +style.opacity\r\n  }\r\n\r\n  if (style.transform) {\r\n    matrix = transform(\r\n      {\r\n        left,\r\n        top,\r\n        width,\r\n        height,\r\n      },\r\n      style.transform as unknown as number[],\r\n      isInheritingTransform,\r\n      style.transformOrigin as ParsedTransformOrigin | undefined\r\n    )\r\n  }\r\n\r\n  let backgroundShapes = ''\r\n  if (style.backgroundImage) {\r\n    const backgrounds: string[][] = []\r\n\r\n    for (\r\n      let index = 0;\r\n      index < (style.backgroundImage as any).length;\r\n      index++\r\n    ) {\r\n      const background = (style.backgroundImage as any)[index]\r\n      const image = await backgroundImage(\r\n        { id: id + '_' + index, width, height, left, top },\r\n        background\r\n      )\r\n      if (image) {\r\n        // Background images that come first in the array are rendered last.\r\n        backgrounds.unshift(image)\r\n      }\r\n    }\r\n\r\n    for (const background of backgrounds) {\r\n      fills.push(`url(#${background[0]})`)\r\n      defs += background[1]\r\n      if (background[2]) {\r\n        backgroundShapes += background[2]\r\n      }\r\n    }\r\n  }\r\n\r\n  const path = radius(\r\n    { left, top, width, height },\r\n    style as Record<string, number>\r\n  )\r\n  if (path) {\r\n    type = 'path'\r\n  }\r\n\r\n  const clipPathId = style._inheritedClipPathId as number | undefined\r\n  const overflowMaskId = style._inheritedMaskId as number | undefined\r\n\r\n  if (debug) {\r\n    extra = buildXMLString('rect', {\r\n      x: left,\r\n      y: top,\r\n      width,\r\n      height,\r\n      fill: 'transparent',\r\n      stroke: '#ff5757',\r\n      'stroke-width': 1,\r\n      transform: matrix || undefined,\r\n      'clip-path': clipPathId ? `url(#${clipPathId})` : undefined,\r\n    })\r\n  }\r\n\r\n  const { backgroundClip, filter: cssFilter } = style\r\n\r\n  const currentClipPath =\r\n    backgroundClip === 'text'\r\n      ? `url(#satori_bct-${id})`\r\n      : clipPathId\r\n      ? `url(#${clipPathId})`\r\n      : undefined\r\n\r\n  const clip = overflow(\r\n    { left, top, width, height, path, id, matrix, currentClipPath, src },\r\n    style as Record<string, number>\r\n  )\r\n\r\n  // Each background generates a new rectangle.\r\n  // @TODO: Not sure if this is the best way to do it, maybe <pattern> with\r\n  // multiple <image>s is better.\r\n  let shape = fills\r\n    .map((fill) =>\r\n      buildXMLString(type, {\r\n        x: left,\r\n        y: top,\r\n        width,\r\n        height,\r\n        fill,\r\n        d: path ? path : undefined,\r\n        transform: matrix ? matrix : undefined,\r\n        'clip-path': currentClipPath,\r\n        style: cssFilter ? `filter:${cssFilter}` : undefined,\r\n        mask: overflowMaskId ? `url(#${overflowMaskId})` : undefined,\r\n      })\r\n    )\r\n    .join('')\r\n\r\n  const borderClip = getBorderClipPath(\r\n    {\r\n      id,\r\n      left,\r\n      top,\r\n      width,\r\n      height,\r\n      currentClipPathId: clipPathId,\r\n      borderPath: path,\r\n      borderType: type,\r\n    },\r\n    style\r\n  )\r\n\r\n  // If it's an image (<img>) tag, we add an extra layer of the image itself.\r\n  if (isImage) {\r\n    // We need to subtract the border and padding sizes from the image size.\r\n    const offsetLeft =\r\n      ((style.borderLeftWidth as number) || 0) +\r\n      ((style.paddingLeft as number) || 0)\r\n    const offsetTop =\r\n      ((style.borderTopWidth as number) || 0) +\r\n      ((style.paddingTop as number) || 0)\r\n    const offsetRight =\r\n      ((style.borderRightWidth as number) || 0) +\r\n      ((style.paddingRight as number) || 0)\r\n    const offsetBottom =\r\n      ((style.borderBottomWidth as number) || 0) +\r\n      ((style.paddingBottom as number) || 0)\r\n\r\n    const preserveAspectRatio =\r\n      style.objectFit === 'contain'\r\n        ? 'xMidYMid'\r\n        : style.objectFit === 'cover'\r\n        ? 'xMidYMid slice'\r\n        : 'none'\r\n\r\n    shape += buildXMLString('image', {\r\n      x: left + offsetLeft,\r\n      y: top + offsetTop,\r\n      width: width - offsetLeft - offsetRight,\r\n      height: height - offsetTop - offsetBottom,\r\n      href: src,\r\n      preserveAspectRatio,\r\n      transform: matrix ? matrix : undefined,\r\n      style: cssFilter ? `filter:${cssFilter}` : undefined,\r\n      'clip-path': `url(#satori_cp-${id})`,\r\n      mask: `url(#satori_om-${id})`,\r\n    })\r\n  }\r\n\r\n  if (borderClip) {\r\n    defs += borderClip[0]\r\n    const rectClipId = borderClip[1]\r\n\r\n    shape += border(\r\n      {\r\n        left,\r\n        top,\r\n        width,\r\n        height,\r\n        props: {\r\n          transform: matrix ? matrix : undefined,\r\n          // When using `background-clip: text`, we need to draw the extra border because\r\n          // it shouldn't be clipped by the clip path, so we are not using currentClipPath here.\r\n          'clip-path': `url(#${rectClipId})`,\r\n        },\r\n      },\r\n      style\r\n    )\r\n  }\r\n\r\n  // box-shadow.\r\n  const shadow = boxShadow(\r\n    {\r\n      width,\r\n      height,\r\n      id,\r\n      opacity,\r\n      shape: buildXMLString(type, {\r\n        x: left,\r\n        y: top,\r\n        width,\r\n        height,\r\n        fill: '#fff',\r\n        stroke: '#fff',\r\n        'stroke-width': 0,\r\n        d: path ? path : undefined,\r\n        transform: matrix ? matrix : undefined,\r\n        'clip-path': currentClipPath,\r\n        mask: overflowMaskId ? `url(#${overflowMaskId})` : undefined,\r\n      }),\r\n    },\r\n    style\r\n  )\r\n\r\n  return (\r\n    (defs ? buildXMLString('defs', {}, defs) : '') +\r\n    (shadow ? shadow[0] : '') +\r\n    clip +\r\n    (opacity !== 1 ? `<g opacity=\"${opacity}\">` : '') +\r\n    (backgroundShapes || shape) +\r\n    (opacity !== 1 ? `</g>` : '') +\r\n    (shadow ? shadow[1] : '') +\r\n    extra\r\n  )\r\n}\r\n","import CssDimension from '../vendor/parse-css-dimension/index.js'\r\nimport { buildXMLString } from '../utils.js'\r\n\r\nimport gradient from '../vendor/gradient-parser/index.js'\r\nimport { resolveImageData } from '../handler/image.js'\r\n\r\ninterface Background {\r\n  attachment: string\r\n  color?: string\r\n  clip: string\r\n  image: string\r\n  origin: string\r\n  position: string\r\n  size: string\r\n  repeat: string\r\n}\r\n\r\nfunction resolveColorFromStop(stop) {\r\n  if (stop.type === 'literal') return stop.value\r\n  if (stop.type === 'hex') return `#${stop.value}`\r\n  if (stop.type === 'rgb') return `rgb(${stop.value.join(',')})`\r\n  if (stop.type === 'rgba') return `rgba(${stop.value.join(',')})`\r\n  return 'transparent'\r\n}\r\n\r\nfunction resolveXYFromDirection(dir: string) {\r\n  let x1 = 0,\r\n    y1 = 0,\r\n    x2 = 0,\r\n    y2 = 0\r\n\r\n  if (dir.includes('top')) {\r\n    y1 = 1\r\n  } else if (dir.includes('bottom')) {\r\n    y2 = 1\r\n  }\r\n\r\n  if (dir.includes('left')) {\r\n    x1 = 1\r\n  } else if (dir.includes('right')) {\r\n    x2 = 1\r\n  }\r\n\r\n  if (!x1 && !x2 && !y1 && !y2) {\r\n    y1 = 1\r\n  }\r\n\r\n  return [x1, y1, x2, y2]\r\n}\r\n\r\nfunction toAbsoluteValue(v: string | number, base: number) {\r\n  if (typeof v === 'string' && v.endsWith('%')) {\r\n    return (base * parseFloat(v)) / 100\r\n  }\r\n  return +v\r\n}\r\n\r\nfunction parseLengthPairs(\r\n  str: string,\r\n  {\r\n    x,\r\n    y,\r\n    defaultX,\r\n    defaultY,\r\n  }: {\r\n    x: number\r\n    y: number\r\n    defaultX: number | string\r\n    defaultY: number | string\r\n  }\r\n) {\r\n  return (\r\n    str\r\n      ? str\r\n          .split(' ')\r\n          .map((value) => {\r\n            try {\r\n              const parsed = new CssDimension(value)\r\n              return parsed.type === 'length' || parsed.type === 'number'\r\n                ? parsed.value\r\n                : parsed.value + parsed.unit\r\n            } catch (e) {\r\n              return null\r\n            }\r\n          })\r\n          .filter((v) => v !== null)\r\n      : [defaultX, defaultY]\r\n  ).map((v, index) => toAbsoluteValue(v, [x, y][index]))\r\n}\r\n\r\nfunction normalizeStops(totalLength: number, colorStops: any[]) {\r\n  // Resolve the color stops based on the spec:\r\n  // https://drafts.csswg.org/css-images/#color-stop-syntax\r\n  const stops = []\r\n  for (const stop of colorStops) {\r\n    const color = resolveColorFromStop(stop)\r\n    if (!stops.length) {\r\n      // First stop, ensure it's at the start.\r\n      stops.push({\r\n        offset: 0,\r\n        color,\r\n      })\r\n\r\n      if (typeof stop.length === 'undefined') continue\r\n      if (stop.length.value === '0') continue\r\n    }\r\n\r\n    // All offsets are relative values (0-1) in SVG.\r\n    const offset =\r\n      typeof stop.length === 'undefined'\r\n        ? undefined\r\n        : stop.length.type === '%'\r\n        ? stop.length.value / 100\r\n        : stop.length.value / totalLength\r\n\r\n    stops.push({\r\n      offset,\r\n      color,\r\n    })\r\n  }\r\n  if (!stops.length) {\r\n    stops.push({\r\n      offset: 0,\r\n      color: 'transparent',\r\n    })\r\n  }\r\n  // Last stop, ensure it's at the end.\r\n  const lastStop = stops[stops.length - 1]\r\n  if (lastStop.offset !== 1) {\r\n    if (typeof lastStop.offset === 'undefined') {\r\n      lastStop.offset = 1\r\n    } else {\r\n      stops.push({\r\n        offset: 1,\r\n        color: lastStop.color,\r\n      })\r\n    }\r\n  }\r\n\r\n  let previousStop = 0\r\n  let nextStop = 1\r\n  // Evenly distribute the missing stop offsets.\r\n  for (let i = 0; i < stops.length; i++) {\r\n    if (typeof stops[i].offset === 'undefined') {\r\n      // Find the next stop that has an offset.\r\n      if (nextStop < i) nextStop = i\r\n      while (typeof stops[nextStop].offset === 'undefined') nextStop++\r\n\r\n      stops[i].offset =\r\n        ((stops[nextStop].offset - stops[previousStop].offset) /\r\n          (nextStop - previousStop)) *\r\n          (i - previousStop) +\r\n        stops[previousStop].offset\r\n    } else {\r\n      previousStop = i\r\n    }\r\n  }\r\n\r\n  return stops\r\n}\r\n\r\nexport default async function backgroundImage(\r\n  {\r\n    id,\r\n    width,\r\n    height,\r\n    left,\r\n    top,\r\n  }: { id: string; width: number; height: number; left: number; top: number },\r\n  { image, size, position, repeat }: Background\r\n): Promise<string[]> {\r\n  // Default to `repeat`.\r\n  repeat = repeat || 'repeat'\r\n\r\n  const repeatX = repeat === 'repeat-x' || repeat === 'repeat'\r\n  const repeatY = repeat === 'repeat-y' || repeat === 'repeat'\r\n\r\n  const dimensions = parseLengthPairs(size, {\r\n    x: width,\r\n    y: height,\r\n    defaultX: width,\r\n    defaultY: height,\r\n  })\r\n  const offsets = parseLengthPairs(position, {\r\n    x: width,\r\n    y: height,\r\n    defaultX: 0,\r\n    defaultY: 0,\r\n  })\r\n\r\n  if (image.startsWith('linear-gradient(')) {\r\n    const parsed = gradient.parse(image)[0]\r\n    const [xDelta, yDelta] = dimensions\r\n    // Calculate the direction.\r\n    let x1, y1, x2, y2\r\n    if (parsed.orientation.type === 'directional') {\r\n      ;[x1, y1, x2, y2] = resolveXYFromDirection(parsed.orientation.value)\r\n    } else if (parsed.orientation.type === 'angular') {\r\n      const angle = (+parsed.orientation.value / 180) * Math.PI - Math.PI / 2\r\n      const c = Math.cos(angle)\r\n      const s = Math.sin(angle)\r\n\r\n      x1 = 0\r\n      y1 = 0\r\n      x2 = c\r\n      y2 = s\r\n      if (x2 < 0) {\r\n        x1 -= x2\r\n        x2 = 0\r\n      }\r\n      if (y2 < 0) {\r\n        y1 -= y2\r\n        y2 = 0\r\n      }\r\n    }\r\n\r\n    const stops = normalizeStops(width, parsed.colorStops)\r\n\r\n    const gradientId = `satori_bi${id}`\r\n    const patternId = `satori_pattern_${id}`\r\n\r\n    const defs = buildXMLString(\r\n      'pattern',\r\n      {\r\n        id: patternId,\r\n        x: offsets[0] / width,\r\n        y: offsets[1] / height,\r\n        width: repeatX ? xDelta / width : '1',\r\n        height: repeatY ? yDelta / height : '1',\r\n        patternUnits: 'objectBoundingBox',\r\n      },\r\n      buildXMLString(\r\n        'linearGradient',\r\n        {\r\n          id: gradientId,\r\n          x1,\r\n          y1,\r\n          x2,\r\n          y2,\r\n        },\r\n        stops\r\n          .map((stop) =>\r\n            buildXMLString('stop', {\r\n              offset: stop.offset * 100 + '%',\r\n              'stop-color': stop.color,\r\n            })\r\n          )\r\n          .join('')\r\n      ) +\r\n        buildXMLString('rect', {\r\n          x: 0,\r\n          y: 0,\r\n          width: xDelta,\r\n          height: yDelta,\r\n          fill: `url(#${gradientId})`,\r\n        })\r\n    )\r\n    return [patternId, defs]\r\n  }\r\n\r\n  if (image.startsWith('radial-gradient(')) {\r\n    const parsed = gradient.parse(image)[0]\r\n    const orientation = parsed.orientation[0]\r\n    const [xDelta, yDelta] = dimensions\r\n\r\n    let shape = 'circle'\r\n    let cx: number = xDelta / 2\r\n    let cy: number = yDelta / 2\r\n\r\n    if (orientation.type === 'shape') {\r\n      shape = orientation.value\r\n      if (!orientation.at) {\r\n        // Defaults to center.\r\n      } else if (orientation.at.type === 'position') {\r\n        cx = orientation.at.value.x.value\r\n        cy = orientation.at.value.y.value\r\n      } else {\r\n        throw new Error(\r\n          'orientation.at.type not implemented: ' + orientation.at.type\r\n        )\r\n      }\r\n    } else {\r\n      throw new Error('orientation.type not implemented: ' + orientation.type)\r\n    }\r\n\r\n    const stops = normalizeStops(width, parsed.colorStops)\r\n\r\n    const gradientId = `satori_radial_${id}`\r\n    const patternId = `satori_pattern_${id}`\r\n    const maskId = `satori_mask_${id}`\r\n\r\n    // We currently only support `farthest-corner`:\r\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/gradient/radial-gradient()#values\r\n    const spread: Record<string, number> = {}\r\n\r\n    // Farest corner.\r\n    const fx = Math.max(Math.abs(xDelta - cx), Math.abs(cx))\r\n    const fy = Math.max(Math.abs(yDelta - cy), Math.abs(cy))\r\n    if (shape === 'circle') {\r\n      spread.r = Math.sqrt(fx * fx + fy * fy)\r\n    } else if (shape === 'ellipse') {\r\n      // Spec: https://drafts.csswg.org/css-images/#typedef-size\r\n      // Get the aspect ratio of the closest-side size.\r\n      const ratio = fy !== 0 ? fx / fy : 1\r\n\r\n      // fx^2/a^2 + fy^2/b^2 = 1\r\n      // fx^2/(b*ratio)^2 + fy^2/b^2 = 1\r\n      // (fx^2+fy^2*ratio^2) = (b*ratio)^2\r\n      // b = sqrt(fx^2+fy^2*ratio^2)/ratio\r\n      spread.ry = Math.sqrt(fx * fx + fy * fy * ratio * ratio) / ratio\r\n      spread.rx = spread.ry * ratio\r\n    }\r\n\r\n    // TODO: check for repeat-x/repeat-y\r\n    const defs = buildXMLString(\r\n      'pattern',\r\n      {\r\n        id: patternId,\r\n        x: offsets[0] / width,\r\n        y: offsets[1] / height,\r\n        width: repeatX ? xDelta / width : '1',\r\n        height: repeatY ? yDelta / height : '1',\r\n        patternUnits: 'objectBoundingBox',\r\n      },\r\n      buildXMLString(\r\n        'radialGradient',\r\n        {\r\n          id: gradientId,\r\n        },\r\n        stops\r\n          .map((stop) =>\r\n            buildXMLString('stop', {\r\n              offset: stop.offset,\r\n              'stop-color': stop.color,\r\n            })\r\n          )\r\n          .join('')\r\n      ) +\r\n        buildXMLString(\r\n          'mask',\r\n          {\r\n            id: maskId,\r\n          },\r\n          buildXMLString('rect', {\r\n            x: 0,\r\n            y: 0,\r\n            width: xDelta,\r\n            height: yDelta,\r\n            fill: '#fff',\r\n          })\r\n        ) +\r\n        buildXMLString(shape, {\r\n          cx: cx,\r\n          cy: cy,\r\n          width: xDelta,\r\n          height: yDelta,\r\n          ...spread,\r\n          fill: `url(#${gradientId})`,\r\n          mask: `url(#${maskId})`,\r\n        })\r\n    )\r\n\r\n    const result = [patternId, defs]\r\n    return result\r\n  }\r\n\r\n  if (image.startsWith('url(')) {\r\n    const dimensionsWithoutFallback = parseLengthPairs(size, {\r\n      x: width,\r\n      y: height,\r\n      defaultX: 0,\r\n      defaultY: 0,\r\n    })\r\n    const [src, imageWidth, imageHeight] = await resolveImageData(\r\n      image.slice(4, -1)\r\n    )\r\n    const resolvedWidth = dimensionsWithoutFallback[0] || imageWidth\r\n    const resolvedHeight = dimensionsWithoutFallback[1] || imageHeight\r\n\r\n    return [\r\n      `satori_bi${id}`,\r\n      buildXMLString(\r\n        'pattern',\r\n        {\r\n          id: `satori_bi${id}`,\r\n          patternContentUnits: 'userSpaceOnUse',\r\n          patternUnits: 'userSpaceOnUse',\r\n          x: offsets[0] + left,\r\n          y: offsets[1] + top,\r\n          width: repeatX ? resolvedWidth : '100%',\r\n          height: repeatY ? resolvedHeight : '100%',\r\n        },\r\n        buildXMLString('image', {\r\n          x: 0,\r\n          y: 0,\r\n          width: resolvedWidth,\r\n          height: resolvedHeight,\r\n          preserveAspectRatio: 'none',\r\n          href: src,\r\n        })\r\n      ),\r\n    ]\r\n  }\r\n\r\n  throw new Error(`Invalid background image: \"${image}\"`)\r\n}\r\n","// Copyright (c) 2014 Rafael Caricio. All rights reserved.\r\n// Use of this source code is governed by a BSD-style license that can be\r\n// found in the LICENSE file.\r\n\r\nvar GradientParser = GradientParser || {}\r\n\r\n// https://w3c.github.io/csswg-drafts/css-images-3/#linear-gradients\r\n// It may be omitted; if so, it defaults to to bottom.\r\nconst FALLBACK_LINEAR_ORIENTATION = { type: 'directional', value: 'bottom' }\r\n\r\nGradientParser.parse = (function () {\r\n  var tokens = {\r\n    linearGradient: /^(\\-(webkit|o|ms|moz)\\-)?(linear\\-gradient)/i,\r\n    repeatingLinearGradient:\r\n      /^(\\-(webkit|o|ms|moz)\\-)?(repeating\\-linear\\-gradient)/i,\r\n    radialGradient: /^(\\-(webkit|o|ms|moz)\\-)?(radial\\-gradient)/i,\r\n    repeatingRadialGradient:\r\n      /^(\\-(webkit|o|ms|moz)\\-)?(repeating\\-radial\\-gradient)/i,\r\n    sideOrCorner:\r\n      /^to (left (top|bottom)|right (top|bottom)|top (left|right)|bottom (left|right)|left|right|top|bottom)/i,\r\n    extentKeywords:\r\n      /^(closest\\-side|closest\\-corner|farthest\\-side|farthest\\-corner|contain|cover)/,\r\n    positionKeywords: /^(left|center|right|top|bottom)/i,\r\n    pixelValue: /^(-?(([0-9]*\\.[0-9]+)|([0-9]+\\.?)))px/,\r\n    percentageValue: /^(-?(([0-9]*\\.[0-9]+)|([0-9]+\\.?)))\\%/,\r\n    emValue: /^(-?(([0-9]*\\.[0-9]+)|([0-9]+\\.?)))em/,\r\n    angleValue: /^(-?(([0-9]*\\.[0-9]+)|([0-9]+\\.?)))deg/,\r\n    zeroValue: /[0]/,\r\n    startCall: /^\\(/,\r\n    endCall: /^\\)/,\r\n    comma: /^,/,\r\n    hexColor: /^\\#([0-9a-fA-F]+)/,\r\n    literalColor: /^([a-zA-Z]+)/,\r\n    rgbColor: /^rgb/i,\r\n    rgbaColor: /^rgba/i,\r\n    number: /^(([0-9]*\\.[0-9]+)|([0-9]+\\.?))/,\r\n  }\r\n\r\n  var input = ''\r\n\r\n  function error(msg) {\r\n    var err = new Error(input + ': ' + msg)\r\n    err.source = input\r\n    throw err\r\n  }\r\n\r\n  function getAST() {\r\n    var ast = matchListDefinitions()\r\n\r\n    if (input.length > 0) {\r\n      error('Invalid input not EOF')\r\n    }\r\n    return ast\r\n  }\r\n\r\n  function matchListDefinitions() {\r\n    return matchListing(matchDefinition)\r\n  }\r\n\r\n  function matchDefinition() {\r\n    return (\r\n      matchGradient(\r\n        'linear-gradient',\r\n        tokens.linearGradient,\r\n        matchLinearOrientation,\r\n        FALLBACK_LINEAR_ORIENTATION\r\n      ) ||\r\n      matchGradient(\r\n        'repeating-linear-gradient',\r\n        tokens.repeatingLinearGradient,\r\n        matchLinearOrientation,\r\n        FALLBACK_LINEAR_ORIENTATION\r\n      ) ||\r\n      matchGradient(\r\n        'radial-gradient',\r\n        tokens.radialGradient,\r\n        matchListRadialOrientations\r\n      ) ||\r\n      matchGradient(\r\n        'repeating-radial-gradient',\r\n        tokens.repeatingRadialGradient,\r\n        matchListRadialOrientations\r\n      )\r\n    )\r\n  }\r\n\r\n  function matchGradient(\r\n    gradientType,\r\n    pattern,\r\n    orientationMatcher,\r\n    fallbackOrientation\r\n  ) {\r\n    return matchCall(pattern, function (captures) {\r\n      var orientation = orientationMatcher()\r\n      if (orientation) {\r\n        if (!scan(tokens.comma)) {\r\n          error('Missing comma before color stops')\r\n        }\r\n      } else {\r\n        orientation = fallbackOrientation\r\n      }\r\n\r\n      return {\r\n        type: gradientType,\r\n        orientation: orientation,\r\n        colorStops: matchListing(matchColorStop),\r\n      }\r\n    })\r\n  }\r\n\r\n  function matchCall(pattern, callback) {\r\n    var captures = scan(pattern)\r\n    if (captures) {\r\n      if (!scan(tokens.startCall)) {\r\n        error('Missing (')\r\n      }\r\n\r\n      var result = callback(captures)\r\n\r\n      if (!scan(tokens.endCall)) {\r\n        error('Missing )')\r\n      }\r\n\r\n      return result\r\n    }\r\n  }\r\n\r\n  function matchLinearOrientation() {\r\n    return matchSideOrCorner() || matchAngle() || matchZero();\r\n  }\r\n\r\n  function matchSideOrCorner() {\r\n    return match('directional', tokens.sideOrCorner, 1)\r\n  }\r\n\r\n  function matchAngle() {\r\n    return match('angular', tokens.angleValue, 1)\r\n  }\r\n\r\n  // For zero value passed into linear-gradient first arg:\r\n  function matchZero() {\r\n    return match('directional', tokens.zeroValue, 0)\r\n  }\r\n\r\n  function matchListRadialOrientations() {\r\n    var radialOrientations,\r\n      radialOrientation = matchRadialOrientation(),\r\n      lookaheadCache\r\n\r\n    if (radialOrientation) {\r\n      radialOrientations = []\r\n      radialOrientations.push(radialOrientation)\r\n\r\n      lookaheadCache = input\r\n      if (scan(tokens.comma)) {\r\n        radialOrientation = matchRadialOrientation()\r\n        if (radialOrientation) {\r\n          radialOrientations.push(radialOrientation)\r\n        } else {\r\n          input = lookaheadCache\r\n        }\r\n      }\r\n    }\r\n\r\n    return radialOrientations\r\n  }\r\n\r\n  function matchRadialOrientation() {\r\n    var radialType = matchCircle() || matchEllipse()\r\n    if (radialType) {\r\n      radialType.at = matchAtPosition()\r\n    } else {\r\n      var extent = matchExtentKeyword()\r\n      if (extent) {\r\n        radialType = extent\r\n        var positionAt = matchAtPosition()\r\n        if (positionAt) {\r\n          radialType.at = positionAt\r\n        }\r\n      } else {\r\n        // If unspecified, it defaults to ellipse.\r\n        var positionAt = matchAtPosition()\r\n        if (positionAt) {\r\n          radialType = {\r\n            type: 'shape',\r\n            value: 'ellipse',\r\n            at: positionAt\r\n          }\r\n        } else {\r\n          var defaultPosition = matchPositioning()\r\n          if (defaultPosition) {\r\n            radialType = {\r\n              type: 'default-radial',\r\n              at: defaultPosition,\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return radialType\r\n  }\r\n\r\n  function matchCircle() {\r\n    var circle = match('shape', /^(circle)/i, 0)\r\n\r\n    if (circle) {\r\n      circle.style = matchLength() || matchExtentKeyword()\r\n    }\r\n\r\n    return circle\r\n  }\r\n\r\n  function matchEllipse() {\r\n    var ellipse = match('shape', /^(ellipse)/i, 0)\r\n\r\n    if (ellipse) {\r\n      ellipse.style = matchDistance() || matchExtentKeyword()\r\n    }\r\n\r\n    return ellipse\r\n  }\r\n\r\n  function matchExtentKeyword() {\r\n    return match('extent-keyword', tokens.extentKeywords, 1)\r\n  }\r\n\r\n  function matchAtPosition() {\r\n    if (match('position', /^at/, 0)) {\r\n      var positioning = matchPositioning()\r\n\r\n      if (!positioning) {\r\n        error('Missing positioning value')\r\n      }\r\n\r\n      return positioning\r\n    }\r\n  }\r\n\r\n  function matchPositioning() {\r\n    var location = matchCoordinates()\r\n\r\n    if (location.x || location.y) {\r\n      return {\r\n        type: 'position',\r\n        value: location,\r\n      }\r\n    }\r\n  }\r\n\r\n  function matchCoordinates() {\r\n    return {\r\n      x: matchDistance(),\r\n      y: matchDistance(),\r\n    }\r\n  }\r\n\r\n  function matchListing(matcher) {\r\n    var captures = matcher(),\r\n      result = []\r\n\r\n    if (captures) {\r\n      result.push(captures)\r\n      while (scan(tokens.comma)) {\r\n        captures = matcher()\r\n        if (captures) {\r\n          result.push(captures)\r\n        } else {\r\n          error('One extra comma')\r\n        }\r\n      }\r\n    }\r\n\r\n    return result\r\n  }\r\n\r\n  function matchColorStop() {\r\n    var color = matchColor()\r\n\r\n    if (!color) {\r\n      error('Expected color definition')\r\n    }\r\n\r\n    color.length = matchDistance()\r\n    return color\r\n  }\r\n\r\n  function matchColor() {\r\n    return (\r\n      matchHexColor() ||\r\n      matchRGBAColor() ||\r\n      matchRGBColor() ||\r\n      matchLiteralColor()\r\n    )\r\n  }\r\n\r\n  function matchLiteralColor() {\r\n    return match('literal', tokens.literalColor, 0)\r\n  }\r\n\r\n  function matchHexColor() {\r\n    return match('hex', tokens.hexColor, 1)\r\n  }\r\n\r\n  function matchRGBColor() {\r\n    return matchCall(tokens.rgbColor, function () {\r\n      return {\r\n        type: 'rgb',\r\n        value: matchListing(matchNumber),\r\n      }\r\n    })\r\n  }\r\n\r\n  function matchRGBAColor() {\r\n    return matchCall(tokens.rgbaColor, function () {\r\n      return {\r\n        type: 'rgba',\r\n        value: matchListing(matchNumber),\r\n      }\r\n    })\r\n  }\r\n\r\n  function matchNumber() {\r\n    return scan(tokens.number)[1]\r\n  }\r\n\r\n  function matchDistance() {\r\n    return (\r\n      match('%', tokens.percentageValue, 1) ||\r\n      matchPositionKeyword() ||\r\n      matchLength()\r\n    )\r\n  }\r\n\r\n  function matchPositionKeyword() {\r\n    return match('position-keyword', tokens.positionKeywords, 1)\r\n  }\r\n\r\n  function matchLength() {\r\n    return match('px', tokens.pixelValue, 1) || match('em', tokens.emValue, 1)\r\n  }\r\n\r\n  function match(type, pattern, captureIndex) {\r\n    var captures = scan(pattern)\r\n    if (captures) {\r\n      return {\r\n        type: type,\r\n        value: captures[captureIndex],\r\n      }\r\n    }\r\n  }\r\n\r\n  function scan(regexp) {\r\n    var captures, blankCaptures\r\n\r\n    blankCaptures = /^[\\n\\r\\t\\s]+/.exec(input)\r\n    if (blankCaptures) {\r\n      consume(blankCaptures[0].length)\r\n    }\r\n\r\n    captures = regexp.exec(input)\r\n    if (captures) {\r\n      consume(captures[0].length)\r\n    }\r\n\r\n    return captures\r\n  }\r\n\r\n  function consume(size) {\r\n    input = input.substr(size)\r\n  }\r\n\r\n  return function (code) {\r\n    input = code.toString()\r\n    return getAST()\r\n  }\r\n})()\r\n\r\nexport default GradientParser\r\n","/**\r\n * CSS border radius to SVG path.\r\n */\r\n\r\n// TODO: Support the `border-radius: 10px / 20px` syntax.\r\n// https://developer.mozilla.org/en-US/docs/Web/CSS/border-radius\r\n\r\nimport { lengthToNumber } from '../utils.js'\r\n\r\n// Getting the intersection of a 45deg ray with the elliptical arc x^2/rx^2 + y^2/ry^2 = 1.\r\n// Reference:\r\n// https://www.w3.org/TR/SVG/implnote.html#ArcConversionEndpointToCenter\r\nfunction svgArcCenterOffset([rx, ry]: number[]) {\r\n  if (Math.round(rx * 1000) === 0 && Math.round(ry * 1000) === 0) {\r\n    return 0\r\n  }\r\n  return Math.round(((rx * ry) / Math.sqrt(rx * rx + ry * ry)) * 1000) / 1000\r\n}\r\n\r\nfunction resolveSize(a: number, b: number, limit: number) {\r\n  if (limit < a + b) {\r\n    if (limit / 2 < a && limit / 2 < b) {\r\n      a = b = limit / 2\r\n    } else if (limit / 2 < a) {\r\n      a = limit - b\r\n    } else if (limit / 2 < b) {\r\n      b = limit - a\r\n    }\r\n  }\r\n  return [a, b]\r\n}\r\n\r\nfunction makeSmaller(arr: [number, number]) {\r\n  arr[0] = arr[1] = Math.min(arr[0], arr[1])\r\n}\r\n\r\n// Each corner can have 2 values, the first is the horizontal radius, the second is the vertical radius.\r\nfunction resolveRadius(\r\n  v: number | string | undefined,\r\n  width: number,\r\n  height: number,\r\n  fontSize: number,\r\n  style: any\r\n): [boolean, undefined | [number, number]] {\r\n  if (typeof v === 'string') {\r\n    const sides = v.split(' ').map((s) => s.trim())\r\n    const singleValue = !sides[1] && !sides[0].endsWith('%')\r\n    sides[1] = sides[1] || sides[0]\r\n    return [\r\n      singleValue,\r\n      [\r\n        Math.min(lengthToNumber(sides[0], fontSize, width, style, true), width),\r\n        Math.min(\r\n          lengthToNumber(sides[1], fontSize, height, style, true),\r\n          height\r\n        ),\r\n      ],\r\n    ]\r\n  }\r\n  if (typeof v === 'number') {\r\n    return [true, [Math.min(v, width), Math.min(v, height)]]\r\n  }\r\n  return [true, undefined]\r\n}\r\n\r\nconst radiusZeroOrNull = (_radius?: [number, number]) =>\r\n  _radius && _radius[0] !== 0 && _radius[1] !== 0\r\n\r\nexport default function radius(\r\n  {\r\n    left,\r\n    top,\r\n    width,\r\n    height,\r\n  }: {\r\n    left: number\r\n    top: number\r\n    width: number\r\n    height: number\r\n  },\r\n  style: Record<string, any>,\r\n  partialSides?: boolean[]\r\n) {\r\n  let {\r\n    borderTopLeftRadius,\r\n    borderTopRightRadius,\r\n    borderBottomLeftRadius,\r\n    borderBottomRightRadius,\r\n    fontSize,\r\n  } = style\r\n\r\n  let singleAbsValueTopLeftCorner\r\n  let singleAbsValueTopRightCorner\r\n  let singleAbsValueBottomLeftCorner\r\n  let singleAbsValueBottomRightCorner\r\n  ;[singleAbsValueTopLeftCorner, borderTopLeftRadius] = resolveRadius(\r\n    borderTopLeftRadius,\r\n    width,\r\n    height,\r\n    fontSize,\r\n    style\r\n  )\r\n  ;[singleAbsValueTopRightCorner, borderTopRightRadius] = resolveRadius(\r\n    borderTopRightRadius,\r\n    width,\r\n    height,\r\n    fontSize,\r\n    style\r\n  )\r\n  ;[singleAbsValueBottomLeftCorner, borderBottomLeftRadius] = resolveRadius(\r\n    borderBottomLeftRadius,\r\n    width,\r\n    height,\r\n    fontSize,\r\n    style\r\n  )\r\n  ;[singleAbsValueBottomRightCorner, borderBottomRightRadius] = resolveRadius(\r\n    borderBottomRightRadius,\r\n    width,\r\n    height,\r\n    fontSize,\r\n    style\r\n  )\r\n\r\n  if (\r\n    !partialSides &&\r\n    !radiusZeroOrNull(borderTopLeftRadius) &&\r\n    !radiusZeroOrNull(borderTopRightRadius) &&\r\n    !radiusZeroOrNull(borderBottomLeftRadius) &&\r\n    !radiusZeroOrNull(borderBottomRightRadius)\r\n  ) {\r\n    return ''\r\n  }\r\n  borderTopLeftRadius ||= [0, 0]\r\n  borderTopRightRadius ||= [0, 0]\r\n  borderBottomLeftRadius ||= [0, 0]\r\n  borderBottomRightRadius ||= [0, 0]\r\n\r\n  // Limit the radius sizes of each edge to make sure they will never overlap.\r\n\r\n  // Top\r\n  ;[borderTopLeftRadius[0], borderTopRightRadius[0]] = resolveSize(\r\n    borderTopLeftRadius[0],\r\n    borderTopRightRadius[0],\r\n    width\r\n  )\r\n  // Bottom\r\n  ;[borderBottomLeftRadius[0], borderBottomRightRadius[0]] = resolveSize(\r\n    borderBottomLeftRadius[0],\r\n    borderBottomRightRadius[0],\r\n    width\r\n  )\r\n  // Left\r\n  ;[borderTopLeftRadius[1], borderBottomLeftRadius[1]] = resolveSize(\r\n    borderTopLeftRadius[1],\r\n    borderBottomLeftRadius[1],\r\n    height\r\n  )\r\n  // Right\r\n  ;[borderTopRightRadius[1], borderBottomRightRadius[1]] = resolveSize(\r\n    borderTopRightRadius[1],\r\n    borderBottomRightRadius[1],\r\n    height\r\n  )\r\n\r\n  // If the specified border radius is a single value (e.g. 10px or 10em), we take\r\n  // the minimum of the resolved horizontal and vertical radius and apply to both.\r\n  if (singleAbsValueTopLeftCorner) {\r\n    makeSmaller(borderTopLeftRadius)\r\n  }\r\n  if (singleAbsValueTopRightCorner) {\r\n    makeSmaller(borderTopRightRadius)\r\n  }\r\n  if (singleAbsValueBottomLeftCorner) {\r\n    makeSmaller(borderBottomLeftRadius)\r\n  }\r\n  if (singleAbsValueBottomRightCorner) {\r\n    makeSmaller(borderBottomRightRadius)\r\n  }\r\n\r\n  type Arc = [[number, number], [number, number]]\r\n  const p: Arc[] = []\r\n  p[0] = [borderTopRightRadius, borderTopRightRadius]\r\n  p[1] = [\r\n    borderBottomRightRadius,\r\n    [-borderBottomRightRadius[0], borderBottomRightRadius[1]],\r\n  ]\r\n  p[2] = [\r\n    borderBottomLeftRadius,\r\n    [-borderBottomLeftRadius[0], -borderBottomLeftRadius[1]],\r\n  ]\r\n  p[3] = [\r\n    borderTopLeftRadius,\r\n    [borderTopLeftRadius[0], -borderTopLeftRadius[1]],\r\n  ]\r\n\r\n  const T = `h${width - borderTopLeftRadius[0] - borderTopRightRadius[0]} a${\r\n    p[0][0]\r\n  } 0 0 1 ${p[0][1]}`\r\n  const R = `v${\r\n    height - borderTopRightRadius[1] - borderBottomRightRadius[1]\r\n  } a${p[1][0]} 0 0 1 ${p[1][1]}`\r\n  const B = `h${\r\n    borderBottomRightRadius[0] + borderBottomLeftRadius[0] - width\r\n  } a${p[2][0]} 0 0 1 ${p[2][1]}`\r\n  const L = `v${borderBottomLeftRadius[1] + borderTopLeftRadius[1] - height} a${\r\n    p[3][0]\r\n  } 0 0 1 ${p[3][1]}`\r\n\r\n  if (partialSides) {\r\n    // \"However it is not defined what these transitions look like or what function maps from this ratio to a point on the curve.\"\r\n    // https://w3c.github.io/csswg-drafts/css-backgrounds-3/#corner-transitions\r\n    let start = partialSides.indexOf(false)\r\n\r\n    if (!partialSides.includes(true)) throw new Error('Invalid `partialSides`.')\r\n\r\n    if (start === -1) {\r\n      start = 0\r\n    } else {\r\n      while (!partialSides[start]) {\r\n        start = (start + 1) % 4\r\n      }\r\n    }\r\n\r\n    function getArc(i: number) {\r\n      const c0 = svgArcCenterOffset(\r\n        [\r\n          borderTopLeftRadius,\r\n          borderTopRightRadius,\r\n          borderBottomRightRadius,\r\n          borderBottomLeftRadius,\r\n        ][i]\r\n      )\r\n      return i === 0\r\n        ? [\r\n            [\r\n              left + borderTopLeftRadius[0] - c0,\r\n              top + borderTopLeftRadius[1] - c0,\r\n            ],\r\n            [left + borderTopLeftRadius[0], top],\r\n          ]\r\n        : i === 1\r\n        ? [\r\n            [\r\n              left + width - borderTopRightRadius[0] + c0,\r\n              top + borderTopRightRadius[1] - c0,\r\n            ],\r\n            [left + width, top + borderTopRightRadius[1]],\r\n          ]\r\n        : i === 2\r\n        ? [\r\n            [\r\n              left + width - borderBottomRightRadius[0] + c0,\r\n              top + height - borderBottomRightRadius[1] + c0,\r\n            ],\r\n            [left + width - borderBottomRightRadius[0], top + height],\r\n          ]\r\n        : [\r\n            [\r\n              left + borderBottomLeftRadius[0] - c0,\r\n              top + height - borderBottomLeftRadius[1] + c0,\r\n            ],\r\n            [left, top + height - borderBottomLeftRadius[1]],\r\n          ]\r\n    }\r\n\r\n    let result = ''\r\n\r\n    const arc0 = getArc(start)\r\n\r\n    let l = `M${arc0[0]} A${p[(start + 3) % 4][0]} 0 0 1 ${arc0[1]}`\r\n\r\n    let len = 0\r\n    for (; len < 4 && partialSides[(start + len) % 4]; len++) {\r\n      result += l + ' '\r\n      l = [T, R, B, L][(start + len) % 4]\r\n    }\r\n    const end = (start + len) % 4\r\n\r\n    // For the last segment, we skip the full arc and add the half arc.\r\n    result += l.split(' ')[0]\r\n\r\n    const arc1 = getArc(end)\r\n    result += ` A${p[(end + 3) % 4][0]} 0 0 1 ${arc1[0]}`\r\n\r\n    return result\r\n  }\r\n\r\n  // Generate the path\r\n  return `M${left + borderTopLeftRadius[0]},${top} ${T} ${R} ${B} ${L}`\r\n}\r\n","/**\r\n * Generate clip path for the given element.\r\n */\r\n\r\nimport { buildXMLString } from '../utils.js'\r\nimport mask from './content-mask.js'\r\n\r\nexport default function overflow(\r\n  {\r\n    left,\r\n    top,\r\n    width,\r\n    height,\r\n    path,\r\n    matrix,\r\n    id,\r\n    currentClipPath,\r\n    src,\r\n  }: {\r\n    left: number\r\n    top: number\r\n    width: number\r\n    height: number\r\n    path: string\r\n    matrix: string | undefined\r\n    id: string\r\n    currentClipPath: string | string\r\n    src?: string\r\n  },\r\n  style: Record<string, string | number>\r\n) {\r\n  if (style.overflow !== 'hidden' && !src) {\r\n    return ''\r\n  }\r\n\r\n  const contentMask = mask(\r\n    {\r\n      id: `satori_om-${id}`,\r\n      left,\r\n      top,\r\n      width,\r\n      height,\r\n      matrix,\r\n      borderOnly: src ? false : true,\r\n    },\r\n    style\r\n  )\r\n\r\n  return (\r\n    buildXMLString(\r\n      'clipPath',\r\n      {\r\n        id: `satori_cp-${id}`,\r\n        'clip-path': currentClipPath,\r\n      },\r\n      buildXMLString(path ? 'path' : 'rect', {\r\n        x: left,\r\n        y: top,\r\n        width,\r\n        height,\r\n        d: path ? path : undefined,\r\n      })\r\n    ) + contentMask\r\n  )\r\n}\r\n","/**\r\n * When there is border radius, the content area should be clipped by the\r\n * inner path of border + padding. This applies to <img> element as well as any\r\n * child element inside a `overflow: hidden` container.\r\n */\r\n\r\nimport { buildXMLString } from '../utils.js'\r\nimport border from './border.js'\r\n\r\nexport default function contentMask(\r\n  {\r\n    id,\r\n    left,\r\n    top,\r\n    width,\r\n    height,\r\n    matrix,\r\n    borderOnly,\r\n  }: {\r\n    id: string\r\n    left: number\r\n    top: number\r\n    width: number\r\n    height: number\r\n    matrix: string | undefined\r\n    borderOnly?: boolean\r\n  },\r\n  style: Record<string, number | string>\r\n) {\r\n  const offsetLeft =\r\n    ((style.borderLeftWidth as number) || 0) +\r\n    (borderOnly ? 0 : (style.paddingLeft as number) || 0)\r\n  const offsetTop =\r\n    ((style.borderTopWidth as number) || 0) +\r\n    (borderOnly ? 0 : (style.paddingTop as number) || 0)\r\n  const offsetRight =\r\n    ((style.borderRightWidth as number) || 0) +\r\n    (borderOnly ? 0 : (style.paddingRight as number) || 0)\r\n  const offsetBottom =\r\n    ((style.borderBottomWidth as number) || 0) +\r\n    (borderOnly ? 0 : (style.paddingBottom as number) || 0)\r\n\r\n  const contentArea = {\r\n    x: left + offsetLeft,\r\n    y: top + offsetTop,\r\n    width: width - offsetLeft - offsetRight,\r\n    height: height - offsetTop - offsetBottom,\r\n  }\r\n\r\n  const _contentMask = buildXMLString(\r\n    'mask',\r\n    { id },\r\n    buildXMLString('rect', {\r\n      ...contentArea,\r\n      fill: '#fff',\r\n      mask: style._inheritedMaskId\r\n        ? `url(#${style._inheritedMaskId})`\r\n        : undefined,\r\n    }) +\r\n      border(\r\n        {\r\n          left,\r\n          top,\r\n          width,\r\n          height,\r\n          props: {\r\n            transform: matrix ? matrix : undefined,\r\n          },\r\n          asContentMask: true,\r\n          maskBorderOnly: borderOnly,\r\n        },\r\n        style\r\n      )\r\n  )\r\n\r\n  return _contentMask\r\n}\r\n","import { buildXMLString } from '../utils.js'\r\nimport radius from './border-radius.js'\r\n\r\nfunction compareBorderDirections(a: string, b: string, style: any) {\r\n  return (\r\n    style[a + 'Width'] === style[b + 'Width'] &&\r\n    style[a + 'Style'] === style[b + 'Style'] &&\r\n    style[a + 'Color'] === style[b + 'Color']\r\n  )\r\n}\r\n\r\nexport function getBorderClipPath(\r\n  {\r\n    id,\r\n    // Can be `overflow: hidden` from parent containers.\r\n    currentClipPathId,\r\n    borderPath,\r\n    borderType,\r\n    left,\r\n    top,\r\n    width,\r\n    height,\r\n  }: {\r\n    id: string\r\n    currentClipPathId?: string | number\r\n    borderPath?: string\r\n    borderType?: 'rect' | 'path'\r\n    left: number\r\n    top: number\r\n    width: number\r\n    height: number\r\n  },\r\n  style: Record<string, number | string>\r\n) {\r\n  const hasBorder =\r\n    style.borderTopWidth ||\r\n    style.borderRightWidth ||\r\n    style.borderBottomWidth ||\r\n    style.borderLeftWidth\r\n\r\n  if (!hasBorder) return null\r\n\r\n  // In SVG, stroke is always centered on the path and there is no\r\n  // existing property to make it behave like CSS border. So here we\r\n  // 2x the border width and introduce another clip path to clip the\r\n  // overflowed part.\r\n  const rectClipId = `satori_bc-${id}`\r\n  const defs = buildXMLString(\r\n    'clipPath',\r\n    {\r\n      id: rectClipId,\r\n      'clip-path': currentClipPathId ? `url(#${currentClipPathId})` : undefined,\r\n    },\r\n    buildXMLString(borderType, {\r\n      x: left,\r\n      y: top,\r\n      width,\r\n      height,\r\n      d: borderPath ? borderPath : undefined,\r\n    })\r\n  )\r\n\r\n  return [defs, rectClipId]\r\n}\r\n\r\nexport default function border(\r\n  {\r\n    left,\r\n    top,\r\n    width,\r\n    height,\r\n    props,\r\n    asContentMask,\r\n    maskBorderOnly,\r\n  }: {\r\n    left: number\r\n    top: number\r\n    width: number\r\n    height: number\r\n    props: any\r\n    asContentMask?: boolean\r\n    maskBorderOnly?: boolean\r\n  },\r\n  style: Record<string, number | string>\r\n) {\r\n  const directions = ['borderTop', 'borderRight', 'borderBottom', 'borderLeft']\r\n\r\n  // No border\r\n  if (\r\n    !asContentMask &&\r\n    !directions.some((direction) => style[direction + 'Width'])\r\n  )\r\n    return ''\r\n\r\n  let fullBorder = ''\r\n\r\n  let start = 0\r\n  while (\r\n    start > 0 &&\r\n    compareBorderDirections(\r\n      directions[start],\r\n      directions[(start + 3) % 4],\r\n      style\r\n    )\r\n  ) {\r\n    start = (start + 3) % 4\r\n  }\r\n\r\n  let partialSides = [false, false, false, false]\r\n  let currentStyle = []\r\n  for (let _i = 0; _i < 4; _i++) {\r\n    const i = (start + _i) % 4\r\n    const ni = (start + _i + 1) % 4\r\n\r\n    const d = directions[i]\r\n    const nd = directions[ni]\r\n\r\n    partialSides[i] = true\r\n    currentStyle = [\r\n      style[d + 'Width'],\r\n      style[d + 'Style'],\r\n      style[d + 'Color'],\r\n      d,\r\n    ]\r\n\r\n    if (!compareBorderDirections(d, nd, style)) {\r\n      const w =\r\n        (currentStyle[0] || 0) +\r\n        (asContentMask && !maskBorderOnly\r\n          ? style[d.replace('border', 'padding')] || 0\r\n          : 0)\r\n      if (w) {\r\n        fullBorder += buildXMLString('path', {\r\n          width,\r\n          height,\r\n          ...props,\r\n          fill: 'none',\r\n          stroke: asContentMask ? '#000' : currentStyle[2],\r\n          'stroke-width': w * 2,\r\n          'stroke-dasharray':\r\n            !asContentMask && currentStyle[1] === 'dashed'\r\n              ? w * 2 + ' ' + w\r\n              : undefined,\r\n          d: radius(\r\n            { left, top, width, height },\r\n            style as Record<string, number>,\r\n            partialSides\r\n          ),\r\n        })\r\n      }\r\n      partialSides = [false, false, false, false]\r\n    }\r\n  }\r\n\r\n  if (partialSides.some(Boolean)) {\r\n    const w =\r\n      (currentStyle[0] || 0) +\r\n      (asContentMask && !maskBorderOnly\r\n        ? style[currentStyle[3].replace('border', 'padding')] || 0\r\n        : 0)\r\n    if (w) {\r\n      fullBorder += buildXMLString('path', {\r\n        width,\r\n        height,\r\n        ...props,\r\n        fill: 'none',\r\n        stroke: asContentMask ? '#000' : currentStyle[2],\r\n        'stroke-width': w * 2,\r\n        'stroke-dasharray':\r\n          !asContentMask && currentStyle[1] === 'dashed'\r\n            ? w * 2 + ' ' + w\r\n            : undefined,\r\n        d: radius(\r\n          { left, top, width, height },\r\n          style as Record<string, number>,\r\n          partialSides\r\n        ),\r\n      })\r\n    }\r\n  }\r\n\r\n  return fullBorder\r\n}\r\n","// This function guesses the human language (writing system) of the given\r\n// JavaScript string, using the Unicode Alias in extended RegExp.\r\n//\r\n// You can learn more about this in:\r\n// - https://en.wikipedia.org/wiki/Script_(Unicode)\r\n// - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Unicode_Property_Escapes\r\n// - https://unicode.org/reports/tr18/#General_Category_Property\r\n// - https://tc39.es/ecma262/multipage/text-processing.html#table-unicode-script-values\r\n\r\nimport createEmojiRegex from 'emoji-regex'\r\n\r\n// Remove the \"g\" flag\r\nconst emojiRegex = new RegExp(createEmojiRegex(), '')\r\n\r\n// Supported languages. The order matters.\r\n// Usually, this is only for \"special cases\" like CJKV languages as latin\r\n// characters are usually included in the base font, and can be safely fallback\r\n// to the Noto Sans font. A list of special cases we want to support can be\r\n// found here (sort by popularity):\r\n// - https://fonts.google.com/noto/fonts?sort=popularity&noto.query=sans\r\n//\r\n// We can't tell if a hanzi(kanji) is Chinese or Japanese by regular expressions.\r\n// - https://unicode.org/faq/han_cjk.html\r\n\r\nconst specialCode = {\r\n  emoji: emojiRegex,\r\n  symbol: /\\p{Symbol}/u,\r\n  math: /\\p{Math}/u,\r\n} as const\r\n\r\nconst code = {\r\n  'ja-JP': /\\p{scx=Hira}|\\p{scx=Kana}|\\p{scx=Han}|[\\u3000]|[\\uFF00-\\uFFEF]/u,\r\n  'ko-KR': /\\p{scx=Hangul}/u,\r\n  'zh-CN': /\\p{scx=Han}/u,\r\n  'zh-TW': /\\p{scx=Han}/u,\r\n  'zh-HK': /\\p{scx=Han}/u,\r\n  'th-TH': /\\p{scx=Thai}/u,\r\n  'bn-IN': /\\p{scx=Bengali}/u,\r\n  'ar-AR': /\\p{scx=Arabic}/u,\r\n  'ta-IN': /\\p{scx=Tamil}/u,\r\n  'ml-IN': /\\p{scx=Malayalam}/u,\r\n  'he-IL': /\\p{scx=Hebrew}/u,\r\n  'te-IN': /\\p{scx=Telugu}/u,\r\n  devanagari: /\\p{scx=Devanagari}/u,\r\n  kannada: /\\p{scx=Kannada}/u,\r\n} as const\r\n\r\ntype CodeKey = keyof typeof specialCode | keyof typeof code\r\nexport type Locale = keyof typeof code\r\nexport type LangCode = CodeKey | 'unknown'\r\n\r\nexport const locales = Object.keys({ ...code, ...specialCode }) as Locale[]\r\nexport function isValidLocale(x: any): x is Locale {\r\n  return locales.includes(x)\r\n}\r\n\r\n// Here we assume all characters from the passed in \"segment\" is in the same\r\n// written language. So if the string contains at least one matched character,\r\n// we determine it as the matched language.\r\n// Since some characters may belong to multiple languages simultaneously,\r\n// we adjust the order of the languages by locale.\r\nexport function detectLanguageCode(segment: string, locale?: Locale): LangCode {\r\n  // If `locale` matches, return it directly\r\n  if (locale && code[locale]) {\r\n    if (code[locale].test(segment)) {\r\n      return locale\r\n    }\r\n  }\r\n\r\n  for (const c of Object.keys(specialCode) as CodeKey[]) {\r\n    if (specialCode[c].test(segment)) {\r\n      return c\r\n    }\r\n  }\r\n\r\n  for (const c of Object.keys(code) as CodeKey[]) {\r\n    if (code[c].test(segment)) {\r\n      return c\r\n    }\r\n  }\r\n\r\n  return 'unknown'\r\n}\r\n\r\nexport function normalizeLocale(locale?: string): Locale | undefined {\r\n  if (locale) {\r\n    return locales.find(\r\n      (l) =>\r\n        l.toLowerCase() === locale.toLowerCase() ||\r\n        l.toLowerCase().startsWith(locale.toLowerCase())\r\n    )\r\n  }\r\n}\r\n","/**\r\n * This class handles everything related to fonts.\r\n */\r\nimport opentype from '@shuding/opentype.js'\r\nimport { Locale, locales, isValidLocale } from './language.js'\r\n\r\nexport type Weight = 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900\r\ntype WeightName = 'normal' | 'bold'\r\nexport type Style = 'normal' | 'italic'\r\nconst SUFFIX_WHEN_LANG_NOT_SET = 'unknown'\r\n\r\nexport interface FontOptions {\r\n  data: Buffer | ArrayBuffer\r\n  name: string\r\n  weight?: Weight\r\n  style?: Style\r\n  lang?: string\r\n}\r\n\r\nexport type FontEngine = {\r\n  has: (s: string) => boolean\r\n  baseline: (s?: string, resolvedFont?: any) => number\r\n  height: (s?: string, resolvedFont?: any) => number\r\n  measure: (s: string, style: any) => number\r\n  getSVG: (s: string, style: any) => string\r\n}\r\n\r\nfunction compareFont(\r\n  weight,\r\n  style,\r\n  [matchedWeight, matchedStyle],\r\n  [nextWeight, nextStyle]\r\n) {\r\n  if (matchedWeight !== nextWeight) {\r\n    // Put the defined weight first.\r\n    if (!matchedWeight) return 1\r\n    if (!nextWeight) return -1\r\n\r\n    // Exact match.\r\n    if (matchedWeight === weight) return -1\r\n    if (nextWeight === weight) return 1\r\n\r\n    // 400 and 500.\r\n    if (weight === 400 && matchedWeight === 500) return -1\r\n    if (weight === 500 && matchedWeight === 400) return -1\r\n    if (weight === 400 && nextWeight === 500) return 1\r\n    if (weight === 500 && nextWeight === 400) return 1\r\n\r\n    // Less than 400.\r\n    if (weight < 400) {\r\n      if (matchedWeight < weight && nextWeight < weight)\r\n        return nextWeight - matchedWeight\r\n      if (matchedWeight < weight) return -1\r\n      if (nextWeight < weight) return 1\r\n      return matchedWeight - nextWeight\r\n    }\r\n\r\n    // Greater than 500.\r\n    if (weight < matchedWeight && weight < nextWeight)\r\n      return matchedWeight - nextWeight\r\n    if (weight < matchedWeight) return -1\r\n    if (weight < nextWeight) return 1\r\n    return nextWeight - matchedWeight\r\n  }\r\n\r\n  if (matchedStyle !== nextStyle) {\r\n    // Exact match.\r\n    if (matchedStyle === style) return -1\r\n    if (nextStyle === style) return 1\r\n  }\r\n\r\n  return -1\r\n}\r\n\r\nexport default class FontLoader {\r\n  defaultFont: opentype.Font\r\n  fonts = new Map<string, [opentype.Font, Weight?, Style?][]>()\r\n  constructor(fontOptions: FontOptions[]) {\r\n    this.addFonts(fontOptions)\r\n  }\r\n\r\n  // Get font by name and weight.\r\n  private get({\r\n    name,\r\n    weight,\r\n    style,\r\n  }: {\r\n    name: string\r\n    weight: Weight | WeightName\r\n    style: Style\r\n  }) {\r\n    if (!this.fonts.has(name)) {\r\n      return null\r\n    }\r\n\r\n    if (weight === 'normal') weight = 400\r\n    if (weight === 'bold') weight = 700\r\n    if (typeof weight === 'string')\r\n      weight = Number.parseInt(weight, 10) as Weight\r\n\r\n    const fonts = [...this.fonts.get(name)]\r\n\r\n    let matchedFont = fonts[0]\r\n\r\n    // Fallback to the closest weight and style according to the strategy here:\r\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight#fallback_weights\r\n    for (let i = 1; i < fonts.length; i++) {\r\n      const [, weight1, style1] = matchedFont\r\n      const [, weight2, style2] = fonts[i]\r\n      if (\r\n        compareFont(weight, style, [weight1, style1], [weight2, style2]) > 0\r\n      ) {\r\n        matchedFont = fonts[i]\r\n      }\r\n    }\r\n\r\n    return matchedFont[0]\r\n  }\r\n\r\n  public addFonts(fontOptions: FontOptions[]) {\r\n    for (const fontOption of fontOptions) {\r\n      const { name, data, lang } = fontOption\r\n      if (lang && !isValidLocale(lang)) {\r\n        throw new Error(\r\n          `Invalid value for props \\`lang\\`: \"${lang}\". The value must be one of the following: ${locales.join(\r\n            ', '\r\n          )}.`\r\n        )\r\n      }\r\n      const _lang = lang ?? SUFFIX_WHEN_LANG_NOT_SET\r\n      const font = opentype.parse(\r\n        // Buffer to ArrayBuffer.\r\n        'buffer' in data\r\n          ? data.buffer.slice(\r\n              data.byteOffset,\r\n              data.byteOffset + data.byteLength\r\n            )\r\n          : data,\r\n        // @ts-ignore\r\n        { lowMemory: true }\r\n      )\r\n\r\n      // Modify the `charToGlyphIndex` method, so we can know which char is\r\n      // being mapped to which glyph.\r\n      const originalCharToGlyphIndex = font.charToGlyphIndex\r\n      font.charToGlyphIndex = (char) => {\r\n        const index = originalCharToGlyphIndex.call(font, char)\r\n        if (index === 0) {\r\n          // The current requested char is missing a glyph.\r\n          if ((font as any)._trackBrokenChars) {\r\n            ;(font as any)._trackBrokenChars.push(char)\r\n          }\r\n        }\r\n        return index\r\n      }\r\n\r\n      // We use the first font as the default font fallback.\r\n      if (!this.defaultFont) this.defaultFont = font\r\n\r\n      const _name = `${name.toLowerCase()}_${_lang}`\r\n\r\n      if (!this.fonts.has(_name)) {\r\n        this.fonts.set(_name, [])\r\n      }\r\n      this.fonts.get(_name).push([font, fontOption.weight, fontOption.style])\r\n    }\r\n  }\r\n\r\n  public getEngine(\r\n    fontSize = 16,\r\n    lineHeight = 1.2,\r\n    {\r\n      fontFamily,\r\n      fontWeight = 400,\r\n      fontStyle = 'normal',\r\n    }: {\r\n      fontFamily: string | string[]\r\n      fontWeight?: Weight | WeightName\r\n      fontStyle?: Style\r\n    },\r\n    locale: Locale | undefined\r\n  ): FontEngine {\r\n    if (!this.fonts.size) {\r\n      throw new Error(\r\n        'No fonts are loaded. At least one font is required to calculate the layout.'\r\n      )\r\n    }\r\n\r\n    fontFamily = (Array.isArray(fontFamily) ? fontFamily : [fontFamily]).map(\r\n      (name) => name.toLowerCase()\r\n    )\r\n    const fonts = []\r\n    fontFamily.forEach((face) => {\r\n      const getNormal = this.get({\r\n        name: face,\r\n        weight: fontWeight,\r\n        style: fontStyle,\r\n      })\r\n      if (getNormal) {\r\n        fonts.push(getNormal)\r\n        return\r\n      }\r\n\r\n      const getUnknown = this.get({\r\n        name: face + '_unknown',\r\n        weight: fontWeight,\r\n        style: fontStyle,\r\n      })\r\n\r\n      if (getUnknown) {\r\n        fonts.push(getUnknown)\r\n        return\r\n      }\r\n    })\r\n\r\n    // Add additional fonts as the fallback.\r\n    const keys = Array.from(this.fonts.keys())\r\n    const specifiedLangFonts = []\r\n    const nonSpecifiedLangFonts = []\r\n    const additionalFonts = []\r\n    for (const name of keys) {\r\n      if (fontFamily.includes(name)) continue\r\n      if (locale) {\r\n        const lang = getLangFromFontName(name)\r\n        if (lang) {\r\n          if (lang === locale) {\r\n            specifiedLangFonts.push(\r\n              this.get({\r\n                name,\r\n                weight: fontWeight,\r\n                style: fontStyle,\r\n              })\r\n            )\r\n          } else {\r\n            nonSpecifiedLangFonts.push(\r\n              this.get({\r\n                name,\r\n                weight: fontWeight,\r\n                style: fontStyle,\r\n              })\r\n            )\r\n          }\r\n        } else {\r\n          additionalFonts.push(\r\n            this.get({\r\n              name,\r\n              weight: fontWeight,\r\n              style: fontStyle,\r\n            })\r\n          )\r\n        }\r\n      } else {\r\n        additionalFonts.push(\r\n          this.get({\r\n            name,\r\n            weight: fontWeight,\r\n            style: fontStyle,\r\n          })\r\n        )\r\n      }\r\n    }\r\n\r\n    const cachedFontResolver = new Map<number, opentype.Font | undefined>()\r\n    const resolveFont = (word: string, fallback = true) => {\r\n      const _fonts = [\r\n        ...fonts,\r\n        ...additionalFonts,\r\n        ...specifiedLangFonts,\r\n        ...(fallback ? nonSpecifiedLangFonts : []),\r\n      ]\r\n\r\n      if (typeof word === 'undefined') {\r\n        if (fallback) {\r\n          return _fonts[_fonts.length - 1]\r\n        }\r\n        return undefined\r\n      }\r\n\r\n      const code = word.charCodeAt(0)\r\n      if (cachedFontResolver.has(code)) return cachedFontResolver.get(code)\r\n\r\n      const font = _fonts.find((_font, index) => {\r\n        return (\r\n          !!_font.charToGlyphIndex(word) ||\r\n          (fallback && index === _fonts.length - 1)\r\n        )\r\n      })\r\n\r\n      if (font) {\r\n        cachedFontResolver.set(code, font)\r\n      }\r\n\r\n      return font\r\n    }\r\n\r\n    const ascender = (resolvedFont: opentype.Font, useOS2Table = false) => {\r\n      const _ascender =\r\n        (useOS2Table ? resolvedFont.tables?.os2?.sTypoAscender : 0) ||\r\n        resolvedFont.ascender\r\n      return (_ascender / resolvedFont.unitsPerEm) * fontSize\r\n    }\r\n    const descender = (resolvedFont: opentype.Font, useOS2Table = false) => {\r\n      const _descender =\r\n        (useOS2Table ? resolvedFont.tables?.os2?.sTypoDescender : 0) ||\r\n        resolvedFont.descender\r\n      return (_descender / resolvedFont.unitsPerEm) * fontSize\r\n    }\r\n\r\n    const resolve = (s: string) => {\r\n      return resolveFont(s, false)\r\n    }\r\n\r\n    const engine = {\r\n      has: (s: string) => {\r\n        if (s === '\\n') return true\r\n        const font = resolve(s)\r\n        if (!font) return false\r\n        ;(font as any)._trackBrokenChars = []\r\n        font.stringToGlyphs(s)\r\n        if (!(font as any)._trackBrokenChars.length) return true\r\n        ;(font as any)._trackBrokenChars = undefined\r\n        return false\r\n      },\r\n      baseline: (\r\n        s?: string,\r\n        resolvedFont = typeof s === 'undefined' ? fonts[0] : resolveFont(s)\r\n      ) => {\r\n        // https://www.w3.org/TR/css-inline-3/#css-metrics\r\n        // https://www.w3.org/TR/CSS2/visudet.html#leading\r\n        // Note. It is recommended that implementations that use OpenType or\r\n        // TrueType fonts use the metrics \"sTypoAscender\" and \"sTypoDescender\"\r\n        // from the font's OS/2 table for A and D (after scaling to the current\r\n        // element's font size). In the absence of these metrics, the \"Ascent\"\r\n        // and \"Descent\" metrics from the HHEA table should be used.\r\n        const A = ascender(resolvedFont, true)\r\n        const D = descender(resolvedFont, true)\r\n        const glyphHeight = engine.height(s, resolvedFont)\r\n        const { yMax, yMin } = resolvedFont.tables.head\r\n\r\n        const sGlyphHeight = A - D\r\n        const baselineOffset = (yMax / (yMax - yMin) - 1) * sGlyphHeight\r\n\r\n        return glyphHeight * ((1.2 / lineHeight + 1) / 2) + baselineOffset\r\n      },\r\n      height: (\r\n        s?: string,\r\n        resolvedFont = typeof s === 'undefined' ? fonts[0] : resolveFont(s)\r\n      ) => {\r\n        return (\r\n          (ascender(resolvedFont) - descender(resolvedFont)) *\r\n          (lineHeight / 1.2)\r\n        )\r\n      },\r\n      measure: (s: string, style: any) => {\r\n        return this.measure(resolveFont, s, style)\r\n      },\r\n      getSVG: (s: string, style: any) => {\r\n        return this.getSVG(resolveFont, s, style)\r\n      },\r\n    }\r\n\r\n    return engine\r\n  }\r\n\r\n  private patchFontFallbackResolver(\r\n    font: opentype.Font,\r\n    resolveFont: (word: string, fallback?: boolean) => opentype.Font\r\n  ) {\r\n    const brokenChars = []\r\n    ;(font as any)._trackBrokenChars = brokenChars\r\n\r\n    const originalStringToGlyphs = font.stringToGlyphs\r\n    font.stringToGlyphs = (s: string, ...args: any) => {\r\n      const glyphs = originalStringToGlyphs.call(font, s, ...args)\r\n\r\n      for (let i = 0; i < glyphs.length; i++) {\r\n        // Hitting an undefined glyph. We have to try to resolve it from other\r\n        // fonts.\r\n        // @TODO: This affects the kerning resolution but should be fine for now.\r\n        if (glyphs[i].unicode === undefined) {\r\n          const char = brokenChars.shift()\r\n          const anotherFont = resolveFont(char)\r\n          if (anotherFont !== font) {\r\n            const glyph = anotherFont.charToGlyph(char)\r\n            // Scale the glyph to match the current units per em.\r\n            const scale = font.unitsPerEm / anotherFont.unitsPerEm\r\n            const p = new opentype.Path()\r\n            p.unitsPerEm = font.unitsPerEm\r\n            p.commands = glyph.path.commands.map((command) => {\r\n              const scaledCommand = { ...command }\r\n              for (let k in scaledCommand) {\r\n                if (typeof scaledCommand[k] === 'number') {\r\n                  scaledCommand[k] *= scale\r\n                }\r\n              }\r\n              return scaledCommand\r\n            })\r\n            const g = new opentype.Glyph({\r\n              ...glyph,\r\n              advanceWidth: glyph.advanceWidth * scale,\r\n              xMin: glyph.xMin * scale,\r\n              xMax: glyph.xMax * scale,\r\n              yMin: glyph.yMin * scale,\r\n              yMax: glyph.yMax * scale,\r\n              path: p,\r\n            })\r\n\r\n            glyphs[i] = g\r\n          }\r\n        }\r\n      }\r\n\r\n      return glyphs\r\n    }\r\n\r\n    return () => {\r\n      font.stringToGlyphs = originalStringToGlyphs\r\n      ;(font as any)._trackBrokenChars = undefined\r\n    }\r\n  }\r\n\r\n  private measure(\r\n    resolveFont: (word: string, fallback?: boolean) => opentype.Font,\r\n    content: string,\r\n    {\r\n      fontSize,\r\n      letterSpacing = 0,\r\n    }: {\r\n      fontSize: number\r\n      letterSpacing: number\r\n    }\r\n  ) {\r\n    const font = resolveFont(content)\r\n    const unpatch = this.patchFontFallbackResolver(font, resolveFont)\r\n\r\n    try {\r\n      return font.getAdvanceWidth(content, fontSize, {\r\n        letterSpacing: letterSpacing / fontSize,\r\n      })\r\n    } finally {\r\n      unpatch()\r\n    }\r\n  }\r\n\r\n  private getSVG(\r\n    resolveFont: (word: string, fallback?: boolean) => opentype.Font,\r\n    content: string,\r\n    {\r\n      fontSize,\r\n      top,\r\n      left,\r\n      letterSpacing = 0,\r\n    }: {\r\n      fontSize: number\r\n      top: number\r\n      left: number\r\n      letterSpacing: number\r\n    }\r\n  ) {\r\n    const font = resolveFont(content)\r\n    const unpatch = this.patchFontFallbackResolver(font, resolveFont)\r\n\r\n    try {\r\n      if (fontSize === 0) {\r\n        return ''\r\n      }\r\n      return font\r\n        .getPath(content.replace(/\\n/g, ''), left, top, fontSize, {\r\n          letterSpacing: letterSpacing / fontSize,\r\n        })\r\n        .toPathData(1)\r\n    } finally {\r\n      unpatch()\r\n    }\r\n  }\r\n}\r\n\r\nfunction getLangFromFontName(name: string): Locale | undefined {\r\n  const arr = name.split('_')\r\n  const lang = arr[arr.length - 1]\r\n\r\n  return lang === SUFFIX_WHEN_LANG_NOT_SET ? undefined : (lang as Locale)\r\n}\r\n","import { buildXMLString } from '../utils.js'\r\n\r\nexport default function svg({\r\n  width,\r\n  height,\r\n  content,\r\n}: {\r\n  width: number\r\n  height: number\r\n  content: string\r\n}) {\r\n  return buildXMLString(\r\n    'svg',\r\n    {\r\n      width,\r\n      height,\r\n      viewBox: `0 0 ${width} ${height}`,\r\n      xmlns: 'http://www.w3.org/2000/svg',\r\n    },\r\n    content\r\n  )\r\n}\r\n","import type { TwConfig } from 'twrnc'\r\n\r\nimport * as twrnc from 'twrnc/create'\r\n\r\ntype TwPlugin = TwConfig['plugins'][number]\r\n\r\nconst defaultShadows: TwPlugin = {\r\n  handler: ({ addUtilities }) => {\r\n    const presets = {\r\n      'shadow-sm': { boxShadow: '0 1px 2px 0 rgb(0 0 0 / 0.05)' },\r\n      shadow: {\r\n        boxShadow:\r\n          '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',\r\n      },\r\n      'shadow-md': {\r\n        boxShadow:\r\n          '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',\r\n      },\r\n      'shadow-lg': {\r\n        boxShadow:\r\n          '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',\r\n      },\r\n      'shadow-xl': {\r\n        boxShadow:\r\n          '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\r\n      },\r\n      'shadow-2xl': {\r\n        boxShadow: '0 25px 50px -12px rgb(0 0 0 / 0.25)',\r\n      },\r\n      'shadow-inner': {\r\n        boxShadow: 'inset 0 2px 4px 0 rgb(0 0 0 / 0.05)',\r\n      },\r\n      'shadow-none': { boxShadow: '0 0 #0000' },\r\n    }\r\n\r\n    addUtilities(presets)\r\n  },\r\n}\r\n\r\nfunction createTw(config?: TwConfig) {\r\n  return twrnc.create(\r\n    {\r\n      ...config,\r\n      plugins: [...(config?.plugins ?? []), defaultShadows],\r\n    },\r\n    'web'\r\n  )\r\n}\r\n\r\nlet tw\r\nexport default function getTw({\r\n  width,\r\n  height,\r\n  config,\r\n}: {\r\n  width: number\r\n  height: number\r\n  config?: TwConfig\r\n}) {\r\n  if (!tw) {\r\n    tw = createTw(config)\r\n  }\r\n  tw.setWindowDimensions({ width: +width, height: +height })\r\n  return tw\r\n}\r\n","import resolveConfig from 'tailwindcss/resolveConfig';\nimport Cache from './cache';\nimport ClassParser from './ClassParser';\nimport { parseInputs } from './parse-inputs';\nimport { complete, warn } from './helpers';\nimport { getAddedUtilities } from './plugin';\nimport { removeOpacityHelpers } from './resolve/color';\nexport function create(customConfig, platform) {\n    const config = resolveConfig(withContent(customConfig));\n    const device = {};\n    const pluginUtils = getAddedUtilities(config.plugins);\n    const customStringUtils = {};\n    const customStyleUtils = Object.entries(pluginUtils)\n        .map(([util, style]) => {\n        if (typeof style === `string`) {\n            // mutating while mapping, i know - bad form, but for performance sake... ¯\\_(ツ)_/¯\n            customStringUtils[util] = style;\n            return [util, { kind: `null` }];\n        }\n        return [util, complete(style)];\n    })\n        .filter(([, ir]) => ir.kind !== `null`);\n    patchCustomFontUtils(customConfig, customStyleUtils, config);\n    function deriveCacheGroup() {\n        return ([\n            device.windowDimensions ? `w${device.windowDimensions.width}` : false,\n            device.windowDimensions ? `h${device.windowDimensions.height}` : false,\n            device.fontScale ? `fs${device.fontScale}` : false,\n            device.colorScheme === `dark` ? `dark` : false,\n            device.pixelDensity === 2 ? `retina` : false,\n        ]\n            .filter(Boolean)\n            .join(`--`) || `default`);\n    }\n    let cacheGroup = deriveCacheGroup();\n    const contextCaches = {};\n    function getCache() {\n        const existing = contextCaches[cacheGroup];\n        if (existing) {\n            return existing;\n        }\n        const cache = new Cache(customStyleUtils);\n        contextCaches[cacheGroup] = cache;\n        return cache;\n    }\n    function style(...inputs) {\n        const cache = getCache();\n        let resolved = {};\n        const dependents = [];\n        const ordered = [];\n        const [utilities, userStyle] = parseInputs(inputs);\n        // check if we've seen this full set of classes before\n        // if we have a cached copy, we can skip examining each utility\n        const joined = utilities.join(` `);\n        const cached = cache.getStyle(joined);\n        if (cached) {\n            return { ...cached, ...(userStyle ? userStyle : {}) };\n        }\n        for (const utility of utilities) {\n            let styleIr = cache.getIr(utility);\n            if (!styleIr && utility in customStringUtils) {\n                const customStyle = style(customStringUtils[utility]);\n                cache.setIr(utility, complete(customStyle));\n                resolved = { ...resolved, ...customStyle };\n                continue;\n            }\n            const parser = new ClassParser(utility, config, cache, device, platform);\n            styleIr = parser.parse();\n            switch (styleIr.kind) {\n                case `complete`:\n                    resolved = { ...resolved, ...styleIr.style };\n                    cache.setIr(utility, styleIr);\n                    break;\n                case `dependent`:\n                    dependents.push(styleIr);\n                    break;\n                case `ordered`:\n                    ordered.push(styleIr);\n                    break;\n                case `null`:\n                    cache.setIr(utility, styleIr);\n                    break;\n            }\n        }\n        if (ordered.length > 0) {\n            ordered.sort((a, b) => a.order - b.order);\n            for (const orderedStyle of ordered) {\n                switch (orderedStyle.styleIr.kind) {\n                    case `complete`:\n                        resolved = { ...resolved, ...orderedStyle.styleIr.style };\n                        break;\n                    case `dependent`:\n                        dependents.push(orderedStyle.styleIr);\n                        break;\n                }\n            }\n        }\n        if (dependents.length > 0) {\n            for (const dependent of dependents) {\n                const error = dependent.complete(resolved);\n                if (error) {\n                    warn(error);\n                }\n            }\n            removeOpacityHelpers(resolved);\n        }\n        // cache the full set of classes for future re-renders\n        // it's important we cache BEFORE merging in userStyle below\n        if (joined !== ``) {\n            cache.setStyle(joined, resolved);\n        }\n        if (userStyle) {\n            resolved = { ...resolved, ...userStyle };\n        }\n        return resolved;\n    }\n    function color(utils) {\n        const styleObj = style(utils\n            .split(/\\s+/g)\n            .map((util) => util.replace(/^(bg|text|border)-/, ``))\n            .map((util) => `bg-${util}`)\n            .join(` `));\n        return typeof styleObj.backgroundColor === `string`\n            ? styleObj.backgroundColor\n            : undefined;\n    }\n    // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n    const tailwindFn = (strings, ...values) => {\n        let str = ``;\n        strings.forEach((string, i) => {\n            var _a;\n            str += string + ((_a = values[i]) !== null && _a !== void 0 ? _a : ``);\n        });\n        return style(str);\n    };\n    tailwindFn.style = style;\n    tailwindFn.color = color;\n    tailwindFn.prefixMatch = (...prefixes) => {\n        const joined = prefixes.sort().join(`:`);\n        const cache = getCache();\n        const cached = cache.getPrefixMatch(joined);\n        if (cached !== undefined) {\n            return cached;\n        }\n        const parser = new ClassParser(`${joined}:flex`, config, cache, device, platform);\n        const ir = parser.parse();\n        const prefixMatches = ir.kind !== `null`;\n        cache.setPrefixMatch(joined, prefixMatches);\n        return prefixMatches;\n    };\n    tailwindFn.setWindowDimensions = (newDimensions) => {\n        device.windowDimensions = newDimensions;\n        cacheGroup = deriveCacheGroup();\n    };\n    tailwindFn.setFontScale = (newFontScale) => {\n        device.fontScale = newFontScale;\n        cacheGroup = deriveCacheGroup();\n    };\n    tailwindFn.setPixelDensity = (newPixelDensity) => {\n        device.pixelDensity = newPixelDensity;\n        cacheGroup = deriveCacheGroup();\n    };\n    tailwindFn.setColorScheme = (newColorScheme) => {\n        device.colorScheme = newColorScheme;\n        cacheGroup = deriveCacheGroup();\n    };\n    return tailwindFn;\n}\nexport default create;\nfunction withContent(config) {\n    return {\n        ...config,\n        // prevent warnings from tailwind about not having a `content` prop\n        // we don't need one because we have our own jit parser which\n        // does not rely on knowing content paths to search\n        content: [`_no_warnings_please`],\n    };\n}\n// Allow override default font-<name> style\n// @TODO: long-term, i'd like to think of a more generic way to allow\n// custom configurations not to get masked by default utilities...\nfunction patchCustomFontUtils(customConfig, customStyleUtils, config) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;\n    if (((_a = customConfig.theme) === null || _a === void 0 ? void 0 : _a.fontWeight) || ((_c = (_b = customConfig.theme) === null || _b === void 0 ? void 0 : _b.extend) === null || _c === void 0 ? void 0 : _c.fontWeight)) {\n        [\n            ...Object.entries((_e = (_d = customConfig.theme) === null || _d === void 0 ? void 0 : _d.fontWeight) !== null && _e !== void 0 ? _e : {}),\n            ...Object.entries((_h = (_g = (_f = customConfig.theme) === null || _f === void 0 ? void 0 : _f.extend) === null || _g === void 0 ? void 0 : _g.fontWeight) !== null && _h !== void 0 ? _h : {}),\n        ].forEach(([name, value]) => {\n            customStyleUtils.push([`font-${name}`, complete({ fontWeight: String(value) })]);\n        });\n    }\n    if (`object` === typeof ((_j = config.theme) === null || _j === void 0 ? void 0 : _j.fontFamily)) {\n        [\n            ...Object.entries((_l = (_k = customConfig.theme) === null || _k === void 0 ? void 0 : _k.fontFamily) !== null && _l !== void 0 ? _l : {}),\n            ...Object.entries((_p = (_o = (_m = customConfig.theme) === null || _m === void 0 ? void 0 : _m.extend) === null || _o === void 0 ? void 0 : _o.fontFamily) !== null && _p !== void 0 ? _p : {}),\n        ].forEach(([name, value]) => {\n            const fontFamily = Array.isArray(value) ? value[0] : value;\n            if (fontFamily) {\n                customStyleUtils.push([`font-${name}`, complete({ fontFamily })]);\n            }\n        });\n    }\n}\n","import defaultStyles from './styles';\nexport default class Cache {\n    constructor(customStyles) {\n        this.ir = new Map(defaultStyles);\n        this.styles = new Map();\n        this.prefixes = new Map();\n        this.ir = new Map([...defaultStyles, ...(customStyles !== null && customStyles !== void 0 ? customStyles : [])]);\n    }\n    getStyle(key) {\n        return this.styles.get(key);\n    }\n    setStyle(key, style) {\n        this.styles.set(key, style);\n    }\n    getIr(key) {\n        return this.ir.get(key);\n    }\n    setIr(key, ir) {\n        this.ir.set(key, ir);\n    }\n    getPrefixMatch(key) {\n        return this.prefixes.get(key);\n    }\n    setPrefixMatch(key, value) {\n        this.prefixes.set(key, value);\n    }\n}\n","import { complete } from './helpers';\nconst defaultStyles = [\n    [`aspect-square`, complete({ aspectRatio: 1 })],\n    [`aspect-video`, complete({ aspectRatio: 16 / 9 })],\n    [`items-center`, complete({ alignItems: `center` })],\n    [`items-start`, complete({ alignItems: `flex-start` })],\n    [`items-end`, complete({ alignItems: `flex-end` })],\n    [`items-baseline`, complete({ alignItems: `baseline` })],\n    [`items-stretch`, complete({ alignItems: `stretch` })],\n    [`justify-start`, complete({ justifyContent: `flex-start` })],\n    [`justify-end`, complete({ justifyContent: `flex-end` })],\n    [`justify-center`, complete({ justifyContent: `center` })],\n    [`justify-between`, complete({ justifyContent: `space-between` })],\n    [`justify-around`, complete({ justifyContent: `space-around` })],\n    [`justify-evenly`, complete({ justifyContent: `space-evenly` })],\n    [`content-start`, complete({ alignContent: `flex-start` })],\n    [`content-end`, complete({ alignContent: `flex-end` })],\n    [`content-between`, complete({ alignContent: `space-between` })],\n    [`content-around`, complete({ alignContent: `space-around` })],\n    [`content-stretch`, complete({ alignContent: `stretch` })],\n    [`content-center`, complete({ alignContent: `center` })],\n    [`self-auto`, complete({ alignSelf: `auto` })],\n    [`self-start`, complete({ alignSelf: `flex-start` })],\n    [`self-end`, complete({ alignSelf: `flex-end` })],\n    [`self-center`, complete({ alignSelf: `center` })],\n    [`self-stretch`, complete({ alignSelf: `stretch` })],\n    [`self-baseline`, complete({ alignSelf: `baseline` })],\n    [`direction-inherit`, complete({ direction: `inherit` })],\n    [`direction-ltr`, complete({ direction: `ltr` })],\n    [`direction-rtl`, complete({ direction: `rtl` })],\n    [`hidden`, complete({ display: `none` })],\n    [`flex`, complete({ display: `flex` })],\n    [`flex-row`, complete({ flexDirection: `row` })],\n    [`flex-row-reverse`, complete({ flexDirection: `row-reverse` })],\n    [`flex-col`, complete({ flexDirection: `column` })],\n    [`flex-col-reverse`, complete({ flexDirection: `column-reverse` })],\n    [`flex-wrap`, complete({ flexWrap: `wrap` })],\n    [`flex-wrap-reverse`, complete({ flexWrap: `wrap-reverse` })],\n    [`flex-nowrap`, complete({ flexWrap: `nowrap` })],\n    [`flex-auto`, complete({ flexGrow: 1, flexShrink: 1, flexBasis: `auto` })],\n    [`flex-initial`, complete({ flexGrow: 0, flexShrink: 1, flexBasis: `auto` })],\n    [`flex-none`, complete({ flexGrow: 0, flexShrink: 0, flexBasis: `auto` })],\n    [`overflow-hidden`, complete({ overflow: `hidden` })],\n    [`overflow-visible`, complete({ overflow: `visible` })],\n    [`overflow-scroll`, complete({ overflow: `scroll` })],\n    [`absolute`, complete({ position: `absolute` })],\n    [`relative`, complete({ position: `relative` })],\n    [`italic`, complete({ fontStyle: `italic` })],\n    [`not-italic`, complete({ fontStyle: `normal` })],\n    [`oldstyle-nums`, fontVariant(`oldstyle-nums`)],\n    [`small-caps`, fontVariant(`small-caps`)],\n    [`lining-nums`, fontVariant(`lining-nums`)],\n    [`tabular-nums`, fontVariant(`tabular-nums`)],\n    [`proportional-nums`, fontVariant(`proportional-nums`)],\n    [`font-thin`, complete({ fontWeight: `100` })],\n    [`font-100`, complete({ fontWeight: `100` })],\n    [`font-extralight`, complete({ fontWeight: `200` })],\n    [`font-200`, complete({ fontWeight: `200` })],\n    [`font-light`, complete({ fontWeight: `300` })],\n    [`font-300`, complete({ fontWeight: `300` })],\n    [`font-normal`, complete({ fontWeight: `normal` })],\n    [`font-400`, complete({ fontWeight: `400` })],\n    [`font-medium`, complete({ fontWeight: `500` })],\n    [`font-500`, complete({ fontWeight: `500` })],\n    [`font-semibold`, complete({ fontWeight: `600` })],\n    [`font-600`, complete({ fontWeight: `600` })],\n    [`font-bold`, complete({ fontWeight: `bold` })],\n    [`font-700`, complete({ fontWeight: `700` })],\n    [`font-extrabold`, complete({ fontWeight: `800` })],\n    [`font-800`, complete({ fontWeight: `800` })],\n    [`font-black`, complete({ fontWeight: `900` })],\n    [`font-900`, complete({ fontWeight: `900` })],\n    [`include-font-padding`, complete({ includeFontPadding: true })],\n    [`remove-font-padding`, complete({ includeFontPadding: false })],\n    // not sure if RN supports `max-width: none;`, but this should be equivalent\n    [`max-w-none`, complete({ maxWidth: `99999%` })],\n    [`text-left`, complete({ textAlign: `left` })],\n    [`text-center`, complete({ textAlign: `center` })],\n    [`text-right`, complete({ textAlign: `right` })],\n    [`text-justify`, complete({ textAlign: `justify` })],\n    [`text-auto`, complete({ textAlign: `auto` })],\n    [`underline`, complete({ textDecorationLine: `underline` })],\n    [`line-through`, complete({ textDecorationLine: `line-through` })],\n    [`no-underline`, complete({ textDecorationLine: `none` })],\n    [`uppercase`, complete({ textTransform: `uppercase` })],\n    [`lowercase`, complete({ textTransform: `lowercase` })],\n    [`capitalize`, complete({ textTransform: `capitalize` })],\n    [`normal-case`, complete({ textTransform: `none` })],\n    [`w-auto`, complete({ width: `auto` })],\n    [`h-auto`, complete({ height: `auto` })],\n    [`basis-auto`, complete({ flexBasis: `auto` })],\n    [`flex-basis-auto`, complete({ flexBasis: `auto` })],\n    // default box-shadow implementations\n    [\n        `shadow-sm`,\n        complete({\n            shadowOffset: { width: 1, height: 1 },\n            shadowColor: `#000`,\n            shadowRadius: 1,\n            shadowOpacity: 0.025,\n            elevation: 1,\n        }),\n    ],\n    [\n        `shadow`,\n        complete({\n            shadowOffset: { width: 1, height: 1 },\n            shadowColor: `#000`,\n            shadowRadius: 1,\n            shadowOpacity: 0.075,\n            elevation: 2,\n        }),\n    ],\n    [\n        `shadow-md`,\n        complete({\n            shadowOffset: { width: 1, height: 1 },\n            shadowColor: `#000`,\n            shadowRadius: 3,\n            shadowOpacity: 0.125,\n            elevation: 3,\n        }),\n    ],\n    [\n        `shadow-lg`,\n        complete({\n            shadowOffset: { width: 1, height: 1 },\n            shadowColor: `#000`,\n            shadowOpacity: 0.15,\n            shadowRadius: 8,\n            elevation: 8,\n        }),\n    ],\n    [\n        `shadow-xl`,\n        complete({\n            shadowOffset: { width: 1, height: 1 },\n            shadowColor: `#000`,\n            shadowOpacity: 0.19,\n            shadowRadius: 20,\n            elevation: 12,\n        }),\n    ],\n    [\n        `shadow-2xl`,\n        complete({\n            shadowOffset: { width: 1, height: 1 },\n            shadowColor: `#000`,\n            shadowOpacity: 0.25,\n            shadowRadius: 30,\n            elevation: 16,\n        }),\n    ],\n    [\n        `shadow-none`,\n        complete({\n            shadowOffset: { width: 0, height: 0 },\n            shadowColor: `#000`,\n            shadowRadius: 0,\n            shadowOpacity: 0,\n            elevation: 0,\n        }),\n    ],\n];\nexport default defaultStyles;\nfunction fontVariant(type) {\n    return {\n        kind: `dependent`,\n        complete(style) {\n            if (!style.fontVariant || !Array.isArray(style.fontVariant)) {\n                style.fontVariant = [];\n            }\n            style.fontVariant.push(type);\n        },\n    };\n}\n","var _a;\nimport { Unit } from './types';\nexport function complete(style) {\n    return { kind: `complete`, style };\n}\nexport function parseNumericValue(value, context = {}) {\n    const { fractions } = context;\n    if (fractions && value.includes(`/`)) {\n        const [numerator = ``, denominator = ``] = value.split(`/`, 2);\n        const parsedNumerator = parseNumericValue(numerator);\n        const parsedDenominator = parseNumericValue(denominator);\n        if (!parsedNumerator || !parsedDenominator) {\n            return null;\n        }\n        return [parsedNumerator[0] / parsedDenominator[0], parsedDenominator[1]];\n    }\n    const number = parseFloat(value);\n    if (Number.isNaN(number)) {\n        return null;\n    }\n    const match = value.match(/(([a-z]{2,}|%))$/);\n    if (!match) {\n        return [number, Unit.none];\n    }\n    switch (match === null || match === void 0 ? void 0 : match[1]) {\n        case `rem`:\n            return [number, Unit.rem];\n        case `px`:\n            return [number, Unit.px];\n        case `em`:\n            return [number, Unit.em];\n        case `%`:\n            return [number, Unit.percent];\n        case `vw`:\n            return [number, Unit.vw];\n        case `vh`:\n            return [number, Unit.vh];\n        default:\n            return null;\n    }\n}\nexport function getCompleteStyle(prop, value, context = {}) {\n    const styleVal = parseStyleVal(value, context);\n    return styleVal === null ? null : complete({ [prop]: styleVal });\n}\nexport function mergeStyle(prop, value, style) {\n    const styleVal = parseStyleVal(value);\n    if (styleVal !== null) {\n        style[prop] = styleVal;\n    }\n    return style;\n}\nexport function getStyle(prop, value) {\n    const styleVal = parseStyleVal(value);\n    return styleVal === null ? null : { [prop]: styleVal };\n}\nexport function parseStyleVal(value, context = {}) {\n    if (value === undefined) {\n        return null;\n    }\n    const parsed = parseNumericValue(String(value), context);\n    if (parsed) {\n        return toStyleVal(...parsed, context);\n    }\n    else {\n        return null;\n    }\n}\nexport function toStyleVal(number, unit, context = {}) {\n    const { isNegative, device } = context;\n    switch (unit) {\n        case Unit.rem:\n            return number * 16 * (isNegative ? -1 : 1);\n        case Unit.px:\n            return number * (isNegative ? -1 : 1);\n        case Unit.percent:\n            return `${isNegative ? `-` : ``}${number}%`;\n        case Unit.none:\n            return number * (isNegative ? -1 : 1);\n        case Unit.vw:\n            if (!(device === null || device === void 0 ? void 0 : device.windowDimensions)) {\n                warn(`\\`vw\\` CSS unit requires configuration with \\`useDeviceContext()\\``);\n                return null;\n            }\n            return device.windowDimensions.width * (number / 100);\n        case Unit.vh:\n            if (!(device === null || device === void 0 ? void 0 : device.windowDimensions)) {\n                warn(`\\`vh\\` CSS unit requires configuration with \\`useDeviceContext()\\``);\n                return null;\n            }\n            return device.windowDimensions.height * (number / 100);\n        default:\n            return null;\n    }\n}\nexport function toPx(value) {\n    const parsed = parseNumericValue(value);\n    if (!parsed) {\n        return null;\n    }\n    const [number, unit] = parsed;\n    switch (unit) {\n        case Unit.rem:\n            return number * 16;\n        case Unit.px:\n            return number;\n        default:\n            return null;\n    }\n}\nconst DIR_MAP = {\n    t: `Top`,\n    tr: `TopRight`,\n    tl: `TopLeft`,\n    b: `Bottom`,\n    br: `BottomRight`,\n    bl: `BottomLeft`,\n    l: `Left`,\n    r: `Right`,\n    x: `Horizontal`,\n    y: `Vertical`,\n};\nexport function getDirection(string) {\n    return DIR_MAP[string !== null && string !== void 0 ? string : ``] || `All`;\n}\nexport function parseAndConsumeDirection(utilityFragment) {\n    let direction = `All`;\n    const consumed = utilityFragment.replace(/^-(t|b|r|l|tr|tl|br|bl)(-|$)/, (_, dir) => {\n        direction = getDirection(dir);\n        return ``;\n    });\n    return [consumed, direction];\n}\nexport function parseUnconfigged(value, context = {}) {\n    if (value.includes(`/`)) {\n        const style = unconfiggedStyleVal(value, { ...context, fractions: true });\n        if (style)\n            return style;\n    }\n    if (value[0] === `[`) {\n        value = value.slice(1, -1);\n    }\n    return unconfiggedStyleVal(value, context);\n}\nexport function unconfiggedStyle(prop, value, context = {}) {\n    const styleVal = parseUnconfigged(value, context);\n    if (styleVal === null) {\n        return null;\n    }\n    return complete({ [prop]: styleVal });\n}\nfunction unconfiggedStyleVal(value, context = {}) {\n    if (value === `px`) {\n        return 1;\n    }\n    const parsed = parseNumericValue(value, context);\n    if (!parsed) {\n        return null;\n    }\n    let [number, unit] = parsed;\n    if (context.fractions) {\n        unit = Unit.percent;\n        number *= 100;\n    }\n    // not sure if this is the right approach, but this allows arbitrary\n    // non-bracket numbers, like top-73 and it INFERS the meaning to be\n    // tailwind's default scale for spacing, which is 1 = 0.25rem\n    if (unit === Unit.none) {\n        number = number / 4;\n        unit = Unit.rem;\n    }\n    return toStyleVal(number, unit, context);\n}\nfunction consoleWarn(...args) {\n    console.warn(...args);\n}\nfunction noopWarn(..._) {\n    // ¯\\_(ツ)_/¯\n}\nexport const warn = typeof process === `undefined` || ((_a = process === null || process === void 0 ? void 0 : process.env) === null || _a === void 0 ? void 0 : _a.JEST_WORKER_ID) === undefined\n    ? consoleWarn\n    : noopWarn;\n","export const PLATFORMS = [`ios`, `android`, `windows`, `macos`, `web`];\nexport function isPlatform(x) {\n    return PLATFORMS.includes(x);\n}\nexport const ORIENTATIONS = [`portrait`, `landscape`];\nexport function isOrientation(x) {\n    return ORIENTATIONS.includes(x);\n}\nexport var ConfigType;\n(function (ConfigType) {\n    ConfigType[\"fontSize\"] = \"fontSize\";\n    ConfigType[\"lineHeight\"] = \"lineHeight\";\n})(ConfigType || (ConfigType = {}));\nexport var Unit;\n(function (Unit) {\n    Unit[\"rem\"] = \"rem\";\n    Unit[\"em\"] = \"em\";\n    Unit[\"px\"] = \"px\";\n    Unit[\"percent\"] = \"%\";\n    Unit[\"vw\"] = \"vw\";\n    Unit[\"vh\"] = \"vh\";\n    Unit[\"none\"] = \"<no-css-unit>\";\n})(Unit || (Unit = {}));\nexport function isString(value) {\n    return typeof value === `string`;\n}\nexport function isObject(value) {\n    return typeof value === `object`;\n}\n","import fontSize from './resolve/font-size';\nimport lineHeight from './resolve/line-height';\nimport spacing from './resolve/spacing';\nimport screens from './screens';\nimport { isOrientation, isPlatform, } from './types';\nimport fontFamily from './resolve/font-family';\nimport { color, colorOpacity } from './resolve/color';\nimport { border, borderRadius } from './resolve/borders';\nimport { getCompleteStyle, getDirection, unconfiggedStyle, warn, complete, parseNumericValue, } from './helpers';\nimport { inset } from './resolve/inset';\nimport { flexGrowShrink, flexBasis, flex, gap } from './resolve/flex';\nimport { widthHeight, minMaxWidthHeight } from './resolve/width-height';\nimport { letterSpacing } from './resolve/letter-spacing';\nimport { opacity } from './resolve/opacity';\nimport { shadowOpacity, shadowOffset } from './resolve/shadow';\nexport default class ClassParser {\n    constructor(input, config = {}, cache, device, platform) {\n        var _a, _b, _c, _d, _e, _f;\n        this.config = config;\n        this.cache = cache;\n        this.position = 0;\n        this.isNull = false;\n        this.isNegative = false;\n        this.context = {};\n        this.context.device = device;\n        const parts = input.trim().split(`:`);\n        let prefixes = [];\n        if (parts.length === 1) {\n            this.string = input;\n        }\n        else {\n            this.string = (_a = parts.pop()) !== null && _a !== void 0 ? _a : ``;\n            prefixes = parts;\n        }\n        this.char = this.string[0];\n        const widthBreakpoints = screens((_b = this.config.theme) === null || _b === void 0 ? void 0 : _b.screens);\n        // loop through the prefixes ONE time, extracting useful info\n        for (const prefix of prefixes) {\n            if (widthBreakpoints[prefix]) {\n                const breakpointOrder = (_c = widthBreakpoints[prefix]) === null || _c === void 0 ? void 0 : _c[2];\n                if (breakpointOrder !== undefined) {\n                    this.order = ((_d = this.order) !== null && _d !== void 0 ? _d : 0) + breakpointOrder;\n                }\n                const windowWidth = (_e = device.windowDimensions) === null || _e === void 0 ? void 0 : _e.width;\n                if (windowWidth) {\n                    const [min, max] = (_f = widthBreakpoints[prefix]) !== null && _f !== void 0 ? _f : [0, 0];\n                    if (windowWidth <= min || windowWidth > max) {\n                        // breakpoint does not match\n                        this.isNull = true;\n                    }\n                }\n                else {\n                    this.isNull = true;\n                }\n            }\n            else if (isPlatform(prefix)) {\n                this.isNull = prefix !== platform;\n            }\n            else if (isOrientation(prefix)) {\n                if (!device.windowDimensions) {\n                    this.isNull = true;\n                }\n                else {\n                    const deviceOrientation = device.windowDimensions.width > device.windowDimensions.height\n                        ? `landscape`\n                        : `portrait`;\n                    if (deviceOrientation !== prefix) {\n                        this.isNull = true;\n                    }\n                    else {\n                        this.incrementOrder();\n                    }\n                }\n            }\n            else if (prefix === `retina`) {\n                if (device.pixelDensity === 2) {\n                    this.incrementOrder();\n                }\n                else {\n                    this.isNull = true;\n                }\n            }\n            else if (prefix === `dark`) {\n                if (device.colorScheme !== `dark`) {\n                    this.isNull = true;\n                }\n                else {\n                    this.incrementOrder();\n                }\n            }\n            else if (!this.handlePossibleArbitraryBreakpointPrefix(prefix)) {\n                this.isNull = true;\n            }\n        }\n    }\n    parse() {\n        if (this.isNull) {\n            return { kind: `null` };\n        }\n        // resolve things like ios:hidden, after prefix removed\n        const cached = this.cache.getIr(this.rest);\n        if (cached) {\n            return cached;\n        }\n        this.parseIsNegative();\n        const ir = this.parseUtility();\n        if (!ir) {\n            return { kind: `null` };\n        }\n        if (this.order !== undefined) {\n            return { kind: `ordered`, order: this.order, styleIr: ir };\n        }\n        return ir;\n    }\n    parseUtility() {\n        var _a, _b, _c, _d, _e;\n        const theme = this.config.theme;\n        let style = null;\n        switch (this.char) {\n            case `m`:\n            case `p`: {\n                const match = this.peekSlice(1, 3).match(/^(t|b|r|l|x|y)?-/);\n                if (match) {\n                    const prop = this.char === `m` ? `margin` : `padding`;\n                    this.advance(((_b = (_a = match[0]) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) + 1);\n                    const spacingDirection = getDirection(match[1]);\n                    const style = spacing(prop, spacingDirection, this.isNegative, this.rest, (_c = this.config.theme) === null || _c === void 0 ? void 0 : _c[prop]);\n                    if (style)\n                        return style;\n                }\n            }\n        }\n        if (this.consumePeeked(`h-`)) {\n            style = widthHeight(`height`, this.rest, this.context, theme === null || theme === void 0 ? void 0 : theme.height);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`w-`)) {\n            style = widthHeight(`width`, this.rest, this.context, theme === null || theme === void 0 ? void 0 : theme.width);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`min-w-`)) {\n            style = minMaxWidthHeight(`minWidth`, this.rest, this.context, theme === null || theme === void 0 ? void 0 : theme.minWidth);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`min-h-`)) {\n            style = minMaxWidthHeight(`minHeight`, this.rest, this.context, theme === null || theme === void 0 ? void 0 : theme.minHeight);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`max-w-`)) {\n            style = minMaxWidthHeight(`maxWidth`, this.rest, this.context, theme === null || theme === void 0 ? void 0 : theme.maxWidth);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`max-h-`)) {\n            style = minMaxWidthHeight(`maxHeight`, this.rest, this.context, theme === null || theme === void 0 ? void 0 : theme.maxHeight);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`leading-`)) {\n            style = lineHeight(this.rest, theme === null || theme === void 0 ? void 0 : theme.lineHeight);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`text-`)) {\n            style = fontSize(this.rest, theme === null || theme === void 0 ? void 0 : theme.fontSize, this.context);\n            if (style)\n                return style;\n            style = color(`text`, this.rest, theme === null || theme === void 0 ? void 0 : theme.textColor);\n            if (style)\n                return style;\n            if (this.consumePeeked(`opacity-`)) {\n                style = colorOpacity(`text`, this.rest);\n                if (style)\n                    return style;\n            }\n        }\n        if (this.consumePeeked(`font-`)) {\n            style = fontFamily(this.rest, theme === null || theme === void 0 ? void 0 : theme.fontFamily);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`aspect-`)) {\n            if (this.consumePeeked(`ratio-`)) {\n                warn(`\\`aspect-ratio-{ratio}\\` is deprecated, use \\`aspect-{ratio}\\` instead`);\n            }\n            style = getCompleteStyle(`aspectRatio`, this.rest, { fractions: true });\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`tint-`)) {\n            style = color(`tint`, this.rest, theme === null || theme === void 0 ? void 0 : theme.colors);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`bg-`)) {\n            style = color(`bg`, this.rest, theme === null || theme === void 0 ? void 0 : theme.backgroundColor);\n            if (style)\n                return style;\n            if (this.consumePeeked(`opacity-`)) {\n                style = colorOpacity(`bg`, this.rest);\n                if (style)\n                    return style;\n            }\n        }\n        if (this.consumePeeked(`border`)) {\n            style = border(this.rest, theme);\n            if (style)\n                return style;\n            if (this.consumePeeked(`-opacity-`)) {\n                style = colorOpacity(`border`, this.rest);\n                if (style)\n                    return style;\n            }\n        }\n        if (this.consumePeeked(`rounded`)) {\n            style = borderRadius(this.rest, theme === null || theme === void 0 ? void 0 : theme.borderRadius);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`bottom-`)) {\n            style = inset(`bottom`, this.rest, this.isNegative, theme === null || theme === void 0 ? void 0 : theme.inset);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`top-`)) {\n            style = inset(`top`, this.rest, this.isNegative, theme === null || theme === void 0 ? void 0 : theme.inset);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`left-`)) {\n            style = inset(`left`, this.rest, this.isNegative, theme === null || theme === void 0 ? void 0 : theme.inset);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`right-`)) {\n            style = inset(`right`, this.rest, this.isNegative, theme === null || theme === void 0 ? void 0 : theme.inset);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`inset-`)) {\n            style = inset(`inset`, this.rest, this.isNegative, theme === null || theme === void 0 ? void 0 : theme.inset);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`flex-`)) {\n            if (this.consumePeeked(`basis`)) {\n                style = flexBasis(this.rest, this.context, theme === null || theme === void 0 ? void 0 : theme.flexBasis);\n            }\n            else if (this.consumePeeked(`grow`)) {\n                style = flexGrowShrink(`Grow`, this.rest, theme === null || theme === void 0 ? void 0 : theme.flexGrow);\n            }\n            else if (this.consumePeeked(`shrink`)) {\n                style = flexGrowShrink(`Shrink`, this.rest, theme === null || theme === void 0 ? void 0 : theme.flexShrink);\n            }\n            else {\n                style = flex(this.rest, theme === null || theme === void 0 ? void 0 : theme.flex);\n            }\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`basis`)) {\n            style = flexBasis(this.rest, this.context, theme === null || theme === void 0 ? void 0 : theme.flexBasis);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`grow`)) {\n            style = flexGrowShrink(`Grow`, this.rest, theme === null || theme === void 0 ? void 0 : theme.flexGrow);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`shrink`)) {\n            style = flexGrowShrink(`Shrink`, this.rest, theme === null || theme === void 0 ? void 0 : theme.flexShrink);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`gap`)) {\n            style = gap(this.rest, this.context, theme === null || theme === void 0 ? void 0 : theme.gap);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`shadow-color-opacity-`)) {\n            style = colorOpacity(`shadow`, this.rest);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`shadow-opacity-`)) {\n            style = shadowOpacity(this.rest);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`shadow-offset-`)) {\n            style = shadowOffset(this.rest);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`shadow-radius-`)) {\n            style = unconfiggedStyle(`shadowRadius`, this.rest);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`shadow-`)) {\n            style = color(`shadow`, this.rest, theme === null || theme === void 0 ? void 0 : theme.colors);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`elevation-`)) {\n            const elevation = parseInt(this.rest, 10);\n            if (!Number.isNaN(elevation)) {\n                return complete({ elevation });\n            }\n        }\n        if (this.consumePeeked(`opacity-`)) {\n            style = opacity(this.rest, theme === null || theme === void 0 ? void 0 : theme.opacity);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`tracking-`)) {\n            style = letterSpacing(this.rest, this.isNegative, theme === null || theme === void 0 ? void 0 : theme.letterSpacing);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`z-`)) {\n            const zIndex = Number((_e = (_d = theme === null || theme === void 0 ? void 0 : theme.zIndex) === null || _d === void 0 ? void 0 : _d[this.rest]) !== null && _e !== void 0 ? _e : this.rest);\n            if (!Number.isNaN(zIndex)) {\n                return complete({ zIndex });\n            }\n        }\n        warn(`\\`${this.rest}\\` unknown or invalid utility`);\n        return null;\n    }\n    handlePossibleArbitraryBreakpointPrefix(prefix) {\n        var _a;\n        // save the expense of running the regex with a quick sniff test\n        if (prefix[0] !== `m`)\n            return false;\n        const match = prefix.match(/^(min|max)-(w|h)-\\[([^\\]]+)\\]$/);\n        if (!match)\n            return false;\n        if (!((_a = this.context.device) === null || _a === void 0 ? void 0 : _a.windowDimensions)) {\n            this.isNull = true;\n            return true;\n        }\n        const windowDims = this.context.device.windowDimensions;\n        const [, type = ``, dir = ``, amount = ``] = match;\n        const checkDimension = dir === `w` ? windowDims.width : windowDims.height;\n        const parsedAmount = parseNumericValue(amount, this.context);\n        if (parsedAmount === null) {\n            this.isNull = true;\n            return true;\n        }\n        const [bound, unit] = parsedAmount;\n        if (unit !== `px`) {\n            this.isNull = true;\n        }\n        if (type === `min` ? checkDimension >= bound : checkDimension <= bound) {\n            this.incrementOrder();\n        }\n        else {\n            this.isNull = true;\n        }\n        return true;\n    }\n    advance(amount = 1) {\n        this.position += amount;\n        this.char = this.string[this.position];\n    }\n    get rest() {\n        return this.peekSlice(0, this.string.length);\n    }\n    peekSlice(begin, end) {\n        return this.string.slice(this.position + begin, this.position + end);\n    }\n    consumePeeked(string) {\n        if (this.peekSlice(0, string.length) === string) {\n            this.advance(string.length);\n            return true;\n        }\n        return false;\n    }\n    parseIsNegative() {\n        if (this.char === `-`) {\n            this.advance();\n            this.isNegative = true;\n            this.context.isNegative = true;\n        }\n    }\n    incrementOrder() {\n        var _a;\n        this.order = ((_a = this.order) !== null && _a !== void 0 ? _a : 0) + 1;\n    }\n}\n","import { Unit } from '../types';\nimport { getCompleteStyle, complete, getStyle, mergeStyle, parseNumericValue, unconfiggedStyle, } from '../helpers';\nexport default function fontSize(value, config, context = {}) {\n    const configValue = config === null || config === void 0 ? void 0 : config[value];\n    if (!configValue) {\n        return unconfiggedStyle(`fontSize`, value, context);\n    }\n    if (typeof configValue === `string`) {\n        return getCompleteStyle(`fontSize`, configValue);\n    }\n    let style = {};\n    const [fontSize, rest] = configValue;\n    const fontSizeStyle = getStyle(`fontSize`, fontSize);\n    if (fontSizeStyle) {\n        style = fontSizeStyle;\n    }\n    if (typeof rest === `string`) {\n        return complete(mergeStyle(`lineHeight`, calculateLineHeight(rest, style), style));\n    }\n    const { lineHeight, letterSpacing } = rest;\n    if (lineHeight) {\n        mergeStyle(`lineHeight`, calculateLineHeight(lineHeight, style), style);\n    }\n    if (letterSpacing) {\n        mergeStyle(`letterSpacing`, letterSpacing, style);\n    }\n    return complete(style);\n}\n// calculates line-height for relative units\nfunction calculateLineHeight(lineHeight, style) {\n    const parsed = parseNumericValue(lineHeight);\n    if (parsed) {\n        const [number, unit] = parsed;\n        if ((unit === Unit.none || unit === Unit.em) && typeof style.fontSize === `number`) {\n            return style.fontSize * number;\n        }\n    }\n    return lineHeight;\n}\n","import { Unit } from '../types';\nimport { parseNumericValue, complete, toStyleVal } from '../helpers';\nexport default function lineHeight(value, config) {\n    var _a;\n    const parseValue = (_a = config === null || config === void 0 ? void 0 : config[value]) !== null && _a !== void 0 ? _a : (value.startsWith(`[`) ? value.slice(1, -1) : value);\n    const parsed = parseNumericValue(parseValue);\n    if (!parsed) {\n        return null;\n    }\n    const [number, unit] = parsed;\n    if (unit === Unit.none) {\n        // we have a relative line-height like `2` for `leading-loose`\n        return {\n            kind: `dependent`,\n            complete(style) {\n                if (typeof style.fontSize !== `number`) {\n                    return `relative line-height utilities require that font-size be set`;\n                }\n                style.lineHeight = style.fontSize * number;\n            },\n        };\n    }\n    const styleVal = toStyleVal(number, unit);\n    return styleVal !== null ? complete({ lineHeight: styleVal }) : null;\n}\n","import { Unit } from '../types';\nimport { parseNumericValue, parseUnconfigged, toStyleVal } from '../helpers';\nexport default function spacing(type, direction, isNegative, value, config) {\n    let numericValue = ``;\n    if (value[0] === `[`) {\n        numericValue = value.slice(1, -1);\n    }\n    else {\n        const configValue = config === null || config === void 0 ? void 0 : config[value];\n        if (!configValue) {\n            const unconfigged = parseUnconfigged(value);\n            if (unconfigged && typeof unconfigged === `number`) {\n                return spacingStyle(unconfigged, Unit.px, direction, type);\n            }\n            return null;\n        }\n        else {\n            numericValue = configValue;\n        }\n    }\n    if (numericValue === `auto`) {\n        return expand(direction, type, `auto`);\n    }\n    const parsed = parseNumericValue(numericValue);\n    if (!parsed) {\n        return null;\n    }\n    let [number, unit] = parsed;\n    if (isNegative) {\n        number = -number;\n    }\n    return spacingStyle(number, unit, direction, type);\n}\nfunction spacingStyle(number, unit, direction, type) {\n    const pixels = toStyleVal(number, unit);\n    if (pixels === null) {\n        return null;\n    }\n    return expand(direction, type, pixels);\n}\nfunction expand(direction, type, value) {\n    switch (direction) {\n        case `All`:\n            return {\n                kind: `complete`,\n                style: {\n                    [`${type}Top`]: value,\n                    [`${type}Right`]: value,\n                    [`${type}Bottom`]: value,\n                    [`${type}Left`]: value,\n                },\n            };\n        case `Bottom`:\n        case `Top`:\n        case `Left`:\n        case `Right`:\n            return {\n                kind: `complete`,\n                style: {\n                    [`${type}${direction}`]: value,\n                },\n            };\n        case `Vertical`:\n            return {\n                kind: `complete`,\n                style: {\n                    [`${type}Top`]: value,\n                    [`${type}Bottom`]: value,\n                },\n            };\n        case `Horizontal`:\n            return {\n                kind: `complete`,\n                style: {\n                    [`${type}Left`]: value,\n                    [`${type}Right`]: value,\n                },\n            };\n        default:\n            return null;\n    }\n}\n","import { toPx, warn } from './helpers';\nexport default function screens(input) {\n    if (!input) {\n        return {};\n    }\n    const screenData = Object.entries(input).reduce((acc, [screen, value]) => {\n        const data = [0, Infinity, 0];\n        const values = typeof value === `string` ? { min: value } : value;\n        const minPx = values.min ? toPx(values.min) : 0;\n        if (minPx === null) {\n            warn(`invalid screen config value: ${screen}->min: ${values.min}`);\n        }\n        else {\n            data[0] = minPx;\n        }\n        const maxPx = values.max ? toPx(values.max) : Infinity;\n        if (maxPx === null) {\n            warn(`invalid screen config value: ${screen}->max: ${values.max}`);\n        }\n        else {\n            data[1] = maxPx;\n        }\n        acc[screen] = data;\n        return acc;\n    }, {});\n    const values = Object.values(screenData);\n    values.sort((a, b) => {\n        const [minA, maxA] = a;\n        const [minB, maxB] = b;\n        if (maxA === Infinity || maxB === Infinity) {\n            return minA - minB;\n        }\n        return maxA - maxB;\n    });\n    let order = 0;\n    values.forEach((value) => (value[2] = order++));\n    return screenData;\n}\n","import { complete } from '../helpers';\nexport default function fontFamily(value, config) {\n    const configValue = config === null || config === void 0 ? void 0 : config[value];\n    if (!configValue) {\n        return null;\n    }\n    if (typeof configValue === `string`) {\n        return complete({ fontFamily: configValue });\n    }\n    const firstFamily = configValue[0];\n    if (!firstFamily) {\n        return null;\n    }\n    return complete({ fontFamily: firstFamily });\n}\n","import { isObject, isString } from '../types';\nimport { warn, complete } from '../helpers';\nexport function color(type, value, config) {\n    if (!config) {\n        return null;\n    }\n    // support opacity shorthand: `bg-red-200/50`\n    let shorthandOpacity = undefined;\n    if (value.includes(`/`)) {\n        [value = ``, shorthandOpacity] = value.split(`/`, 2);\n    }\n    let color = ``;\n    // for arbitrary support: `bg-[#eaeaea]`, `text-[rgba(1, 1, 1, 0.5)]`\n    if (value.startsWith(`[#`) || value.startsWith(`[rgb`)) {\n        color = value.slice(1, -1);\n        // search for color in config\n    }\n    else {\n        color = findColorInConfigRecursive(value, config);\n    }\n    if (!color) {\n        return null;\n    }\n    if (shorthandOpacity) {\n        const opacity = Number(shorthandOpacity);\n        if (!Number.isNaN(opacity)) {\n            color = addOpacity(color, opacity / 100);\n            return complete({ [STYLE_PROPS[type].color]: color });\n        }\n    }\n    // return a dependent style to support merging of classes\n    // like `bg-red-800 bg-opacity-75`\n    return {\n        kind: `dependent`,\n        complete(style) {\n            const opacityProp = STYLE_PROPS[type].opacity;\n            const opacity = style[opacityProp];\n            if (typeof opacity === `number`) {\n                color = addOpacity(color, opacity);\n            }\n            style[STYLE_PROPS[type].color] = color;\n        },\n    };\n}\nexport function colorOpacity(type, value) {\n    const percentage = parseInt(value, 10);\n    if (Number.isNaN(percentage)) {\n        return null;\n    }\n    const opacity = percentage / 100;\n    const style = { [STYLE_PROPS[type].opacity]: opacity };\n    return { kind: `complete`, style };\n}\nfunction addOpacity(color, opacity) {\n    if (color.startsWith(`#`)) {\n        color = hexToRgba(color);\n    }\n    else if (color.startsWith(`rgb(`)) {\n        color = color.replace(/^rgb\\(/, `rgba(`).replace(/\\)$/, `, 1)`);\n    }\n    // @TODO: support hls/hlsa if anyone opens an issue...\n    return color.replace(/, ?\\d*\\.?(\\d+)\\)$/, `, ${opacity})`);\n}\nexport function removeOpacityHelpers(style) {\n    for (const key in style) {\n        if (key.startsWith(`__opacity_`)) {\n            delete style[key];\n        }\n    }\n}\nconst STYLE_PROPS = {\n    bg: { opacity: `__opacity_bg`, color: `backgroundColor` },\n    text: { opacity: `__opacity_text`, color: `color` },\n    border: { opacity: `__opacity_border`, color: `borderColor` },\n    borderTop: { opacity: `__opacity_border`, color: `borderTopColor` },\n    borderBottom: { opacity: `__opacity_border`, color: `borderBottomColor` },\n    borderLeft: { opacity: `__opacity_border`, color: `borderLeftColor` },\n    borderRight: { opacity: `__opacity_border`, color: `borderRightColor` },\n    shadow: { opacity: `__opacity_shadow`, color: `shadowColor` },\n    tint: { opacity: `__opacity_tint`, color: `tintColor` },\n};\nfunction hexToRgba(hex) {\n    const orig = hex;\n    hex = hex.replace(MATCH_SHORT_HEX, (_, r, g, b) => r + r + g + g + b + b);\n    const result = MATCH_FULL_HEX.exec(hex);\n    if (!result) {\n        warn(`invalid config hex color value: ${orig}`);\n        return `rgba(0, 0, 0, 1)`;\n    }\n    const r = parseInt(result[1], 16);\n    const g = parseInt(result[2], 16);\n    const b = parseInt(result[3], 16);\n    return `rgba(${r}, ${g}, ${b}, 1)`;\n}\nfunction findColorInConfigRecursive(colorName, config) {\n    const configColor = config[colorName];\n    // the color is found at the current config level\n    if (isString(configColor)) {\n        return configColor;\n    }\n    else if (isObject(configColor) && isString(configColor.DEFAULT)) {\n        return configColor.DEFAULT;\n    }\n    // search for a matching sub-string at the current config level\n    let [colorNameStart = ``, ...colorNameRest] = colorName.split(`-`);\n    while (colorNameStart !== colorName) {\n        const subConfig = config[colorNameStart];\n        if (isObject(subConfig)) {\n            return findColorInConfigRecursive(colorNameRest.join(`-`), subConfig);\n        }\n        else if (colorNameRest.length === 0) {\n            return ``;\n        }\n        colorNameStart = `${colorNameStart}-${colorNameRest.shift()}`;\n    }\n    return ``;\n}\nconst MATCH_SHORT_HEX = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\nconst MATCH_FULL_HEX = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\n","import { parseAndConsumeDirection, complete, getCompleteStyle, unconfiggedStyle, } from '../helpers';\nimport { color } from './color';\nexport function border(value, theme) {\n    let [rest, direction] = parseAndConsumeDirection(value);\n    const widthUtilityMatch = rest.match(/^(-?(\\d)+)?$/);\n    if (widthUtilityMatch) {\n        return borderWidth(rest, direction, theme === null || theme === void 0 ? void 0 : theme.borderWidth);\n    }\n    rest = rest.replace(/^-/, ``);\n    if ([`dashed`, `solid`, `dotted`].includes(rest)) {\n        return complete({ borderStyle: rest });\n    }\n    let colorType = `border`;\n    switch (direction) {\n        case `Bottom`:\n            colorType = `borderBottom`;\n            break;\n        case `Top`:\n            colorType = `borderTop`;\n            break;\n        case `Left`:\n            colorType = `borderLeft`;\n            break;\n        case `Right`:\n            colorType = `borderRight`;\n            break;\n    }\n    const colorStyle = color(colorType, rest, theme === null || theme === void 0 ? void 0 : theme.borderColor);\n    if (colorStyle) {\n        return colorStyle;\n    }\n    // Finally Handling Arbitrary Width Case\n    // border-[20px] or border-[2.5rem]\n    const prop = `border${direction === `All` ? `` : direction}Width`;\n    rest = rest.replace(/^-/, ``);\n    const numericValue = rest.slice(1, -1);\n    const arbitraryWidth = unconfiggedStyle(prop, numericValue);\n    // can't use % for border-radius in RN\n    if (typeof (arbitraryWidth === null || arbitraryWidth === void 0 ? void 0 : arbitraryWidth.style[prop]) !== `number`) {\n        return null;\n    }\n    return arbitraryWidth;\n}\nfunction borderWidth(value, direction, config) {\n    if (!config) {\n        return null;\n    }\n    value = value.replace(/^-/, ``);\n    const key = value === `` ? `DEFAULT` : value;\n    const configValue = config[key];\n    if (configValue === undefined) {\n        return null;\n    }\n    const prop = `border${direction === `All` ? `` : direction}Width`;\n    return getCompleteStyle(prop, configValue);\n}\nexport function borderRadius(value, config) {\n    if (!config) {\n        return null;\n    }\n    let [rest, direction] = parseAndConsumeDirection(value);\n    rest = rest.replace(/^-/, ``);\n    if (rest === ``) {\n        rest = `DEFAULT`;\n    }\n    const prop = `border${direction === `All` ? `` : direction}Radius`;\n    const configValue = config[rest];\n    if (configValue) {\n        return expand(getCompleteStyle(prop, configValue));\n    }\n    const arbitrary = unconfiggedStyle(prop, rest);\n    // can't use % for border-radius in RN\n    if (typeof (arbitrary === null || arbitrary === void 0 ? void 0 : arbitrary.style[prop]) !== `number`) {\n        return null;\n    }\n    return expand(arbitrary);\n}\n// RN only supports `borderRadius` + `border(top|bottom)(left|right)Radius`\nfunction expand(ir) {\n    if ((ir === null || ir === void 0 ? void 0 : ir.kind) !== `complete`)\n        return ir;\n    const top = ir.style.borderTopRadius;\n    if (top !== undefined) {\n        ir.style.borderTopLeftRadius = top;\n        ir.style.borderTopRightRadius = top;\n        delete ir.style.borderTopRadius;\n    }\n    const bottom = ir.style.borderBottomRadius;\n    if (bottom !== undefined) {\n        ir.style.borderBottomLeftRadius = bottom;\n        ir.style.borderBottomRightRadius = bottom;\n        delete ir.style.borderBottomRadius;\n    }\n    const left = ir.style.borderLeftRadius;\n    if (left !== undefined) {\n        ir.style.borderBottomLeftRadius = left;\n        ir.style.borderTopLeftRadius = left;\n        delete ir.style.borderLeftRadius;\n    }\n    const right = ir.style.borderRightRadius;\n    if (right !== undefined) {\n        ir.style.borderBottomRightRadius = right;\n        ir.style.borderTopRightRadius = right;\n        delete ir.style.borderRightRadius;\n    }\n    return ir;\n}\n","import { complete, parseStyleVal, parseUnconfigged } from '../helpers';\nexport function inset(type, value, isNegative, config) {\n    let insetDir = null;\n    if (type === `inset`) {\n        value = value.replace(/^(x|y)-/, (_, dir) => {\n            insetDir = dir === `x` ? `x` : `y`;\n            return ``;\n        });\n    }\n    const configValue = config === null || config === void 0 ? void 0 : config[value];\n    if (configValue) {\n        const styleVal = parseStyleVal(configValue, { isNegative });\n        if (styleVal !== null) {\n            return insetStyle(type, insetDir, styleVal);\n        }\n    }\n    const unconfigged = parseUnconfigged(value, { isNegative });\n    if (unconfigged !== null) {\n        return insetStyle(type, insetDir, unconfigged);\n    }\n    return null;\n}\nfunction insetStyle(type, dir, styleVal) {\n    if (type !== `inset`) {\n        return complete({ [type]: styleVal });\n    }\n    switch (dir) {\n        case null:\n            return complete({\n                top: styleVal,\n                left: styleVal,\n                right: styleVal,\n                bottom: styleVal,\n            });\n        case `y`:\n            return complete({\n                top: styleVal,\n                bottom: styleVal,\n            });\n        case `x`:\n            return complete({\n                left: styleVal,\n                right: styleVal,\n            });\n    }\n}\n","import { getCompleteStyle, complete, parseStyleVal, unconfiggedStyle } from '../helpers';\nexport function flexGrowShrink(type, value, config) {\n    var _a;\n    value = value.replace(/^-/, ``);\n    const configKey = value === `` ? `DEFAULT` : value;\n    const numericValue = Number((_a = config === null || config === void 0 ? void 0 : config[configKey]) !== null && _a !== void 0 ? _a : value);\n    if (!Number.isNaN(numericValue)) {\n        return complete({ [`flex${type}`]: numericValue });\n    }\n    return null;\n}\nexport function flex(value, config) {\n    var _a, _b;\n    value = (config === null || config === void 0 ? void 0 : config[value]) || value;\n    if ([`min-content`, `revert`, `unset`].includes(value)) {\n        // unsupported\n        return null;\n    }\n    // @see https://developer.mozilla.org/en-US/docs/Web/CSS/flex\n    // MDN: One value, unitless number: flex-grow flex-basis is then equal to 0.\n    if (value.match(/^\\d+(\\.\\d+)?$/)) {\n        return complete({\n            flexGrow: Number(value),\n            flexBasis: `0%`,\n        });\n    }\n    // MDN: Two values (both integers): flex-grow | flex-basis\n    let match = value.match(/^(\\d+)\\s+(\\d+)$/);\n    if (match) {\n        return complete({\n            flexGrow: Number(match[1]),\n            flexShrink: Number(match[2]),\n        });\n    }\n    // MDN: Two values: flex-grow | flex-basis\n    match = value.match(/^(\\d+)\\s+([^ ]+)$/);\n    if (match) {\n        const flexBasis = parseStyleVal((_a = match[2]) !== null && _a !== void 0 ? _a : ``);\n        if (!flexBasis) {\n            return null;\n        }\n        return complete({\n            flexGrow: Number(match[1]),\n            flexBasis,\n        });\n    }\n    // MDN: Three values: flex-grow | flex-shrink | flex-basis\n    match = value.match(/^(\\d+)\\s+(\\d+)\\s+(.+)$/);\n    if (match) {\n        const flexBasis = parseStyleVal((_b = match[3]) !== null && _b !== void 0 ? _b : ``);\n        if (!flexBasis) {\n            return null;\n        }\n        return complete({\n            flexGrow: Number(match[1]),\n            flexShrink: Number(match[2]),\n            flexBasis,\n        });\n    }\n    return null;\n}\nexport function flexBasis(value, context = {}, config) {\n    value = value.replace(/^-/, ``);\n    const configValue = config === null || config === void 0 ? void 0 : config[value];\n    if (configValue !== undefined) {\n        return getCompleteStyle(`flexBasis`, configValue, context);\n    }\n    return unconfiggedStyle(`flexBasis`, value, context);\n}\nexport function gap(value, context = {}, config) {\n    let gapStyle = `gap`;\n    value = value.replace(/^-(x|y)-/, (_, dir) => {\n        if (dir === `x`) {\n            gapStyle = `columnGap`;\n        }\n        if (dir === `y`) {\n            gapStyle = `rowGap`;\n        }\n        return ``;\n    });\n    value = value.replace(/^-/, ``);\n    const configValue = config === null || config === void 0 ? void 0 : config[value];\n    if (configValue !== undefined) {\n        return getCompleteStyle(gapStyle, configValue, context);\n    }\n    return unconfiggedStyle(gapStyle, value, context);\n}\n","import { getCompleteStyle, complete, parseStyleVal, unconfiggedStyle } from '../helpers';\nexport function widthHeight(type, value, context = {}, config) {\n    const configValue = config === null || config === void 0 ? void 0 : config[value];\n    if (configValue !== undefined) {\n        return getCompleteStyle(type, configValue, context);\n    }\n    return unconfiggedStyle(type, value, context);\n}\nexport function minMaxWidthHeight(type, value, context = {}, config) {\n    const styleVal = parseStyleVal(config === null || config === void 0 ? void 0 : config[value], context);\n    if (styleVal) {\n        return complete({ [type]: styleVal });\n    }\n    if (value === `screen`) {\n        value = type.includes(`Width`) ? `100vw` : `100vh`;\n    }\n    return unconfiggedStyle(type, value, context);\n}\n","import { Unit } from '../types';\nimport { parseNumericValue, complete, toStyleVal, unconfiggedStyle, warn, } from '../helpers';\nexport function letterSpacing(value, isNegative, config) {\n    const configValue = config === null || config === void 0 ? void 0 : config[value];\n    if (configValue) {\n        const parsed = parseNumericValue(configValue, { isNegative });\n        if (!parsed) {\n            return null;\n        }\n        const [number, unit] = parsed;\n        if (unit === Unit.em) {\n            return relativeLetterSpacing(number);\n        }\n        // @TODO, if we get a percentage based config value, theoretically we could\n        // make a font-size dependent style as well, wait for someone to raise an issue\n        if (unit === Unit.percent) {\n            warn(`percentage-based letter-spacing configuration currently unsupported, switch to \\`em\\`s, or open an issue if you'd like to see support added.`);\n            return null;\n        }\n        const styleVal = toStyleVal(number, unit, { isNegative });\n        if (styleVal !== null) {\n            return complete({ letterSpacing: styleVal });\n        }\n        return null;\n    }\n    return unconfiggedStyle(`letterSpacing`, value, { isNegative });\n}\nfunction relativeLetterSpacing(ems) {\n    return {\n        kind: `dependent`,\n        complete(style) {\n            const fontSize = style.fontSize;\n            if (typeof fontSize !== `number` || Number.isNaN(fontSize)) {\n                return `tracking-X relative letter spacing classes require font-size to be set`;\n            }\n            style.letterSpacing = Math.round((ems * fontSize + Number.EPSILON) * 100) / 100;\n        },\n    };\n}\n","import { parseNumericValue, complete } from '../helpers';\nexport function opacity(value, config) {\n    const configValue = config === null || config === void 0 ? void 0 : config[value];\n    if (configValue) {\n        const parsedConfig = parseNumericValue(String(configValue));\n        if (parsedConfig) {\n            return complete({ opacity: parsedConfig[0] });\n        }\n    }\n    const parsedArbitrary = parseNumericValue(value);\n    if (parsedArbitrary) {\n        return complete({ opacity: parsedArbitrary[0] / 100 });\n    }\n    return null;\n}\n","import { parseUnconfigged } from '../helpers';\nexport function shadowOpacity(value) {\n    const percentage = parseInt(value, 10);\n    if (Number.isNaN(percentage)) {\n        return null;\n    }\n    return {\n        kind: `complete`,\n        style: { shadowOpacity: percentage / 100 },\n    };\n}\nexport function shadowOffset(value) {\n    if (value.includes(`/`)) {\n        const [widthStr = ``, heightStr = ``] = value.split(`/`, 2);\n        const width = offsetValue(widthStr);\n        const height = offsetValue(heightStr);\n        if (width === null || height === null) {\n            return null;\n        }\n        return {\n            kind: `complete`,\n            style: {\n                shadowOffset: {\n                    width,\n                    height,\n                },\n            },\n        };\n    }\n    const number = offsetValue(value);\n    if (number === null) {\n        return null;\n    }\n    return {\n        kind: `complete`,\n        style: {\n            shadowOffset: {\n                width: number,\n                height: number,\n            },\n        },\n    };\n}\nfunction offsetValue(value) {\n    const parsed = parseUnconfigged(value);\n    return typeof parsed === `number` ? parsed : null;\n}\n","export function parseInputs(inputs) {\n    let classNames = [];\n    let styles = null;\n    inputs.forEach((input) => {\n        if (typeof input === `string`) {\n            classNames = [...classNames, ...split(input)];\n        }\n        else if (Array.isArray(input)) {\n            classNames = [...classNames, ...input.flatMap(split)];\n        }\n        else if (typeof input === `object` && input !== null) {\n            for (const [key, value] of Object.entries(input)) {\n                if (typeof value === `boolean`) {\n                    classNames = [...classNames, ...(value ? split(key) : [])];\n                }\n                else if (styles) {\n                    styles[key] = value;\n                }\n                else {\n                    styles = { [key]: value };\n                }\n            }\n        }\n    });\n    return [classNames.filter(Boolean).filter(unique), styles];\n}\nfunction split(str) {\n    return str.trim().split(/\\s+/);\n}\nfunction unique(className, index, classes) {\n    return classes.indexOf(className) === index;\n}\n","const plugin = (handler) => {\n    return { handler, config: undefined };\n};\nexport default plugin;\nexport function getAddedUtilities(plugins) {\n    var _a;\n    return ((_a = plugins === null || plugins === void 0 ? void 0 : plugins.reduce((utils, plugin) => ({ ...utils, ...callPluginFunction(plugin.handler) }), {})) !== null && _a !== void 0 ? _a : {});\n}\nfunction callPluginFunction(pluginFn) {\n    let added = {};\n    pluginFn({\n        addUtilities: (utilities) => {\n            added = utilities;\n        },\n        ...core,\n    });\n    return added;\n}\nfunction notImplemented(fn) {\n    throw new Error(`tailwindcss plugin function argument object prop \"${fn}\" not implemented`);\n}\nconst core = {\n    addComponents: notImplemented,\n    addBase: notImplemented,\n    addVariant: notImplemented,\n    e: notImplemented,\n    prefix: notImplemented,\n    theme: notImplemented,\n    variants: notImplemented,\n    config: notImplemented,\n    corePlugins: notImplemented,\n    matchUtilities: notImplemented,\n    postcss: null,\n};\n"],"mappings":"gqBAAA,IAAAA,EAAAC,GAAA,QCAA,IAAAC,GAAA,GAAAC,GAAAD,GAAA,mBAAAE,KAAA,eAAsBA,IAAgB,CACpC,GAAM,CAAE,QAASC,CAAS,EAAI,KAAM,QAAO,qBAC3C,OAAOA,EAAS,CAClB,CAHA,IAAAC,GAAAC,GAAA,KAAAC,MCAA,IAAAC,GAAAC,EAAAC,IAAA,cAAAC,IACA,OAAO,eAAeD,GAAS,aAAc,CACzC,MAAO,EACX,CAAC,EACD,OAAO,eAAeA,GAAS,UAAW,CACtC,WAAY,GACZ,IAAK,IAAIE,EACb,CAAC,EACD,SAASA,GAAYC,EAAO,CAExB,GADAA,EAAQ,GAAGA,IACPA,IAAU,IACV,MAAO,IAGX,GAAI,4CAA4C,KAAKA,CAAK,EACtD,OAAOA,EAAM,QAAQ,SAAWC,GAAOA,IAAS,IAAM,GAAK,GAAG,EAMlE,IAAIC,EAAmB,CACnB,MACA,OACA,MACA,MACA,OACJ,EACA,QAAWC,KAAMD,EACb,GAAIF,EAAM,SAAS,GAAGG,IAAK,EACvB,MAAO,QAAQH,SAG3B,ICjCA,IAAAI,GAAAC,EAAAC,IAAA,cAAAC,IACA,OAAO,eAAeD,GAAS,aAAc,CACzC,MAAO,EACX,CAAC,EACD,OAAO,eAAeA,GAAS,UAAW,CACtC,WAAY,GACZ,IAAK,IAAIE,EACb,CAAC,EACD,IAAMA,GAAW,CACb,YACA,YACA,gBACA,gBACA,aACA,WACA,QACA,YACA,SACA,QACA,aACA,kBACA,gBACA,UACA,eACA,aACA,QACA,QACA,SACA,YACA,YACA,UACA,cACA,SACA,YACA,YACA,QACA,WACA,WACA,OACA,aACA,WACA,YACA,cACA,cACA,iBACA,gBACA,kBACA,YACA,SACA,OACA,QACA,YACA,YACA,SACA,cACA,aACA,SACA,iBACA,kBACA,iBACA,eACA,gBACA,oBACA,gBACA,iBACA,aACA,UACA,cACA,cACA,aACA,kBACA,eACA,eACA,sBACA,mBACA,gBACA,WACA,eACA,aACA,eACA,aACA,iBACA,eACA,MACA,QACA,cACA,cACA,cACA,gBACA,YACA,YACA,cACA,WACA,qBACA,iBACA,eACA,UACA,aACA,YACA,eACA,cACA,cACA,cACA,gBACA,kBACA,oBACA,kBACA,qBACA,qBACA,iBACA,uBACA,iBACA,qBACA,mBACA,mBACA,OACA,SACA,cACA,YACA,iBACA,UACA,YACA,aACA,gBACA,aACA,WACA,aACA,gBACA,YACA,qBACA,aACA,gBACA,YACA,cACA,iBACA,sBACA,sBACA,0BACA,sBACA,gBACA,mBACA,qBACA,aACA,cACA,UACA,sBACA,eACA,YACA,iBACA,eACA,eACA,gBACA,eACA,YACA,YACA,cACA,kBACA,kBACA,OACA,aACA,WACA,aACA,YACA,YACA,SACA,WACA,QACA,SACA,eACA,qBACA,mBACA,oBACA,oBACA,iBACA,kBACA,mBACA,gBACA,iBACA,qBACA,kBACA,qBACA,2BACA,aACA,SACJ,ICxLA,IAAAC,GAAAC,EAAAC,IAAA,cAAAC,IACA,OAAO,eAAeD,GAAS,aAAc,CACzC,MAAO,EACX,CAAC,EACD,OAAO,eAAeA,GAAS,UAAW,CACtC,WAAY,GACZ,IAAK,IAAIE,EACb,CAAC,EACD,SAASA,GAASC,EAAcC,EAAS,CACrC,OAAID,IAAiB,OACVC,EAES,MAAM,QAAQD,CAAY,EAAIA,EAAe,CAC7D,GAAG,IAAI,IAAIC,EAAQ,OAAQC,GAChBF,IAAiB,IAASA,EAAaE,KAAgB,EACjE,EAAE,OAAO,OAAO,KAAKF,CAAY,EAAE,OAAQE,GACjCF,EAAaE,KAAgB,EACvC,CAAC,CAAC,CACP,CAEJ,ICpBA,IAAAC,GAAA,GAAAC,GAAAD,GAAA,aAAAE,KAAA,IAAOA,GAAPC,GAAAC,GAAA,KAAAC,IAAOH,GAAQ,CACb,OAASI,GAAMA,CACjB,ICFA,IAAAC,GAAAC,EAAAC,IAAA,cAAAC,IACA,OAAO,eAAeD,GAAS,aAAc,CACzC,MAAO,EACX,CAAC,EACD,SAASE,GAAQC,EAAQC,EAAK,CAC1B,QAAQC,KAAQD,EAAI,OAAO,eAAeD,EAAQE,EAAM,CACpD,WAAY,GACZ,IAAKD,EAAIC,EACb,CAAC,CACL,CACAH,GAAQF,GAAS,CA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CJ,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,SACT,EACA,KAAM,CACF,GAAI,UACJ,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,SACT,EACA,MAAO,CACH,GAAI,UACJ,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,SACT,EACA,QAAS,CACL,GAAI,UACJ,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,SACT,EACA,KAAM,CACF,GAAI,UACJ,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,SACT,EACA,KAAM,CACF,GAAI,UACJ,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,SACT,EACA,IAAK,CACD,GAAI,UACJ,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,SACT,EACA,KAAM,CACF,GAAI,UACJ,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,SACT,EACA,OAAQ,CACJ,GAAI,UACJ,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,SACT,EACA,OAAQ,CACJ,GAAI,UACJ,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IA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","names":["init_cjs_shims","__esmMin","yoga_prebuilt_exports","__export","getYogaModule","initYoga","init_yoga_prebuilt","__esmMin","init_cjs_shims","require_negateValue","__commonJSMin","exports","init_cjs_shims","negateValue","value","sign","numericFunctions","fn","require_corePluginList","__commonJSMin","exports","init_cjs_shims","_default","require_configurePlugins","__commonJSMin","exports","init_cjs_shims","_default","pluginConfig","plugins","pluginName","picocolors_exports","__export","picocolors_default","init_picocolors","__esmMin","init_cjs_shims","s","require_log","__commonJSMin","exports","init_cjs_shims","_export","target","all","name","dim","_default","_picocolors","_interopRequireDefault","obj","alreadyShown","log","type","messages","key","message","input","require_colors","__commonJSMin","exports","init_cjs_shims","_default","_log","_interopRequireDefault","obj","warn","version","from","to","require_defaults","__commonJSMin","exports","init_cjs_shims","defaults","target","sources","source","k","_target_hasOwnProperty","k1","_target_hasOwnProperty1","require_toPath","__commonJSMin","exports","init_cjs_shims","toPath","path","openBrackets","closedBrackets","require_sharedState","__commonJSMin","exports","init_cjs_shims","_export","target","all","name","env","contextMap","configContextMap","contextSourcesMap","sourceHashMap","NOT_ON_DEMAND","NONE","resolveDebug","_packageJson","_interopRequireDefault","obj","OXIDE_DEFAULT_ENABLED","resolveBoolean","value","defaultValue","debug","debuggers","d","require_featureFlags","__commonJSMin","exports","init_cjs_shims","_export","target","all","name","flagEnabled","issueFlagNotices","_default","_picocolors","_interopRequireDefault","_log","_sharedState","obj","defaults","featureFlags","config","flag","_config_future","_config_future_flag","_ref","_config_experimental","_config_experimental_flag","_ref1","experimentalFlagsEnabled","changes","s","require_normalizeConfig","__commonJSMin","exports","init_cjs_shims","normalizeConfig","_featureFlags","_log","_interopRequireWildcard","_getRequireWildcardCache","nodeInterop","cacheBabelInterop","cacheNodeInterop","obj","cache","newObj","hasPropertyDescriptor","key","desc","config","path","value","value1","_purge_options","content","purge","safelist","blocklist","item","_config_prefix","extract","_config_purge","_config_content","_config_purge1","_config_purge_extract","_config_content1","_config_content_extract","_config_purge2","_config_purge_options","_config_content2","_config_content_options","extractors","defaultExtractor","extensions","extractor","extension","transform","_config_purge_transform","_config_content_transform","transformers","file","require_isPlainObject","__commonJSMin","exports","init_cjs_shims","isPlainObject","value","prototype","require_cloneDeep","__commonJSMin","exports","init_cjs_shims","cloneDeep","value","child","k","v","require_escapeCommas","__commonJSMin","exports","init_cjs_shims","escapeCommas","className","require_color_name","__commonJSMin","exports","module","init_cjs_shims","require_color","__commonJSMin","exports","init_cjs_shims","_export","target","all","name","parseColor","formatColor","_colorName","_interopRequireDefault","obj","HEX","SHORT_HEX","VALUE","SEP","ALPHA_SEP","CUSTOM_PROPERTY","RGB","HSL","value","loose","_match_","_match__toString","v","hex","_","r","g","b","a","_value_match","match","color","part","mode","alpha","hasAlpha","require_withAlphaVariable","__commonJSMin","exports","init_cjs_shims","_export","target","all","name","withAlphaValue","withAlphaVariable","_color","color","alphaValue","defaultValue","parsed","property","variable","properties","p","require_splitAtTopLevelOnly","__commonJSMin","exports","init_cjs_shims","splitAtTopLevelOnly","input","separator","stack","parts","lastPos","isEscaped","idx","char","require_parseBoxShadowValue","__commonJSMin","exports","init_cjs_shims","_export","target","all","name","parseBoxShadowValue","formatBoxShadowValue","_splitAtTopLevelOnly","KEYWORDS","SPACE","LENGTH","input","shadow","value","result","parts","seen","part","shadows","require_dataTypes","__commonJSMin","exports","init_cjs_shims","_export","target","all","name","normalize","url","number","percentage","length","lineWidth","shadow","color","image","gradient","position","familyName","genericName","absoluteSize","relativeSize","_color","_parseBoxShadowValue","_splitAtTopLevelOnly","cssFunctions","isCSSFunction","value","fn","placeholder","placeholderRe","isRoot","part","fullMatch","characterBefore","match","vars","g1","lengthUnits","lengthUnitsPattern","lineWidths","parsedShadows","parsedShadow","colors","images","gradientTypes","type","validPositions","positions","fonts","genericNames","absoluteSizes","relativeSizes","require_validateFormalSyntax","__commonJSMin","exports","init_cjs_shims","backgroundSize","_dataTypes","_splitAtTopLevelOnly","value","keywordValues","part","sizes","size","require_pluginUtils","__commonJSMin","exports","init_cjs_shims","_export","target","all","name","updateAllClasses","asValue","parseColorFormat","asColor","asLookupValue","typeMap","coerceValue","getMatchingTypes","_escapeCommas","_interopRequireDefault","_withAlphaVariable","_dataTypes","_negateValue","_validateFormalSyntax","_featureFlagsJs","obj","selectors","updateClass","sel","resolveArbitraryValue","modifier","validate","isArbitraryValue","value","asNegativeValue","lookup","positiveValue","resolved","options","_options_values","input","splitUtilityModifier","slashIdx","oldValue","opacityValue","unwrapArbitraryModifier","tailwindConfig","_options_values1","color","alpha","_options_values2","_tailwindConfig_theme","_tailwindConfig_theme_opacity","_options_values_color","normalizedColor","guess","supportedTypes","splitAtFirst","delim","idx","types","type","result","arbitraryValue","explicitType","matches","match","rawModifier","modifiersEnabled","utilityModifier","_options_modifiers","_options_modifiers_utilityModifier","configValue","require_toColorValue","__commonJSMin","exports","init_cjs_shims","toColorValue","maybeFunction","require_resolveConfig","__commonJSMin","exports","init_cjs_shims","resolveConfig","_negateValue","_interopRequireDefault","_corePluginList","_configurePlugins","_colors","_defaults","_toPath","_normalizeConfig","_isPlainObject","_cloneDeep","_pluginUtils","_withAlphaVariable","_toColorValue","obj","isFunction","input","mergeWith","target","sources","customizer","source","k","merged","configUtils","scale","key","negativeScale","negativeValue","screens","breakpoints","value","valueToResolve","args","collectExtends","items","extend","mergedValue","extendValue","mergeThemes","themes","theme","mergeExtensionCustomizer","mergeExtensions","themeValue","extensions","resolveThemePath","utils","e","toPaths","path","pattern","matches","prefix","alpha","newPath","resolveFunctionKeys","object","resolvePath","defaultValue","index","val","normalized","resolved","extractPluginConfigs","configs","allConfigs","config","_config_plugins","plugins","plugin","_plugin_config","resolveCorePlugins","corePluginConfigs","corePluginConfig","resolvePluginLists","pluginLists","pluginList","_t_theme","_c_plugins","t","c","require_config_full","__commonJSMin","exports","module","init_cjs_shims","theme","colors","breakpoints","require_getAllConfigs","__commonJSMin","exports","init_cjs_shims","getAllConfigs","_configFullJs","_interopRequireDefault","_featureFlags","obj","config","_config_presets","configs","preset","features","theme","experimentals","feature","require_resolve_config","__commonJSMin","exports","init_cjs_shims","resolveConfig","_resolveConfig","_interopRequireDefault","_getAllConfigs","obj","configs","defaultConfigs","require_resolveConfig","__commonJSMin","exports","module","init_cjs_shims","resolveConfig","src_exports","__export","init","satori","__toCommonJS","init_cjs_shims","init_cjs_shims","init_cjs_shims","yogaInstance","init","yoga","initializationPromise","getYoga","mod","init_cjs_shims","init_cjs_shims","init_cjs_shims","e","t","r","u","k","g","a","z","v","c","L","w","h","$","y","m","j","b","q","f","p","l","d","s","x","o","O","F","U","E","n","D","i","import_linebreak","isReactElement","node","type","isClass","f","hasDangerouslySetInnerHTMLProp","props","normalizeChildren","children","flattend","res","i","value","lengthToNumber","length","baseFontSize","baseLength","inheritedStyle","percentage","parsed","U","multiply","m1","m2","v","field","map","fallback","errorIfNotAllowedForProperty","_v","wordSegmenter","graphemeSegmenter","wordSeparators","point","segment","content","granularity","locale","seg","buildXMLString","attrs","attrString","k","createLRU","max","store","set","key","keyToDelete","get","entry","ATTRIBUTE_MAPPING","SVGSymbols","translateSVGNodeToSVGString","inheritedColor","n","style","restProps","currentColor","parseViewBox","viewBox","SVGNodeToImage","viewbox","width","height","className","viewBoxSize","ratio","toString","x","isString","isUndefined","splitByBreakOpportunities","wordBreak","breaker","LineBreaker","last","bk","words","requiredBreaks","word","init_cjs_shims","init_cjs_shims","DEFAULT_DISPLAY","presets_default","init_cjs_shims","list","inheritable","style","inheritedStyle","prop","init_cjs_shims","import_css_to_react_native","import_css_background_parser","import_css_box_shadow","init_cjs_shims","import_postcss_value_parser","parseUnit","word","baseFontSize","parsed","U","handleWord","unitIsHorizontal","parsedUnit","parseTransformOrigin","value","words","valueParser","node","optOutPx","keepNumber","handleFallbackColor","prop","parsed","rawInput","currentColor","purify","name","value","handleSpecialCase","_v","horizontal","vertical","vh","vv","k","resolved","purified","v","full","p","parseBoxShadow","symbols","replaced","_","symbol","t","shadows","result","shadow","styles","getErrorHint","RGB_SLASH","normalizeColor","g","b","a","expand","style","inheritedStyle","transformedStyle","getCurrentColor","preprocess","resolvedStyle","err","backgrounds","baseFontSize","U","parseTransformOrigin","lengthToNumber","len","color","transforms","transform","type","inheritedColor","convertCurrentColorToActualValue","isString","init_cjs_shims","AVIF","WEBP","PNG","JPEG","GIF","SVG","parseJPEG","buf","view","offset","len","next","parseGIF","parsePNG","v","cache","createLRU","inflightRequests","ALLOWED_IMAGE_TYPES","arrayBufferToBase64","buffer","binary","bytes","i","base64ToArrayBuffer","base64","binaryString","parseSvgImageSize","src","data","svgTag","viewBoxStr","viewBox","parseViewBox","width","height","size","ratio","arrayBufferToDataUri","imageSize","imageType","detectContentType","resolveImageData","newSrc","decodedURI","encodingType","dataString","utf8Src","base64Src","cached","url","promise","res","type","e","result","err","b","handler","node","type","inheritedStyle","definedStyle","props","Yoga","getYoga","style","expand","presets_default","resolvedSrc","imageWidth","imageHeight","resolveImageData","r","extraHorizontal","extraVertical","contentBoxWidth","contentBoxHeight","isAbsoluteContentSize","viewBox","viewBoxSize","parseViewBox","ratio","width","height","lengthToNumber","v","inheritable","init_cjs_shims","init_cjs_shims","init_cjs_shims","baseMatrix","resolveTransforms","transforms","width","height","matrix","transform","type","v","len","transformMatrix","rad","c","s","multiply","left","top","isInheritingTransform","transformOrigin","result","xOrigin","yOrigin","x","y","container","left","top","width","height","isInheritingTransform","style","matrix","opacity","transform","buildText","id","content","filter","image","clipPathId","debug","shape","decorationShape","extra","buildXMLString","shapeProps","init_cjs_shims","shiftPath","path","dx","dy","_","command","x","y","SCALE","buildDropShadow","id","width","height","style","shadowCount","effects","merge","left","right","top","bottom","i","grow","buildXMLString","boxShadow","shape","opacity","shadow","innerShadow","s","shadowStyle","sid","maskId","shapeWithSpread","finalShape","init_cjs_shims","buildDecoration","width","left","top","ascender","clipPathId","style","textDecorationColor","textDecorationStyle","textDecorationLine","fontSize","height","y","dasharray","buildXMLString","buildTextNodes","content","context","_a","Yoga","getYoga","parentStyle","inheritedStyle","parent","font","id","isInheritingTransform","debug","embedFont","graphemeImages","locale","canLoadAdditionalAssets","textAlign","textOverflow","whiteSpace","wordBreak","lineHeight","textTransform","textWrap","fontSize","cssFilter","_inheritedBackgroundClipTextPath","processTextTransform","_content","shouldCollapseWhitespace","allowSoftWrap","processWhiteSpace","words","requiredBreaks","allowBreakWord","processWordBreak","textContainer","createTextContainerNode","isUndefined","engine","wordsMissingFont","segment","word","measureWordWidth","genMeasureWordWidth","isImage","s","measureWithCache","segments","width","calc","seg","originWidth","afterTrimEndWidth","lineWidths","baselines","lineSegmentNumber","texts","wordPositionInLayout","flow","lines","_currentWidth","maxWidth","lineIndex","height","currentLineHeight","currentBaselineOffset","i","forceBreak","w","lineEndingSpacesWidth","endingSpacesWidth","allowedToPutAtBeginning","allowedToJustify","willWrap","chars","glyphHeight","x","_texts","j","_text","_width","_isImage","measuredTextSize","containerWidth","l","r","m","mHeight","y","result","backgroundClipDef","clipPathId","overflowMaskId","containerLeft","containerTop","containerHeight","parentContainerInnerWidth","left","top","matrix","opacity","container","filter","textShadowColor","textShadowOffset","textShadowRadius","buildDropShadow","buildXMLString","decorationShape","mergedPath","extra","skippedLine","ellipsisWidth","spaceWidth","decorationLines","wordBuffer","bufferedOffset","layout","text","path","isLastDisplayedBeforeEllipsis","image","topOffset","leftOffset","line","extendedWidth","remainingWidth","subset","resolvedWidth","char","baselineOfLine","baselineOfWord","heightOfWord","baselineDelta","wordSeparators","finalizedSegment","finalizedLeftOffset","finalizedWidth","deco","buildDecoration","t","shape","buildText","p","grapheme","index","splitByBreakOpportunities","shouldKeepLinebreak","v","wordWidthCache","init_cjs_shims","init_cjs_shims","init_cjs_shims","GradientParser","FALLBACK_LINEAR_ORIENTATION","tokens","input","error","msg","err","getAST","ast","matchListDefinitions","matchListing","matchDefinition","matchGradient","matchLinearOrientation","matchListRadialOrientations","gradientType","pattern","orientationMatcher","fallbackOrientation","matchCall","captures","orientation","scan","matchColorStop","callback","result","matchSideOrCorner","matchAngle","matchZero","match","radialOrientations","radialOrientation","matchRadialOrientation","lookaheadCache","radialType","matchCircle","matchEllipse","matchAtPosition","extent","matchExtentKeyword","positionAt","defaultPosition","matchPositioning","circle","matchLength","ellipse","matchDistance","positioning","location","matchCoordinates","matcher","color","matchColor","matchHexColor","matchRGBAColor","matchRGBColor","matchLiteralColor","matchNumber","matchPositionKeyword","type","captureIndex","regexp","blankCaptures","consume","size","code","gradient_parser_default","resolveColorFromStop","stop","resolveXYFromDirection","dir","x1","y1","x2","y2","toAbsoluteValue","v","base","parseLengthPairs","str","x","y","defaultX","defaultY","value","parsed","U","index","normalizeStops","totalLength","colorStops","stops","color","offset","lastStop","previousStop","nextStop","i","backgroundImage","id","width","height","left","top","image","size","position","repeat","repeatX","repeatY","dimensions","offsets","gradient_parser_default","xDelta","yDelta","angle","c","s","gradientId","patternId","defs","buildXMLString","orientation","shape","cx","cy","maskId","spread","fx","fy","ratio","dimensionsWithoutFallback","src","imageWidth","imageHeight","resolveImageData","resolvedWidth","resolvedHeight","init_cjs_shims","svgArcCenterOffset","rx","ry","resolveSize","a","b","limit","makeSmaller","arr","resolveRadius","v","width","height","fontSize","style","sides","s","singleValue","lengthToNumber","radiusZeroOrNull","_radius","radius","left","top","partialSides","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","singleAbsValueTopLeftCorner","singleAbsValueTopRightCorner","singleAbsValueBottomLeftCorner","singleAbsValueBottomRightCorner","p","T","R","B","L","getArc","i","c0","start","result","arc0","l","len","end","arc1","init_cjs_shims","init_cjs_shims","init_cjs_shims","compareBorderDirections","a","b","style","getBorderClipPath","id","currentClipPathId","borderPath","borderType","left","top","width","height","rectClipId","buildXMLString","border","props","asContentMask","maskBorderOnly","directions","direction","fullBorder","start","partialSides","currentStyle","_i","i","ni","d","nd","w","radius","contentMask","id","left","top","width","height","matrix","borderOnly","style","offsetLeft","offsetTop","offsetRight","offsetBottom","contentArea","buildXMLString","border","overflow","left","top","width","height","path","matrix","id","currentClipPath","src","style","contentMask","buildXMLString","rect","id","left","top","width","height","isInheritingTransform","src","debug","style","isImage","type","matrix","defs","fills","opacity","extra","transform","backgroundShapes","backgrounds","index","background","image","backgroundImage","path","radius","clipPathId","overflowMaskId","buildXMLString","backgroundClip","cssFilter","currentClipPath","clip","overflow","shape","fill","borderClip","getBorderClipPath","offsetLeft","offsetTop","offsetRight","offsetBottom","preserveAspectRatio","rectClipId","border","shadow","boxShadow","init_cjs_shims","import_emoji_regex","emojiRegex","createEmojiRegex","specialCode","code","locales","isValidLocale","x","detectLanguageCode","segment","locale","c","normalizeLocale","l","layout","element","context","Yoga","getYoga","id","inheritedStyle","parent","font","debug","locale","embedFont","graphemeImages","canLoadAdditionalAssets","getTwStyles","isReactElement","iter","buildTextNodes","isClass","offset","type","props","hasDangerouslySetInnerHTMLProp","style","children","tw","_newLocale","newLocale","normalizeLocale","twStyles","node","computedStyle","newInheritableStyle","handler","isInheritingTransform","mutateRefValue","normalizedChildren","normalizeChildren","iterators","i","segmentsMissingFont","child","x","y","left","top","width","height","childrenRenderResult","baseRenderResult","depsRenderResult","src","rect","currentColor","SVGNodeToImage","display","buildXMLString","init_cjs_shims","import_opentype","SUFFIX_WHEN_LANG_NOT_SET","compareFont","weight","style","matchedWeight","matchedStyle","nextWeight","nextStyle","FontLoader","fontOptions","name","fonts","matchedFont","i","weight1","style1","weight2","style2","fontOption","data","lang","isValidLocale","locales","_lang","font","opentype","originalCharToGlyphIndex","char","index","_name","fontSize","lineHeight","fontFamily","fontWeight","fontStyle","locale","face","getNormal","getUnknown","keys","specifiedLangFonts","nonSpecifiedLangFonts","additionalFonts","getLangFromFontName","cachedFontResolver","resolveFont","word","fallback","_fonts","code","_font","ascender","resolvedFont","useOS2Table","_a","_b","descender","resolve","s","engine","A","D","glyphHeight","yMax","yMin","sGlyphHeight","baselineOffset","brokenChars","originalStringToGlyphs","args","glyphs","anotherFont","glyph","scale","p","command","scaledCommand","k","g","content","letterSpacing","unpatch","top","left","arr","init_cjs_shims","svg","width","height","content","buildXMLString","init_cjs_shims","init_cjs_shims","import_resolveConfig","init_cjs_shims","init_cjs_shims","init_cjs_shims","init_cjs_shims","PLATFORMS","isPlatform","x","ORIENTATIONS","isOrientation","ConfigType","Unit","isString","value","isObject","_a","complete","style","parseNumericValue","value","context","fractions","numerator","denominator","parsedNumerator","parsedDenominator","number","match","Unit","getCompleteStyle","prop","styleVal","parseStyleVal","mergeStyle","getStyle","parsed","toStyleVal","unit","isNegative","device","warn","toPx","DIR_MAP","getDirection","string","parseAndConsumeDirection","utilityFragment","direction","_","dir","parseUnconfigged","unconfiggedStyleVal","unconfiggedStyle","consoleWarn","args","noopWarn","defaultStyles","complete","fontVariant","styles_default","type","style","Cache","customStyles","styles_default","key","style","ir","value","init_cjs_shims","init_cjs_shims","fontSize","value","config","context","configValue","unconfiggedStyle","getCompleteStyle","style","rest","fontSizeStyle","getStyle","complete","mergeStyle","calculateLineHeight","lineHeight","letterSpacing","parsed","parseNumericValue","number","unit","Unit","init_cjs_shims","lineHeight","value","config","_a","parseValue","parsed","parseNumericValue","number","unit","Unit","style","styleVal","toStyleVal","complete","init_cjs_shims","spacing","type","direction","isNegative","value","config","numericValue","configValue","unconfigged","parseUnconfigged","spacingStyle","Unit","expand","parsed","parseNumericValue","number","unit","pixels","toStyleVal","init_cjs_shims","screens","input","screenData","acc","screen","value","data","values","minPx","toPx","warn","maxPx","a","b","minA","maxA","minB","maxB","order","init_cjs_shims","fontFamily","value","config","configValue","complete","firstFamily","init_cjs_shims","color","type","value","config","shorthandOpacity","findColorInConfigRecursive","opacity","addOpacity","complete","STYLE_PROPS","style","opacityProp","colorOpacity","percentage","hexToRgba","removeOpacityHelpers","key","hex","orig","MATCH_SHORT_HEX","_","r","g","b","result","MATCH_FULL_HEX","warn","colorName","configColor","isString","isObject","colorNameStart","colorNameRest","subConfig","init_cjs_shims","border","value","theme","rest","direction","parseAndConsumeDirection","borderWidth","complete","colorType","colorStyle","color","prop","numericValue","arbitraryWidth","unconfiggedStyle","config","configValue","getCompleteStyle","borderRadius","expand","arbitrary","ir","top","bottom","left","right","init_cjs_shims","inset","type","value","isNegative","config","insetDir","_","dir","configValue","styleVal","parseStyleVal","insetStyle","unconfigged","parseUnconfigged","complete","init_cjs_shims","flexGrowShrink","type","value","config","_a","configKey","numericValue","complete","flex","_b","match","flexBasis","parseStyleVal","context","configValue","getCompleteStyle","unconfiggedStyle","gap","gapStyle","_","dir","init_cjs_shims","widthHeight","type","value","context","config","configValue","getCompleteStyle","unconfiggedStyle","minMaxWidthHeight","styleVal","parseStyleVal","complete","init_cjs_shims","letterSpacing","value","isNegative","config","configValue","parsed","parseNumericValue","number","unit","Unit","relativeLetterSpacing","warn","styleVal","toStyleVal","complete","unconfiggedStyle","ems","style","fontSize","init_cjs_shims","opacity","value","config","configValue","parsedConfig","parseNumericValue","complete","parsedArbitrary","init_cjs_shims","shadowOpacity","value","percentage","shadowOffset","widthStr","heightStr","width","offsetValue","height","number","parsed","parseUnconfigged","ClassParser","input","config","cache","device","platform","_a","_b","_c","_d","_e","_f","parts","prefixes","widthBreakpoints","screens","prefix","breakpointOrder","windowWidth","min","max","isPlatform","isOrientation","cached","ir","theme","style","match","prop","spacingDirection","getDirection","spacing","widthHeight","minMaxWidthHeight","lineHeight","fontSize","color","colorOpacity","fontFamily","warn","getCompleteStyle","border","borderRadius","inset","flexBasis","flexGrowShrink","flex","gap","shadowOpacity","shadowOffset","unconfiggedStyle","elevation","complete","opacity","letterSpacing","zIndex","windowDims","type","dir","amount","checkDimension","parsedAmount","parseNumericValue","bound","unit","begin","end","string","init_cjs_shims","parseInputs","inputs","classNames","styles","input","split","key","value","unique","str","className","index","classes","init_cjs_shims","getAddedUtilities","plugins","_a","utils","plugin","callPluginFunction","pluginFn","added","utilities","core","notImplemented","fn","create","customConfig","platform","config","resolveConfig","withContent","device","pluginUtils","getAddedUtilities","customStringUtils","customStyleUtils","util","style","complete","ir","patchCustomFontUtils","deriveCacheGroup","cacheGroup","contextCaches","getCache","existing","cache","Cache","inputs","resolved","dependents","ordered","utilities","userStyle","parseInputs","joined","cached","utility","styleIr","customStyle","ClassParser","a","b","orderedStyle","dependent","error","warn","removeOpacityHelpers","color","utils","styleObj","tailwindFn","strings","values","str","string","i","_a","prefixes","prefixMatches","newDimensions","newFontScale","newPixelDensity","newColorScheme","withContent","config","patchCustomFontUtils","customConfig","customStyleUtils","_a","_b","_c","_d","_e","_f","_g","_h","_j","_k","_l","_m","_o","_p","name","value","complete","fontFamily","defaultShadows","addUtilities","createTw","config","create","tw","getTw","width","height","fontCache","satori","element","options","Yoga","getYoga","font","fontCache","FontLoader","definedWidth","definedHeight","root","graphemeImages","processedWordsMissingFonts","handler","layout","tw","style","twStyles","getTw","segmentsMissingFont","languageCodes","convertToLanguageCodes","fonts","images","code","segments","_segment","key","asset","content","computedWidth","computedHeight","svg","wordsByCode","word","locale","detectLanguageCode","unique","segment","arr"]}