{"version":3,"file":"preset-tailwind-forms.cjs","sources":["../src/preset-tailwind-forms.ts"],"sourcesContent":["// Based on https://github.com/tailwindlabs/tailwindcss-forms/blob/ce5386b66a8a5833372fd245e95bf3c4e21da8d3/src/index.js\n// License MIT\n\nimport type { Preset, CSSObject, MaybeThunk, Preflight } from '@twind/core'\nimport type { TailwindTheme } from '@twind/preset-tailwind'\n\nimport { toColorValue } from '@twind/core'\n\nimport { gray, blue } from '@twind/preset-tailwind/colors'\nimport defaultTheme from '@twind/preset-tailwind/defaultTheme'\n\nconst [baseFontSize, baseLineHeight] = defaultTheme.fontSize.base\nconst { spacing, borderWidth, borderRadius } = defaultTheme\n\nexport interface TailwindFormsPresetOptions {\n  strategy?: 'base' | 'class'\n}\n\nexport default function presetTailwindForms({\n  strategy,\n}: TailwindFormsPresetOptions = {}): Preset<TailwindTheme> {\n  const config: Preset<TailwindTheme> = {}\n\n  if (strategy !== 'base') {\n    config.rules = [\n      [\n        '(' + [...new Set(rules.flatMap((r) => r.c).filter(Boolean))].join('|') + ')',\n        (match, context) =>\n          ({\n            '@layer base': rules\n              .filter((r) => r.c?.includes(match[1]))\n              .map(({ c: classes, s: styles }) => ({\n                ['' +\n                (classes as string[]).map((className) => '.' + context.e(context.h(className)))]:\n                  typeof styles == 'function' ? styles(context) : styles,\n              })),\n          } as CSSObject),\n      ],\n    ]\n  }\n\n  if (strategy !== 'class') {\n    config.preflight = (context) => {\n      const preflight: Preflight = {}\n\n      for (const { b: base, s: styles } of rules) {\n        preflight['' + base] = typeof styles == 'function' ? styles(context) : styles\n      }\n\n      return preflight\n    }\n  }\n\n  return config\n}\n\nconst rules: {\n  b: string[]\n  c?: string[]\n  s: MaybeThunk<CSSObject, TailwindTheme>\n}[] = [\n  {\n    b: [\n      \"[type='text']\",\n      \"[type='email']\",\n      \"[type='url']\",\n      \"[type='password']\",\n      \"[type='number']\",\n      \"[type='date']\",\n      \"[type='datetime-local']\",\n      \"[type='month']\",\n      \"[type='search']\",\n      \"[type='tel']\",\n      \"[type='time']\",\n      \"[type='week']\",\n      '[multiple]',\n      'textarea',\n      'select',\n    ],\n    c: ['form-input', 'form-textarea', 'form-select', 'form-multiselect'],\n    s: ({ theme }) => ({\n      appearance: 'none',\n      'background-color': '#fff',\n      'border-color': toColorValue(theme('colors.gray.500', gray[500])),\n      'border-width': borderWidth['DEFAULT'],\n      'border-radius': borderRadius.none,\n      'padding-top': spacing[2],\n      'padding-right': spacing[3],\n      'padding-bottom': spacing[2],\n      'padding-left': spacing[3],\n      'font-size': baseFontSize,\n      'line-height': baseLineHeight,\n      '--tw-shadow': '0 0 #0000',\n      '&:focus': {\n        outline: '2px solid transparent',\n        'outline-offset': '2px',\n        '--tw-ring-inset': 'var(--tw-empty,/*!*/ /*!*/)',\n        '--tw-ring-offset-width': '0px',\n        '--tw-ring-offset-color': '#fff',\n        '--tw-ring-color': toColorValue(theme('colors.blue.600', blue[600])),\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(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)`,\n        'box-shadow': `var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)`,\n        'border-color': toColorValue(theme('colors.blue.600', blue[600])),\n      },\n    }),\n  },\n  {\n    b: ['input', 'textarea'],\n    c: ['form-input', 'form-textarea'],\n    s: ({ theme }) => ({\n      '&::placeholder': {\n        color: toColorValue(theme('colors.gray.500', gray[500])),\n        opacity: '1',\n      },\n    }),\n  },\n  {\n    b: [''],\n    c: ['form-input'],\n    s: {\n      '&::-webkit-datetime-edit-fields-wrapper': {\n        padding: '0',\n      },\n      // Unfortunate hack until https://bugs.webkit.org/show_bug.cgi?id=198959 is fixed.\n      // This sucks because users can't change line-height with a utility on date inputs now.\n      // Reference: https://github.com/twbs/bootstrap/pull/31993\n      '&::-webkit-date-and-time-value': {\n        'min-height': '1.5em',\n      },\n    },\n  },\n  {\n    b: ['select'],\n    c: ['form-select'],\n    s: ({ theme }) => ({\n      'background-image': `url(\"${svgToDataUri(\n        `<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 20 20\"><path stroke=\"${toColorValue(\n          theme('colors.gray.500', gray[500]),\n        )}\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"M6 8l4 4 4-4\"/></svg>`,\n      )}\")`,\n      'background-position': `right ${spacing[2]} center`,\n      'background-repeat': `no-repeat`,\n      'background-size': `1.5em 1.5em`,\n      'padding-right': spacing[10],\n      'color-adjust': `exact`,\n    }),\n  },\n  {\n    b: ['[multiple]'],\n    // class: null,\n    s: {\n      'background-image': 'initial',\n      'background-position': 'initial',\n      'background-repeat': 'unset',\n      'background-size': 'initial',\n      'padding-right': spacing[3],\n      'color-adjust': 'unset',\n    },\n  },\n  {\n    b: [`[type='checkbox']`, `[type='radio']`],\n    c: ['form-checkbox', 'form-radio'],\n    s: ({ theme }) => ({\n      appearance: 'none',\n      padding: '0',\n      'color-adjust': 'exact',\n      display: 'inline-block',\n      'vertical-align': 'middle',\n      'background-origin': 'border-box',\n      'user-select': 'none',\n      'flex-shrink': '0',\n      height: spacing[4],\n      width: spacing[4],\n      color: toColorValue(theme('colors.blue.600', blue[600])),\n      'background-color': '#fff',\n      'border-color': toColorValue(theme('colors.gray.500', gray[500])),\n      'border-width': borderWidth['DEFAULT'],\n      '--tw-shadow': '0 0 #0000',\n      '&:focus': {\n        outline: '2px solid transparent',\n        'outline-offset': '2px',\n        '--tw-ring-inset': 'var(--tw-empty,/*!*/ /*!*/)',\n        '--tw-ring-offset-width': '2px',\n        '--tw-ring-offset-color': '#fff',\n        '--tw-ring-color': toColorValue(theme('colors.blue.600', blue[600])),\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(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)`,\n        'box-shadow': `var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)`,\n      },\n      '&:checked': {\n        'border-color': `transparent`,\n        'background-color': `currentColor`,\n        'background-size': `100% 100%`,\n        'background-position': `center`,\n        'background-repeat': `no-repeat`,\n        '&:hover,&:focus': {\n          'border-color': 'transparent',\n          'background-color': 'currentColor',\n        },\n      },\n    }),\n  },\n  {\n    b: [`[type='checkbox']`],\n    c: ['form-checkbox'],\n    s: {\n      'border-radius': borderRadius['none'],\n      '&:checked': {\n        'background-image': `url(\"${svgToDataUri(\n          `<svg viewBox=\"0 0 16 16\" fill=\"white\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z\"/></svg>`,\n        )}\")`,\n      },\n      '&:indeterminate': {\n        'background-image': `url(\"${svgToDataUri(\n          `<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\"><path stroke=\"white\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 8h8\"/></svg>`,\n        )}\")`,\n        'border-color': `transparent`,\n        'background-color': `currentColor`,\n        'background-size': `100% 100%`,\n        'background-position': `center`,\n        'background-repeat': `no-repeat`,\n        '&:hover,&:focus': {\n          'border-color': 'transparent',\n          'background-color': 'currentColor',\n        },\n      },\n    },\n  },\n  {\n    b: [`[type='radio']`],\n    c: ['form-radio'],\n    s: {\n      'border-radius': '100%',\n      '&:checked': {\n        'background-image': `url(\"${svgToDataUri(\n          `<svg viewBox=\"0 0 16 16\" fill=\"white\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"8\" cy=\"8\" r=\"3\"/></svg>`,\n        )}\")`,\n      },\n    },\n  },\n  {\n    b: [`[type='file']`],\n    // class: null,\n    s: {\n      background: 'unset',\n      'border-color': 'inherit',\n      'border-width': '0',\n      'border-radius': '0',\n      padding: '0',\n      'font-size': 'unset',\n      'line-height': 'inherit',\n      '&:focus': {\n        outline: [`1px solid ButtonText`, `1px auto -webkit-focus-ring-color`],\n      },\n    },\n  },\n]\n\n// Based on https://github.com/tigt/mini-svg-data-uri/blob/master/index.js (License MIT)\nfunction specialHexEncode(match: string): string {\n  switch (\n    match // Browsers tolerate these characters, and they're frequent\n  ) {\n    case '%20':\n      return ' '\n    case '%3D':\n      return '='\n    case '%3A':\n      return ':'\n    case '%2F':\n      return '/'\n    default:\n      return match.toLowerCase() // compresses better\n  }\n}\n\nfunction svgToDataUri(svgString: string): string {\n  return (\n    'data:image/svg+xml,' +\n    encodeURIComponent(svgString.trim().replace(/\\s+/g, ' ').replace(/\"/g, \"'\")).replace(\n      /%[\\dA-F]{2}/g,\n      specialHexEncode,\n    )\n  )\n}\n"],"names":["baseFontSize","baseLineHeight","defaultTheme","fontSize","base","spacing","borderWidth","borderRadius","rules","b","c","s","theme","appearance","toColorValue","gray","none","outline","blue","color","opacity","padding","svgToDataUri","display","height","width","background","specialHexEncode","match","toLowerCase","svgString","encodeURIComponent","trim","replace","strategy","config","Set","flatMap","r","filter","Boolean","join","context","includes","map","classes","styles","className","e","h","preflight"],"mappings":"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"}