{"version":3,"sources":["../src/lib/transformRanges.js","../src/postcss.js"],"names":["mqunit","memo","value","func","memos","Object","create","postcssCQFill","postcssPlugin","Declaration","[object Object]","cssDeclaration","cloneBefore","prop","AtRule","cssAtRule","media","params","media2","replace","__","p1","o1","p2","o2","p3","isP1Value","test","shift","name","length","_","v","u","Number","clone","raws","afterName","postcss","postcss_default"],"mappings":"AAAA,IAAMA,EAAS,iBAiDTC,KAAO,CAEZC,EAEAC,IAEID,KAASE,EAAcA,EAAMF,GACrBE,EAAMF,GAASC,EAAKD,GAI3BE,EAAQC,OAAOC,OAAO,MC1D5B,SAAAC,gBACC,MAAO,CACNC,cAAe,iBACfC,YAAa,CACZC,QAECC,GAEAA,EAAeC,YAAY,CAC1BC,KAAM,oBAITC,OAAQ,CACPJ,UAECK,GDf2B,IAE9BC,ECeGD,EAAUE,QDfbD,ECesCD,EAAUE,ODd5ChB,KAAKe,GAAOE,GAASA,EAAMC,QAC/B,gFACA,CACCC,EAEAC,EAEAC,EAEAC,EAEAC,EAEAC,KAGA,MAAMC,EAAY1B,EAAO2B,KAAKN,GAGxBO,EAAQ,OAAUF,GAAY,EAAK,IAElCG,EAAM3B,GAASwB,EAAY,CAACH,EAAIF,GAAM,CAACA,EAAIE,GAElD,MACC,KAEY,MAAVD,EAAG,GAAa,GAAgB,MAAVA,EAAG,KAAeI,EAAY,OAAS,QAC1DG,EAAO,KACA,MAAVP,EAAG,IAA4B,IAAdA,EAAGQ,OAAe5B,EAAMiB,QAAQnB,GAAQ,CAAC+B,EAAGC,EAAGC,IAAMC,OAAOF,GAAKJ,GAAgB,MAAPN,EAAa,GAAI,GAAMW,IAAK/B,IAEvHsB,EACG,WACU,MAAVA,EAAG,GAAa,OAAS,QAAUK,EAAO,KAC5B,IAAdL,EAAGM,OAAeL,EAAGN,QAAQnB,GAAQ,CAAC+B,EAAGC,EAAGC,IAAMC,OAAOF,GAAKJ,GAAgB,MAAPJ,GAAa,EAAK,GAAKS,IAAKR,GAEpG,IAEJ,UCrBC,MAAMU,EAAQpB,EAAUH,YAAY,CACnCiB,KAAM,QACNZ,OAAQ,gBAAgBF,EAAUE,WAG9BkB,EAAMC,KAAKC,YAAWF,EAAMC,KAAKC,UAAY,QAMtD9B,cAAc+B,SAAU,EAExB,IAAOC,EAAQhC","sourcesContent":["const mqunit = /([\\d.]+)([^]*)/\n\n/** @type {(media: string) => string} Returns a media query with polyfilled ranges. */\nexport const transformRanges = (\n\t/** @type {string} */\n\tmedia\n) => memo(media, media => media.replace(\n\t/\\(\\s*([\\w-]+)\\s*(=|<|<=|>|>=)\\s*([\\w-]+)\\s*(?:(<|<=|>|>=)\\s*([\\w-]+)\\s*)?\\)/g,\n\t(\n\t\t__,\n\t\t/** @type {string} 1st param, either the name or value in the query. */\n\t\tp1,\n\t\t/** @type {string} 1st operator. */\n\t\to1,\n\t\t/** @type {string} 2nd param, either the name or value in the query. */\n\t\tp2,\n\t\t/** @type {string} Optional 2nd operator. */\n\t\to2,\n\t\t/** @type {string} Optional 3rd param, always a value in the query.*/\n\t\tp3\n\t) => {\n\t\t/** Whether the first param is a value. */\n\t\tconst isP1Value = mqunit.test(p1)\n\n\t\t/** Numeric shift applied to a value when an operator is `<` or `>`. */\n\t\tconst shift = 0.0625 * (isP1Value ? -1 : 1)\n\n\t\tconst [name, value] = isP1Value ? [p2, p1] : [p1, p2]\n\n\t\treturn (\n\t\t\t'(' +\n\t\t\t\t(\n\t\t\t\t\to1[0] === '=' ? '' : (o1[0] === '>' === isP1Value ? 'max-' : 'min-')\n\t\t\t\t) + name + ':' +\n\t\t\t\t(o1[0] !== '=' && o1.length === 1 ? value.replace(mqunit, (_, v, u) => Number(v) + shift * (o1 === '>' ? 1 : -1) + u) : value) +\n\t\t\t\t(\n\t\t\t\t\to2\n\t\t\t\t\t\t? ') and (' + (\n\t\t\t\t\t\t\t(o2[0] === '>' ? 'min-' : 'max-') + name + ':' +\n\t\t\t\t\t\t\t(o2.length === 1 ? p3.replace(mqunit, (_, v, u) => Number(v) + shift * (o2 === '>' ? -1 : 1) + u) : p3)\n\t\t\t\t\t\t)\n\t\t\t\t\t: ''\n\t\t\t\t) +\n\t\t\t')'\n\t\t)\n\t}\n))\n\n/** Returns a memoized result. */\nconst memo = (\n\t/** @type {string} */\n\tvalue,\n\t/** @type {(value: string) => string} */\n\tfunc\n) => {\n\tif (value in memos) return memos[value]\n\telse return memos[value] = func(value)\n}\n\n/** @type {{ [name: string]: (value: string) => string }} */\nconst memos = Object.create(null)\n","import { transformRanges } from './lib/transformRanges'\n\nfunction postcssCQFill() {\n\treturn {\n\t\tpostcssPlugin: 'PostCSS CQFill',\n\t\tDeclaration: {\n\t\t\tcontain(\n\t\t\t\t/** @type {PostCSSDeclaration} */\n\t\t\t\tcssDeclaration\n\t\t\t) {\n\t\t\t\tcssDeclaration.cloneBefore({\n\t\t\t\t\tprop: '--css-contain'\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\tAtRule: {\n\t\t\tcontainer(\n\t\t\t\t/** @type {PostCSSAtRule} */\n\t\t\t\tcssAtRule\n\t\t\t) {\n\t\t\t\tcssAtRule.params = transformRanges(cssAtRule.params)\n\n\t\t\t\tconst clone = cssAtRule.cloneBefore({\n\t\t\t\t\tname: 'media',\n\t\t\t\t\tparams: `\\\\@container ${cssAtRule.params}`\n\t\t\t\t})\n\n\t\t\t\tif (!clone.raws.afterName) clone.raws.afterName = ' '\n\t\t\t}\n\t\t}\n\t}\n}\n\npostcssCQFill.postcss = true\n\nexport default postcssCQFill\n\n/** @typedef {{ name: string, params: string, cloneBefore(opts: Partial<PostCSSAtRule>): PostCSSAtRule }} PostCSSAtRule */\n/** @typedef {{ prop: string, cloneBefore(opts: Partial<PostCSSDeclaration>): PostCSSDeclaration }} PostCSSDeclaration */\n"]}