{"version":3,"file":"variants.dev.cjs","sources":["../src/variants.ts"],"sourcesContent":["/**\n * @module @twind/preset-tailwind/variants\n */\n\nimport {\n  AutocompleteProvider,\n  VariantResolver,\n  Variant,\n  AutocompleteItem,\n  arbitrary,\n} from '@twind/core'\nimport type { TailwindTheme } from './types'\n\nimport { DEV } from 'distilt/env'\n\nimport { normalize, withAutocomplete } from '@twind/core'\n\n// indirection wrapper to remove autocomplete functions from production bundles\nfunction withAutocomplete$(\n  rule: VariantResolver<TailwindTheme>,\n  autocomplete: AutocompleteProvider<TailwindTheme> | false,\n): VariantResolver<TailwindTheme> {\n  if (DEV) {\n    return withAutocomplete(rule, autocomplete)\n  }\n\n  return rule\n}\n\nconst variants: Variant<TailwindTheme>[] = [\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  ['print', '@media print'],\n  ['(portrait|landscape)', ({ 1: $1 }) => `@media (orientation:${$1})`],\n  ['contrast-(more|less)', ({ 1: $1 }) => `@media (prefers-contrast:${$1})`],\n\n  ['(first-(letter|line)|placeholder|backdrop|before|after)', ({ 1: $1 }) => `&::${$1}`],\n  ['(marker|selection)', ({ 1: $1 }) => `& *::${$1},&::${$1}`],\n  ['file', '&::file-selector-button'],\n\n  ['(first|last|only)', ({ 1: $1 }) => `&:${$1}-child`],\n  ['even', '&:nth-child(2n)'],\n  ['odd', '&:nth-child(odd)'],\n\n  ['open', '&[open]'],\n\n  // All other pseudo classes are already supported by twind\n\n  [\n    '(aria|data)-',\n    withAutocomplete$(\n      ({ 1: $1 /* aria or data */, $$ /* everything after the dash */ }, context) =>\n        $$ &&\n        `&[${$1}-${\n          // aria-asc or data-checked -> from theme\n          context.theme($1, $$) ||\n          // aria-[...] or data-[...]\n          arbitrary($$, '', context) ||\n          // default handling\n          `${$$}=\"true\"`\n        }]`,\n      DEV &&\n        (({ 1: $1 }, { theme }) =>\n          [\n            ...new Set([\n              ...($1 == 'aria'\n                ? [\n                    'checked',\n                    'disabled',\n                    'expanded',\n                    'hidden',\n                    'pressed',\n                    'readonly',\n                    'required',\n                    'selected',\n                  ]\n                : []),\n              ...Object.keys(theme($1 as 'aria' | 'data') || {}),\n            ]),\n          ]\n            .map(\n              (key): AutocompleteItem => ({\n                suffix: key,\n                label: `&[${$1}-${theme($1, key) || `${key}=\"true\"`}]`,\n                theme: { section: $1, key },\n              }),\n            )\n            .concat([{ suffix: '[', label: `&[${$1}-…]` }])),\n    ),\n  ],\n\n  /* Styling based on parent and peer state */\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  [\n    '((group|peer)(~[^-[]+)?)(-\\\\[(.+)]|[-[].+?)(\\\\/.+)?',\n    withAutocomplete$(\n      ({ 2: type, 3: name = '', 4: $4, 5: $5 = '', 6: label = name }, { e, h, v }) => {\n        const selector = normalize($5) || ($4[0] == '[' ? $4 : (v($4.slice(1)) as string))\n\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        return `${(selector.includes('&') ? selector : '&' + selector).replace(\n          /&/g,\n          `:merge(.${e(h(type + label))})`,\n        )}${type[0] == 'p' ? '~' : ' '}&`\n      },\n      DEV &&\n        ((_, { variants }) =>\n          Object.entries(variants)\n            .filter(([, selector]) => /^&(\\[|:[^:])/.test(selector))\n            .flatMap(([variant, selector]): AutocompleteItem[] => [\n              {\n                prefix: 'group-',\n                suffix: variant,\n                label: `${selector.replace('&', '.group')} &`,\n                modifiers: [],\n              },\n              {\n                prefix: 'peer-',\n                suffix: variant,\n                label: `${selector.replace('&', '.peer')} &`,\n                modifiers: [],\n              },\n            ])),\n    ),\n  ],\n\n  // direction variants\n  [\n    '(ltr|rtl)',\n    withAutocomplete$(\n      ({ 1: $1 }) => `[dir=\"${$1}\"] &`,\n      DEV && (({ 1: $1 }) => [{ prefix: $1, suffix: '', label: `[dir=\"${$1}\"] &` }]),\n    ),\n  ],\n\n  [\n    'supports-',\n    withAutocomplete$(\n      ({ $$ /* everything after the dash */ }, context) => {\n        $$ &&= (context.theme('supports', $$) || arbitrary($$, '', context)) as string\n\n        if ($$) {\n          if (!$$.includes(':')) {\n            $$ += ':var(--tw)'\n          }\n\n          if (!/^\\w*\\s*\\(/.test($$)) {\n            $$ = `(${$$})`\n          }\n\n          // Chrome has a bug where `(condtion1)or(condition2)` is not valid\n          // But `(condition1) or (condition2)` is supported.\n          return `@supports ${$$.replace(/\\b(and|or|not)\\b/g, ' $1 ').trim()}`\n        }\n      },\n      DEV &&\n        ((_, { theme }) =>\n          Object.keys(theme('supports') || {})\n            .map(\n              (key): AutocompleteItem => ({\n                suffix: key,\n                theme: { section: 'supports', key },\n              }),\n            )\n            .concat([{ suffix: '[', label: `@supports …` }])),\n    ),\n  ],\n\n  [\n    'max-',\n    withAutocomplete$(\n      ({ $$ }, context) => {\n        $$ &&= (context.theme('screens', $$) || arbitrary($$, '', context)) as string\n        if (typeof $$ == 'string') {\n          return `@media not all and (min-width:${$$})`\n        }\n      },\n      DEV &&\n        ((_, { theme }) =>\n          Object.entries(theme('screens') || {})\n            .filter(([, value]) => typeof value == 'string')\n            .map(\n              ([key, value]): AutocompleteItem => ({\n                suffix: key,\n                label: `@media not all and (min-width:${value})`,\n                theme: { section: 'screens', key },\n              }),\n            )\n            .concat([{ suffix: '[', label: `@media not all and (min-width: …)` }])),\n    ),\n  ],\n\n  [\n    'min-',\n    withAutocomplete$(({ $$ }, context) => {\n      $$ &&= arbitrary($$, '', context) as string\n      return $$ && `@media (min-width:${$$})`\n    }, DEV && (() => [{ suffix: '[', label: `@media (min-width: …)` }])),\n  ],\n\n  // Arbitrary variants\n  [/^\\[(.+)]$/, ({ 1: $1 }) => /[&@]/.test($1) && normalize($1).replace(/[}]+$/, '').split('{')],\n]\n\nexport default variants\n"],"names":["withAutocomplete$","rule","autocomplete","withAutocomplete","variants","$1","$$","context","theme","arbitrary","Set","Object","keys","map","key","suffix","label","section","concat","type","name","$4","$5","e","h","v","selector","normalize","slice","includes","replace","_","entries","filter","test","flatMap","variant","prefix","modifiers","trim","value","split"],"mappings":"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"}