UNPKG

twind

Version:

compiles tailwind like shorthand syntax into css at runtime

8 lines 167 kB
{
  "version": 3,
  "sources": ["../src/index.ts", "../node_modules/distilt/shim-node-cjs.js", "../src/internal/util.ts", "../src/twind/parse.ts", "../src/twind/directive.ts", "../src/twind/apply.ts", "../src/twind/helpers.ts", "../src/twind/plugins.ts", "../src/twind/preflight.ts", "../src/twind/variants.ts", "../src/internal/dom.ts", "../src/twind/sheets.ts", "../src/twind/modes.ts", "../src/twind/prefix.ts", "../src/twind/theme.ts", "../src/twind/translate.ts", "../src/twind/decorate.ts", "../src/twind/presedence.ts", "../src/twind/serialize.ts", "../src/twind/inject.ts", "../src/twind/configure.ts", "../src/twind/instance.ts", "../src/twind/default.ts", "../src/twind/expand.ts"],
  "sourcesContent": ["/**\n * [[include:src/README.md]]\n *\n * @packageDocumentation\n * @module twind\n */\n\nexport * from './twind/apply'\nexport * from './twind/default'\nexport * from './twind/directive'\nexport * from './twind/expand'\nexport * from './twind/instance'\nexport * from './twind/modes'\nexport * from './twind/prefix'\nexport * from './twind/sheets'\nexport { theme } from './twind/theme'\nexport { cyrb32 as hash } from './internal/util'\n\nexport * from './types'\n", "import { pathToFileURL } from 'url'\n\nexport const shim_import_meta_url = /*#__PURE__*/ pathToFileURL(__filename)\n", "import type {\n  Context,\n  Hasher,\n  Falsy,\n  MaybeThunk,\n  CSSRules,\n  ThemeScreen,\n  ThemeScreenValue,\n  CSSRuleValue,\n} from '../types'\n\ninterface Includes {\n  (value: string, search: string): boolean\n  <T>(value: readonly T[], search: T): boolean\n}\n\nexport const includes: Includes = (value: string | readonly unknown[], search: unknown) =>\n  // eslint-disable-next-line no-implicit-coercion\n  !!~(value as string).indexOf(search as string)\n\nexport const join = (parts: readonly string[], separator = '-'): string => parts.join(separator)\n\nexport const joinTruthy = (parts: readonly (string | Falsy)[], separator?: string): string =>\n  join(parts.filter(Boolean) as string[], separator)\n\nexport const tail = <T extends string | readonly unknown[]>(array: T, startIndex = 1): T =>\n  array.slice(startIndex) as T\n\nexport const identity = <T>(value: T): T => value\n\nexport const noop = (): void => {\n  /* no-op */\n}\n\nexport const capitalize = <T extends string>(value: T): Capitalize<T> =>\n  (value[0].toUpperCase() + tail(value)) as Capitalize<T>\n\nexport const hyphenate = (value: string): string => value.replace(/[A-Z]/g, '-$&').toLowerCase()\n\nexport const evalThunk = <T>(value: MaybeThunk<T>, context: Context): T => {\n  while (typeof value == 'function') {\n    value = (value as (context: Context) => T)(context)\n  }\n\n  return value\n}\n\nexport const ensureMaxSize = <K, V>(map: Map<K, V>, max: number): void => {\n  // Ensure the cache does not grow unlimited\n  if (map.size > max) {\n    map.delete(map.keys().next().value)\n  }\n}\n\n// string, number or Array => a property with a value\nexport const isCSSProperty = (key: string, value: CSSRuleValue): boolean =>\n  !includes('@:&', key[0]) && (includes('rg', (typeof value)[5]) || Array.isArray(value))\n\nexport const merge = (target: CSSRules, source: CSSRules, context: Context): CSSRules =>\n  source\n    ? Object.keys(source).reduce((target, key) => {\n        const value = evalThunk(source[key], context)\n\n        if (isCSSProperty(key, value)) {\n          // hyphenate target key only if key is property like (\\w-)\n          target[hyphenate(key)] = value\n        } else {\n          // Keep all @font-face, @import, @global, @apply as is\n          target[key] =\n            key[0] == '@' && includes('figa', key[1])\n              ? ((target[key] || []) as CSSRules[]).concat(value as CSSRules)\n              : merge((target[key] || {}) as CSSRules, value as CSSRules, context)\n        }\n\n        return target\n      }, target)\n    : target\n\nexport const escape =\n  (typeof CSS !== 'undefined' && CSS.escape) ||\n  // Simplified: escaping only special characters\n  // Needed for NodeJS and Edge <79 (https://caniuse.com/mdn-api_css_escape)\n  ((className: string): string =>\n    className\n      // Simplifed escape testing only for chars that we know happen to be in tailwind directives\n      .replace(/[!\"'`*+.,;:\\\\/<=>?@#$%&^|~()[\\]{}]/g, '\\\\$&')\n      // If the character is the first character and is in the range [0-9] (2xl, ...)\n      // https://drafts.csswg.org/cssom/#escape-a-character-as-code-point\n      .replace(/^\\d/, '\\\\3$& '))\n\nexport const buildMediaQuery = (screen: ThemeScreen): string => {\n  if (!Array.isArray(screen)) {\n    screen = [screen as ThemeScreenValue]\n  }\n\n  return (\n    '@media ' +\n    join(\n      (screen as ThemeScreenValue[]).map((screen) => {\n        if (typeof screen == 'string') {\n          screen = { min: screen }\n        }\n\n        return (\n          (screen as { raw?: string }).raw ||\n          join(\n            Object.keys(screen).map(\n              (feature) => `(${feature}-width:${(screen as Record<string, string>)[feature]})`,\n            ),\n            ' and ',\n          )\n        )\n      }),\n      ',',\n    )\n  )\n}\n\n// Based on https://stackoverflow.com/a/52171480\nexport const cyrb32: Hasher = (value: string): string => {\n  // eslint-disable-next-line no-var\n  for (var h = 9, index = value.length; index--; ) {\n    h = Math.imul(h ^ value.charCodeAt(index), 0x5f356495)\n  }\n\n  return 'tw-' + ((h ^ (h >>> 9)) >>> 0).toString(36)\n}\n\n/**\n * Find the array index of where to add an element to keep it sorted.\n *\n * @returns The insertion index\n */\nexport const sortedInsertionIndex = (array: readonly number[], element: number): number => {\n  // Find position by binary search\n  // eslint-disable-next-line no-var\n  for (var low = 0, high = array.length; low < high; ) {\n    const pivot = (high + low) >> 1\n\n    // Less-Then-Equal to add new equal element after all existing equal elements (stable sort)\n    if (array[pivot] <= element) {\n      low = pivot + 1\n    } else {\n      high = pivot\n    }\n  }\n\n  return high\n}\n", "import type { Rule, Token, TokenGrouping, MaybeTokenInterpolation } from '../types'\n\nimport { join, tail, includes } from '../internal/util'\n\n// The parsing is stacked based\n// when ever we find a group start\n// - in strings ':' or '(',\n// - array values\n// - object keys and their value\n// we add an empty marker string `\"\"` into `groupings` to mark the group start\n// if we find a variant or prefix we push it onto `groupings`\n// once the group ends (whitespace or ')') we drop all entries until the last marker\n// This way we can filter `groupings` for truthy values which are either\n// a variant (starting with ':') or a prefix\n\n// Shared variables used during parsing\n\n// List of active groupings: either variant (':xxx') or prefix\n// sm:text => ':sm'\n// sm:(text) => ':sm', ''\n// text(center sm:hover:underline focus:black) sm:rounded\n// => 'text'\n// => 'text', ''\n// => 'text', '', ':sm'\n// => 'text', '', ':sm', ':hover'\n// => 'text', ''\n// => 'text', '', ':focus'\n// => 'text'\n// =>\n// => ':sm'\nlet groupings: string[]\n\n// List of parsed rules\nlet rules: Rule[]\n\n// A new group has been found\n// this maybe a value (':variant' or 'prefix') or an empty marker string\nconst startGrouping = (value = ''): '' => {\n  groupings.push(value)\n  return ''\n}\n\n// Close a group\n// Within strings we need to distinguish between a whitespace and a closing bracket\n// a) if we have a whitespace\n// we want to keep everything up to including the last group start\n//\n// b) if we have a non-whitespace\n// we want to keep everything before the last group start\nconst endGrouping = (isWhitespace?: boolean): void => {\n  // true => +1\n  // false => +0\n  groupings.length = Math.max(groupings.lastIndexOf('') + ~~(isWhitespace as boolean), 0)\n}\n\nconst onlyPrefixes = (s: string): '' | boolean => s && !includes('!:', s[0])\nconst onlyVariants = (s: string): '' | boolean => s[0] == ':'\n\nconst addRule = (directive: Rule['d'], negate?: boolean): void => {\n  rules.push({\n    v: groupings.filter(onlyVariants),\n    d: directive,\n    n: negate,\n    i: includes(groupings, '!'),\n    $: '',\n  })\n}\n\nconst saveRule = (buffer: string): '' => {\n  const negate = buffer[0] == '-'\n\n  if (negate) {\n    buffer = tail(buffer)\n  }\n\n  const prefix = join(groupings.filter(onlyPrefixes))\n\n  addRule(buffer == '&' ? prefix : (prefix && prefix + '-') + buffer, negate)\n\n  return ''\n}\n\nconst parseString = (token: string, isVariant?: boolean): void => {\n  let buffer = ''\n\n  for (let char: string, dynamic = false, position = 0; (char = token[position++]); ) {\n    if (dynamic || char == '[') {\n      buffer += char\n      dynamic = char != ']'\n      continue\n    }\n\n    switch (char) {\n      case ':':\n        // Check if this is an pseudo element \"after::\"\n        buffer =\n          buffer && startGrouping(':' + (token[position] == char ? token[position++] : '') + buffer)\n\n        break\n\n      case '(':\n        // If there is a buffer this is the prefix for all grouped tokens\n        buffer = buffer && startGrouping(buffer)\n\n        startGrouping()\n\n        break\n\n      case '!':\n        startGrouping(char)\n\n        break\n\n      case ')':\n      case ' ':\n      case '\\t':\n      case '\\n':\n      case '\\r':\n        buffer = buffer && saveRule(buffer)\n        endGrouping(char !== ')')\n\n        break\n\n      default:\n        buffer += char\n    }\n  }\n\n  if (buffer) {\n    if (isVariant) {\n      startGrouping(':' + buffer)\n    } else if (buffer.slice(-1) == '-') {\n      startGrouping(buffer.slice(0, -1))\n    } else {\n      saveRule(buffer)\n    }\n  }\n}\n\nconst parseGroupedToken = (token: Token): void => {\n  startGrouping()\n\n  // eslint-disable-next-line @typescript-eslint/no-use-before-define\n  parseToken(token)\n\n  endGrouping()\n}\n\nconst parseGroup = (key: string, token: Token): void => {\n  if (token) {\n    startGrouping()\n\n    // we care about: string, object and function\n    // \"undefined\"\n    // \"object\" - this includes arrays\n    // \"boolean\"\n    // \"number\"\n    // \"bigint\"\n    // \"string\"\n    // \"symbol\"\n    // \"function\"\n    // 2nd char is uniq\n    const isVariant = includes('tbu', (typeof token)[1])\n\n    parseString(key, isVariant)\n\n    if (isVariant) {\n      parseGroupedToken(token)\n    }\n\n    endGrouping()\n  }\n}\n\nconst parseToken = (token: Token): void => {\n  switch (typeof token) {\n    case 'string':\n      // string (inferred)\n      parseString(token)\n      break\n    case 'function':\n      // InlineDirective (inferred)\n      addRule(token)\n      break\n    case 'object':\n      if (Array.isArray(token)) {\n        // Token[] (inferred)\n        token.forEach(parseGroupedToken)\n      } else if (token) {\n        // TokenGrouping (coerced, see parseGroup() call below)\n        Object.keys(token).forEach((key) => {\n          parseGroup(key, (token as TokenGrouping)[key])\n        })\n      }\n  }\n}\n\n// A function to be called with an interpolation\n// to add dynamic rules\ntype Static = (interpolation: Token) => void\n\n// Template literal strings do not change\n// we can pre-calculate all groupings and static rules\n// which are later combined with the dynamic rules from interpolations\n//\n// For this to work we assume that interpolations do not\n// affect the current groupings:\n// Fast mode: tw`text(${'center'})`, tw`text-${'center'}`\n// Slow mode: tw`text-${'red'}-600`, tw`bg(${'red'}(600 700(hover:&))`, tw`${\"hover\"}:text-blue-600`,\nconst staticsCaches = new WeakMap<TemplateStringsArray, Static[]>()\n\nconst buildStatics = (strings: TemplateStringsArray): Static[] => {\n  let statics = staticsCaches.get(strings)\n\n  if (!statics) {\n    // Index within strings from which on we use slow mode for parsing\n    // these means collecting all strings and string interpolations\n    // into `buffer` and parse it dynamicly\n    let slowModeIndex = NaN\n\n    // Used during slow mode to join consecutive strings\n    let buffer = ''\n\n    statics = strings.map((token, index) => {\n      if (\n        slowModeIndex !== slowModeIndex &&\n        (token.slice(-1) == '[' || includes(':-(', (strings[index + 1] || '')[0]))\n      ) {\n        // If the the string after the upcoming interpolation\n        // would start a grouping we switch to slow mode now\n        slowModeIndex = index\n      }\n\n      // Slow mode\n      if (index >= slowModeIndex) {\n        return (interpolation) => {\n          // If first => reset bufferd tokens\n          if (index == slowModeIndex) {\n            buffer = ''\n          }\n\n          buffer += token\n\n          // Join consecutive strings and numbers\n          if (includes('rg', (typeof interpolation)[5])) {\n            buffer += interpolation\n          } else if (interpolation) {\n            parseString(buffer)\n            buffer = ''\n            parseToken(interpolation)\n          }\n\n          // If last => parse remaining buffered tokens\n          if (index == strings.length - 1) {\n            parseString(buffer)\n          }\n        }\n      }\n\n      // Fast mode\n      // Reset rules to extract all static generated rules\n      const staticRules = (rules = [])\n\n      parseString(token)\n\n      // Copy the active groupings to set them\n      // before interpolation processing\n      const activeGroupings = [...groupings]\n\n      // Reset the rules\n      rules = []\n\n      return (interpolation) => {\n        rules.push(...staticRules)\n        groupings = [...activeGroupings]\n        if (interpolation) {\n          parseToken(interpolation)\n        }\n      }\n    })\n\n    staticsCaches.set(strings, statics)\n  }\n\n  return statics\n}\n\nexport const parse = (tokens: string | MaybeTokenInterpolation): Rule[] => {\n  groupings = []\n  rules = []\n\n  // Handles template literal strings\n  if (\n    Array.isArray(tokens[0] as TemplateStringsArray) &&\n    Array.isArray((tokens[0] as TemplateStringsArray).raw)\n  ) {\n    buildStatics(tokens[0] as TemplateStringsArray).forEach((apply, index) =>\n      apply(tokens[index + 1] as Token),\n    )\n  } else {\n    // Token includes string type\n    parseToken(tokens as Token)\n  }\n\n  return rules\n}\n", "import type { Context, Directive, MaybeThunk } from '../types'\n\nimport { ensureMaxSize, evalThunk } from '../internal/util'\n\nlet isFunctionFree: boolean\nconst detectFunction = (key: string, value: unknown): unknown => {\n  if (typeof value == 'function') {\n    isFunctionFree = false\n  }\n\n  return value\n}\n\nconst stringify = (data: unknown): string | false => {\n  isFunctionFree = true\n\n  const key = JSON.stringify(data, detectFunction)\n\n  return isFunctionFree && key\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nconst cacheByFactory = new WeakMap<\n  (data: any, context: Context) => any,\n  Map<string, Directive<any>>\n>()\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\n/**\n * Returns an optimized and cached function for use with `tw`.\n *\n * `tw` caches rules based on the function identity. This helper caches\n * the function based on the data.\n *\n * @param factory to use when the directive is invoked\n * @param data to use\n */\nexport const directive = <Data, T>(\n  factory: (data: Data, context: Context) => MaybeThunk<T>,\n  data: Data,\n): Directive<T> => {\n  const key = stringify(data)\n\n  let directive: Directive<T> | undefined\n\n  if (key) {\n    // eslint-disable-next-line no-var\n    var cache = cacheByFactory.get(factory)\n\n    if (!cache) {\n      cacheByFactory.set(factory, (cache = new Map()))\n    }\n\n    directive = cache.get(key)\n  }\n\n  if (!directive) {\n    directive = Object.defineProperty(\n      (params: string[] | Context, context: Context): T => {\n        context = Array.isArray(params) ? context : params\n        return evalThunk(factory(data, context), context)\n      },\n      'toJSON',\n      {\n        // Allow twind to generate a unique id for this directive\n        // twind uses JSON.stringify which returns undefined for functions like this directive\n        // providing a toJSON function allows to include this directive in the id generation\n        value: () => key || data,\n      },\n    )\n\n    if (cache) {\n      cache.set(key as string, directive as Directive<T>)\n\n      // Ensure the cache does not grow unlimited\n      ensureMaxSize(cache, 10000)\n    }\n  }\n\n  return directive as Directive<T>\n}\n", "import type { Token, Directive, CSSRules, Context, MaybeTokenInterpolation } from '../types'\n\nimport { parse } from './parse'\nimport { directive } from './directive'\n\n// see MaybeTokenInterpolation type union of possible args array spread\nexport interface Apply {\n  (strings: TemplateStringsArray, ...interpolations: Token[]): Directive<CSSRules>\n\n  (...tokens: Token[]): Directive<CSSRules>\n}\n\nconst applyFactory = (tokens: MaybeTokenInterpolation, { css }: Context) => css(parse(tokens))\n\nexport const apply: Apply = (...tokens: MaybeTokenInterpolation): Directive<CSSRules> =>\n  directive(applyFactory, tokens)\n", "/* eslint-disable @typescript-eslint/consistent-type-assertions */\nimport type { CSSRules, Rule } from '../types'\n\nimport { joinTruthy, tail } from '../internal/util'\n\nconst positions = (resolve: (position: string) => undefined | string[] | void) => (\n  value: string | string[] | undefined,\n  position: string,\n  prefix?: string,\n  suffix?: string,\n): CSSRules | undefined => {\n  if (value) {\n    const properties = position && resolve(position)\n\n    if (properties && properties.length > 0) {\n      return properties.reduce((declarations, property) => {\n        declarations[joinTruthy([prefix, property, suffix])] = value\n        return declarations\n      }, {} as CSSRules)\n    }\n  }\n}\n\nexport const corners = /*#__PURE__*/ positions(\n  (key) =>\n    (({\n      t: ['top-left', 'top-right'],\n      r: ['top-right', 'bottom-right'],\n      b: ['bottom-left', 'bottom-right'],\n      l: ['bottom-left', 'top-left'],\n      tl: ['top-left'],\n      tr: ['top-right'],\n      bl: ['bottom-left'],\n      br: ['bottom-right'],\n    } as Record<string, undefined | string[]>)[key]),\n)\n\nexport const expandEdges = (key: string): string[] | undefined => {\n  const parts = (({ x: 'lr', y: 'tb' } as Record<string, undefined | string>)[key] || key || '')\n    .split('')\n    .sort()\n\n  for (let index = parts.length; index--; ) {\n    if (\n      !(parts[index] = ({\n        t: 'top',\n        r: 'right',\n        b: 'bottom',\n        l: 'left',\n      } as Record<string, string>)[parts[index]])\n    )\n      return\n  }\n\n  if (parts.length) return parts\n}\n\n// Support several edges like 'tr'\n// 'x' and 'y' can not be combined with others because size 'xl'\n// Every char must be a edge position\n// Sort to have consistent declaration ordering\nexport const edges = /*#__PURE__*/ positions(expandEdges)\n\nconst stringifyVariant = (selector: string, variant: string): string =>\n  selector + (variant[1] == ':' ? tail(variant, 2) + ':' : tail(variant)) + ':'\n\n// Creates rule id including variants, negate and directive\n// which is exactly like a tailwind rule\nexport const stringifyRule = (rule: Rule, directive = rule.d): string =>\n  typeof directive == 'function'\n    ? ''\n    : rule.v.reduce(stringifyVariant, '') + (rule.i ? '!' : '') + (rule.n ? '-' : '') + directive\n/* eslint-enable @typescript-eslint/consistent-type-assertions */\n", "/* eslint-disable no-return-assign, no-cond-assign, @typescript-eslint/consistent-type-assertions */\nimport type {\n  Theme,\n  CSSRules,\n  CSSProperties,\n  Plugin,\n  ThemeResolver,\n  Context,\n  Falsy,\n  ThemeContainer,\n  ThemeScreen,\n} from '../types'\n\nimport {\n  includes,\n  join,\n  joinTruthy,\n  tail,\n  capitalize,\n  hyphenate,\n  buildMediaQuery,\n} from '../internal/util'\nimport { corners, expandEdges, edges } from './helpers'\n\ntype PluginHandler = (\n  parameters: string[],\n  context: Context,\n  id: string,\n) => CSSRules | string | Falsy\n\n// Shared variables\nlet _: undefined | string | CSSRules | CSSProperties | string[] | boolean | Falsy | number\nlet __: undefined | string | CSSProperties\nlet $: undefined | string | number | ThemeScreen\n\nconst toColumnsOrRows = (x: string): 'columns' | 'rows' => (x == 'cols' ? 'columns' : 'rows')\n\nconst property = (property: string) => (\n  params: string[],\n  context: unknown,\n  id: string,\n): CSSRules => ({\n  [property]: id + ((_ = join(params)) && '-' + _),\n})\n\nconst propertyValue = (property?: string, separator?: string) => (\n  params: string[],\n  context?: Context,\n  id?: string,\n): CSSRules | string =>\n  (_ = join(params, separator)) && {\n    [property || (id as string)]: _,\n  }\n\nconst themeProperty = (section?: keyof Theme): PluginHandler => (params: string[], { theme }, id) =>\n  (_ = theme(section || (id as keyof Theme), params) as string) && {\n    [section || id]: _,\n  }\n\nconst themePropertyFallback = (section?: keyof Theme, separator?: string): PluginHandler => (\n  params: string[],\n  { theme },\n  id,\n) =>\n  (_ = theme(section || (id as keyof Theme), params, join(params, separator)) as string) && {\n    [section || id]: _,\n  }\n\nconst alias = (handler: PluginHandler, name: string): PluginHandler => (params, context) =>\n  handler(params, context, name)\n\nconst display = property('display')\nconst position = property('position')\nconst textTransform = property('textTransform')\nconst textDecoration = property('textDecoration')\nconst fontStyle = property('fontStyle')\nconst fontVariantNumeric = (key: string): PluginHandler => (params, context, id) => ({\n  ['--tw-' + key]: id,\n  fontVariantNumeric:\n    'var(--tw-ordinal,/*!*/ /*!*/) var(--tw-slashed-zero,/*!*/ /*!*/) var(--tw-numeric-figure,/*!*/ /*!*/) var(--tw-numeric-spacing,/*!*/ /*!*/) var(--tw-numeric-fraction,/*!*/ /*!*/)',\n})\n\nconst inset: PluginHandler = (params, { theme }, id) => (_ = theme('inset', params)) && { [id]: _ }\n\nconst opacityProperty = (\n  params: string[],\n  theme: ThemeResolver,\n  id: string,\n  section = id,\n): CSSRules | undefined =>\n  (_ = theme((section + 'Opacity') as 'textOpacity', tail(params)) as undefined) && {\n    [`--tw-${id}-opacity`]: _,\n  }\n\nconst parseColorComponent = (chars: string, factor: number): number =>\n  Math.round(parseInt(chars, 16) * factor)\n\nconst asRGBA = <T extends string | undefined>(\n  color: T,\n  opacityProperty: string,\n  opacityDefault?: string,\n): T | string => {\n  if (color && color[0] == '#' && (_ = (color.length - 1) / 3) && ($ = [17, 1, 0.062272][_ - 1])) {\n    return `rgba(${parseColorComponent(color.substr(1, _), $)},${parseColorComponent(\n      color.substr(1 + _, _),\n      $,\n    )},${parseColorComponent(color.substr(1 + 2 * _, _), $)},${\n      opacityProperty\n        ? `var(--tw-${opacityProperty}${opacityDefault ? ',' + opacityDefault : ''})`\n        : opacityDefault || 1\n    })`\n  }\n\n  return color\n}\n\nconst withOpacityFallback = (\n  property: string,\n  kind: string,\n  color: string | undefined,\n): CSSRules | undefined =>\n  color && typeof color == 'string'\n    ? (_ = asRGBA(color, kind + '-opacity')) && _ !== color\n      ? {\n          [`--tw-${kind}-opacity`]: '1',\n          [property]: [color, _],\n        }\n      : { [property]: color }\n    : undefined\n\nconst transparentTo = (color: string) => (($ = asRGBA(color, '', '0')) == _ ? 'transparent' : $)\n\nconst reversableEdge = (\n  params: string[],\n  { theme }: Context,\n  id: string,\n  section: 'divideWidth' | 'space',\n  prefix: string,\n  suffix?: string,\n  // eslint-disable-next-line max-params\n): CSSRules | undefined =>\n  (_ = ({ x: ['right', 'left'], y: ['bottom', 'top'] } as Record<string, undefined | string[]>)[\n    params[0]\n  ]) && ($ = `--tw-${id}-${params[0]}-reverse`)\n    ? params[1] == 'reverse'\n      ? {\n          [$]: '1',\n        }\n      : {\n          [$]: '0',\n          [joinTruthy([prefix, _[0], suffix])]:\n            (__ = theme(section, tail(params))) && `calc(${__} * var(${$}))`,\n          // With fallback\n          [joinTruthy([prefix, _[1], suffix])]: __ && [__, `calc(${__} * calc(1 - var(${$})))`],\n        }\n    : undefined\n\nconst placeHelper = (property: string, params: string[]): CSSRules | string =>\n  params[0] && {\n    // 'auto'\n    // 'start'\n    // 'end'\n    // 'center'\n    // 'stretch'\n    // 'between'\n    // 'around'\n    // 'evenly'\n    // 'between', 'around', 'evenly' => space-$0\n    // 4th char is unique\n    [property]: (includes('wun', (params[0] || '')[3]) ? 'space-' : '') + params[0],\n  }\n\nconst contentPluginFor = (property: string) => (params: string[]): CSSRules | string =>\n  includes(['start', 'end'], params[0])\n    ? { [property]: 'flex-' + params[0] }\n    : placeHelper(property, params)\n\nconst gridPlugin = (kind: 'column' | 'row'): PluginHandler => (params, { theme }) => {\n  if ((_ = theme(('grid' + capitalize(kind)) as 'gridRow', params, ''))) {\n    return { ['grid-' + kind]: _ }\n  }\n\n  switch (params[0]) {\n    case 'span':\n      return (\n        params[1] && {\n          ['grid-' + kind]: `span ${params[1]} / span ${params[1]}`,\n        }\n      )\n    case 'start':\n    case 'end':\n      return (\n        (_ = theme(\n          ('grid' + capitalize(kind) + capitalize(params[0])) as 'gridRowStart',\n          tail(params),\n          join(tail(params)),\n        )) && {\n          [`grid-${kind}-${params[0]}`]: _,\n        }\n      )\n  }\n}\n\nconst border: PluginHandler = (params, { theme }, id) => {\n  switch (params[0]) {\n    case 'solid':\n    case 'dashed':\n    case 'dotted':\n    case 'double':\n    case 'none':\n      return propertyValue('borderStyle')(params)\n    case 'collapse':\n    case 'separate':\n      return propertyValue('borderCollapse')(params)\n    case 'opacity':\n      return opacityProperty(params, theme, id)\n  }\n\n  return (_ = theme((id + 'Width') as 'borderWidth' | 'divideWidth', params, '' /* Optional */))\n    ? { borderWidth: _ }\n    : withOpacityFallback(\n        'borderColor',\n        id,\n        theme((id + 'Color') as 'borderColor' | 'divideColor', params) as string,\n      )\n}\n\nconst borderEdges: PluginHandler = (params, context, id) => {\n  const edges = expandEdges(params[0])?.map(capitalize)\n  if (edges) {\n    params = tail(params)\n  }\n\n  let rules = border(params, context, id)\n  if (edges && rules && typeof rules === 'object') {\n    rules = Object.entries(rules).reduce((newRules, [key, value]) => {\n      if (key.startsWith('border')) {\n        for (const edge of edges) {\n          newRules[key.slice(0, 6) + edge + key.slice(6)] = value\n        }\n      } else {\n        newRules[key] = value\n      }\n\n      return newRules\n    }, {} as CSSRules)\n  }\n\n  return rules\n}\n\nconst transform = (gpu?: boolean): string =>\n  (gpu\n    ? 'translate3d(var(--tw-translate-x,0),var(--tw-translate-y,0),0)'\n    : 'translateX(var(--tw-translate-x,0)) translateY(var(--tw-translate-y,0))') +\n  ' rotate(var(--tw-rotate,0)) skewX(var(--tw-skew-x,0)) skewY(var(--tw-skew-y,0)) scaleX(var(--tw-scale-x,1)) scaleY(var(--tw-scale-y,1))'\n\n// .scale-0\t--scale-x: 0;\n// .scale-x-150\n// .scale-y-0\n// .translate-x-0\t--translate-x: 0;\n// .translate-x-1\t--translate-x: 0.25rem;\n// .translate-y-px\t--translate-y: 1px;\n// .translate-y-full\t--translate-y: 100%;\n// .translate-y-1/2\t--translate-y: 50%;\n// .skew-y-0\t--skew-y: 0;\n// .skew-y-1\t--skew-y: 1deg;\nconst transformXYFunction: PluginHandler = (params, context, id) =>\n  params[0] &&\n  (_ = context.theme(id as 'scale' | 'skew' | 'translate', params[1] || params[0])) && {\n    [`--tw-${id}-x`]: params[0] !== 'y' && _,\n    [`--tw-${id}-y`]: params[0] !== 'x' && _,\n    transform: [`${id}${params[1] ? params[0].toUpperCase() : ''}(${_})`, transform()],\n  }\n\nconst edgesPluginFor = (key: 'margin' | 'padding'): PluginHandler => (params, context, id) =>\n  id[1] ? edges(context.theme(key, params), id[1], key) : themeProperty(key)(params, context, id)\n\n// For p-*, px-*, pt-*\nconst padding = edgesPluginFor('padding')\n\n// For m-*, mx-*, mt-*\nconst margin = edgesPluginFor('margin')\n\n// 'min-w-full' -> minWidth\n// 'max-h-0.5' -> maxHeight\nconst minMax: PluginHandler = (params, { theme }, id) =>\n  (_ = ({ w: 'width', h: 'height' } as Record<string, undefined | string>)[params[0]]) && {\n    [(_ = `${id}${capitalize(_)}`)]: theme(\n      _ as 'minWidth' | 'minHeight' | 'maxWidth' | 'maxHeight',\n      tail(params),\n    ),\n  }\n\nconst filter: Plugin = (params, { theme }, id) => {\n  const parts = id.split('-')\n  const prefix = parts[0] == 'backdrop' ? parts[0] + '-' : ''\n  if (!prefix) {\n    params.unshift(...parts)\n  }\n\n  if (params[0] == 'filter') {\n    const filters = [\n      'blur',\n      'brightness',\n      'contrast',\n      'grayscale',\n      'hue-rotate',\n      'invert',\n      prefix && 'opacity',\n      'saturate',\n      'sepia',\n      !prefix && 'drop-shadow',\n    ].filter(Boolean)\n\n    return params[1] == 'none'\n      ? { [prefix + 'filter']: 'none' }\n      : filters.reduce(\n          (css, key) => {\n            css['--tw-' + prefix + key] = 'var(--tw-empty,/*!*/ /*!*/)'\n            return css\n          },\n          {\n            [prefix + 'filter']: filters.map((key) => `var(--tw-${prefix}${key})`).join(' '),\n          } as CSSRules,\n        )\n  }\n\n  $ = params.shift()\n  // hue-rotate, drop-shadow\n  if (includes(['hue', 'drop'], $)) $ += capitalize(params.shift() as string)\n\n  return (\n    (_ = theme((prefix ? 'backdrop' + capitalize($ as string) : $) as 'blur', params)) && {\n      ['--tw-' + prefix + $]: (Array.isArray(_) ? (_ as string[]) : [_])\n        .map((_) => `${hyphenate($ as string)}(${_})`)\n        .join(' '),\n    }\n  )\n}\n\nexport const corePlugins: Record<string, Plugin | undefined> = {\n  group: (params, { tag }, id) => tag(join([id, ...params])),\n\n  hidden: alias(display, 'none'),\n  inline: display,\n  block: display,\n  contents: display,\n  flow: display,\n\n  table: (params, context, id) =>\n    includes(['auto', 'fixed'], params[0])\n      ? { tableLayout: params[0] }\n      : display(params, context, id),\n\n  flex(params, context, id) {\n    switch (params[0]) {\n      case 'row':\n      case 'col':\n        return {\n          flexDirection: join(params[0] == 'col' ? ['column', ...tail(params)] : params),\n        }\n      case 'nowrap':\n      case 'wrap':\n        return { flexWrap: join(params) }\n      case 'grow':\n      case 'shrink':\n        _ = context.theme(\n          ('flex' + capitalize(params[0])) as 'flexGrow',\n          tail(params),\n          (params[1] || 1) as number,\n        )\n\n        return (\n          _ != null && {\n            ['flex-' + params[0]]: '' + _,\n          }\n        )\n    }\n\n    return (_ = context.theme('flex', params, '' /* Optional */))\n      ? { flex: _ }\n      : display(params, context, id)\n  },\n\n  grid(params, context, id) {\n    switch (params[0]) {\n      case 'cols':\n      case 'rows':\n        return (\n          (_ = context.theme(\n            ('gridTemplate' + capitalize(toColumnsOrRows(params[0]))) as 'gridTemplateRows',\n            tail(params),\n            params.length == 2 && Number(params[1])\n              ? `repeat(${params[1]},minmax(0,1fr))`\n              : join(tail(params)),\n          )) && {\n            ['gridTemplate-' + toColumnsOrRows(params[0])]: _,\n          }\n        )\n\n      case 'flow':\n        return (\n          params.length > 1 && {\n            gridAutoFlow: join(\n              params[1] == 'col' ? ['column', ...tail(params, 2)] : tail(params),\n              ' ',\n            ),\n          }\n        )\n    }\n\n    return display(params, context, id)\n  },\n\n  auto: (params, { theme }) =>\n    includes(['cols', 'rows'], params[0]) &&\n    (_ = theme(\n      ('gridAuto' + capitalize(toColumnsOrRows(params[0]))) as 'gridAutoRows' | 'gridAutoColumns',\n      tail(params),\n      join(tail(params)),\n    )) && {\n      ['gridAuto-' + toColumnsOrRows(params[0])]: _,\n    },\n\n  static: position,\n  fixed: position,\n  absolute: position,\n  relative: position,\n  sticky: position,\n\n  visible: { visibility: 'visible' },\n  invisible: { visibility: 'hidden' },\n\n  antialiased: {\n    WebkitFontSmoothing: 'antialiased',\n    MozOsxFontSmoothing: 'grayscale',\n  },\n\n  'subpixel-antialiased': {\n    WebkitFontSmoothing: 'auto',\n    MozOsxFontSmoothing: 'auto',\n  },\n\n  truncate: {\n    overflow: 'hidden',\n    whiteSpace: 'nowrap',\n    textOverflow: 'ellipsis',\n  },\n\n  'sr-only': {\n    position: 'absolute',\n    width: '1px',\n    height: '1px',\n    padding: '0',\n    margin: '-1px',\n    overflow: 'hidden',\n    whiteSpace: 'nowrap',\n    clip: 'rect(0,0,0,0)',\n    borderWidth: '0',\n  },\n\n  'not-sr-only': {\n    position: 'static',\n    width: 'auto',\n    height: 'auto',\n    padding: '0',\n    margin: '0',\n    overflow: 'visible',\n    whiteSpace: 'normal',\n    clip: 'auto',\n  },\n\n  resize: (params) => ({\n    resize:\n      ({ x: 'horizontal', y: 'vertical' } as Record<string, string | undefined>)[params[0]] ||\n      params[0] ||\n      'both',\n  }),\n\n  box: (params) => params[0] && { boxSizing: params[0] + '-box' },\n\n  // .appearance-none -> appearance: none;\n  // .appearance-auto -> appearance: auto;\n  // .appearance-menulist-button; -> appearance: menulist-button;\n  // .appearance-textfield -> appearance: textfield;\n  appearance: propertyValue(),\n  cursor: themePropertyFallback(),\n\n  float: propertyValue(),\n  clear: propertyValue(),\n  decoration: propertyValue('boxDecorationBreak'),\n\n  isolate: { isolation: 'isolate' },\n  isolation: propertyValue(),\n\n  'mix-blend': propertyValue('mixBlendMode'),\n\n  top: inset,\n  right: inset,\n  bottom: inset,\n  left: inset,\n\n  // 'inset-0'\n  // 'inset-1.5'\n  // 'inset-x-1.5'\n  inset: (params, { theme }) =>\n    (_ = expandEdges(params[0]))\n      ? edges(theme('inset', tail(params)), params[0])\n      : (_ = theme('inset', params)) && {\n          top: _,\n          right: _,\n          bottom: _,\n          left: _,\n        },\n\n  underline: textDecoration,\n  'line-through': textDecoration,\n  'no-underline': alias(textDecoration, 'none'),\n\n  'text-underline': alias(textDecoration, 'underline'),\n  'text-no-underline': alias(textDecoration, 'none'),\n  'text-line-through': alias(textDecoration, 'line-through'),\n\n  uppercase: textTransform,\n  lowercase: textTransform,\n  capitalize: textTransform,\n\n  'normal-case': alias(textTransform, 'none'),\n  'text-normal-case': alias(textTransform, 'none'),\n\n  italic: fontStyle,\n  'not-italic': alias(fontStyle, 'normal'),\n\n  'font-italic': alias(fontStyle, 'italic'),\n  'font-not-italic': alias(fontStyle, 'normal'),\n\n  font: (params, context, id) =>\n    (_ = context.theme('fontFamily', params, '' /* Optional */))\n      ? { fontFamily: _ }\n      : themeProperty('fontWeight')(params, context, id),\n\n  items: (params) =>\n    params[0] && {\n      alignItems: includes(['start', 'end'], params[0]) ? 'flex-' + params[0] : join(params),\n    },\n\n  'justify-self': propertyValue(),\n  'justify-items': propertyValue(),\n  justify: contentPluginFor('justifyContent'),\n  content: contentPluginFor('alignContent'),\n  self: contentPluginFor('alignSelf'),\n\n  place: (params) => params[0] && placeHelper('place-' + params[0], tail(params)),\n\n  overscroll: (params) =>\n    params[0] && {\n      ['overscrollBehavior' + (params[1] ? '-' + params[0] : '')]: params[1] || params[0],\n    },\n\n  col: gridPlugin('column'),\n  row: gridPlugin('row'),\n\n  // .duration-75\ttransition-duration: 75ms;\n  // .duration-75\ttransition-duration: 75ms;\n  duration: themeProperty('transitionDuration'),\n\n  // .delay-75\ttransition-delay: 75ms;\n  // .delay-100\ttransition-delay: 100ms;\n  delay: themeProperty('transitionDelay'),\n\n  tracking: themeProperty('letterSpacing'),\n\n  // .leading-10\tline-height: 2.5rem;\n  // .leading-none\tline-height: 1;\n  // .leading-tight\tline-height: 1.25;\n  leading: themeProperty('lineHeight'),\n\n  // .z-50\tz-index: 50;\n  // .z-auto\tz-index: auto;\n  z: themeProperty('zIndex'),\n\n  opacity: themeProperty(),\n\n  ease: themeProperty('transitionTimingFunction'),\n\n  p: padding,\n  py: padding,\n  px: padding,\n  pt: padding,\n  pr: padding,\n  pb: padding,\n  pl: padding,\n\n  m: margin,\n  my: margin,\n  mx: margin,\n  mt: margin,\n  mr: margin,\n  mb: margin,\n  ml: margin,\n\n  // .w-64\twidth: 16rem;\n  // .w-auto\twidth: auto;\n  // .w-px\twidth: 1px;\n  // .w-1/2\twidth: 50%;\n  // .w-full\twidth: 100%;\n  // .w-screen\twidth: 100vw;\n  w: themeProperty('width'),\n  h: themeProperty('height'),\n\n  min: minMax,\n  max: minMax,\n\n  fill: themeProperty(),\n\n  order: themeProperty(),\n\n  origin: themePropertyFallback('transformOrigin', ' '),\n\n  select: propertyValue('userSelect'),\n\n  'pointer-events': propertyValue(),\n\n  align: propertyValue('verticalAlign'),\n\n  whitespace: propertyValue('whiteSpace'),\n\n  'normal-nums': { fontVariantNumeric: 'normal' },\n  ordinal: fontVariantNumeric('ordinal'),\n  'slashed-zero': fontVariantNumeric('slashed-zero'),\n  'lining-nums': fontVariantNumeric('numeric-figure'),\n  'oldstyle-nums': fontVariantNumeric('numeric-figure'),\n  'proportional-nums': fontVariantNumeric('numeric-spacing'),\n  'tabular-nums': fontVariantNumeric('numeric-spacing'),\n  'diagonal-fractions': fontVariantNumeric('numeric-fraction'),\n  'stacked-fractions': fontVariantNumeric('numeric-fraction'),\n\n  // 'overflow-visible'\n  // 'overflow-x-hidden'\n  overflow: (params, context, id) =>\n    includes(['ellipsis', 'clip'], params[0])\n      ? propertyValue('textOverflow')(params)\n      : params[1]\n      ? { ['overflow-' + params[0]]: params[1] }\n      : propertyValue()(params, context, id),\n\n  transform: (params) =>\n    params[0] == 'none'\n      ? { transform: 'none' }\n      : {\n          '--tw-translate-x': '0',\n          '--tw-translate-y': '0',\n          '--tw-rotate': '0',\n          '--tw-skew-x': '0',\n          '--tw-skew-y': '0',\n          '--tw-scale-x': '1',\n          '--tw-scale-y': '1',\n          transform: transform(params[0] == 'gpu'),\n        },\n\n  // .rotate-0\t--transform-rotate: 0;\n  // .rotate-1\t--transform-rotate: 1deg;\n  rotate: (params, { theme }) =>\n    (_ = theme('rotate', params)) && {\n      '--tw-rotate': _,\n      transform: [`rotate(${_})`, transform()],\n    },\n\n  scale: transformXYFunction,\n  translate: transformXYFunction,\n  skew: transformXYFunction,\n\n  // .gap-0\tgap: 0;\n  // .gap-1\tgap: 0.25rem;\n  // .gap-px\tgap: 1px;\n  // .gap-x-0\tcolumn-gap: 0;\n  // .gap-x-1\tcolumn-gap: 0.25rem;\n  gap: (params, context, id) =>\n    (_ = ({ x: 'column', y: 'row' } as Record<string, string | undefined>)[params[0]])\n      ? { [_ + 'Gap']: context.theme('gap', tail(params)) }\n      : themeProperty('gap')(params, context, id),\n\n  // .stroke-current\tstroke: currentColor;\n  // stroke-0\tstroke-width: 0;\n  // .stroke-1\tstroke-width: 1;\n  stroke: (params, context, id) =>\n    (_ = context.theme('stroke', params, '' /* Optional */))\n      ? { stroke: _ }\n      : themeProperty('strokeWidth')(params, context, id),\n\n  // .outline-none\toutline: 2px solid transparent; outline-offset: 2px;\n  // .outline-white\toutline: 2px dotted white; outline-offset: 2px;\n  outline: (params, { theme }) =>\n    (_ = theme('outline', params)) && {\n      outline: _[0],\n      outlineOffset: _[1],\n    },\n\n  'break-normal': {\n    wordBreak: 'normal',\n    overflowWrap: 'normal',\n  },\n  'break-words': { overflowWrap: 'break-word' },\n  'break-all': { wordBreak: 'break-all' },\n\n  text(params, { theme }, id) {\n    switch (params[0]) {\n      case 'left':\n      case 'center':\n      case 'right':\n      case 'justify':\n        return { textAlign: params[0] }\n      case 'uppercase':\n      case 'lowercase':\n      case 'capitalize':\n        return textTransform([], _, params[0])\n      case 'opacity':\n        return opacityProperty(params, theme, id)\n    }\n\n    const fontSize = theme('fontSize', params, '' /* Optional */)\n\n    if (fontSize) {\n      return typeof fontSize == 'string'\n        ? { fontSize }\n        : {\n            fontSize: fontSize[0],\n            ...(typeof fontSize[1] == 'string' ? { lineHeight: fontSize[1] } : fontSize[1]),\n          }\n    }\n\n    return withOpacityFallback('color', 'text', theme('textColor', params) as string)\n  },\n\n  // eslint-disable-next-line complexity\n  bg(params, { theme }, id) {\n    switch (params[0]) {\n      case 'fixed':\n      case 'local':\n      case 'scroll':\n        return propertyValue('backgroundAttachment', ',')(params)\n\n      case 'bottom':\n      case 'center':\n      case 'left':\n      case 'right':\n      case 'top':\n        return propertyValue('backgroundPosition', ' ')(params)\n\n      case 'no':\n        return params[1] == 'repeat' && propertyValue('backgroundRepeat')(params)\n\n      case 'repeat':\n        return includes('xy', params[1])\n          ? propertyValue('backgroundRepeat')(params)\n          : { backgroundRepeat: params[1] || params[0] }\n\n      case 'opacity':\n        return opacityProperty(params, theme, id, 'background')\n\n      case 'clip':\n      case 'origin':\n        return (\n          params[1] && {\n            ['background-' + params[0]]: params[1] + (params[1] == 'text' ? '' : '-box'),\n          }\n        )\n\n      case 'blend':\n        return propertyValue('background-blend-mode')(tail(params))\n\n      // .bg-gradient-to-r => linear-gradient(to right, ...)\n      // .bg-gradient-to-r => linear-gradient(to right, ...)\n      case 'gradient':\n        if (params[1] == 'to' && (_ = expandEdges(params[2]))) {\n          return {\n            backgroundImage: `linear-gradient(to ${join(_, ' ')},var(--tw-gradient-stops))`,\n          }\n        }\n    }\n\n    return (_ = theme('backgroundPosition', params, '' /* Optional */))\n      ? { backgroundPosition: _ }\n      : (_ = theme('backgroundSize', params, '' /* Optional */))\n      ? { backgroundSize: _ }\n      : (_ = theme('backgroundImage', params, '' /* Optional */))\n      ? { backgroundImage: _ }\n      : withOpacityFallback('backgroundColor', 'bg', theme('backgroundColor', params) as string)\n  },\n\n  // .from-purple-400\n  from: (params, { theme }) =>\n    (_ = theme('gradientColorStops', params)) && {\n      '--tw-gradient-from': _,\n      '--tw-gradient-stops': `var(--tw-gradient-from),var(--tw-gradient-to,${transparentTo(\n        _ as string,\n      )})`,\n    },\n\n  // .via-pink-500\n  via: (params, { theme }) =>\n    (_ = theme('gradientColorStops', params)) && {\n      '--tw-gradient-stops': `var(--tw-gradient-from),${_},var(--tw-gradient-to,${transparentTo(\n        _ as string,\n      )})`,\n    },\n\n  // .to-red-500\n  to: (params, { theme }) =>\n    (_ = theme('gradientColorStops', params)) && {\n      '--tw-gradient-to': _ as string,\n    },\n\n  // .border\tborder-width: 1px;\n  // .border-0\tborder-width: 0;\n  // .border-2\tborder-width: 2px;\n  // .border\tborder-width: 1px;\n  // .border-t\tborder-top-width: 1px;\n  // .border-t-0\tborder-top-width: 0px;\n  // .border-t-xs\n  border: borderEdges,\n\n  // .divide-x\n  // .divide-x-8\n  divide: (params, context, id) =>\n    (_ =\n      reversableEdge(params, context, id, 'divideWidth', 'border', 'width') ||\n      border(params, context, id)) && {\n      '&>:not([hidden])~:not([hidden])': _ as CSSRules,\n    },\n\n  space: (params, context, id) =>\n    (_ = reversableEdge(params, context, id, 'space', 'margin')) && {\n      '&>:not([hidden])~:not([hidden])': _,\n    },\n\n  placeholder: (params, { theme }, id) =>\n    (_ =\n      params[0] == 'opacity'\n        ? opacityProperty(params, theme, id)\n        : withOpacityFallback(\n            'color',\n            'placeholder',\n            theme('placeholderColor', params) as string,\n          )) && {\n      '&::placeholder': _,\n    },\n\n  // .shadow\tbox-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);\n  // .shadow-md\tbox-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n  // .shadow-none\tbox-shadow: none;\n  shadow: (params, { theme }) =>\n    (_ = theme('boxShadow', params)) && {\n      ':global': {\n        '*': {\n          '--tw-shadow': '0 0 transparent',\n        },\n      },\n      '--tw-shadow': _ == 'none' ? '0 0 transparent' : _,\n      // Fallback first, then modern with ring-* support\n      boxShadow: [\n        _,\n        `var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)`,\n      ],\n    },\n\n  animate: (params, { theme, tag }) => {\n    if (($ = theme('animation', params))) {\n      // Try to auto inject keyframes\n      const parts = $.split(' ')\n\n      // Try to find a keyframe defintion in the theme using the first part\n      // Provide a default (__ = {}) and check if that is returned\n      if ((_ = theme('keyframes', parts[0], (__ = {}))) !== __) {\n        // Use a hashed named for the keyframes\n        return (\n          ($ = tag(parts[0])) && {\n            animation: $ + ' ' + join(tail(parts), ' '),\n            ['@keyframes ' + $]: _,\n          }\n        )\n      }\n\n      return { animation: $ }\n    }\n  },\n\n  // From theme.ringWidth\n  // .ring\n  // .ring-0\n  // .ring-inset\n  //\n  // From theme.colors\n  // .ring-current\n  // .ring-transparent\n  // .ring-gray-100\n  //\n  // From theme.opacity\n  // .ring-opacity-50\n  //\n  // From theme.ringOffsetWidth\n  // .ring-offset -> 2px\n  // .ring-offset-8 -> 8px\n  ring(params, { theme }, id) {\n    switch (params[0]) {\n      case 'inset':\n        return { '--tw-ring-inset': 'inset' }\n\n      case 'opacity':\n        return opacityProperty(params, theme, id)\n\n      case 'offset':\n        // Either width or color\n        return (_ = theme('ringOffsetWidth', tail(params), '' /* Optional */))\n          ? {\n              '--tw-ring-offset-width': _,\n            }\n          : {\n              '--tw-ring-offset-color': theme('ringOffsetColor', tail(params)),\n            }\n    }\n\n    // Either width or color\n    return (_ = theme('ringWidth', params, '' /* Optional */))\n      ? {\n          // A width\n          '--tw-ring-offset-shadow': `var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)`,\n          '--tw-ring-shadow': `var(--tw-ring-inset) 0 0 0 calc(${_} + var(--tw-ring-offset-width)) var(--tw-ring-color)`,\n          boxShadow: `var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 transparent)`,\n\n          ':global': {\n            '*': {\n              '--tw-ring-inset': 'var(--tw-empty,/*!*/ /*!*/)',\n              '--tw-ring-offset-width': theme('ringOffsetWidth', '', '0px'),\n              '--tw-ring-offset-color': theme('ringOffsetColor', '', '#fff'),\n              '--tw-ring-color': asRGBA(\n                theme('ringColor', '', '#93c5fd') as string,\n                'ring-opacity',\n                theme('ringOpacity', '', '0.5'),\n              ),\n              '--tw-ring-offset-shadow': '0 0 transparent',\n              '--tw-ring-shadow': '0 0 transparent',\n            },\n          },\n        }\n      : {\n          // A color\n          '--tw-ring-opacity': '1',\n          '--tw-ring-color': asRGBA(theme('ringColor', params) as string, 'ring-opacity'),\n        }\n  },\n\n  object: (params, context, id) =>\n    includes(['contain', 'cover', 'fill', 'none', 'scale-down'], join(params))\n      ? { objectFit: join(params) }\n      : themePropertyFallback('objectPosition', ' ')(params, context, id),\n\n  list: (params, context, id) =>\n    join(params) == 'item'\n      ? display(params, context, id)\n      : includes(['inside', 'outside'], join(params))\n      ? { listStylePosition: params[0] }\n      : themePropertyFallback('listStyleType')(params, context, id),\n\n  // .rounded\tborder-radius: 0.25rem;\n  // .rounded-5\tborder-radius: 5px;\n  // .rounded-md\tborder-radius: 0.375rem;\n  // .rounded-lg\tborder-radius: 0.5rem;\n  // .rounded-xl\tborder-radius: 0.75rem;\n  // .rounded-2xl\tborder-radius: 1rem;\n  // .rounded-3xl\tborder-radius: 1.5rem;\n  // .rounded-full\tborder-radius: 9999px;\n  // .rounded-t-none\tborder-top-left-radius: 0px; border-top-right-radius: 0px;\n  // .rounded-t-4\tborder-radius: 4px;\n  rounded: (params, context, id) =>\n    corners(\n      context.theme('borderRadius', tail(params), '' /* Optional */),\n      params[0],\n      'border',\n      'radius',\n    ) || themeProperty('borderRadius')(params, context, id),\n\n  'transition-none': { transitionProperty: 'none' },\n\n  transition: (params, { theme }) => ({\n    transitionProperty: theme('transitionProperty', params),\n    transitionTimingFunction: theme('transitionTimingFunction', ''),\n    transitionDuration: theme('transitionDuration', ''),\n  }),\n\n  container: (params, { theme }) => {\n    const { screens = theme('screens'), center, padding } = theme('container') as ThemeContainer\n\n    const paddingFor = (screen: string): CSSRules =>\n      (_ = padding && (typeof padding == 'string' ? padding : padding[screen] || padding.DEFAULT))\n        ? {\n            paddingRight: _,\n            paddingLeft: _,\n          }\n        : {}\n\n    return Object.keys(screens).reduce(\n      (rules, screen) => {\n        if (($ = screens[screen]) && typeof $ == 'string') {\n          rules[buildMediaQuery($)] = {\n            '&': {\n              'max-width': $,\n              ...paddingFor(screen),\n            },\n          }\n        }\n\n        return rules\n      },\n      {\n        width: '100%',\n        ...(center ? { marginRight: 'auto', marginLeft: 'auto' } : {}),\n        ...paddingFor('xs'),\n      } as CSSRules,\n    )\n  },\n\n  filter,\n  blur: filter,\n  brightness: filter,\n  contrast: filter,\n  grayscale: filter,\n  'hue-rotate': filter,\n  invert: filter,\n  saturate: filter,\n  sepia: filter,\n  'drop-shadow': filter,\n  backdrop: filter,\n}\n\n/* eslint-enable no-return-assign, no-cond-assign, @typescript-eslint/consistent-type-assertions */\n", "// Source: https://github.com/sindresorhus/modern-normalize/blob/master/modern-normalize.css\n// License: MIT\n\n// Source: https://github.com/tailwindlabs/tailwindcss/blob/master/src/plugins/css/preflight.css\n// License: MIT\n\nimport type { CSSRules, ThemeResolver } from '../types'\n\n/**\n * Manually forked from SUIT CSS Base: https://github.com/suitcss/base\n * A thin layer on top of normalize.css that provides a starting point more\n * suitable for web applications.\n */\nexport const createPreflight = (theme: ThemeResolver): CSSRules => ({\n  /**\n   * Use a more readable tab size (opinionated).\n   */\n  ':root': { tabSize: 4 },\n\n  /**\n   * Removes the default spacing and border for appropriate elements.\n   */\n  'body,blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre,fieldset,ol,ul': { margin: '0' },\n\n  button: { backgroundColor: 'transparent', backgroundImage: 'none' },\n\n  /**\n   * Correct the inability to style clickable types in iOS and Safari.\n   */\n  'button,[type=\"button\"],[type=\"reset\"],[type=\"submit\"]': { WebkitAppearance: 'button' },\n\n  /**\n   * Work around a Firefox/IE bug where the transparent `button` background\n   * results in a loss of the default `button` focus styles.\n   */\n  'button:focus': { outline: ['1px dotted', '5px auto -webkit-focus-ring-color'] },\n\n  /**\n   * Remove the padding so developers are not caught out when they zero out 'fieldset' elements in all browsers.\n   */\n  'fieldset,ol,ul,legend': { padding: '0' },\n\n  'ol,ul': { listStyle: 'none' },\n\n  /**\n   * 1. Use Tailwind's default \"normal\" line-height so the user isn't forced\n   *    to override it to ensure consistency even when using the default theme.\n   * 2. Prevent adjustments of font size after orientation changes in iOS.\n   * 3. Use the user's configured `sans` font-family (with Tailwind's default\n   *    sans-serif font stack as a fallback) as a sane default.\n   */\n  html: {\n    lineHeight: '1.5',\n    WebkitTextSizeAdjust: '100%',\n    fontFamily: theme('fontFamily.sans', 'ui-sans-serif,system-ui,sans-serif'),\n  },\n\n  /**\n   * 1. Remove the margin in all browsers.\n   * 2. Inherit font-family and line-height from `html` so users can set them as\n   * a class directly on the `html` element.\n   */\n  body: { fontFamily: 'inherit', lineHeight: 'inherit' },\n\n  /**\n   * 1. Prevent padding and border from affecting element width.\n   *\n   *    We used to set this in the html element and inherit from\n   *    the parent element for everything else. This caused issues\n   *    in shadow-dom-enhanced elements like <details> where the content\n   *    is wrapped by a div with box-sizing set to `content-box`.\n   *\n   *    https://github.com/mozdevs/cssremedy/issues/4\n   *\n   *\n   * 2. Allow adding a border to an element by just adding a border-width.\n   *\n   *    By default, the way the browser specifies that an element should have no\n   *    border is by setting it's border-style to `none` in the user-agent\n   *    stylesheet.\n   *\n   *    In order to easily add borders to elements by just setting the `border-width`\n   *    property, we change the default border-style for all elements to `solid`, and\n   *    use border-width to hide them instead. This way our `border` utilities only\n   *    need to set the `border-width` property instead of the entire `border`\n   *    shorthand, making our border utilities much more straightforward to compose.\n   *\n   *    https://github.com/tailwindcss/tailwindcss/pull/116\n   */\n  '*,::before,::after': {\n    boxSizing: 'border-box',\n    border: `0 solid ${theme('borderColor.DEFAULT', 'currentColor')}`,\n  },\n\n  /*\n   * 1. Add the correct height in Firefox.\n   * 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n   * 3. Ensure horizontal rules are visible by default\n   */\n  hr: { height: '0', color: 'inherit', borderTopWidth: '1px' },\n\n  /**\n   * Undo the `border-style: none` reset that Normalize applies to images so that\n   * our `border-<width>` utilities have the expected effect.\n   *\n   * The Normalize reset is unnecessary for us since we default the border-width\n   * to 0 on all elements.\n   *\n   * https://github.com/tailwindcss/tailwindcss/issues/362\n   */\n  img: { borderStyle: 'solid' },\n\n  textarea: { resize: 'vertical' },\n\n  'input::placeholder,textarea::placeholder': {\n    opacity: '1',\n    color: theme('placeholderColor.DEFAULT', theme('colors.gray.400', '#a1a1aa')),\n  },\n\n  'button,[role=\"button\"]': { cursor: 'pointer' },\n\n  /**\n   * 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n   * 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n   */\n  table: { textIndent: '0', borderColor: 'inherit', borderCollapse: 'collapse' },\n\n  'h1,h2,h3,h4,h5,h6': { fontSize: 'inherit', fontWeight: 'inherit' },\n\n  /**\n   * Reset links to optimize for opt-in styling instead of\n   * opt-out.\n   */\n  a: { color: 'inherit', textDecoration: 'inherit' },\n\n  /**\n   * 1. Change the font styles in all browsers.\n   * 2. Remove the margin in Firefox and Safari.\n   * Reset form element properties that are easy to forget to\n   * style explicitly so you don't inadvertently introduce\n   * styles that deviate from your design system. These styles\n   * supplement a partial reset that is already applied by\n   * normalize.css.\n   */\n  'button,input,optgroup,select,textarea': {\n    fontFamily: 'inherit',\n    fontSize: '100%',\n    margin: '0',\n    padding: '0',\n    lineHeight: 'inherit',\n    color: 'inherit',\n  },\n\n  /**\n   * Remove the inheritance of text transform in Edge and Firefox.\n   * 1. Remove the inheritance of text transform in Firefox.\n   */\n  'button,select': { textTransform: 'none' },\n\n  /**\n   * Remove the inner border and padding in Firefox.\n   */\n  '::-moz-focus-inner': { borderStyle: 'none', padding: '0' },\n\n  /**\n   * Restore the focus styles unset by the previous rule.\n   */\n  ':-moz-focusring': { outline: '1px dotted ButtonText' },\n\n  /**\n   * Remove the additional ':invalid' styles in Firefox.\n   * See: https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737\n   */\n  ':-moz-ui-invalid': { boxShadow: 'none' },\n\n  /**\n   * Add the correct vertical alignment in Chrome and Firefox.\n   */\n  progress: { verticalAlign: 'baseline' },\n\n  /**\n   * Correct the cursor style of increment and decrement buttons in Safari.\n   */\n  '::-webkit-inner-spin-button,::-webkit-outer-spin-button': { height: 'auto' },\n\n  /**\n   * 1. Correct the odd appearance in Chrome and Safari.\n   * 2. Correct the outline style in Safari.\n   */\n  '[type=\"search\"]': { WebkitAppearance: 'textfield', outlineOffset: '-2px' },\n\n  /**\n   * Remove the inner padding in Chrome and Safari on macOS.\n   */\n  '::-webkit-search-decoration': { WebkitAppearance: 'none' },\n\n  /**\n   * 1. Correct the inability to style clickable types in iOS and Safari.\n   * 2. Change font properties to 'inherit' in Safari.\n   */\n  '::-webkit-file-upload-button': { WebkitAppearance: 'button', font: 'inherit' },\n\n  /*\n   * Add the correct display in Chrome and Safari.\n   */\n  summary: { display: 'list-item' },\n\n  /**\n   * Add the correct text decoration in Chrome, Edge, and Safari.\n   */\n  'abbr[title]': { textDecoration: 'underline dotted' },\n\n  /**\n   * Add the correct font weight in Edge and Safari.\n   */\n  'b,strong': { fontWeight: 'bolder' },\n\n  /**\n   * 1. Use the configured 'mono' font family for elements that\n   * are expected to be rendered with a monospace font, falling\n   * back to the system monospace stack if there is no configured\n   * 'mono' font family.\n   * 2. Correct the odd 'em' font sizing in all browsers.\n   */\n  'pre,code,kbd,samp': {\n    fontFamily: theme('fontFamily', 'mono', 'ui-monospace,monospace'),\n    fontSize: '1em',\n  },\n\n  /**\n   * Prevent 'sub' and 'sup' elements from affecting the line height in all browsers.\n   */\n  'sub,sup': { fontSize: '75%', lineHeight: '0', position: 'relative', verticalAlign: 'baseline' },\n\n  sub: { bottom: '-0.25em' },\n\n  sup: { top: '-0.5em' },\n\n  /**\n   * Make replaced elements `display: block` by default as that's\n   * the behavior you want almost all of the time. Inspired by\n   * CSS Remedy, with `svg` added as well.\n   *\n   * https://github.com/mozdevs/cssremedy/issues/14\n   */\n  'img,svg,video,canvas,audio,iframe,embed,object': { display: 'block', verticalAlign: 'middle' },\n\n  /**\n   * Constrain images and videos to the parent width and preserve\n   * their instrinsic aspect ratio.\n   *\n   * https://github.com/mozdevs/cssremedy/issues/14\n   */\n  'img,video': { maxWidth: '100%', height: 'auto' },\n})\n", "export const coreVariants: Record<string, string> = {\n  dark: '@media (prefers-color-scheme:dark)',\n  sticky: '@supports ((position: -webkit-sticky) or (position:sticky))',\n  'motion-reduce': '@media (prefers-reduced-motion:reduce)',\n  'motion-safe': '@media (prefers-reduced-motion:no-preference)',\n  first: '&:first-child',\n  last: '&:last-child',\n  even: '&:nth-child(2n)',\n  odd: '&:nth-child(odd)',\n  children: '&>*',\n  siblings: '&~*',\n  sibling: '&+*',\n  override: '&&',\n}\n", "export const STYLE_ELEMENT_ID = '__twind' as const\n\ndeclare global {\n  interface Window {\n    [STYLE_ELEMENT_ID]?: HTMLStyleElement\n  }\n}\n\nexport const getStyleElement = (nonce?: string): HTMLStyleElement => {\n  // Hydrate existing style element if available\n  // self[id] - every element with an id is available through the global object\n  // eslint-disable-next-line no-restricted-globals\n  let element = self[STYLE_ELEMENT_ID]\n\n  if (!element) {\n    // Create a new one otherwise\n    element = document.head.appendChild(document.createElement('style'))\n\n    element.id = STYLE_ELEMENT_ID\n    nonce && (element.nonce = nonce)\n\n    // Avoid Edge bug where empty style elements doesn't create sheets\n    element.appendChild(document.createTextNode(''))\n  }\n\n  return element\n}\n", "// Based on https://github.com/kripod/otion/blob/main/packages/otion/src/injectors.ts\n// License MIT\nimport type { SheetConfig, Sheet } from '../types'\nimport { noop } from '../internal/util'\nimport { getStyleElement } from '../internal/dom'\n\n/**\n * Creates an sheet which inserts style rules through the CSS Object Model.\n */\nexport const cssomSheet = ({\n  nonce,\n  target = getStyleElement(nonce).sheet as CSSStyleSheet,\n}: SheetConfig<CSSStyleSheet> = {}): Sheet<CSSStyleSheet> => {\n  const offset = target.cssRules.length\n\n  return {\n    target,\n    insert: (rule, index) => target.insertRule(rule, offset + index),\n  }\n}\n\n/**\n * An sheet placeholder which performs no operations. Useful for avoiding errors in a non-browser environment.\n */\nexport const voidSheet = (): Sheet<null> => ({\n  target: null,\n  insert: noop,\n})\n", "import type { Mode } from '../types'\n\nimport { join, noop } from '../internal/util'\n\nexport const mode = (report: (message: string) => void): Mode => ({\n  unknown(section, key = [], optional, context) {\n    if (!optional) {\n      // TODO hint about possible values, did you mean ...\n      this.report({ id: 'UNKNOWN_THEME_VALUE', key: section + '.' + join(key) }, context)\n    }\n  },\n\n  report({ id, ...info }) {\n    return report(`[${id}] ${JSON.stringify(info)}`)\n  },\n})\n\nexport const warn = /*#__PURE__*/ mode((message) => console.warn(message))\n\nexport const strict = /*#__PURE__*/ mode((message) => {\n  throw new Error(message)\n})\n\nexport const silent = /*#__PURE__*/ mode(noop)\n", "import type { Prefixer } from '../types'\n\nimport { cssPropertyAlias, cssPropertyPrefixFlags, cssValuePrefixFlags } from 'style-vendorizer'\n\nexport const noprefix: Prefixer = (property: string, value: string, important?: boolean): string =>\n  `${property}:${value}${important ? ' !important' : ''}`\n\nexport const autoprefix: Prefixer = (\n  property: string,\n  value: string,\n  important?: boolean,\n): string => {\n  let cssText = ''\n\n  // Resolve aliases, e.g. `gap` -> `grid-gap`\n  const propertyAlias = cssPropertyAlias(property)\n  if (propertyAlias) cssText += `${noprefix(propertyAlias, value, important)};`\n\n  // Prefix properties, e.g. `backdrop-filter` -> `-webkit-backdrop-filter`\n  let flags = cssPropertyPrefixFlags(property)\n  if (flags & 0b001) cssText += `-webkit-${noprefix(property, value, important)};`\n  if (flags & 0b010) cssText += `-moz-${noprefix(property, value, important)};`\n  if (flags & 0b100) cssText += `-ms-${noprefix(property, value, important)};`\n\n  // Prefix values, e.g. `position: \"sticky\"` -> `position: \"-webkit-sticky\"`\n  // Notice that flags don't overlap and property prefixing isn't needed here\n  flags = cssValuePrefixFlags(property, value)\n  if (flags & 0b001) cssText += `${noprefix(property, `-webkit-${value}`, important)};`\n  if (flags & 0b010) cssText += `${noprefix(property, `-moz-${value}`, important)};`\n  if (flags & 0b100) cssText += `${noprefix(property, `-ms-${value}`, important)};`\n\n  /* Include the standardized declaration last */\n  /* https://css-tricks.com/ordering-css3-properties/ */\n  cssText += noprefix(property, value, important)\n\n  return cssText\n}\n", "import type {\n  Theme,\n  ThemeColor,\n  ThemeConfiguration,\n  ThemeResolver,\n  ThemeSectionType,\n  ThemeSectionResolver,\n  ThemeSectionResolverContext,\n  ThemeHelper,\n  Context,\n} from '../types'\n\nimport { join, tail, includes } from '../internal/util'\nimport { directive } from './directive'\n\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%',\nconst ratios = (start: number, end: number): Record<string, string> => {\n  const result: Record<string, string> = {}\n\n  do {\n    for (let dividend = 1; dividend < start; dividend++) {\n      // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n      result[`${dividend}/${start}`] = Number(((dividend / start) * 100).toFixed(6)) + '%'\n    }\n  } while (++start <= end)\n\n  return result\n}\n\n// 0: '0px',\n// 2: '2px',\n// 4: '4px',\n// 8: '8px',\nconst exponential = (stop: number, unit: string, start = 0): Record<string, string> => {\n  const result: Record<string, string> = {}\n\n  for (; start <= stop; start = start * 2 || 1) {\n    // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n    result[start] = start + unit\n  }\n\n  return result\n}\n\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',\nconst linear = (\n  stop: number,\n  unit = '',\n  divideBy = 1,\n  start = 0,\n  step = 1,\n  result: Record<string, string> = {},\n  // eslint-disable-next-line max-params\n): Record<string, string> => {\n  for (; start <= stop; start += step) {\n    // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n    result[start] = start / divideBy + unit\n  }\n\n  return result\n}\n\nconst alias = <Section extends keyof Theme>(\n  section: Section,\n): ThemeSectionResolver<ThemeSectionType<Theme[Section]>> => (theme) => theme(section)\n\nconst themeFactory = (args: Parameters<ThemeResolver>, { theme }: Context) => theme(...args)\n\nexport const theme = ((...args: Parameters<ThemeResolver>): ReturnType<ThemeHelper> =>\n  directive(themeFactory, args)) as ThemeHelper\n\nconst defaultTheme: Partial<Theme> = /*#__PURE__*/ {\n  screens: {\n    sm: '640px',\n    md: '768px',\n    lg: '1024px',\n    xl: '1280px',\n    '2xl': '1536px',\n  },\n  colors: {\n    transparent: 'transparent',\n    current: 'currentColor',\n\n    // black: colors.black,\n    black: '#000',\n\n    // white: colors.white,\n    white: '#fff',\n\n    // gray: colors.coolGray,\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    },\n\n    // red: colors.red,\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    },\n\n    // yellow: colors.amber,\n    yellow: {\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    },\n\n    // green: colors.emerald,\n    green: {\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    },\n\n    // blue: colors.blue,\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    },\n\n    // indigo: colors.indigo,\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    },\n\n    // purple: colors.violet,\n    purple: {\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    },\n\n    // pink: colors.pink,\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    },\n  },\n\n  spacing: {\n    px: '1px',\n    0: '0px',\n    .../*#__PURE__*/ linear(4, 'rem', 4, 0.5, 0.5),\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    .../*#__PURE__*/ linear(12, 'rem', 4, 5),\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    .../*#__PURE__*/ linear(64, 'rem', 4, 16, 4),\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\n  durations: {\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\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\n  backdropBlur: /*#__PURE__*/ alias('blur'),\n  backdropBrightness: /*#__PURE__*/ alias('brightness'),\n  backdropContrast: /*#__PURE__*/ alias('contrast'),\n  backdropGrayscale: /*#__PURE__*/ alias('grayscale'),\n  backdropHueRotate: /*#__PURE__*/ alias('hueRotate'),\n  backdropInvert: /*#__PURE__*/ alias('invert'),\n  backdropOpacity: /*#__PURE__*/ alias('opacity'),\n  backdropSaturate: /*#__PURE__*/ alias('saturate'),\n  backdropSepia: /*#__PURE__*/ alias('sepia'),\n\n  backgroundColor: /*#__PURE__*/ alias('colors'),\n  backgroundImage: {\n    none: 'none',\n    // These are built-in\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: /*#__PURE__*/ alias('opacity'),\n  // backgroundPosition: {\n  //   // The following are already handled by the plugin:\n  //   // center, right, left, bottom, top\n  //   // 'bottom-10px-right-20px' -> bottom 10px right 20px\n  // },\n  backgroundSize: {\n    auto: 'auto',\n    cover: 'cover',\n    contain: 'contain',\n  },\n  blur: {\n    0: '0',\n    sm: '4px',\n    DEFAULT: '8px',\n    md: '12px',\n    lg: '16px',\n    xl: '24px',\n    '2xl': '40px',\n    '3xl': '64px',\n  },\n  brightness: {\n    .../*#__PURE__*/ linear(200, '', 100, 0, 50),\n    // 0: '0',\n    // 50: '.5',\n    // 150: '1.5',\n    // 200: '2',\n\n    .../*#__PURE__*/ linear(110, '', 100, 90, 5),\n    // 90: '.9',\n    // 95: '.95',\n    // 100: '1',\n    // 105: '1.05',\n    // 110: '1.1',\n    75: '0.75',\n    125: '1.25',\n  },\n  borderColor: (theme) => ({\n    ...theme('colors'),\n    DEFAULT: theme('colors.gray.200', 'currentColor'),\n  }),\n  borderOpacity: /*#__PURE__*/ alias('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    '1/2': '50%',\n    full: '9999px',\n  },\n  borderWidth: {\n    DEFAULT: '1px',\n    .../*#__PURE__*/ exponential(8, 'px'),\n    // 0: '0px',\n    // 2: '2px',\n    // 4: '4px',\n    // 8: '8px',\n  },\n  boxShadow: {\n    sm: '0 1px 2px 0 rgba(0,0,0,0.05)',\n    DEFAULT: '0 1px 3px 0 rgba(0,0,0,0.1), 0 1px 2px 0 rgba(0,0,0,0.06)',\n    md: '0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -1px rgba(0,0,0,0.06)',\n    lg: '0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -2px rgba(0,0,0,0.05)',\n    xl: '0 20px 25px -5px rgba(0,0,0,0.1), 0 10px 10px -5px rgba(0,0,0,0.04)',\n    '2xl': '0 25px 50px -12px rgba(0,0,0,0.25)',\n    inner: 'inset 0 2px 4px 0 rgba(0,0,0,0.06)',\n    none: 'none',\n  },\n  // container: {},\n  // cursor: {\n  //   // Default values are handled by plugin\n  // },\n  contrast: {\n    .../*#__PURE__*/ linear(200, '', 100, 0, 50),\n    // 0: '0',\n    // 50: '.5',\n    // 150: '1.5',\n    // 200: '2',\n    75: '0.75',\n    125: '1.25',\n  },\n  divideColor: /*#__PURE__*/ alias('borderColor'),\n  divideOpacity: /*#__PURE__*/ alias('borderOpacity'),\n  divideWidth: /*#__PURE__*/ alias('borderWidth'),\n  dropShadow: {\n    sm: '0 1px 1px rgba(0,0,0,0.05)',\n    DEFAULT: ['0 1px 2px rgba(0,0,0,0.1)', '0 1px 1px rgba(0,0,0,0.06)'],\n    md: ['0 4px 3px rgba(0,0,0,0.07)', '0 2px 2px rgba(0,0,0,0.06)'],\n    lg: ['0 10px 8px rgba(0,0,0,0.04)', '0 4px 3px rgba(0,0,0,0.1)'],\n    xl: ['0 20px 13px rgba(0,0,0,0.03)', '0 8px 5px rgba(0,0,0,0.08)'],\n    '2xl': '0 25px 25px rgba(0,0,0,0.15)',\n    none: '0 0 #0000',\n  },\n  fill: { current: 'currentColor' },\n  grayscale: {\n    0: '0',\n    DEFAULT: '100%',\n  },\n  hueRotate: {\n    0: '0deg',\n    15: '15deg',\n    30: '30deg',\n    60: '60deg',\n    90: '90deg',\n    180: '180deg',\n  },\n  invert: {\n    0: '0',\n    DEFAULT: '100%',\n  },\n  flex: {\n    1: '1 1 0%',\n    auto: '1 1 auto',\n    initial: '0 1 auto',\n    none: 'none',\n  },\n  // flexGrow: {\n  //   // Handled by plugin\n  // },\n  // flexShrink: {\n  //   // Handled by plugin\n  // },\n  fontFamily: {\n    sans: 'ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\"'.split(\n      ',',\n    ),\n    serif: 'ui-serif,Georgia,Cambria,\"Times New Roman\",Times,serif'.split(','),\n    mono: 'ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace'.split(\n      ',',\n    ),\n  },\n  fontSize: {\n    xs: ['0.75rem', '1rem'],\n    sm: ['0.875rem', '1.25rem'],\n    base: ['1rem', '1.5rem'],\n    lg: ['1.125rem', '1.75rem'],\n    xl: ['1.25rem', '1.75rem'],\n    '2xl': ['1.5rem', '2rem'],\n    '3xl': ['1.875rem', '2.25rem'],\n    '4xl': ['2.25rem', '2.5rem'],\n    '5xl': ['3rem', '1'],\n    '6xl': ['3.75rem', '1'],\n    '7xl': ['4.5rem', '1'],\n    '8xl': ['6rem', '1'],\n    '9xl': ['8rem', '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  gridTemplateColumns: {\n    // numbers are handled by the plugin: 1 -> repeat(1, minmax(0, 1fr))\n    // none: 'none', // handled by plugin\n  },\n  gridTemplateRows: {\n    // numbers are handled by the plugin: 1 -> repeat(1, minmax(0, 1fr))\n    // none: 'none', // handled by plugin\n  },\n  gridAutoColumns: {\n    // auto: 'auto', // handled by plugin\n    min: 'min-content',\n    max: 'max-content',\n    fr: 'minmax(0,1fr)',\n  },\n  gridAutoRows: {\n    // auto: 'auto', handled by plugin\n    min: 'min-content',\n    max: 'max-content',\n    fr: 'minmax(0,1fr)',\n  },\n  // gridColumnStart: {\n  //   // Defaults handled by plugin\n  // },\n  // gridRowStart: {\n  //   // Defaults handled by plugin\n  // },\n  // gridColumnEnd: {\n  //   // Defaults handled by plugin\n  // },\n  // gridRowEnd: {\n  //   // Defaults handled by plugin\n  // },\n  gridColumn: {\n    // span-X is handled by the plugin: span-1 -> span 1 / span 1\n    auto: 'auto',\n    'span-full': '1 / -1',\n  },\n  gridRow: {\n    // span-X is handled by the plugin: span-1 -> span 1 / span 1\n    auto: 'auto',\n    'span-full': '1 / -1',\n  },\n  gap: /*#__PURE__*/ alias('spacing'),\n  gradientColorStops: /*#__PURE__*/ alias('colors'),\n  height: (theme) => ({\n    auto: 'auto',\n    ...theme('spacing'),\n    ...ratios(2, 6),\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  }),\n  inset: (theme) => ({\n    auto: 'auto',\n    ...theme('spacing'),\n    ...ratios(2, 4),\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  keyframes: {\n    spin: {\n      from: {\n        transform: 'rotate(0deg)',\n      },\n      to: {\n        transform: 'rotate(360deg)',\n      },\n    },\n    ping: {\n      '0%': {\n        transform: 'scale(1)',\n        opacity: '1',\n      },\n      '75%,100%': {\n        transform: 'scale(2)',\n        opacity: '0',\n      },\n    },\n    pulse: {\n      '0%,100%': {\n        opacity: '1',\n      },\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    .../*#__PURE__*/ linear(10, 'rem', 4, 3),\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  //   // Defaults handled by plugin\n  // },\n  margin: (theme) => ({\n    auto: 'auto',\n    ...theme('spacing'),\n  }),\n  maxHeight: (theme) => ({\n    ...theme('spacing'),\n    full: '100%',\n    screen: '100vh',\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    prose: '65ch',\n    ...breakpoints(theme('screens')),\n  }),\n  minHeight: {\n    0: '0px',\n    full: '100%',\n    screen: '100vh',\n  },\n  minWidth: {\n    0: '0px',\n    full: '100%',\n    min: 'min-content',\n    max: 'max-content',\n  },\n  // objectPosition: {\n  //   // The plugins joins all arguments by default\n  // },\n  opacity: {\n    .../*#__PURE__*/ linear(100, '', 100, 0, 10),\n    // 0: '0',\n    // 10: '0.1',\n    // 20: '0.2',\n    // 30: '0.3',\n    // 40: '0.4',\n    // 60: '0.6',\n    // 70: '0.7',\n    // 80: '0.8',\n    // 90: '0.9',\n    // 100: '1',\n    5: '0.05',\n    25: '0.25',\n    75: '0.75',\n    95: '0.95',\n  },\n  order: {\n    first: '-9999',\n    last: '9999',\n    none: '0',\n    .../*#__PURE__*/ linear(12, '', 1, 1),\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  outline: {\n    none: ['2px solid transparent', '2px'],\n    white: ['2px dotted white', '2px'],\n    black: ['2px dotted black', '2px'],\n  },\n  padding: /*#__PURE__*/ alias('spacing'),\n  placeholderColor: /*#__PURE__*/ alias('colors'),\n  placeholderOpacity: /*#__PURE__*/ alias('opacity'),\n  ringColor: (theme) => ({\n    DEFAULT: theme('colors.blue.500', '#3b82f6'),\n    ...theme('colors'),\n  }),\n  ringOffsetColor: /*#__PURE__*/ alias('colors'),\n  ringOffsetWidth: /*#__PURE__*/ exponential(8, 'px'),\n  // 0: '0px',\n  // 1: '1px',\n  // 2: '2px',\n  // 4: '4px',\n  // 8: '8px',,\n  ringOpacity: (theme) => ({\n    DEFAULT: '0.5',\n    ...theme('opacity'),\n  }),\n  ringWidth: {\n    DEFAULT: '3px',\n    .../*#__PURE__*/ exponential(8, 'px'),\n    // 0: '0px',\n    // 1: '1px',\n    // 2: '2px',\n    // 4: '4px',\n    // 8: '8px',\n  },\n  rotate: {\n    .../*#__PURE__*/ exponential(2, 'deg'),\n    // 0: '0deg',\n    // 1: '1deg',\n    // 2: '2deg',\n    .../*#__PURE__*/ exponential(12, 'deg', 3),\n    // 3: '3deg',\n    // 6: '6deg',\n    // 12: '12deg',\n    .../*#__PURE__*/ exponential(180, 'deg', 45),\n    // 45: '45deg',\n    // 90: '90deg',\n    // 180: '180deg',\n  },\n  saturate: /*#__PURE__*/ linear(200, '', 100, 0, 50),\n  // 0: '0',\n  // 50: '.5',\n  // 100: '1',\n  // 150: '1.5',\n  // 200: '2',\n  scale: {\n    .../*#__PURE__*/ linear(150, '', 100, 0, 50),\n    // 0: '0',\n    // 50: '.5',\n    // 150: '1.5',\n    .../*#__PURE__*/ linear(110, '', 100, 90, 5),\n    // 90: '.9',\n    // 95: '.95',\n    // 100: '1',\n    // 105: '1.05',\n    // 110: '1.1',\n    75: '0.75',\n    125: '1.25',\n  },\n  sepia: {\n    0: '0',\n    DEFAULT: '100%',\n  },\n  skew: {\n    .../*#__PURE__*/ exponential(2, 'deg'),\n    // 0: '0deg',\n    // 1: '1deg',\n    // 2: '2deg',\n    .../*#__PURE__*/ exponential(12, 'deg', 3),\n    // 3: '3deg',\n    // 6: '6deg',\n    // 12: '12deg',\n  },\n  space: /*#__PURE__*/ alias('spacing'),\n  stroke: {\n    current: 'currentColor',\n  },\n  strokeWidth: /*#__PURE__*/ linear(2),\n  // 0: '0',\n  // 1: '1',\n  // 2: '2',,\n  textColor: /*#__PURE__*/ alias('colors'),\n  textOpacity: /*#__PURE__*/ alias('opacity'),\n  // transformOrigin: {\n  //   // The following are already handled by the plugin:\n  //   // center, right, left, bottom, top\n  //   // 'bottom-10px-right-20px' -> bottom 10px right 20px\n  // },\n  transitionDuration: (theme) => ({\n    DEFAULT: '150ms',\n    ...theme('durations'),\n  }),\n  transitionDelay: /*#__PURE__*/ alias('durations'),\n  transitionProperty: {\n    none: 'none',\n    all: 'all',\n    DEFAULT:\n      'background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter',\n    colors: 'background-color,border-color,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    ...ratios(2, 4),\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    ...ratios(2, 6),\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\n    ...ratios(12, 12),\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\n    screen: '100vw',\n    full: '100%',\n    min: 'min-content',\n    max: 'max-content',\n  }),\n  zIndex: {\n    auto: 'auto',\n    .../*#__PURE__*/ linear(50, '', 1, 0, 10),\n    // 0: '0',\n    // 10: '10',\n    // 20: '20',\n    // 30: '30',\n    // 40: '40',\n    // 50: '50',\n  },\n}\n\n// https://github.com/tailwindlabs/tailwindcss/blob/master/src/util/flattenColorPalette.js\nconst flattenColorPalette = (\n  colors: Record<string, ThemeColor>,\n  target: Record<string, ThemeColor> = {},\n  prefix: string[] = [],\n): Record<string, ThemeColor> => {\n  Object.keys(colors).forEach((property) => {\n    const value = colors[property]\n\n    if (property == 'DEFAULT') {\n      target[join(prefix)] = value\n      target[join(prefix, '.')] = value\n    }\n\n    const key = [...prefix, property]\n    target[join(key)] = value\n    target[join(key, '.')] = value\n\n    if (value && typeof value == 'object') {\n      flattenColorPalette(value, target, key)\n    }\n  }, target)\n\n  return target\n}\n\nconst resolveContext: ThemeSectionResolverContext = {\n  // ?negative: (source) =>\n  //   Object.keys(source).reduce(\n  //     (target, key) => {\n  //       if (source[key]) target['-' + key] = '-' + (source[key] as string)\n\n  //       return target\n  //     },\n  //     { ...source },\n  //   ),\n  // Stub implementation as negated values are automatically infered and do _not_ not to be in the theme\n  negative: () => ({}),\n\n  breakpoints: (screens) =>\n    Object.keys(screens)\n      .filter((key) => typeof screens[key] == 'string')\n      .reduce((target, key) => {\n        target['screen-' + key] = screens[key] as string\n\n        return target\n      }, {} as Record<string, string | undefined>),\n}\n\nconst handleArbitraryValues = (section: keyof Theme, key: string): string | false =>\n  (key = (key[0] == '[' && key.slice(-1) == ']' && key.slice(1, -1)) as string) &&\n  includes(section, 'olor') == /^(#|(hsl|rgb)a?\\(|[a-z]+$)/.test(key) &&\n  (includes(key, 'calc(')\n    ? key.replace(/(-?\\d*\\.?\\d(?!\\b-.+[,)](?![^+\\-/*])\\D)(?:%|[a-z]+)?|\\))([+\\-/*])/g, '$1 $2 ')\n    : key)\n\nexport const makeThemeResolver = (config?: ThemeConfiguration): ThemeResolver => {\n  const cache = new Map<keyof Theme, Record<string, unknown>>()\n\n  const theme = { ...defaultTheme, ...config }\n\n  const deref = (\n    theme: undefined | Partial<Theme>,\n    section: keyof Theme,\n  ): Record<string, unknown> | undefined => {\n    const base = theme && theme[section]\n\n    const value = typeof base == 'function' ? base(resolve, resolveContext) : base\n\n    return value && section == 'colors'\n      ? flattenColorPalette(value as Record<string, ThemeColor>)\n      : (value as Record<string, unknown>)\n  }\n\n  const resolve = ((section: keyof Theme, key: unknown, defaultValue: unknown): unknown => {\n    const keypath = section.split('.')\n    section = keypath[0] as keyof Theme\n\n    // theme('colors.gray.500', maybeDefault)\n    if (keypath.length > 1) {\n      defaultValue = key\n      key = join(tail(keypath), '.')\n    }\n    // else: theme('colors', 'gray.500', maybeDefault)\n\n    let base = cache.get(section)\n\n    if (!base) {\n      // Stacked resolution to allow referencing the same section from core theme with extend\n      cache.set(section, (base = { ...deref(theme, section) }))\n\n      Object.assign(base, deref(theme.extend, section))\n    }\n\n    if (key != null) {\n      key = (Array.isArray(key) ? join(key) : (key as string)) || 'DEFAULT'\n\n      const value: unknown = handleArbitraryValues(section, key as string) || base[key as string]\n\n      return value == null\n        ? defaultValue\n        : Array.isArray(value) &&\n          // https://github.com/tailwindlabs/tailwindcss/blob/master/src/util/transformThemeValue.js\n          // only testing for sections that uses an array for values\n          !includes(['fontSize', 'outline', 'dropShadow'], section)\n        ? join(value, ',')\n        : value\n    }\n\n    return base\n  }) as ThemeResolver\n\n  return resolve\n}\n", "import type {\n  Context,\n  CSSRules,\n  Plugin,\n  Rule,\n  Falsy,\n  InlineDirective,\n  TypescriptCompat,\n} from '../types'\n\nimport { join, tail } from '../internal/util'\n\nexport const translate = (\n  plugins: Record<string, Plugin | undefined>,\n  context: Context,\n): ((\n  rule: Rule,\n  isTranslating?: boolean,\n) => InlineDirective | CSSRules | string | Falsy | TypescriptCompat) => (rule, isTranslating) => {\n  // If this is a inline directive - called it right away\n  if (typeof rule.d == 'function') {\n    return rule.d(context)\n  }\n\n  const parameters = rule.d.split(/-(?![^[]*])/g)\n\n  // Bail early for already hashed class names\n  // Only if there are no variants and no negation\n  // If there are variants or negation unknown directive will be reported\n  if (!isTranslating && parameters[0] == 'tw' && rule.$ == rule.d) {\n    return rule.$\n  }\n\n  // Try to find a plugin to handle this directive\n  // example 'bg-gradient-to-r'\n  // 1. 'bg-gradient-to-r' -> parameters=['bg-gradient-to-r']\n  // 2. 'bg-gradient-to'   -> parameters=['bg-gradient-to', 'r']\n  // 4. 'bg-gradient'      -> parameters=['bg-gradient', 'to', 'r']\n  // 5. 'bg'               -> parameters=['bg', 'gradient', 'to', 'r']\n  for (let index = parameters.length; index; index--) {\n    const id = join(parameters.slice(0, index))\n\n    if (Object.prototype.hasOwnProperty.call(plugins, id)) {\n      const plugin = plugins[id]\n      return typeof plugin == 'function'\n        ? plugin(tail(parameters, index), context, id)\n        : typeof plugin == 'string'\n        ? context[isTranslating ? 'css' : 'tw'](plugin)\n        : plugin\n    }\n  }\n}\n", "import type { Context, CSSRules, Rule, DarkMode, ThemeScreenValue } from '../types'\n\nimport { tail, escape, buildMediaQuery } from '../internal/util'\n\nlet _: RegExpExecArray | null | readonly ThemeScreenValue[] | string\n\nexport const GROUP_RE = /^:(group(?:(?!-focus).+?)*)-(.+)$/\nexport const NOT_PREFIX_RE = /^(:not)-(.+)/\n\nexport const prepareVariantSelector = (variant: string): string =>\n  variant[1] == '[' ? tail(variant) : variant\n\n// Wraps a CSS rule object with variant at-rules and pseudo classes\n// { '.selector': {...} }\n// => { '&:hover': { '.selector': {...} } }\n// => { '@media (min-width: ...)': { '&:hover': { '.selector': {...} } } }\nexport const decorate = (\n  darkMode: DarkMode,\n  variants: Record<string, string>,\n  { theme, tag }: Context,\n): ((translation: CSSRules, rule: Rule) => CSSRules) => {\n  // Select the wrapper for a variant\n  const applyVariant = (translation: CSSRules, variant: string): CSSRules => {\n    // Check responsive\n    if ((_ = theme('screens', tail(variant), ''))) {\n      return { [buildMediaQuery(_)]: translation }\n    }\n\n    // Dark mode\n    if (variant == ':dark' && darkMode == 'class') {\n      return { '.dark &': translation }\n    }\n\n    // Groups classes like: group-focus and group-hover\n    // these need to add a marker selector with the pseudo class\n    // => '.group:focus .group-focus:selector'\n    if ((_ = GROUP_RE.exec(variant))) {\n      return { [`.${escape(tag((_ as RegExpExecArray)[1]))}:${_[2]} &`]: translation }\n    }\n\n    // Check other well known variants\n    // and fallback to pseudo class or element\n    return {\n      [variants[tail(variant)] ||\n      '&' +\n        variant.replace(\n          NOT_PREFIX_RE,\n          (_, not, variant) => not + '(' + prepareVariantSelector(':' + variant) + ')',\n        )]: translation,\n    }\n  }\n\n  // Apply variants depth-first\n  return (translation, rule) => rule.v.reduceRight(applyVariant, translation)\n}\n", "/* eslint-disable no-return-assign, no-cond-assign, no-implicit-coercion */\n\n// Based on https://github.com/kripod/otion\n// License MIT\n\n/*\nTo have a predictable styling the styles must be ordered.\n\nThis order is represented by a precedence number. The lower values\nare inserted before higher values. Meaning higher precedence styles\noverwrite lower precedence styles.\n\nEach rule has some traits that are put into a bit set which form\nthe precedence:\n\n| bits | trait                                             |\n| ---- | ------------------------------------------------- |\n| 1    | dark mode                                         |\n| 2    | layer: base = 0, components = 1, utilities = 2    |\n| 1    | screens: is this a responsive variation of a rule |\n| 5    | responsive based on min-width                     |\n| 4    | at-rules                                          |\n| 17   | pseudo and group variants                         |\n| 4    | number of declarations (descending)               |\n| 4    | greatest precedence of properties                 |\n\n**Dark Mode: 1 bit**\n\nFlag for dark mode rules.\n\n**Layer: 3 bits**\n\n- base = 0: The preflight styles and any base styles registered by plugins.\n- components = 1: Component classes and any component classes registered by plugins.\n- utilities = 2: Utility classes and any utility classes registered by plugins.\n\n**Screens: 1 bit**\n\nFlag for screen variants. They may not always have a `min-width` to be detected by _Responsive_ below.\n\n**Responsive: 5 bits**\n\nBased on extracted `min-width` value:\n\n- 576px -> 3\n- 1536px -> 9\n- 36rem -> 3\n- 96rem -> 9\n\n**At-Rules: 4 bits**\n\nBased on the count of special chars (`-:,`) within the at-rule.\n\n**Pseudo and group variants: 17 bits**\n\nEnsures predictable order of pseudo classes.\n\n- https://bitsofco.de/when-do-the-hover-focus-and-active-pseudo-classes-apply/#orderofstyleshoverthenfocusthenactive\n- https://developer.mozilla.org/docs/Web/CSS/:active#Active_links\n- https://github.com/tailwindlabs/tailwindcss/blob/master/stubs/defaultConfig.stub.js#L718\n\n**Number of declarations (descending): 4 bits**\n\nAllows single declaration styles to overwrite styles from multi declaration styles.\n\n**Greatest precedence of properties: 4 bits**\n\nEnsure shorthand properties are inserted before longhand properties; eg longhand override shorthand\n*/\n\nimport type { ThemeResolver, ThemeScreen } from '../types'\n\nimport { tail, includes, buildMediaQuery } from '../internal/util'\nimport { GROUP_RE, NOT_PREFIX_RE } from './decorate'\n\n// Shared variables\nlet _: string | RegExpExecArray | null | number | ThemeScreen\n\n/*\nBit shifts for the primary bits:\n\n| bits | trait                                                   | shift |\n| ---- | ------------------------------------------------------- | ----- |\n| 1    | dark mode                                               | 30    |\n| 2    | layer: base = 0, components = 1, utilities = 2, css = 3 | 28    |\n| 1    | screens: is this a responsive variation of a rule       | 27    |\n| 5    | responsive based on min-width                           | 22    |\n| 4    | at-rules                                                | 18    |\n| 17   | pseudo and group variants                               | 0     |\n\nThese are calculated by serialize and added afterwards:\n\n| bits | trait                               |\n| ---- | ----------------------------------- |\n| 4    | number of declarations (descending) |\n| 4    | greatest precedence of properties   |\n\nThese are added by shifting the primary bits using multiplication as js only\nsupports bit shift up to 32 bits.\n*/\n\n// 0=none, 1=sm, 2=md, 3=lg, 4=xl, 5=2xl, 6=??, 7=??\n// 0 - 31: 5 bits\n//  576px -> 3\n// 1536px -> 9\n// 36rem -> 3\n// 96rem -> 9\nexport const responsivePrecedence = (css: string): number =>\n  (((_ = /(?:^|min-width: *)(\\d+(?:.\\d+)?)(p)?/.exec(css)) ? +_[1] / (_[2] ? 15 : 1) / 10 : 0) &\n    31) <<\n  22\n\n// Colon and dash count of string (ascending): 0 -> 7 => 3 bits\nexport const seperatorPrecedence = (string: string): number => {\n  _ = 0\n\n  for (let index = string.length; index--; ) {\n    _ += (includes('-:,', string[index]) as unknown) as number\n  }\n\n  return _\n}\n\nexport const atRulePresedence = (css: string): number => (seperatorPrecedence(css) & 15) << 18\n\n// Pesudo variant presedence\n// Chars 3 - 8: Uniquely identifies a pseudo selector\n// represented as a bit set for each relevant value\n// 17 bits: one for each variant plus one for unknown variants\n//\n// ':group-*' variants are normalized to their native pseudo class (':group-hover' -> ':hover')\n// as they already have a higher selector presedence due to the add '.group' ('.group:hover .group-hover:...')\n\n// Sources:\n// - https://bitsofco.de/when-do-the-hover-focus-and-active-pseudo-classes-apply/#orderofstyleshoverthenfocusthenactive\n// - https://developer.mozilla.org/docs/Web/CSS/:active#Active_links\n// - https://github.com/tailwindlabs/tailwindcss/blob/master/stubs/defaultConfig.stub.js#L718\n\nconst PRECEDENCES_BY_PSEUDO_CLASS = [\n  /* fi */ 'rst' /* : 0 */,\n  /* la */ 'st' /* : 1 */,\n  /* ev */ 'en' /* : 2 */,\n  /* od */ 'd' /* : 3 */,\n  /* li */ 'nk' /* : 4 */,\n  /* vi */ 'sited' /* : 5 */,\n  /* em */ 'pty' /* : 6 */,\n  /* ch */ 'ecked' /* : 7 */,\n  /* fo */ 'cus-w' /* ithin : 8 */,\n  /* ho */ 'ver' /* : 9 */,\n  /* fo */ 'cus' /* : 10 */,\n  /* fo */ 'cus-v' /* isible : 11 */,\n  /* ac */ 'tive' /* : 12 */,\n  /* di */ 'sable' /* d : 13 */,\n  /* re */ 'ad-on' /* ly: 14 */,\n  /* op */ 'tiona' /* l: 15 */,\n  /* re */ 'quire' /* d: 16 */,\n]\n\nconst pseudoPrecedence = (pseudoClass: string): number =>\n  1 <<\n  (~(_ = PRECEDENCES_BY_PSEUDO_CLASS.indexOf(pseudoClass.replace(GROUP_RE, ':$2').slice(3, 8)))\n    ? _\n    : 17)\n\n// Variants: 28 bits\nexport const makeVariantPresedenceCalculator = (\n  theme: ThemeResolver,\n  variants: Record<string, string | undefined>,\n) => (presedence: number, variant: string): number =>\n  presedence |\n  // 5: responsive\n  ((_ = theme('screens', tail(variant), ''))\n    ? // 0=none, 1=sm, 2=md, 3=lg, 4=xl, 5=2xl, 6=??, 7=??\n      // 0 - 31: 5 bits\n      // 576px -> 3\n      // 1536px -> 9\n      // 36rem -> 3\n      // 96rem -> 9\n      // Move into screens layer and adjust based on min-width\n      (1 << 27) | responsivePrecedence(buildMediaQuery(_))\n    : // 1: dark mode flag\n    variant == ':dark'\n    ? 1 << 30\n    : // 4: precedence of other at-rules\n    (_ = variants[variant] || variant.replace(NOT_PREFIX_RE, ':$2'))[0] == '@'\n    ? atRulePresedence(_)\n    : // 17: pseudo and group variants\n      pseudoPrecedence(variant))\n\n// https://github.com/kripod/otion/blob/main/packages/otion/src/propertyMatchers.ts\n// \"+1\": [\n// \t/* ^border-.*(w|c|sty) */\n// \t\"border-.*(width,color,style)\",\n\n// \t/* ^[tlbr].{2,4}m?$ */\n// \t\"top\",\n// \t\"left\",\n// \t\"bottom\",\n// \t\"right\",\n\n// \t/* ^c.{7}$ */\n// \t\"continue\",\n// ],\n\n// \"-1\": [\n// \t/* ^[fl].{5}l */\n// \t\"flex-flow\",\n// \t\"line-clamp\",\n\n// \t/* ^g.{8}$ */\n// \t\"grid-area\",\n\n// \t/* ^pl */\n// \t\"place-content\",\n// \t\"place-items\",\n// \t\"place-self\",\n// ],\n\n// group: 1 => +1\n// group: 2 => -1\n\n// 0 - 15 => 4 bits\n// Ignore vendor prefixed and custom properties\nexport const declarationPropertyPrecedence = (property: string): number =>\n  property[0] == '-'\n    ? 0\n    : seperatorPrecedence(property) +\n      ((_ = /^(?:(border-(?!w|c|sty)|[tlbr].{2,4}m?$|c.{7}$)|([fl].{5}l|g.{8}$|pl))/.exec(property))\n        ? +!!_[1] /* +1 */ || -!!_[2] /* -1 */\n        : 0) +\n      1\n\n/* eslint-enable no-return-assign, no-cond-assign, no-implicit-coercion */\n", "import type { Context, CSSRules, Prefixer, Rule, Token, MaybeArray } from '../types'\n\nimport {\n  join,\n  includes,\n  escape,\n  hyphenate,\n  evalThunk,\n  buildMediaQuery,\n  tail,\n  merge,\n  isCSSProperty,\n} from '../internal/util'\nimport {\n  responsivePrecedence,\n  declarationPropertyPrecedence,\n  makeVariantPresedenceCalculator,\n  atRulePresedence,\n} from './presedence'\nimport { apply } from './apply'\nexport interface RuleWithPresedence {\n  r: string\n  p: number\n}\n\nconst stringifyBlock = (body: string, selector: string): string => selector + '{' + body + '}'\n\n// Not using const enums as they get transpiled to a lot of code\n// /**\n//  * Determines the default order of styles.\n//  *\n//  * For example: screens have a higher presedence (eg override) utilities\n//  */\n// const enum Layer {\n//   /**\n//    * The preflight styles and any base styles registered by plugins.\n//    */\n//   base = 0,\n\n//   /**\n//    * Component classes and any component classes registered by plugins.\n//    */\n//   components = 1,\n\n//   /**\n//    * Utility classes and any utility classes registered by plugins.\n//    */\n//   utilities = 2,\n\n//   /**\n//    * Inline directives\n//    */\n//   css = 3,\n// }\n\n/**\n * The preflight styles and any base styles registered by plugins.\n */\nexport type LayerBase = 0\n\n/**\n * Component classes and any component classes registered by plugins.\n */\nexport type LayerComponents = 1\n\n/**\n * Utility classes and any utility classes registered by plugins.\n */\nexport type LayerUtilities = 2\n\n/**\n * Inline directives\n */\nexport type LayerCss = 3\n\nexport type Layer = LayerBase | LayerComponents | LayerUtilities | LayerCss\n\nexport const serialize = (\n  prefix: Prefixer,\n  variants: Record<string, string>,\n  context: Context,\n): ((css: CSSRules, className?: string, rule?: Rule, layer?: Layer) => RuleWithPresedence[]) => {\n  const { theme, tag } = context\n\n  // Hash/Tag tailwind custom properties during serialization\n  // used by `tagVars` below\n  const tagVar = (_: string, property: string): string => '--' + tag(property)\n\n  const tagVars = (value: string | number): string => `${value}`.replace(/--(tw-[\\w-]+)\\b/g, tagVar)\n\n  // Create a css declaration with prefix and hashed custom properties\n  const stringifyDeclaration = (\n    property: string,\n    value: string | number | string[],\n    important: boolean | undefined,\n  ): string => {\n    property = tagVars(property)\n\n    // Support array fallbacks\n    return Array.isArray(value)\n      ? join(\n          value.filter(Boolean).map((value) => prefix(property, tagVars(value), important)),\n          ';',\n        )\n      : prefix(property, tagVars(value), important)\n  }\n\n  // List of css rule with presedence to be injected\n  let rules: RuleWithPresedence[]\n\n  // Responsible for converting the css into one or more css strings\n  // which will be injected into the page\n  const stringify = (\n    // Upper at-rules, selector that should wrap each generated css block\n    atRules: string[],\n    // The current css selector\n    selector: string,\n    // The current presedence for determine the css position in the stylesheet\n    presedence: number,\n    // The rules object\n    css: MaybeArray<CSSRules>,\n    important: boolean | undefined,\n  ): void => {\n    if (Array.isArray(css)) {\n      css.forEach((css) => css && stringify(atRules, selector, presedence, css, important))\n      return\n    }\n\n    // 1. Properties\n    // 3. *\n    // 2. @...\n    // 3. :pseudo\n    // 4. &\n\n    // The generated declaration block eg body of the css rule\n    let declarations = ''\n\n    // Additional presedence values\n\n    // this ensures that 'border-top-width' has a higer presedence than 'border-top'\n    let maxPropertyPresedence = 0\n\n    // more specific utilities have less declarations and a higher presedence\n    let numberOfDeclarations = 0\n\n    if ((css as CSSRules)['@apply']) {\n      css = merge(\n        evalThunk(apply((css as CSSRules)['@apply'] as Token), context),\n        { ...(css as CSSRules), '@apply': undefined },\n        context,\n      )\n    }\n\n    // Walk through the object\n    Object.keys(css as CSSRules).forEach((key) => {\n      const value = evalThunk((css as CSSRules)[key], context)\n\n      if (isCSSProperty(key, value)) {\n        if (value !== '' && key.length > 1) {\n          // It is a Property\n          const property = hyphenate(key)\n\n          // Update presedence\n          numberOfDeclarations += 1\n          maxPropertyPresedence = Math.max(\n            maxPropertyPresedence,\n            declarationPropertyPrecedence(property),\n          )\n\n          // Add to the declaration block with prefixer applied\n          declarations =\n            (declarations && declarations + ';') +\n            stringifyDeclaration(property, value as string | number | string[], important)\n        }\n      } else if (value) {\n        // TODO remove once moved from :global to @global\n        if (key == ':global') {\n          key = '@global'\n        }\n\n        // If the value is an object this must be a nested block\n        // like '@media ...', '@supports ... ', ':pseudo ...', '& > ...'\n        // If this is a `@` rule\n        if (key[0] == '@') {\n          if (key[1] == 'g') {\n            // @global\n            stringify([], '', 0, value as MaybeArray<CSSRules>, important)\n          } else if (key[1] == 'f') {\n            // `@font-face` is never wrapped, eg always global/root\n            stringify([], key, 0, value as MaybeArray<CSSRules>, important)\n          } else if (key[1] == 'k') {\n            // @keyframes handling\n            // To prevent\n            // \"@keyframes spin{from{transform:rotate(0deg)}}\"\n            // \"@keyframes spin{to{transform:rotate(360deg)}}\"\n            // we generate waypoints without prefix and grap them from the stack\n            // \"from{transform:rotate(0deg)}\"\n            // \"to{transform:rotate(360deg)}\"\n            // => \"@keyframes name{from{transform:rotate(0deg)}from{transform:rotate(0deg)}}\"\n            const currentSize = rules.length\n\n            stringify([], '', 0, value as MaybeArray<CSSRules>, important)\n\n            const waypoints = rules.splice(currentSize, rules.length - currentSize)\n\n            // Insert without wrappers\n            rules.push({\n              r: stringifyBlock(\n                join(\n                  waypoints.map((p) => p.r),\n                  '',\n                ),\n                key,\n              ),\n              p: waypoints.reduce((sum, p) => sum + p.p, 0),\n            })\n          } else if (key[1] == 'i') {\n            // @import\n            // eslint-disable-next-line @typescript-eslint/no-extra-semi\n            ;(Array.isArray(value) ? value : [value]).forEach(\n              (value) => value && rules.push({ p: 0, r: `${key} ${value};` }),\n            )\n          } else {\n            // @screen\n            if (key[2] == 'c') {\n              key = buildMediaQuery(context.theme('screens', tail(key, 8).trim()) as string)\n            }\n\n            // Some nested block like @media, dive into it\n            stringify(\n              [...atRules, key],\n              selector,\n              presedence | responsivePrecedence(key) | atRulePresedence(key),\n              value as MaybeArray<CSSRules>,\n              important,\n            )\n          }\n        } else {\n          // A selector block: { '&:focus': { ... } }\n          stringify(\n            atRules,\n            // If this is a nested selector we need to\n            // - replace `&` with the current selector\n            selector\n              ? // Go over the selector and replace the matching selectors respecting multiple selectors\n                selector.replace(\n                  / *((?:\\(.+?\\)|\\[.+?\\]|[^,])+) *(,|$)/g,\n                  (_, selectorPart: string, comma: string) =>\n                    key.replace(\n                      / *((?:\\(.+?\\)|\\[.+?\\]|[^,])+) *(,|$)/g,\n                      (_, keyPart: string, comma: string) =>\n                        (includes(keyPart, '&')\n                          ? keyPart.replace(/&/g, selectorPart)\n                          : (selectorPart && selectorPart + ' ') + keyPart) + comma,\n                    ) + comma,\n                )\n              : key,\n            presedence,\n            value as MaybeArray<CSSRules>,\n            important,\n          )\n        }\n      }\n    })\n\n    // We have collected all properties\n    // if there have been some we need to create a css rule\n    if (numberOfDeclarations) {\n      // Inject declarations\n\n      rules.push({\n        // Wrap block with upper at-rules\n        r: atRules.reduceRight(stringifyBlock, stringifyBlock(declarations, selector)),\n\n        // Calculate precedence\n        p:\n          presedence *\n            // Declarations: 8 bits = 256\n            (1 << 8) +\n          // 4: number of declarations (descending)\n          (((Math.max(0, 15 - numberOfDeclarations) & 15) << 4) |\n            // 4: greatest precedence of properties\n            // if there is no property presedence this is most likely a custom property only declaration\n            // these have the highest presedence\n            ((maxPropertyPresedence || 15) & 15)),\n      })\n    }\n  }\n\n  const variantPresedence = makeVariantPresedenceCalculator(theme, variants)\n\n  return (css, className, rule, layer = 0 /* Layerbase */) => {\n    // Initial presedence based on layer (base = 0, components = 1, utilities = 2, css = 3)\n    layer <<= 28\n\n    rules = []\n\n    stringify(\n      [],\n      className ? '.' + escape(className) : '',\n      // If we have a rule, create starting presedence based on the variants\n      rule ? rule.v.reduceRight(variantPresedence, layer) : layer,\n      css,\n      rule && rule.i,\n    )\n\n    return rules\n  }\n}\n", "import type { Context, Sheet, Mode, SheetInit } from '../types'\n\nimport { sortedInsertionIndex } from '../internal/util'\n\nimport type { RuleWithPresedence } from './serialize'\n\n// Insert css rules using presedence to find the correct position within the sheet\nexport const inject = (\n  sheet: Sheet,\n  mode: Mode,\n  init: SheetInit,\n  context: Context,\n): ((rule: RuleWithPresedence) => void) => {\n  // An array of presedence by index within the sheet\n  // always sorted\n  let sortedPrecedences: number[]\n  init<number[]>((value = []) => (sortedPrecedences = value))\n\n  // Cache for already inserted css rules\n  // to prevent double insertions\n  let insertedRules: Set<string>\n  init<Set<string>>((value = new Set()) => (insertedRules = value))\n\n  return ({ r: css, p: presedence }) => {\n    // If not already inserted\n    if (!insertedRules.has(css)) {\n      // Mark rule as inserted\n      insertedRules.add(css)\n\n      // Find the correct position\n      const index = sortedInsertionIndex(sortedPrecedences, presedence)\n\n      try {\n        // Insert\n        sheet.insert(css, index)\n\n        // Update sorted index\n        sortedPrecedences.splice(index, 0, presedence)\n      } catch (error) {\n        // Some thrown error a because of specific pseudo classes\n        // let filter them to prevent unnecessary warnings\n        // ::-moz-focus-inner\n        // :-moz-focusring\n        if (!/:-[mwo]/.test(css)) {\n          mode.report({ id: 'INJECT_CSS_ERROR', css, error: error as Error }, context)\n        }\n      }\n    }\n  }\n}\n", "import type {\n  Configuration,\n  Context,\n  Preflight,\n  ThemeResolver,\n  Theme,\n  Rule,\n  Hasher,\n  InlineDirective,\n  CSSRules,\n  Mode,\n  Falsy,\n  TypescriptCompat,\n  MaybeTokenInterpolation,\n} from '../types'\n\nimport { corePlugins } from './plugins'\nimport { createPreflight } from './preflight'\nimport { coreVariants } from './variants'\n\nimport { cssomSheet, voidSheet } from './sheets'\nimport { silent, strict, warn } from './modes'\nimport { autoprefix, noprefix } from './prefix'\nimport { makeThemeResolver } from './theme'\n\nimport { cyrb32, identity, merge, evalThunk, ensureMaxSize, includes, join } from '../internal/util'\n\nimport { parse } from './parse'\nimport { translate as makeTranslate } from './translate'\nimport { decorate as makeDecorate, prepareVariantSelector } from './decorate'\nimport { serialize as makeSerialize } from './serialize'\nimport { inject as makeInject } from './inject'\nimport { stringifyRule } from './helpers'\n\nconst sanitize = <T>(\n  value: T | boolean | undefined,\n  defaultValue: T,\n  disabled: T,\n  enabled = defaultValue,\n): T => (value === false ? disabled : value === true ? enabled : value || defaultValue)\n\nconst loadMode = (mode: Configuration['mode']): Mode =>\n  (typeof mode == 'string'\n    ? ({ t: strict, a: warn, i: silent } as Record<string, Mode>)[mode[1]]\n    : mode) || warn\n\n// Use hidden '_' property to collect class names which have no css translation like hashed twind classes\nconst COMPONENT_PROPS = { _: { value: '', writable: true } }\n\nexport const configure = (\n  config: Configuration = {},\n): {\n  init: () => void\n  process: (tokens: MaybeTokenInterpolation) => string\n} => {\n  const theme = makeThemeResolver(config.theme)\n\n  const mode = loadMode(config.mode)\n\n  const hash = sanitize<Hasher | false>(config.hash, false, false, cyrb32)\n\n  const important = config.important\n\n  // Track the active rule\n  // 1. to detect if a theme value should be negated\n  // 2. for nested `tw()` calls\n  //    `sm:hover:${({ tw }) => tw`underline`}`\n  //    ==> 'sm:hover:underline`\n  // Start with an \"empty\" rule, to always have value to use\n  let activeRule: { v: string[]; n?: boolean } = { v: [] }\n\n  let translateDepth = 0\n  const lastTranslations: (CSSRules | string | Falsy)[] = []\n\n  // The context that is passed to functions to access the theme, ...\n  const context: Context = {\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    tw: (...tokens: MaybeTokenInterpolation) => process(tokens),\n\n    theme: ((section: keyof Theme, key?: string | string[], defaultValue?: unknown): unknown => {\n      const value =\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        theme(section, key as string, defaultValue as any) ??\n        // If no theme value is found, notify 'mode', it may be able to resolve a value\n        mode.unknown(\n          section,\n          key == null || Array.isArray(key) ? key : key.split('.'),\n          defaultValue != null,\n          context,\n        )\n\n      // Add negate to theme value using calc to support complex values\n      return activeRule.n && value && includes('rg', (typeof value)[5])\n        ? `calc(${value} * -1)`\n        : value\n    }) as ThemeResolver,\n\n    tag: (value) => (hash ? hash(value) : value),\n\n    css: (rules) => {\n      translateDepth++\n      const lastTranslationsIndex = lastTranslations.length\n\n      try {\n        // eslint-disable-next-line @typescript-eslint/no-extra-semi\n        ;(typeof rules == 'string' ? parse([rules]) : rules).forEach(convert)\n\n        const css = Object.create(null, COMPONENT_PROPS)\n\n        for (let index = lastTranslationsIndex; index < lastTranslations.length; index++) {\n          const translation = lastTranslations[index]\n\n          if (translation) {\n            switch (typeof translation) {\n              case 'object':\n                merge(css, translation, context)\n                break\n              case 'string':\n                css._ += (css._ && ' ') + translation\n            }\n          }\n        }\n\n        return css\n      } finally {\n        lastTranslations.length = lastTranslationsIndex\n        translateDepth--\n      }\n    },\n  }\n\n  // Used to translate a rule using plugins\n  const translate = makeTranslate({ ...corePlugins, ...config.plugins }, context)\n\n  // Wrap `translate()` to keep track of the active rule\n  // we need to use try-finally as mode.report may throw\n  // and we must always reset the active rule\n  const doTranslate = (rule: Rule): CSSRules | string | Falsy | TypescriptCompat => {\n    // Keep track of active variants for nested `tw` calls\n    const parentRule = activeRule\n    activeRule = rule\n\n    try {\n      return evalThunk(translate(rule), context)\n    } finally {\n      activeRule = parentRule\n    }\n  }\n\n  const variants = { ...coreVariants, ...config.variants }\n\n  // Apply variants to a translation\n  const decorate = makeDecorate(config.darkMode || 'media', variants, context)\n\n  // Serialize a translation to css\n  const serialize = makeSerialize(sanitize(config.prefix, autoprefix, noprefix), variants, context)\n\n  const sheet = config.sheet || (typeof window == 'undefined' ? voidSheet() : cssomSheet(config))\n\n  const { init = (callback) => callback() } = sheet\n\n  // Inject css into the target enviroment\n  const inject = makeInject(sheet, mode, init, context)\n\n  // Cache rule ids and their generated class name\n  let idToClassName: Map<string, string>\n  init<Map<string, string>>((value = new Map()) => (idToClassName = value))\n\n  // Cache generated inline directive names by their function identity\n  const inlineDirectiveName = new WeakMap<InlineDirective, string>()\n\n  // Used as replacer for JSON.stringify to calculate the hash for a inline function\n  const evaluateFunctions = (key: string, value: unknown): unknown =>\n    key == '_' // Do not include passed classNames in the hash\n      ? undefined\n      : typeof value == 'function'\n      ? JSON.stringify(evalThunk(value, context), evaluateFunctions)\n      : value\n\n  // Responsible for converting (translate, decorate, serialize, inject) a rule\n  const convert = (rule: Rule): string | undefined | void => {\n    // If there is a active rule this one is nested\n    // we must add the variants and need to reset the id\n    if (!translateDepth && activeRule.v.length) {\n      rule = { ...rule, v: [...activeRule.v, ...rule.v], $: '' }\n    }\n\n    // Static rules (from template literals) can cache their id\n    // this greatly improves performance\n    if (!rule.$) {\n      // For inline directives (functions) `stringifyRule` returns an empty string\n      // in that case we check if we already have a name for the function\n      // and use that one to generate the id\n      rule.$ = stringifyRule(rule, inlineDirectiveName.get(rule.d as InlineDirective))\n    }\n\n    // Check if we already have a class name for this rule id\n    let className = translateDepth ? null : idToClassName.get(rule.$)\n\n    if (className == null) {\n      // 2. translate each rule using plugins\n      let translation = doTranslate(rule)\n\n      // If this is a unknown inline directive\n      if (!rule.$) {\n        // We can now generate a unique name based on the created translation\n        // This id does not include the variants as a directive is always independent of variants\n        // Variants are applied below using `decorate()`\n        // JSON.stringify ignores functions - by using a custom replace\n        // we can calculate a hash based on the value returned by these functions\n        // eslint-disable-next-line no-var\n        rule.$ = cyrb32(JSON.stringify(translation, evaluateFunctions))\n\n        // Remember it\n        inlineDirectiveName.set(rule.d as InlineDirective, rule.$)\n\n        // Generate an id including the current variants\n        rule.$ = stringifyRule(rule, rule.$)\n      }\n\n      if (translation && typeof translation == 'object') {\n        rule.v = rule.v.map(prepareVariantSelector)\n        if (important) rule.i = important\n\n        // 3. decorate: apply variants\n        translation = decorate(translation, rule)\n\n        if (translateDepth) {\n          lastTranslations.push(translation)\n        } else {\n          // - components: layer.components = 1\n          // - plugins: layer.utilities = 2\n          // - inline directive: layer.css = 3\n          const layer = typeof rule.d == 'function' ? (typeof translation._ == 'string' ? 1 : 3) : 2\n\n          className =\n            hash || typeof rule.d == 'function' ? (hash || cyrb32)(layer + rule.$) : rule.$\n\n          // 4. serialize: convert to css string with precedence\n          // 5. inject: add to dom\n          serialize(translation, className, rule, layer).forEach(inject)\n\n          if (translation._) {\n            className += ' ' + translation._\n          }\n        }\n      } else {\n        // CSS class names have been returned\n        if (typeof translation == 'string') {\n          // Use as is\n          className = translation\n        } else {\n          // No plugin or plugin did not return something\n          className = rule.$\n          mode.report({ id: 'UNKNOWN_DIRECTIVE', rule: className }, context)\n        }\n\n        if (translateDepth && typeof rule.d !== 'function') {\n          lastTranslations.push(className)\n        }\n      }\n\n      if (!translateDepth) {\n        // Remember the generated class name\n        idToClassName.set(rule.$, className as string)\n\n        // Ensure the cache does not grow unlimited\n        ensureMaxSize(idToClassName, 30000)\n      }\n    }\n\n    return className as string\n  }\n\n  // This function is called from `tw(...)`\n  // it parses, translates, decorates, serializes and injects the tokens\n  const process = (tokens: MaybeTokenInterpolation): string =>\n    join(parse(tokens).map(convert).filter(Boolean) as string[], ' ')\n\n  // Determine if we should inject the preflight (browser normalize)\n  const preflight = sanitize<Preflight | false | CSSRules>(config.preflight, identity, false)\n\n  if (preflight) {\n    // Create the base tailwind preflight css rules\n    const css = createPreflight(theme)\n\n    // Call the preflight handler, serialize and inject the result\n    const styles = serialize(\n      typeof preflight == 'function'\n        ? evalThunk(preflight(css, context), context) || css\n        : { ...css, ...preflight },\n    )\n\n    init<boolean>((injected = (styles.forEach(inject), true)) => injected)\n  }\n\n  return {\n    init: () => mode.report({ id: 'LATE_SETUP_CALL' }, context),\n    process,\n  }\n}\n", "import type { Configuration, Context, Instance, MaybeTokenInterpolation, TW } from '../types'\n\nimport { configure } from './configure'\n\nexport const create = (config?: Configuration): Instance => {\n  // We are using lazy variables to trigger setup either\n  // on first `setup` or `tw` call\n  //\n  // This allows to provide one-time lazy configuration\n  //\n  // These variables are not named `tw` and `setup`\n  // as we use `tw` and `setup` to find the callee site\n  // during stacktrace generation\n  // This allows the error stacktrace to start at the call site.\n\n  // Used by `tw`\n  let process = (tokens: MaybeTokenInterpolation): string => {\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    init()\n    return process(tokens)\n  }\n\n  // Used by `setup`\n  let init = (config?: Configuration): void => {\n    // Replace implementation with configured ones\n    // `process`: the real one\n    // `init`: invokes `mode.report` with `LATE_SETUP_CALL`\n    // eslint-disable-next-line @typescript-eslint/no-extra-semi\n    ;({ process, init } = configure(config))\n  }\n\n  // If we got a config, start right away\n  if (config) init(config)\n\n  let context: Context\n  const fromContext = <Key extends keyof Context>(key: Key) => (): Context[Key] => {\n    if (!context) {\n      process([\n        (_: Context) => {\n          context = _\n          return ''\n        },\n      ])\n    }\n\n    return context[key]\n  }\n\n  // The instance methods delegate to the lazy ones.\n  // This ensures that after setup we use the configured\n  // `process` and `setup` fails.\n  return {\n    tw: Object.defineProperties(((...tokens: MaybeTokenInterpolation) => process(tokens)) as TW, {\n      theme: {\n        get: fromContext('theme'),\n      },\n      // css: {\n      //   get: fromContext('css'),\n      // },\n      // tag: {\n      //   get: fromContext('tag'),\n      // },\n    }),\n\n    setup: (config) => init(config),\n  }\n}\n", "import { create } from './instance'\n\nexport const { tw, setup } = /*#__PURE__*/ create()\n", "import { parse } from './parse'\nimport { stringifyRule } from './helpers'\n\nexport const expandGroups = (classNames: string): string =>\n  parse(classNames)\n    .map((rule) => stringifyRule(rule))\n    .join(' ')\n"],
  "mappings": "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",
  "names": []
}